Java example: more classes and methods

Scrivere una classe Data con le seguenti caratteristiche:

  • tre attributi pubblici: giorno, mese, anno
  • un metodo “imposta” che ha tre parametri e che copia i valori di questi tre parametri nei tre attributi della classe svolgendo i seguenti controlli:
    • l’anno deve essere un numero positivo, se non lo è viene impostato a zero
    • il mese deve essere compreso tra 1 e 12, se è al di fuori di questo intervallo viene impostato all’estremo più vicino (se vale -10 viene impostato a 1, se vale 40 viene impostato a 12)
    • il giorno deve essere un valore compatibile col numero di giorni del mese scelto:
      • gennaio, marzo, maggio, luglio, agosto, ottobre, dicembre hanno 31 giorni
      • aprile, giugno, settembre, novembre hanno 30 giorni
      • febbraio ha 28 giorni
  • un metodo “visualizza” che prende un parametro booleano e a seconda del valore del parametro:
    • se il parametro vale false allora visualizza su console gli attributi giorno, mese e anno nel formato numerico <giorno>/<mese>/anno, ad esempio: “11/5/2017”
    • se il parametro vale true allora visualizza su console gli attributi giorno, mese e anno nel formato alfanumerico <giorno-numerico>/<mese-alfabetico>/<anno-numerico>, ad esempio: “11 Maggio 2017”

Scrivere una classe Orario con le seguenti caratteristiche:

  • tre attributi pubblici: ore, minuti, secondi
  • un metodo “imposta” che ha tre parametri e che copia i valori di questi tre parametri nei tre attributi della classe svolgendo i seguenti controlli:
    • l’ora deve essere compresa tra 0 e 23, se è al di fuori di questo intervallo va riportata a al valore dell’estremo più vicino
    • i minuti e i secondi devono essere compresi tra 0 e 59, e riportati nell’intervallo se sono al di fuori di esso
  • un metodo “visualizza” che visualizza su console l’orario nel formato “hh:mm:ss”

Scrivere una classe Evento con le seguenti caratteristiche:

  • un attributo pubblico di classe Data
  • un attributo pubblico di classe Orario
  • un metodo “imposta” che ha 6 parametri: giorno, mese, anno, ore, minuti, secondi
    • il metodo crea i due attributi che conterranno data e ora
    • il metodo chiama i metodi “imposta” delle due classi Data e Orario passando a ciascuna gli opportuni parametri
  • un metodo “visualizza” che chiama i metodi “visualizza” delle due classi Data e Orario e che visualizza quindi su console i dati dell’evento in questo formato: “<giorno-numerico>/<mese-alfabetico>/<anno-numerico> – hh:mm:ss”

Scrivere una classe contenente il solo metodo main che svolge le seguenti operazioni:

  • dichiara e crea un oggetto di classe Evento
  • chiede all’utente di inserire giorno, mese, anno, ora, minuto e secondo in cui un evento (non importa quale) è avvenuto
  • chiama il metodo “inizializza” dell’evento, passandogli i 6 dati inseriti dall’utente
  • visualizza su console la frase “I dati dell’evento sono:” seguita dall’output prodotto dal metodo “visualizza” della classe Evento

[code language=”Java”]
public class Data {
public byte giorno, mese;
int anno;

public void imposta(byte p_giorno,byte p_mese,int p_anno)
{
if(p_anno>=0)
anno=p_anno;
else
anno=0;
if(p_mese<1)
mese=1;
else
if(p_mese>12)
mese=12;
else
mese=p_mese;
giorno=p_giorno;
if((mese==1)||(mese==3)||(mese==5)||(mese==7)||(mese==8)||(mese==10)||(mese==12))
if(p_giorno>31)
giorno=31;
if((mese==4)||(mese==6)||(mese==9)||(mese==11))
if(p_giorno>30)
giorno=30;
if(mese==2)
if(p_giorno>28)
giorno=28;
if(p_giorno<1)
giorno=1;
}
public void visualizza(boolean modo){
String [] nomimesi={"Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"};
if(modo==false)
System.out.println(giorno+"/"+mese+"/"+anno);
else
System.out.println(giorno+" "+nomimesi[mese-1]+" "+anno);
}
}
[/code]

[code language=”Java”]
public class Evento {
public Data data;
public Orario orario;
public void imposta(byte p_giorno,byte p_mese,int p_anno,byte p_ore,byte p_minuti, byte p_secondi){
data=new Data();
orario=new Orario();
data.imposta(p_giorno, p_mese, p_anno);
orario.imposta(p_ore, p_minuti, p_secondi);
}
public void visualizza(){
data.visualizza(true);
orario.visualizza();
}
}
[/code]

[code language=”Java”]
public class Orario {
public byte ore,minuti,secondi;
public void imposta(byte p_ore,byte p_minuti,byte p_secondi){
if(p_ore>23)
ore=23;
else
if(p_ore<0)
ore=0;
else
ore=p_ore;
if(p_minuti>59)
minuti=59;
else
if(p_minuti<0)
minuti=0;
else
minuti=p_minuti;
if(p_secondi>59)
secondi=59;
else
if(p_secondi<0)
secondi=0;
else
secondi=p_secondi;
}
public void visualizza(){
System.out.println(ore+":"+minuti+":"+secondi);
}
}
[/code]

[code language=”Java”]
import java.util.Scanner;

public class programma {

public static void main(String[] args) {
Evento e;
e=new Evento();
byte giorno,mese,ore,minuti,secondi;
int anno;

Scanner s=new Scanner(System.in);

System.out.print("giorno? ");
giorno=s.nextByte();
System.out.print("mese? ");
mese=s.nextByte();
System.out.print("anno? ");
anno=s.nextInt();

System.out.print("ore? ");
ore=s.nextByte();
System.out.print("minuti? ");
minuti=s.nextByte();
System.out.print("secondi? ");
secondi=s.nextByte();

e.imposta(giorno, mese, anno, ore, minuti, secondi);

System.out.println("L’evento inserito è:");
e.visualizza();
}

}
[/code]