Laboratorio di Sistemi Classi e relazioni Java package

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 ©