/**
* Classe oggetto che rappresenta una data
* nel formato: giorno, mese, anno.
*
* @author Damiano Macedonio
* @version 1.0
*/
public class Data {
private int giorno;
private String mese;
private int anno;
private static String mesi[] = { "gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno",
"luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre" };
private static int numeroDate = 0;
/**
* Crea una nuova data impostata al primo gennaio 2014.
*/
public Data() {
this(1, "gennaio", 2014);
}
/**
* Crea una nuova data impostata dall'utente.
* Se i valori immessi non sono ammissibili,
* la data viene impostata ai valori di deafult.
*
* @param g giorno
* @param m mese
* @param a anno
*/
public Data(int g, String m, int a) {
set(g, m, a);
}
/**
* Crea una nuova data con anno fissato al 2014.
* Gli altri valori sono impostati dall'utente.
* Se i valori immessi non sono ammissibili,
* la data viene impostata ai valori di deafult.
*
* @param g giorno
* @param m mese
*/
public Data(int g, String m) {
this(g, m, 2014);
}
/**
* Crea una nuova data impostata dall'utente.
* Se i valori immessi non sono ammissibili,
* la data viene impostata ai valori di deafult.
*
* @param g giorno
* @param m mese
* @param a anno
*/
public Data(int g, int m, int a) {
this(g, mesi[m - 1], a);
}
/**
* Modifica i valori della data secondo quelli immessi dall'utente
* Se i valori immessi non sono ammissibili,
* la data rimane al valore precedente.
*
* @param g giorno
* @param m mese
* @param a anno
*/
public void setData(int g, String m, int a) {
set(g, m, a);
}
/**
* Modifica i valori della data.
* Se i valori immessi non sono ammissibili,
* la data rimane al valore precedente.
*
* @param g giorno
* @param m mese
* @param a anno
*/
private void set(int g, String m, int a) {
numeroDate++;
int vecchioGiorno = giorno;
String vecchioMese = mese;
int vecchioAnno = anno;
giorno = g;
mese = m;
anno = a;
if (!isValid()) {
System.out.println("data risultante inesistente");
giorno = vecchioGiorno;
mese = vecchioMese;
anno = vecchioAnno;
}
}
/**
* Restituisce il giorno.
*
* @return giorno
*/
public int getGiorno() {
return giorno;
}
/**
* Restituisce il mese.
*
* @return mese.
*/
public String getMese(){
return mese;
}
/**
* Restituisce l'anno.
*
* @return anno
*/
public int getAnno() {
return anno;
}
/**
* Verifica se la data e' valida.
*
* @return true
se la data e' valida, false
altrimenti.
*/
private boolean isValid() {
int giorniPerMese[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int numMese;
for (numMese = 1; numMese <= 12; numMese++)
if (mese.equals(mesi[numMese - 1]))
// trovato il mese, ragioniamo sul giorno
return giorno >= 1 && giorno <= giorniPerMese[numMese - 1];
return false;
}
/**
* Verifica se this
e' uguale a that
.
*
* @return true
se this
e' uguale a that
,
* false
altrimenti.
*/
public boolean equals(Data other) {
if (other != null && other.mese != null)
return giorno == other.giorno && mese.equals(other.mese) && anno == other.anno;
if (other != null && mese == null)
return giorno == other.giorno && anno == other.anno;
return false;
}
/**
* Restituisce una stringa che rappresenta una data nel formato
* giorno/mese/anno
*
* @return la stringa rappresentante la data.
*/
public String toString() {
return giorno + "/" + mese + "/" + anno;
}
/**
* Restituisce il numero di date create finora.
*
* @return il numero di date create.
*/
public static int getNumeroDate() {
return numeroDate;
}
}