Laboratorio di Sistemi Classi e relazioni Java package carrelloconsoleapp; import javax.swing.ImageIcon; /* * Prodotto.java */ /** * * @author maurizio */ public class Prodotto { private String idProdotto; private String descrizione; private double prezzo; private int percSconto; carrello.pdf Pag. 1/9 Cozzetto © Laboratorio di Sistemi private private private private Classi e relazioni Java int iva; int qta; Categoria categoria; ImageIcon img; /** Costruttore senza parametri */ public Prodotto() { } /** Costruttore con parametri */ public Prodotto(String idProdotto, String descrizione, double prezzo, int percSconto, int iva, int qta, Categoria categoria) { this.idProdotto = idProdotto; this.descrizione = descrizione; this.prezzo = prezzo; this.percSconto = percSconto; this.iva = iva; this.qta = qta; this.categoria = categoria; } /** Il prezzo finale è dato dal valore netto + l'iva - lo sconto */ public double prezzoFinale() { return getPrezzo()*getQta()+(getPrezzo()*getQta()*getIva())/100(getPrezzo()*getQta()*getPercSconto())/100; } /** Visualizzazione delle informazioni essenziali del prodotto */ public String visualizzaProdotto() { return String.format("Prodotto\nCodice: %s | Titolo: %s | Quantità: %d | Categoria: %s | Prezzo: %f euro",getIdProdotto(), getDescrizione(), getQta(),getCategoria().getDescrizione(),this.prezzoFinale()); } public String getIdProdotto() { return idProdotto; } public void setIdProdotto(String idProdotto) { this.idProdotto = idProdotto; } public String getDescrizione() { return descrizione; } public void setDescrizione(String descrizione) { this.descrizione = descrizione; } public double getPrezzo() { return prezzo; } public void setPrezzo(double prezzo) { this.prezzo = prezzo; } carrello.pdf Pag. 2/9 Cozzetto © Laboratorio di Sistemi Classi e relazioni Java public int getPercSconto() { return percSconto; } public void setPercSconto(int percSconto) { this.percSconto = percSconto; } public int getIva() { return iva; } public void setIva(int iva) { this.iva = iva; } public int getQta() { return qta; } public void setQta(int qta) { this.qta = qta; } public Categoria getCategoria() { return categoria; } public void setCategoria(Categoria categoria) { this.categoria = categoria; } public ImageIcon getImg() { return img; } public void setImg(ImageIcon img) { this.img = img; } } // fine classe Prodotto /* * Categoria.java */ package carrelloconsoleapp; /** * * @author maurizio */ public class Categoria { private String idCategoria; private String descrizione; carrello.pdf Pag. 3/9 Cozzetto © Laboratorio di Sistemi Classi e relazioni Java public Categoria(String idCategoria, String descrizione) { this.idCategoria = idCategoria; this.descrizione = descrizione; } public String getIdCategoria() { return idCategoria; } public void setIdCategoria(String idCategoria) { this.idCategoria = idCategoria; } public String getDescrizione() { return descrizione; } public void setDescrizione(String descrizione) { this.descrizione = descrizione; } } // fine classe Categoria /* * Carrello.java */ package carrelloconsoleapp; import java.util.ArrayList; import java.util.List; /** * * @author maurizio */ public class Carrello { private List<Prodotto> prodotti; // struttura dati di appoggio private static int numProdotti = 0; private double totale; // totale acquisti carrello /** Costruttore */ public Carrello() { prodotti = new ArrayList<Prodotto>(); totale = 0; } /** Aggiunta di un prodotto al carrello */ public void aggiungiProdotto(Prodotto p) { if (p==null) return; // ricerca del prodotto p int i = cercaProdotto2(p); carrello.pdf Pag. 4/9 Cozzetto © Laboratorio di Sistemi Classi e relazioni Java if (i==-1) { // non c'è il prodotto quindi si può aggiungere prodotti.add(p); numProdotti++; } else { prodotti.get(i).setQta(prodotti.get(i).getQta()+1); // Il prodotto esiste già nel carrello. Incremento la quantità di 1 } } // fine aggiungiProdotto /** Overloading del metodo aggiungi */ public void aggiungiProdotto(Prodotto p, int qtaProdotto) { if (p==null || qtaProdotto<0) return; // ricerca del prodotto p int i = cercaProdotto2(p); if (i==-1) { // il prodotto non esiste prodotti.add(p); numProdotti++; i = prodotti.indexOf(p); // ora p si trova nel carrello prodotti.get(i).setQta(prodotti.get(i).getQta()+qtaProdotto); } else { prodotti.get(i).setQta(prodotti.get(i).getQta()+qtaProdotto); //Il prodotto è già nel carrello. Incremento la quantità di qtaProdotto unità } } // fine aggiungiProdotto /** Rimozione di un prodotto noto il reference del prodotto */ public void rimuoviProdotto(Prodotto p) { if (p==null) return; // ricerca di p int i = cercaProdotto2(p); if (i!=-1) { prodotti.remove(p); numProdotti--; } } // fine metodo rimuoviProdotto /** restituisce true se il carrello è vuoto false in caso contrario */ public boolean eVuoto() { return prodotti.isEmpty(); } /** Restituzione di una stringa che rappresenta il carrello */ public String datiCarrello() { if (!this.eVuoto()) { String s="Carrello: \n"; if (numProdotti>1) s=s+"Nel carrello ci sono "+numProdotti+" prodotti\n"; else s=s+"Nel carrello c'è "+numProdotti+" prodotto\n"; carrello.pdf Pag. 5/9 Cozzetto © Laboratorio di Sistemi Classi e relazioni Java for (Prodotto p: prodotti) s=s+p.visualizzaProdotto()+"\n"; s = s+String.format("Totale carrello: %f euro",this.getTotale()); return s; } else return null; } // fine metodo datiCarrello /** Visualizzazione del carrello */ public void mostraCarrello() { if (this.eVuoto()) System.out.println("Il carrello è vuoto"); else System.out.println(this.datiCarrello()); } /** Conteggio dei prodotti inseriti nel carrello */ public int getNumProdotti() { return numProdotti; } /** Calcolo del totale complessivo dei prodotti nel carrello */ public double getTotale() { totale = 0; for (Prodotto p: prodotti) { totale = totale + p.prezzoFinale(); } return totale; } /** Ricerca della posizione del prodotto nel carrello se il prodotto esiste */ public int cercaProdotto(String idProdotto) { for (int i=0; i<getNumProdotti(); i++) if (idProdotto.equals(prodotti.get(i).getIdProdotto())) return i; return -1; } public int cercaProdotto2(Prodotto p) { return prodotti.indexOf(p); } } // fine classe Carrello carrello.pdf Pag. 6/9 Cozzetto © Laboratorio di Sistemi Classi e relazioni Java /* * Main.java */ package carrelloconsoleapp; public class Main { public static void main(String[] args) { // scelgo una categoria Categoria c = new Categoria("LBR","Libri"); // creo 4 prodotti di quella categoria Prodotto p1 = new Prodotto("P1","Java",78,6,10,1,c); Prodotto p2 = new Prodotto("P2","UML",90,0,7,1,c); Prodotto p3 = new Prodotto("P3","C++",80,0,9,1,c); Prodotto p4 = new Prodotto("P4","Javascript",56,0,20,1,c); // creo un carrello (all'inizio è vuoto) Carrello cr = new Carrello(); // mi faccio dare la categoria del prodotto p1 Categoria cg = p1.getCategoria(); // controllo la descrizione della categoria precedente (se coincide) System.out.println("L'oggetto p1 appartiene alla categoria "+cg.getDescrizione()); // dal momento che il carrello è vuoto, adesso non dovrebbero apparire // prodotti nel carrello cr.mostraCarrello(); double tot = cr.getTotale(); System.out.println("Totale carrello "+tot); // aggiungiamo due prodotti System.out.println("Aggiungo i prodotti p1 e p2"); cr.aggiungiProdotto(p1); cr.aggiungiProdotto(p2); // il carrello non è più vuoto cr.mostraCarrello(); // aggiungo la quantità 1 al prodotto p1 System.out.println("Tento di aggiungere p1 (che esiste già): incremento di 1 la quantità"); cr.aggiungiProdotto(p1); cr.mostraCarrello(); // aggiungo nuovi prodotti System.out.println("Aggiungo i prodotti p3, p4 e p2 (p2 si trova già nel carrello, quindi incremento la quantità di 1)"); cr.aggiungiProdotto(p3); cr.aggiungiProdotto(p4); cr.aggiungiProdotto(p2); cr.mostraCarrello(); carrello.pdf Pag. 7/9 Cozzetto © Laboratorio di Sistemi Classi e relazioni Java // aggiungo delle quantità ai prodotti p3 e p4 System.out.println("Aggiungo al prodotto p3 4 unità e al prodotto p4 6 unità"); cr.aggiungiProdotto(p3,4); cr.aggiungiProdotto(p4,6); cr.mostraCarrello(); // cerco un prodotto noto l'id del prodotto System.out.println("Ricerca del prodotto p3 noto idProdotto"); int i = cr.cercaProdotto(p3.getIdProdotto()); if (i!=-1) { System.out.println("Il prodotto p3 esiste nel carrello"); System.out.println(p3.visualizzaProdotto()); } else System.out.println("Il prodotto p3 non esiste nel carrello"); // creo un nuovo prodotto p5 Prodotto p5 = new Prodotto("P5","Prova",20,3,4,1,c); // cerco il prodotto p5 (il prodotto non è stato ancora aggiunto) i = cr.cercaProdotto2(p5); if (i!=-1) { System.out.println("Il prodotto p5 esiste nel carrello"); System.out.println(p5.visualizzaProdotto()); } else System.out.println("Il prodotto p5 non esiste nel carrello"); System.out.println("Tento di rimuovere p5 che non esiste"); cr.rimuoviProdotto(p5); System.out.println("Rimuovo i prodotti p2, p3 e p4"); cr.rimuoviProdotto(p2); cr.rimuoviProdotto(p4); cr.rimuoviProdotto(p3); System.out.println("Rimuovo il prodotto p1"); cr.rimuoviProdotto(p1); cr.mostraCarrello(); // in questo momento il carrello è vuoto quindi aggiungo un prodotto System.out.println("Aggiungo p5"); cr.aggiungiProdotto(p5); cr.mostraCarrello(); } // fine metodo main } // fine classe Main Esempio di esecuzione: L'oggetto p1 appartiene alla categoria Libri Il carrello è vuoto Totale carrello 0.0 Aggiungo i prodotti p1 e p2 Carrello: Nel carrello ci sono 2 prodotti carrello.pdf Pag. 8/9 Cozzetto © Laboratorio di Sistemi Classi e relazioni Java Prodotto Codice: P1 | Titolo: Java | Quantità: 1 | Categoria: Libri | Prezzo: 81,120000 euro Prodotto Codice: P2 | Titolo: UML | Quantità: 1 | Categoria: Libri | Prezzo: 96,300000 euro Totale carrello: 177,420000 euro Tento di aggiungere p1 (che esiste già): incremento di 1 la quantità Carrello: Nel carrello ci sono 2 prodotti Prodotto Codice: P1 | Titolo: Java | Quantità: 2 | Categoria: Libri | Prezzo: 162,240000 euro Prodotto Codice: P2 | Titolo: UML | Quantità: 1 | Categoria: Libri | Prezzo: 96,300000 euro Totale carrello: 258,540000 euro Aggiungo i prodotti p3, p4 e p2 (p2 si trova già nel carrello, quindi incremento la quantità di 1) Carrello: Nel carrello ci sono 4 prodotti Prodotto Codice: P1 | Titolo: Java | Quantità: 2 | Categoria: Libri | Prezzo: 162,240000 euro Prodotto Codice: P2 | Titolo: UML | Quantità: 2 | Categoria: Libri | Prezzo: 192,600000 euro Prodotto Codice: P3 | Titolo: C++ | Quantità: 1 | Categoria: Libri | Prezzo: 87,200000 euro Prodotto Codice: P4 | Titolo: Javascript | Quantità: 1 | Categoria: Libri | Prezzo: 67,200000 euro Totale carrello: 509,240000 euro Aggiungo al prodotto p3 4 unità e al prodotto p4 6 unità Carrello: Nel carrello ci sono 4 prodotti Prodotto Codice: P1 | Titolo: Java | Quantità: 2 | Categoria: Libri | Prezzo: 162,240000 euro Prodotto Codice: P2 | Titolo: UML | Quantità: 2 | Categoria: Libri | Prezzo: 192,600000 euro Prodotto Codice: P3 | Titolo: C++ | Quantità: 5 | Categoria: Libri | Prezzo: 436,000000 euro Prodotto Codice: P4 | Titolo: Javascript | Quantità: 7 | Categoria: Libri | Prezzo: 470,400000 euro Totale carrello: 1261,240000 euro Ricerca del prodotto p3 noto idProdotto Il prodotto p3 esiste nel carrello Prodotto Codice: P3 | Titolo: C++ | Quantità: 5 | Categoria: Libri | Prezzo: 436,000000 euro Il prodotto p5 non esiste nel carrello Tento di rimuovere p5 che non esiste Rimuovo i prodotti p2, p3 e p4 Rimuovo il prodotto p1 Il carrello è vuoto Aggiungo p5 Carrello: Nel carrello c'è 1 prodotto Prodotto Codice: P5 | Titolo: Prova | Quantità: 1 | Categoria: Libri | Prezzo: 20,200000 euro Totale carrello: 20,200000 euro BUILD SUCCESSFUL (total time: 0 seconds) carrello.pdf Pag. 9/9 Cozzetto ©