Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package lavorodigruppo;
- import java.util.*;
- /**
- *
- * @author Baviera
- */
- public class LavoroDiGruppo {
- public static void main(String[] args) {
- Scanner input= new Scanner (System.in);
- Famiglia famigliaCorrente = famigliaDefault(); //gli assegno il metodo che mi crea la
- //famiglia di default
- boolean esci=false;
- System.out.println("Istruzioni Menù\n"+
- "1: crea una famiglia di default\n"+
- "2:crea una famiglia leggendo valori da input\n"+
- "3:ordina il vettore per anno di nascita\n"+
- "4:ordina il vettore per nome\n"+
- "5:ordina il vettore per cognome\n"+
- "6:inserisci una nuova Persona nella famiglia\n"+
- "7:togli una Persona dalla famiglia\n"+
- "8: modifica il nome di un membro della famiglia\n"+
- "9:cerca una persona nella famiglia per nome\n"+
- "10:cerca una persona nella famiglia per cognome\n"+
- "11:cerca una persona nella famiglia per anno\n"+
- "12: stampa a video tutti i membri con rispettivi attributi\n"+
- "13:uscita");
- while (!esci)
- {
- int scelta=input.nextInt();
- switch (scelta)
- {
- case 1:
- famigliaCorrente=famigliaDefault();
- break;
- case 2:
- famigliaCorrente=leggiFamigliaInput();
- break;
- case 3:
- famigliaCorrente.ordinaPerAnnoDiNascita();
- break;
- case 4:
- famigliaCorrente.ordinaPerNome();
- break;
- case 5:
- famigliaCorrente.ordinaPerCognome();
- break;
- case 6:
- famigliaCorrente =addMembro(famigliaCorrente, leggiPersonaInput());
- break;
- case 7:
- famigliaCorrente= deleteMembro(famigliaCorrente, leggiPersonaInput());
- break;
- case 8:
- famigliaCorrente=modificaNome(famigliaCorrente);
- break;
- case 9:
- cercaNome(famigliaCorrente);
- break;
- case 10:
- cercaCognome(famigliaCorrente);
- break;
- case 11:
- cercaAnno(famigliaCorrente);
- break;
- case 12:
- System.out.println(famigliaCorrente.toString());
- break;
- case 13:
- esci=true;
- break;
- default :
- System.out.println("comando non riconosciuto, non c'è nella lista!");
- break;
- }
- }
- }
- //finisce il main, inizio a mettere i metodi statici
- static Famiglia modificaNome(Famiglia f) //inserisci sempre il return type
- //in questo caso è Famiglia perchè mi deve
- //restituire una famiglia, metti return
- //perchè non è void
- {
- Scanner input=new Scanner (System.in);
- System.out.println("inserisci il nome della persona della famiglia che vuoi modificare");
- String nome=input.nextLine();
- System.out.println("inserisci il nuovo nome che vuoi dargli");
- String newNome= input.nextLine();
- Persona p= f.cercaNome(nome); //assegno alla nuova persona p di cui voglio
- //modificare il nome la persona appartenente alla famiglia f
- //che ha il nome inserito in input dall'utente
- f=deleteMembro(f, p); //non mettere f.!!!!!!!!!
- p.setNome(newNome); //richiamando il metodo SET modifico il nome della persona e poi la
- //riaggiungo modificata
- f=addMembro(f,p);//non mettere f.!!!!!!
- return f;
- //MANCA IL CONTROLLO SE IL NOME C'è O MENO!
- }
- static void cercaNome(Famiglia f) //è void, non restituisce nulla!
- {
- Scanner input=new Scanner(System.in);
- System.out.println("inserisci il nome che vuoi ricercare nella famiglia");
- String nome= input.nextLine();
- Persona p= f.cercaNome(nome); //ce l'ho già nella classe famiglia. perchè?
- if (p!=null)
- {
- System.out.println(p.toString()); //stampo a video la persona che ha il nome cercato
- }
- }
- static void cercaCognome(Famiglia f)
- {
- Scanner input=new Scanner(System.in);
- System.out.println("inserisci il cognome che vuoi cercare");
- String cognome=input.nextLine();
- Persona p=f.cercaCognome(cognome);
- if (p!= null)
- {
- System.out.println(p.toString());
- }
- }
- static void cercaAnno(Famiglia f)
- {
- Scanner input = new Scanner (System.in);
- System.out.println("inserisci l'anno in cui è nata la persona che vuoi cercare");
- int anno= input.nextInt();
- Persona p= f.cercaAnno(anno);
- if (p!=null)
- {
- System.out.println(p.toString());
- }
- }
- static Famiglia deleteMembro (Famiglia f, Persona p)
- {
- Persona[] a= f.getComponenti(); //creo un array di oggetti (di persone) che contenga i
- //componenti della famiglia corrente
- Persona [] b= new Persona[a.length-1]; //creo un nuovo array di persone e
- //gli assegno una dimensione diminuita di
- //1 rispetto alla dimensione di a perchè
- //RIMUOVO un elemento.
- int n=0;
- for (int i=0; i<a.length;i++)
- {
- if (p.equals(a[i]))
- {
- //non fai niente perchè vuol dire che siamo nell'elemento di indice i
- //che corrisponde alla persona p che si vuole rimuovere
- //Pertanto questo elemento dell'array non verrà copiato nel nuovo array
- //più piccolo e verrà quindi rimosso
- }
- else //copio l'elemento nel nuovo array b[]
- {
- if (n<b.length)
- {
- b[n]=a[i];
- n++;
- }
- else
- {
- System.out.println("la persona p non è presente nell'array ");
- return f; //ritorno la famiglia così com'è perchè non ho rimosso nulla
- }
- }
- }
- Famiglia c= new Famiglia (b);
- return c;
- }
- static Famiglia addMembro (Famiglia f, Persona p)
- {
- Persona [] a = f.getComponenti();
- Persona [] b = new Persona [a.length+1]; //voglio aggiungere un membro
- for (int i=0; i< a.length;i++)
- {
- b[i]=a[i]; // copio tutti gli elementi del primo array nel secondo più grande-->
- //rimane un buco
- }
- b[b.length-1]= p; // nell'ultima posizione (-1 perchè parte da 0) aggiungo il membro
- Famiglia c= new Famiglia (b);
- return c;
- }
- static Persona leggiPersonaInput() //NON è di tipo FAMIGLIA!
- {
- Scanner input=new Scanner(System.in);
- System.out.println("inserisci il nome della persona");
- String nome= input.nextLine();
- System.out.println("inserisci il cognome della persona");
- String cognome=input.nextLine();
- System.out.println("inserisci l'anno di nascita");
- int anno= input.nextInt();
- Persona p = new Persona (nome,cognome,anno);
- return p;
- }
- static Famiglia leggiFamigliaInput()
- {
- Scanner input=new Scanner(System.in);
- System.out.println("inserisci quanti membri vuoi nella famiglia");
- int n;
- do
- {
- while (!input.hasNextInt())
- {
- System.out.println("non è un intero, devi riinserirlo");
- input.nextLine(); //??
- }
- n=input.nextInt();
- } while (n<=0); //chiedi
- Persona [] p = new Persona [n];
- for (int i=0;i<n;i++)
- {
- p[i]= leggiPersonaInput();
- }
- Famiglia f = new Famiglia (p);
- return f;
- }
- static Famiglia famigliaDefault()
- {
- Persona a= new Persona ("Martina","Baviera",2001);
- Persona b = new Persona ("Giogia","Baviera",1995);
- Persona c = new Persona ("Gloria","Sensoli",1967);
- Persona d = new Persona ("Luigi","Baviera",1963);
- Persona [] p= {a,b,c,d};
- Famiglia f = new Famiglia (p);
- return f;
- }
- }
- public class Famiglia {
- public Persona[] componenti; //crea un array di oggetti che è uno degli attributi della mia classe--> array di persone
- //costruttore dell'attributo
- public Famiglia(Persona[] componenti) //IL TIPO E' PERSONA[]
- {
- this.componenti=componenti;
- }
- //get dei membri, NON faccio il set
- public Persona[] getComponenti() //IL TIPO DELL'ARRAY E' PERSONA[] NON STRING!
- {
- return componenti;
- }
- //inizio con i metodi che mi serviranno per creare il menù nel main
- public Persona cercaAnno(int annoNascita)
- {
- for (int i=0;i<componenti.length; i++)
- {
- if (componenti[i].getAnnoDiNascita()==annoNascita)
- {
- return componenti[i];
- }
- }
- return null; // ricorda ! se non c'è nessuno che ha quell'anno di nascita allora ritorna che non c'è nessuno!
- }
- public Persona cercaCognome (String cognome)
- {
- for (int i=0; i<componenti.length; i++)
- {
- if (componenti[i].getCognome().equals(cognome))
- {
- return componenti[i];
- }
- }
- return null;
- }
- public Persona cercaNome(String nome)
- {
- for (int i=0; i<componenti.length;i++)
- {
- if (componenti[i].getNome().equals(nome))
- {
- return componenti[i];
- }
- }
- return null;
- }
- // ora inserisco il metodo toString() per stampare una stringa contenente gli attributi di ogni membro della famiglia
- public String toString() //il metodo toString deve essere di tipo STRING non PERSONA!
- {
- String p = "";
- for ( Persona personaCorrente: componenti)
- {
- p+= personaCorrente.toString() + " "; //aggiungo alla stringa vuota il to string di ciascuna persona e vado a capo ogni volta!!!
- }
- return p;
- }
- //algoritmi di ordinamento per nome,cognome, anno --> sono di tipo VOID
- public void ordinaPerNome()
- {
- for (int i=0;i<componenti.length-1;i++) //ricorda il -1, perchè la numerazione dell'array parte da 0
- {
- int posmin=i;
- for (int j=(i+1);j<componenti.length; j++)
- {
- if (componenti[j].getNome().compareTo(componenti[i].getNome())< 0) //se ritorna un numero negativo vuol dire che componenti[j] viene prima di componenti[i]
- {
- posmin=j;
- }
- if (posmin!=i)
- {
- Persona appoggio= componenti[i];
- componenti[i]=componenti[posmin];
- componenti[posmin]=appoggio;
- }
- }
- }
- }
- public void ordinaPerCognome ()
- {
- for (int i=0; i<componenti.length-1;i++)
- {
- int posmin=i;
- for (int j = (i+1); j < componenti.length; j++)
- {
- if (componenti[j].getCognome().compareTo(componenti[i].getCognome())<0)
- {
- posmin=j;
- }
- if (posmin!=i)
- {
- Persona appoggio= componenti[i];
- componenti[i]=componenti[posmin];
- componenti[posmin]=appoggio;
- }
- }
- }
- }
- public void ordinaPerAnnoDiNascita ()
- {
- for (int i=0; i<componenti.length-1;i++)
- {
- int posmin=i;
- for (int j = (i+1); j < componenti.length; j++)
- {
- if (componenti[j].getAnnoDiNascita()< componenti[posmin].getAnnoDiNascita()) //metti posmin non i!
- {
- posmin=j;
- }
- if (posmin!=i)
- {
- Persona appoggio= componenti[i];
- componenti[i]=componenti[posmin];
- componenti[posmin]=appoggio;
- }
- }
- }
- }
- }
- package lavorodigruppo;
- //cosa c'è in questa classe:
- //-inserisco attributi
- //-costruttori di default
- //-get e set di ogni attributo
- //-metodo equals--> attenzione alle differenze fra stringa (.equals()) e intero (usi==)
- //-toString();
- public class Persona {
- //dichiaro gli attributi della classe persona: nome, cognome, anno di nascita.
- private String nome;
- private String cognome;
- private int annoDiNascita;
- //metodi costruttori della classe persona:
- public Persona (String nome, String cognome,int annoDiNascita )
- {
- this.nome= nome;
- this.cognome= cognome;
- this.annoDiNascita= annoDiNascita;
- }
- public Persona() //ricorda il THIS e di non passare nulla al metodo!!!!!!!!!
- {
- this.nome="";
- this.cognome="";
- this.annoDiNascita= 2001;
- }
- // get e set di ogni attributo
- public String getNome() //Non è VOID e quindi ci va il return, mi restituisce il nome della persona
- {
- return nome;
- }
- public void setNome(String nome)
- {
- this.nome=nome;
- }
- public String getCognome()
- {
- return cognome;
- }
- public void setCognome(String cognome)
- {
- this.cognome=cognome;
- }
- public int getAnnoDiNascita()
- {
- return annoDiNascita;
- }
- public void setAnnoDiNascita (int annoDiNascita)
- {
- this.annoDiNascita=annoDiNascita;
- }
- //ora con il metodo equals controllo che l'anno inserito sia uguale all'anno che che ho memorizzato con il get
- public boolean equalsPersona(Persona p) //E' DI TIPO BOOLEAN!!!!!!!!!!!!!
- {
- return p.getAnnoDiNascita()==annoDiNascita && p.getNome().equals(nome)&&p.getCognome().equals(cognome); //ricorda di mettere && e non +!
- }
- //ora faccio il toString, mi da una rappresentazione letterale di ciò che c'è nella mia stringa persona
- public String toString()
- {
- return "Nome:"+ nome+ "Cognome:"+ cognome+ "annoDiNascita"+annoDiNascita;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement