codice:
public class Studente {
public String matricola;
private String nome;
private GregorianCalendar data;
public int altezza;
private char genere;
/**
* Costruttore
* @param matr matricola
* @param nom cognome e nome
* @param giorno giorno di nascita
* @param mese mese di nascita
* @param anno anno di nascita
* @param alt altezza
* @param gen genere(M o F)
*/
public Studente(String matr, String nom,int giorno, int mese, int anno, int alt, char gen)
{
matricola=matr;
nome=nom;
data=new GregorianCalendar(anno, mese-1, giorno);
altezza=alt;
genere=gen;
}
/**
* Ottiene il numero di matricola
* @return matricola
*/
public String getMatricola()
{
return matricola;
}
/**
* Ottiene il cognome e nome dello studente
* @return nome
*/
public String getNome()
{
return nome;
}
/**
* Ottiene la data di nascita
* @return data
*/
public GregorianCalendar getData()
{
return data;
}
/**
* Ottiene la data di nascita dello studente in stringa
*/
public String getDataString()
{
return String.format("%02d/%02d/%04d", data.get(GregorianCalendar.DATE), data.get(GregorianCalendar.MONTH)+1, data.get(GregorianCalendar.YEAR));
}
/**
* Ottiene l'altezza
* @return altezza
*/
public int getAltezza()
{
return altezza;
}
/**
* Ottiene il sesso dello studente
* @return genere
*/
public char getGenere()
{
return genere;
}
/**
* Visualizza i dati dello studente in stringa
*/
public String toString()
{
return "Matricola n. "+matricola+", "+nome+", Nato il "+getDataString()+", altezza "+altezza+", "+genere;
}
}
public class Università {
Studente[] stud= new Studente[0];
/**
* Aggiunge un nuovo studente
* @param matricola matricola
* @param nom cognome e nome
* @param giorno giorno di nascita
* @param mese mese di nascita
* @param anno anno di nascita
* @param altezza altezza dello studente
* @param genere genere(M o F)
*/
public void addStudente(String matricola, String nom,int giorno, int mese, int anno, int altezza, char genere)
{
Studente temp[]=new Studente[stud.length+1];
if (stud.length>0)
System.arraycopy(stud,0,temp,0,stud.length);
temp[temp.length-1]= new Studente(matricola, nom,giorno,mese,anno,altezza,genere);
stud=temp;
}
/**
* Ottiene una stringa con una tabella contenente i dati degli studenti
* @return str
*/
public String getTable()
{
String format ="%-9s|%-20s|%-11s|%-7s|%-6s";
String str;
str=String.format(format,"=========","====================","===========","=======","======")+"\n";
str+=String.format(format,"Matricola","Cognome e nome","DataNascita","Altezza","Genere")+"\n";
str+=String.format(format,"=========","====================","===========","=======","======")+"\n";
for (Studente e:stud)
str+=String.format(format,e.getMatricola(),e.getNome(),e.getDataString(),e.getAltezza(),e.getGenere())+"\n";
str+=String.format(format,"=========","====================","===========","=======","======")+"\n";
return str;
}
/**
* Ottiene i dati dello studente più giovane
* @return stringa
*/
public String getYoungest()
{
Studente min;
min=stud[0];
for (int i=0;i<stud.length;i++)
{
if( stud[i].getData().after(min.getData()))
min=stud[i];
}
return min.toString();
}
/**
* Ordinamento per selezione in base all'altezza(crescente)
*/
public void SelectionSort()
{
Studente min;
int p=0;
for(int i=0;i<stud.length;i++)
{
min=stud[i];
p=i;
for(int j=i+1;j<stud.length;j++)
{
if(stud[j].getAltezza()<min.getAltezza())
{
min=stud[j];
p=j;
}
}
stud[p]=stud[i];
stud[i]=min;
}
}
public static int ricBinaria(int[] stud, int altezza)
{
int indice;
int inizio;
int fine;
int centro;
inizio = 0;
fine = stud.length-1;
indice = -1;
while(indice == -1 && inizio <= fine)
{
centro = (inizio + fine) / 2;
if(stud[centro] == altezza)
indice = centro;
else
if(altezza > stud[centro])
inizio = centro +1;
else
fine = centro - 1;
}
return indice;
}
// public BinaryArray(int altezza)
// {
// stud = new Studente[altezza];
// for (int i = 0; i < altezza; i++)
// }
/**
* Ottiene l'altezza media distinta per genere
* @param genere il sesso dello studente('M' o 'F'
* @return altezza media
*/
public double getAltezzaMedia(char genere)
{
int conta=0;
for (int i=0;i<stud.length;i++)
{
if(stud[i].getGenere()==genere)
{
conta+=stud[i].getAltezza();
}
}
return conta/stud.length;
}
/**
* Menu dell'ufficio statistiche
* @return stringa
*/
public String getMenu()
{
return "===========================================================\n"+
"Ufficio statistiche università - Menu \n" +
"===========================================================\n"+
"1. Visualizzare gli array degli studenti in forma tabellare \n"+
"2. Visualizzare i dati dello studente più giovane \n"+
"3. Ordinamento dell'array degli studenti per altezza \n"+
"4. Calcolo dell'altezza media distinta per genere \n"+
"5. Termina programma\n"+
"===========================================================";
}
}
public class Tester {
public static void main(String[] args) {
Università X= new Università();
/**
* Aggiunge dati di collaudo
*/
X.addStudente("341208","Panucci Alda",13, 10,1991, 166, 'F');
X.addStudente("140662","Lanzarote Ugo",02, 05,1990, 184, 'M');
X.addStudente("218040","Ambrosi Carla",24,03,1992, 162, 'F');
X.addStudente("210412","Bello Piera",15, 12,1992, 166, 'F');
Scanner sc= new Scanner(System.in);
int scelta;
do
{
scelta=-1;
/**
* Stampa menu
*/
System.out.println(X.getMenu());
/**
* Richede la scelta all'utente
*/
while ((scelta<0)|| (scelta>6))
{
System.out.print("Opzione numero: ");
scelta=sc.nextInt();
}
switch (scelta)
{
case 1:
{
System.out.println(X.getTable()+"\n\n");
};break;
case 2:
{
System.out.println(X.getYoungest()+"\n\n");
};break;
case 3:
{
X.SelectionSort();
System.out.println(X.getTable()+"\n\n");
};break;
case 4:
{
System.out.print("Genere Maschile ");
System.out.println(X.getAltezzaMedia('M'));
System.out.print("Genere Femminile ");
System.out.println(X.getAltezzaMedia('F')+"\n\n");
};break;
case 5:
{
int position;
int cercato;
System.out.println("Inserire altezza da cercare");
cercato = sc.nextInt();
System.out.println();
int k;
position = X.ricBinaria(null, cercato); // qui non so che fare
if(position == -1)
System.out.println("L'altezza " + cercato + " non è stata trovata.\n");
else
System.out.println("L'altezza " + cercato + " è stata trovata");
}
}
} while (scelta!=6);
System.out.println("Programma terminato");
sc.close();
}
}