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
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);
	}
}
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();
	}
}
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);
	}
}
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();
	}

}