Ciao a tutti, in un programma che devo implementare mi viene richiesto di leggere da un file una serie di preventivi, ognuno dei quali contiene i seguenti dati: progressivo delpreventivo, data, codice fiscale del richiedente, tasso di sconto applicato, lista di mobili, ciascuno accompagnato dalla tipologia (lusso, rustico, economico, ...), dalla quantità, e dal relativo prezzo, chiusa dal simbolo '#', in questo modo:
1
12/01/2005
VRDPLA87T65H456O
30
tavolo
lusso
1
5000.00
sedia
lusso
6
500.00
#
2
14/01/2005
RSSMRA56I98J314K
20
comodino
rustico
2
450.00
letto
rustico
1
2000.00
#
...
10
20/02/2005
VRDPLA87T65H456O
30
console
lusso
1
3500.00
#
.....
io ho implementato le seguenti classi:
CLASSE MOBILE
CLASSE CLIENTEcodice:import java.io.PrintStream;import java.util.Scanner; public class Mobile { private String tipo; private int quantita; private double prezzo; private String mobile; public Mobile(String mobile, String tipo, int quantita, double prezzo) { this.tipo = tipo; this.quantita = quantita; this.prezzo = prezzo; this.mobile = mobile; } public String getMobile(){ return mobile; } public String getTipo() { return tipo; } public int getQuantita() { return quantita; } public double getPrezzo() { return prezzo; } public void setPrezzo(double prezzo) { this.prezzo = prezzo; } public static Mobile read(Scanner s) { if(!s.hasNextLine()) return null; String mobile = s.nextLine(); if(!s.hasNextLine()) return null; String tipo = s.nextLine(); if(!s.hasNextLine()) return null; int quantita = Integer.parseInt(s.nextLine()); if(!s.hasNextLine()) return null; double prezzo = Double.parseDouble(s.nextLine()); return new Mobile(mobile, tipo,quantita,prezzo); } public void print(PrintStream ps) { ps.println(mobile); ps.println(tipo); ps.println(quantita); ps.println(prezzo); } }
CLASSE PREVENTIVOcodice:import java.io.PrintStream;import java.util.ArrayList; import java.util.Scanner; public class Cliente { private String cf; private String nome; private String cognome; private String indirizzo; private ArrayList<Preventivo> preventivi; public Cliente(String cf, String nome, String cognome, String indirizzo) { this.cf = cf; this.nome = nome; this.cognome = cognome; this.indirizzo = indirizzo; preventivi = new ArrayList<Preventivo>(); } public String getCf() { return cf; } public String getNome() { return nome; } public String getCognome() { return cognome; } public String getIndirizzo() { return indirizzo; } public ArrayList<Preventivo> getPreventivi() { return preventivi; } public void setPreventivi(ArrayList<Preventivo> preventivi) { this.preventivi = preventivi; } public void addPreventivo(Preventivo p) { preventivi.add(p); } public static Cliente read(Scanner in) { if(!in.hasNextLine()) return null; String cf = in.nextLine(); if(!in.hasNextLine()) return null; String nome = in.nextLine(); if(!in.hasNextLine()) return null; String cognome = in.nextLine(); if(!in.hasNextLine()) return null; String indirizzo = in.nextLine(); return new Cliente(cf,nome,cognome,indirizzo); } public void print(PrintStream ps) { ps.println(cf); ps.println(nome); ps.println(cognome); ps.println(indirizzo); } }
CLASSE ARCHIVIOcodice:import java.util.Date;import java.io.PrintStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Scanner; public class Preventivo { private String id; private Date data; private String cf; private int sconto; private ArrayList<Mobile> mobili; private Cliente cliente; public Preventivo(String id, Date data, String cf, int sconto, ArrayList<Mobile> mobili) { super(); this.id = id; this.data = data; this.cf = cf; this.sconto = sconto; this.mobili = mobili; cliente = null; } public String getId() { return id; } public Date getData() { return data; } public String getCf() { return cf; } public int getSconto() { return sconto; } public ArrayList<Mobile> getMobili() { return mobili; } public Cliente getCliente() { return cliente; } public void setSconto(int sconto) { this.sconto = sconto; } public void setMobili(ArrayList<Mobile> mobili) { this.mobili = mobili; } public void setCliente(Cliente cliente) { this.cliente = cliente ; } public void preventivoScontato() { ArrayList<Mobile> mobiliScontati = new ArrayList<Mobile>(); for(Mobile m: mobili) { double prezzoScontato = ((m.getPrezzo()/100)*(100 - sconto)); m.setPrezzo(prezzoScontato); mobiliScontati.add(m); } this.setMobili(mobiliScontati); } public static Preventivo read(Scanner s) { Date data; ArrayList<Mobile> mobili = new ArrayList<Mobile>(); if(!s.hasNextLine()) return null; String id = s.nextLine(); SimpleDateFormat df = new SimpleDateFormat(Constants.FormatDate); if(!s.hasNextLine()) return null; try { data = df.parse(s.nextLine()); } catch (ParseException e) { System.err.println("Un'eccezione è stata lanciata nella lettura del progetto " + id); System.err.println("Verrà assegnata di default la data odierna"); data = new Date(); } if(!s.hasNextLine()) return null; String cf = s.nextLine(); if(!s.hasNextLine()) return null; int sconto = Integer.parseInt(s.nextLine()); boolean done = true; if(!s.hasNextLine()) return null; while(done){ mobili.add(Mobile.read(s)); if(s.nextLine().equals("#")) done = false; else done = true; } return new Preventivo(id,data,cf,sconto,mobili); } public void print(PrintStream ps) { SimpleDateFormat df = new SimpleDateFormat(Constants.FormatDate); ps.println(id); ps.println(df.format(data)); ps.println(cf); ps.println(sconto); for(Mobile m: mobili) ps.println(m); } public void addMobile(Mobile m) { mobili.add(m); } }
Quando eseguo il programma di test, mi lancia un'eccezione di tipo NumberFormatException quando va a leggere i mobili. Non riesco a capire dove stia l'errorecodice:import java.io.PrintStream;import java.util.ArrayList; import java.util.Scanner; public class ArchivioPreventivi { private ArrayList<Preventivo> preventivi; private ArrayList<Cliente> clienti; public ArchivioPreventivi(Scanner sP, Scanner sC) { clienti = new ArrayList<Cliente>(); while(sC.hasNextLine()) { Cliente c1 = Cliente.read(sC); clienti.add(c1); } preventivi = new ArrayList<Preventivo>(); Cliente c = null; while(sP.hasNextLine()) { try{ Preventivo p = Preventivo.read(sP); c = this.searchClienteByCodFiscale(p.getCf()); p.setCliente(c); c.addPreventivo(p); preventivi.add(p); }catch(ClienteNotFoundException e) { System.err.println(e.getMessage()); System.err.println("La connessione non verrà effettuata "); } } } private ArchivioPreventivi(ArrayList<Preventivo> preventivi, ArrayList<Cliente> clienti) { this.preventivi = preventivi; this.clienti = clienti; } public Cliente searchClienteByCodFiscale(String cf) throws ClienteNotFoundException { Cliente cliente = null; for(Cliente p: clienti) if(p.getCf().equals(cf)) cliente = p; if(cliente == null) throw new ClienteNotFoundException("Cliente non trovato per il codice fiscale " + cf); return cliente; } public ArrayList<Preventivo> searchPreventiviByNameSurnameCliente(String name, String surname) { ArrayList<Preventivo> preventiviCercati = new ArrayList<Preventivo>(); for(Preventivo p: preventivi) { Cliente c = p.getCliente(); if(c.getNome().equalsIgnoreCase(name) && c.getCognome().equalsIgnoreCase(surname)){ p.preventivoScontato(); preventiviCercati.add(p); } } return preventiviCercati; } public ArrayList<Preventivo> preventiviScontati() { ArrayList<Preventivo> preventiviScontati = new ArrayList<Preventivo>(); for(Preventivo p: preventivi) { p.preventivoScontato(); preventiviScontati.add(p); } return preventiviScontati; } public void print(PrintStream ps) { for(Preventivo p: preventivi) p.print(ps); } }![]()

Rispondi quotando
