Advertisement
Guest User

Progetto Informatica

a guest
May 22nd, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.20 KB | None | 0 0
  1. package lavorodigruppo;
  2. import java.util.*;
  3. /**
  4. *
  5. * @author Baviera
  6. */
  7. public class LavoroDiGruppo {
  8.  
  9.  
  10. public static void main(String[] args) {
  11. Scanner input= new Scanner (System.in);
  12. Famiglia famigliaCorrente = famigliaDefault(); //gli assegno il metodo che mi crea la
  13. //famiglia di default
  14. boolean esci=false;
  15. System.out.println("Istruzioni Menù\n"+
  16. "1: crea una famiglia di default\n"+
  17. "2:crea una famiglia leggendo valori da input\n"+
  18. "3:ordina il vettore per anno di nascita\n"+
  19. "4:ordina il vettore per nome\n"+
  20. "5:ordina il vettore per cognome\n"+
  21. "6:inserisci una nuova Persona nella famiglia\n"+
  22. "7:togli una Persona dalla famiglia\n"+
  23. "8: modifica il nome di un membro della famiglia\n"+
  24. "9:cerca una persona nella famiglia per nome\n"+
  25. "10:cerca una persona nella famiglia per cognome\n"+
  26. "11:cerca una persona nella famiglia per anno\n"+
  27. "12: stampa a video tutti i membri con rispettivi attributi\n"+
  28. "13:uscita");
  29.  
  30. while (!esci)
  31. {
  32. int scelta=input.nextInt();
  33. switch (scelta)
  34. {
  35. case 1:
  36. famigliaCorrente=famigliaDefault();
  37. break;
  38. case 2:
  39. famigliaCorrente=leggiFamigliaInput();
  40. break;
  41. case 3:
  42. famigliaCorrente.ordinaPerAnnoDiNascita();
  43. break;
  44. case 4:
  45. famigliaCorrente.ordinaPerNome();
  46. break;
  47. case 5:
  48. famigliaCorrente.ordinaPerCognome();
  49. break;
  50. case 6:
  51. famigliaCorrente =addMembro(famigliaCorrente, leggiPersonaInput());
  52. break;
  53. case 7:
  54. famigliaCorrente= deleteMembro(famigliaCorrente, leggiPersonaInput());
  55. break;
  56. case 8:
  57. famigliaCorrente=modificaNome(famigliaCorrente);
  58. break;
  59. case 9:
  60. cercaNome(famigliaCorrente);
  61. break;
  62. case 10:
  63. cercaCognome(famigliaCorrente);
  64. break;
  65. case 11:
  66. cercaAnno(famigliaCorrente);
  67. break;
  68. case 12:
  69. System.out.println(famigliaCorrente.toString());
  70. break;
  71. case 13:
  72. esci=true;
  73. break;
  74. default :
  75. System.out.println("comando non riconosciuto, non c'è nella lista!");
  76. break;
  77.  
  78.  
  79.  
  80.  
  81.  
  82. }
  83.  
  84. }
  85.  
  86. }
  87. //finisce il main, inizio a mettere i metodi statici
  88. static Famiglia modificaNome(Famiglia f) //inserisci sempre il return type
  89. //in questo caso è Famiglia perchè mi deve
  90. //restituire una famiglia, metti return
  91. //perchè non è void
  92. {
  93. Scanner input=new Scanner (System.in);
  94. System.out.println("inserisci il nome della persona della famiglia che vuoi modificare");
  95. String nome=input.nextLine();
  96. System.out.println("inserisci il nuovo nome che vuoi dargli");
  97. String newNome= input.nextLine();
  98. Persona p= f.cercaNome(nome); //assegno alla nuova persona p di cui voglio
  99. //modificare il nome la persona appartenente alla famiglia f
  100. //che ha il nome inserito in input dall'utente
  101. f=deleteMembro(f, p); //non mettere f.!!!!!!!!!
  102. p.setNome(newNome); //richiamando il metodo SET modifico il nome della persona e poi la
  103. //riaggiungo modificata
  104. f=addMembro(f,p);//non mettere f.!!!!!!
  105. return f;
  106. //MANCA IL CONTROLLO SE IL NOME C'è O MENO!
  107. }
  108. static void cercaNome(Famiglia f) //è void, non restituisce nulla!
  109.  
  110. {
  111. Scanner input=new Scanner(System.in);
  112. System.out.println("inserisci il nome che vuoi ricercare nella famiglia");
  113. String nome= input.nextLine();
  114. Persona p= f.cercaNome(nome); //ce l'ho già nella classe famiglia. perchè?
  115. if (p!=null)
  116. {
  117. System.out.println(p.toString()); //stampo a video la persona che ha il nome cercato
  118. }
  119. }
  120. static void cercaCognome(Famiglia f)
  121. {
  122. Scanner input=new Scanner(System.in);
  123. System.out.println("inserisci il cognome che vuoi cercare");
  124. String cognome=input.nextLine();
  125. Persona p=f.cercaCognome(cognome);
  126. if (p!= null)
  127. {
  128. System.out.println(p.toString());
  129. }
  130. }
  131. static void cercaAnno(Famiglia f)
  132. {
  133. Scanner input = new Scanner (System.in);
  134. System.out.println("inserisci l'anno in cui è nata la persona che vuoi cercare");
  135. int anno= input.nextInt();
  136. Persona p= f.cercaAnno(anno);
  137. if (p!=null)
  138. {
  139. System.out.println(p.toString());
  140.  
  141. }
  142. }
  143. static Famiglia deleteMembro (Famiglia f, Persona p)
  144. {
  145. Persona[] a= f.getComponenti(); //creo un array di oggetti (di persone) che contenga i
  146. //componenti della famiglia corrente
  147. Persona [] b= new Persona[a.length-1]; //creo un nuovo array di persone e
  148. //gli assegno una dimensione diminuita di
  149. //1 rispetto alla dimensione di a perchè
  150. //RIMUOVO un elemento.
  151. int n=0;
  152. for (int i=0; i<a.length;i++)
  153. {
  154. if (p.equals(a[i]))
  155. {
  156. //non fai niente perchè vuol dire che siamo nell'elemento di indice i
  157. //che corrisponde alla persona p che si vuole rimuovere
  158. //Pertanto questo elemento dell'array non verrà copiato nel nuovo array
  159. //più piccolo e verrà quindi rimosso
  160. }
  161. else //copio l'elemento nel nuovo array b[]
  162. {
  163. if (n<b.length)
  164. {
  165. b[n]=a[i];
  166. n++;
  167. }
  168. else
  169. {
  170. System.out.println("la persona p non è presente nell'array ");
  171. return f; //ritorno la famiglia così com'è perchè non ho rimosso nulla
  172. }
  173.  
  174. }
  175. }
  176. Famiglia c= new Famiglia (b);
  177. return c;
  178.  
  179.  
  180. }
  181.  
  182. static Famiglia addMembro (Famiglia f, Persona p)
  183. {
  184. Persona [] a = f.getComponenti();
  185. Persona [] b = new Persona [a.length+1]; //voglio aggiungere un membro
  186. for (int i=0; i< a.length;i++)
  187. {
  188. b[i]=a[i]; // copio tutti gli elementi del primo array nel secondo più grande-->
  189. //rimane un buco
  190. }
  191. b[b.length-1]= p; // nell'ultima posizione (-1 perchè parte da 0) aggiungo il membro
  192. Famiglia c= new Famiglia (b);
  193. return c;
  194.  
  195. }
  196. static Persona leggiPersonaInput() //NON è di tipo FAMIGLIA!
  197. {
  198. Scanner input=new Scanner(System.in);
  199. System.out.println("inserisci il nome della persona");
  200. String nome= input.nextLine();
  201. System.out.println("inserisci il cognome della persona");
  202. String cognome=input.nextLine();
  203. System.out.println("inserisci l'anno di nascita");
  204. int anno= input.nextInt();
  205. Persona p = new Persona (nome,cognome,anno);
  206. return p;
  207.  
  208.  
  209. }
  210. static Famiglia leggiFamigliaInput()
  211. {
  212. Scanner input=new Scanner(System.in);
  213. System.out.println("inserisci quanti membri vuoi nella famiglia");
  214. int n;
  215. do
  216. {
  217. while (!input.hasNextInt())
  218. {
  219. System.out.println("non è un intero, devi riinserirlo");
  220. input.nextLine(); //??
  221. }
  222. n=input.nextInt();
  223. } while (n<=0); //chiedi
  224. Persona [] p = new Persona [n];
  225. for (int i=0;i<n;i++)
  226. {
  227. p[i]= leggiPersonaInput();
  228. }
  229. Famiglia f = new Famiglia (p);
  230. return f;
  231.  
  232.  
  233. }
  234. static Famiglia famigliaDefault()
  235. {
  236. Persona a= new Persona ("Martina","Baviera",2001);
  237. Persona b = new Persona ("Giogia","Baviera",1995);
  238. Persona c = new Persona ("Gloria","Sensoli",1967);
  239. Persona d = new Persona ("Luigi","Baviera",1963);
  240. Persona [] p= {a,b,c,d};
  241. Famiglia f = new Famiglia (p);
  242. return f;
  243.  
  244. }
  245.  
  246.  
  247.  
  248. }
  249. public class Famiglia {
  250. public Persona[] componenti; //crea un array di oggetti che è uno degli attributi della mia classe--> array di persone
  251. //costruttore dell'attributo
  252. public Famiglia(Persona[] componenti) //IL TIPO E' PERSONA[]
  253. {
  254. this.componenti=componenti;
  255. }
  256. //get dei membri, NON faccio il set
  257. public Persona[] getComponenti() //IL TIPO DELL'ARRAY E' PERSONA[] NON STRING!
  258. {
  259. return componenti;
  260. }
  261.  
  262. //inizio con i metodi che mi serviranno per creare il menù nel main
  263. public Persona cercaAnno(int annoNascita)
  264. {
  265. for (int i=0;i<componenti.length; i++)
  266. {
  267. if (componenti[i].getAnnoDiNascita()==annoNascita)
  268. {
  269. return componenti[i];
  270. }
  271. }
  272. return null; // ricorda ! se non c'è nessuno che ha quell'anno di nascita allora ritorna che non c'è nessuno!
  273. }
  274. public Persona cercaCognome (String cognome)
  275. {
  276. for (int i=0; i<componenti.length; i++)
  277. {
  278. if (componenti[i].getCognome().equals(cognome))
  279. {
  280. return componenti[i];
  281. }
  282. }
  283. return null;
  284. }
  285. public Persona cercaNome(String nome)
  286. {
  287. for (int i=0; i<componenti.length;i++)
  288. {
  289. if (componenti[i].getNome().equals(nome))
  290. {
  291. return componenti[i];
  292. }
  293. }
  294. return null;
  295. }
  296. // ora inserisco il metodo toString() per stampare una stringa contenente gli attributi di ogni membro della famiglia
  297. public String toString() //il metodo toString deve essere di tipo STRING non PERSONA!
  298. {
  299. String p = "";
  300. for ( Persona personaCorrente: componenti)
  301. {
  302. p+= personaCorrente.toString() + " "; //aggiungo alla stringa vuota il to string di ciascuna persona e vado a capo ogni volta!!!
  303. }
  304. return p;
  305. }
  306. //algoritmi di ordinamento per nome,cognome, anno --> sono di tipo VOID
  307. public void ordinaPerNome()
  308. {
  309. for (int i=0;i<componenti.length-1;i++) //ricorda il -1, perchè la numerazione dell'array parte da 0
  310. {
  311. int posmin=i;
  312. for (int j=(i+1);j<componenti.length; j++)
  313. {
  314. if (componenti[j].getNome().compareTo(componenti[i].getNome())< 0) //se ritorna un numero negativo vuol dire che componenti[j] viene prima di componenti[i]
  315. {
  316. posmin=j;
  317. }
  318. if (posmin!=i)
  319. {
  320. Persona appoggio= componenti[i];
  321. componenti[i]=componenti[posmin];
  322. componenti[posmin]=appoggio;
  323. }
  324. }
  325. }
  326. }
  327. public void ordinaPerCognome ()
  328. {
  329. for (int i=0; i<componenti.length-1;i++)
  330. {
  331. int posmin=i;
  332. for (int j = (i+1); j < componenti.length; j++)
  333. {
  334. if (componenti[j].getCognome().compareTo(componenti[i].getCognome())<0)
  335. {
  336. posmin=j;
  337. }
  338. if (posmin!=i)
  339. {
  340. Persona appoggio= componenti[i];
  341. componenti[i]=componenti[posmin];
  342. componenti[posmin]=appoggio;
  343. }
  344. }
  345. }
  346. }
  347. public void ordinaPerAnnoDiNascita ()
  348. {
  349. for (int i=0; i<componenti.length-1;i++)
  350. {
  351. int posmin=i;
  352. for (int j = (i+1); j < componenti.length; j++)
  353. {
  354. if (componenti[j].getAnnoDiNascita()< componenti[posmin].getAnnoDiNascita()) //metti posmin non i!
  355. {
  356. posmin=j;
  357. }
  358. if (posmin!=i)
  359. {
  360. Persona appoggio= componenti[i];
  361. componenti[i]=componenti[posmin];
  362. componenti[posmin]=appoggio;
  363. }
  364. }
  365. }
  366. }
  367.  
  368. }
  369. package lavorodigruppo;
  370. //cosa c'è in questa classe:
  371. //-inserisco attributi
  372. //-costruttori di default
  373. //-get e set di ogni attributo
  374. //-metodo equals--> attenzione alle differenze fra stringa (.equals()) e intero (usi==)
  375. //-toString();
  376. public class Persona {
  377. //dichiaro gli attributi della classe persona: nome, cognome, anno di nascita.
  378. private String nome;
  379. private String cognome;
  380. private int annoDiNascita;
  381.  
  382. //metodi costruttori della classe persona:
  383. public Persona (String nome, String cognome,int annoDiNascita )
  384. {
  385. this.nome= nome;
  386. this.cognome= cognome;
  387. this.annoDiNascita= annoDiNascita;
  388.  
  389. }
  390. public Persona() //ricorda il THIS e di non passare nulla al metodo!!!!!!!!!
  391. {
  392. this.nome="";
  393. this.cognome="";
  394. this.annoDiNascita= 2001;
  395. }
  396. // get e set di ogni attributo
  397. public String getNome() //Non è VOID e quindi ci va il return, mi restituisce il nome della persona
  398. {
  399. return nome;
  400. }
  401. public void setNome(String nome)
  402. {
  403. this.nome=nome;
  404. }
  405. public String getCognome()
  406. {
  407. return cognome;
  408. }
  409. public void setCognome(String cognome)
  410. {
  411. this.cognome=cognome;
  412. }
  413. public int getAnnoDiNascita()
  414. {
  415. return annoDiNascita;
  416. }
  417. public void setAnnoDiNascita (int annoDiNascita)
  418. {
  419. this.annoDiNascita=annoDiNascita;
  420. }
  421. //ora con il metodo equals controllo che l'anno inserito sia uguale all'anno che che ho memorizzato con il get
  422. public boolean equalsPersona(Persona p) //E' DI TIPO BOOLEAN!!!!!!!!!!!!!
  423. {
  424. return p.getAnnoDiNascita()==annoDiNascita && p.getNome().equals(nome)&&p.getCognome().equals(cognome); //ricorda di mettere && e non +!
  425.  
  426. }
  427. //ora faccio il toString, mi da una rappresentazione letterale di ciò che c'è nella mia stringa persona
  428. public String toString()
  429. {
  430. return "Nome:"+ nome+ "Cognome:"+ cognome+ "annoDiNascita"+annoDiNascita;
  431. }
  432. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement