/*
Questa classe vuol mostrare l'utilizzo di variabili static e non 
static in una stessa classe. 
Un oggetto di questa classe e' una persona che ha un nome, un 
cognome, una data di nascita e un numero di matricola CHE VIENE
ASSEGNATO PROGRESSIVAMENTE AD OGNI OGGETTO. Per ottenere questo
risultato si utilizza una variabile static.
*/

public class Anagrafe {

    private String nome; 
    private String cognome; 
    private int giornoNascita; 
    private int meseNascita; 
    private int annoNascita;

    // la seguente variabile e' static in modo da essere legata alla 
    // classe e non ai singoli oggetti. 
    private static int numeroProgressivo = 0;

    private int numeroMatricola;

    // costruttore. Richiede 5 argomenti.
    public Anagrafe(String nome, String cognome, int gg, int mm, int aa) {
	
	this.nome = nome; // this.nome permette di ottenere la variabile
	                  // di istanza nome che altrimenti e' coperta 
	                  // dalla variabile locale nome (parametro del 
	                  // costruttore).
	this.cognome = cognome; 
	giornoNascita = gg;
	meseNascita = mm; 
	annoNascita = aa;

	// ogni volta che definisco un nuovo oggetto, incremento la 
	// variabile static numeroProgressivo che cosi' tiene nota 
	// del numero di oggetti definiti.

	numeroProgressivo++;

	// la variabile numeroMatricola e' non static, quindi appartiene
	// ad ogni oggetto ed avra' un valore diverso per ogni oggetto
	// per il primo oggetto creato ha valore 1, per il secondo 
	// ha valore 2 etc.

	numeroMatricola = numeroProgressivo; 
    }

    // metodo che stampa i dati di una persona:
    public void stampaDati() {
	System.out.println("Nome: " + nome + " cognome: " + cognome +
			   "\nData di nascita: " + giornoNascita 
			   + "/" + meseNascita + "/" + annoNascita +
			   "\nNumero matricola: " + numeroMatricola);

    }

    // posso mettere il metodo main per testare direttamente la classe, 
    // senza dover costruire un'altra classe di test. 


    public static void main(String[] a) {

	// definisco 3 utenti di tipo Anagrafe
	Anagrafe utente1 = new Anagrafe("Mario", "Rossi", 12, 11, 1956);
	Anagrafe utente2 = new Anagrafe("Franco", "Bianchi", 10, 3, 1979);
	Anagrafe utente3 = new Anagrafe("Ada", "Verdi", 11, 11, 1911);

	// stampo i dati dei tre utenti: 
	System.out.println();
	utente1.stampaDati();
	utente2.stampaDati();
	utente3.stampaDati();
	System.out.println();

    }

}
