You are on page 1of 6

Fabio Ros:: 2011 Consegna: I dati degli studenti di un corso sono conservati in un archivio composto da rig he di testo, una

riga per ogni studente. Ogni riga contiene, in campi separati dal carattere ':', il n umero di matricola, il nome, i voti. Scrivere una applicazione in Java per l'aggiornamento dell'archivio. L'applicazi one deve: leggere l'archivio da un file il cui nome passato come primo argomento nella rig a di comando, leggere i dati per l'aggiornamento da un secondo file il cui nome passato come s econdo argomento nella riga di comando, dopo l'aggiornamento l'applicazione deve scrivere sull'uscita standard l'elenco degli studenti (nome e numero di matricola) in ordine alfabetico con l'indicazione della media dei voti riportati da ciascun studente, al termine dell'aggiornamento l'applicazione deve riscrivere i dati aggiornati s ull'archivio. Il file contenente i dati per l'aggiornamento composto da pi righe di due tipi: mmmmmm:nome cognome mmmmmm:xx Un riga dal primo tipo indica che nell'archivio deve essere inserito il nome di un nuovo studente, una riga del secondo tipo indica che ai dati dello studente di matricola mmmmmm deve essere aggiunto il voto xx. un errore cercare di inserire uno studente gi in archivio o cercare di aggiungere un voto ad uno studente non presente. Sono disponibili: archivio: un esempio di archivio dati: un esempio di dati per l'aggiornamento nuovo: l'archivio aggiornato esempio: un esempio di soluzione del quesito che pu essere provato con i seguenti comandi: $ cp archivio nuovo $ java -jar esempio nuovo dati

Nome File: "Archivio" 1111:Fabio Ros:22 2222:Gigi Rossi:23:28:28:21:22:18:19 3333:Sara Tommasi:19:13:13:14:21:22 4444:Gina La fagiana:25:26 5555:Gesu Cristo:30:30:30:30:30 6666:Vasco Rossi:18:18:18:19:18:19:18:18 7777:Luciano Ligabue:23:23:23:24:24:22:23 8888:Joe T Vannelli:28:26:24:26:27 9999:Uomo Ragno:19:20:24:21:19:27 AAAA:Paolo Bianchi:29:24:30:27

Nome File: "dati" 9999:27 9999:28 9919:Gira Dischi 4444:26 4444:27 2222:21 2222:29 2222:20 8894:Tua Sorella 8894:22 8894:24 8894:30 9919:24 9919:27

Nome File: "Diz.java" import java.io.*; import java.util.LinkedList; import java.util.Scanner; public class Diz { public static void main(String[] arg) throws FileNotFoundException { Scanner in=new Scanner(new File(arg[0])); LinkedList<Studente> elenco= new LinkedList<Studente> (); LinkedList<Double> voti; String riga; while(in.hasNextLine()) { riga=in.nextLine(); //System.out.println(riga); String[] blocco=riga.split(":"); voti=new LinkedList<Double> (); for(int i=2; i < blocco.length; i++) {//System.out.println(blocco[i] + " " ); voti.addLast(Double.parseDouble(blocco[i])); } elenco.addLast(new Studente(blocco[0], blocco[1], voti)); } //System.out.println(elenco); Scanner agg =new Scanner(new File(arg[1])); String rigo; File nuovo= new File("nuovo"); boolean trovato=false; FileWriter writer; int i; try { writer = new FileWriter("nuovo"); PrintWriter pw = new PrintWriter(writer); LinkedList<Double> v; while(agg.hasNextLine())

{ rigo=agg.nextLine(); //System.out.println(rigo); String[] blocchetto=rigo.split(":"); trovato=false; for(i=0; i< elenco.size()&&!trovato ; i++) { if(blocchetto[0].equals(elenco.get(i).m atricola)) { elenco.get(i).addVoto(blocchet to[0], Double.parseDouble(blocchetto[1])); trovato=true; //break ; } //trovato= false; } //espressione critica start if(!trovato) { System.out.println ("matricola "+ blocchetto[0] + " non trovata " ); v= new LinkedList<Double> (); //v fittizio per voti elenco.addLast(new Studente(blo cchetto[0], blocchetto[1], v)); System.out.println ("inserimento "+ blocchetto[1] + " in elenco \n" ); } //espressione critica stop //nn entra nell'if!! --> risolto!!!!!! } for(i=0; i< elenco.size(); i++) { pw.println(elenco.get(i)); System.out.println(elenco.get(i).visuali zza()); } //pw.println(risultato); writer.close() ;

");

}catch (IOException e) { System.out.println("errore IO System.exit(1);}

} }

Nome File: "Studente.java" import java.util.LinkedList; import java.io.*; public class Studente { public String matricola; public String nome; public LinkedList<Double> voti;

public Studente(String m, String n, LinkedList<Double> v) { matricola=m; nome=n; voti=v; }

public Studente(String m, String n) { matricola=m; nome=n; voti=new LinkedList<Double> (); }

public void addVoto(String m, Double v) { voti.addLast(v); }

public String toString() {return "\n matricola: " + matricola + "\t nome: " + nome + "\t \t voti :" + voti + " \n MEDIA: " + media(voti) + "\n" ;} public String visualizza() {return "\n matricola: " + matricola + "\t nome: " + nome + "\t \t MED IA: " + media(voti) + "\n" ;} public double media(LinkedList<Double> v) {Double somma=0.0; for(int i=0; i<v.size() ;i++) { somma=somma+ v.get(i); } return somma/v.size(); } }

Nome File: "Nuovo.java" matricola: 1111 MEDIA: 22.0 nome: Fabio Ros voti:[22.0]

matricola: 2222 nome: Gigi Rossi 21.0, 22.0, 18.0, 19.0, 21.0, 29.0, 20.0] MEDIA: 22.9 matricola: 3333 14.0, 21.0, 22.0] MEDIA: 17.0 matricola: 4444 27.0] MEDIA: 26.0 matricola: 5555 30.0, 30.0] MEDIA: 30.0 nome: Sara Tommasi

voti:[23.0, 28.0, 28.0,

voti:[19.0, 13.0, 13.0,

nome: Gina La fagiana

voti:[25.0, 26.0, 26.0,

nome: Gesu Cristo

voti:[30.0, 30.0, 30.0,

matricola: 6666 nome: Vasco Rossi 19.0, 18.0, 19.0, 18.0, 18.0] MEDIA: 18.25 matricola: 7777 nome: Luciano Ligabue 24.0, 24.0, 22.0, 23.0] MEDIA: 23.142857142857142 matricola: 8888 26.0, 27.0] MEDIA: 26.2 nome: Joe T Vannelli

voti:[18.0, 18.0, 18.0,

voti:[23.0, 23.0, 23.0,

voti:[28.0, 26.0, 24.0,

matricola: 9999 nome: Uomo Ragno 21.0, 19.0, 27.0, 27.0, 28.0] MEDIA: 23.125 matricola: AAAA 27.0] MEDIA: 27.5 matricola: 9919 MEDIA: 25.5 matricola: 8894 nome: Paolo Bianchi

voti:[19.0, 20.0, 24.0,

voti:[29.0, 24.0, 30.0,

nome: Gira Dischi

voti:[24.0, 27.0]

nome: Tua Sorella

voti:[22.0, 24.0, 30.0]

MEDIA: 25.333333333333332

You might also like