Definizione della classe base e delle sottoclassi.
/***************************** FILE: Articolo.java *****************************/
public class Articolo {
public static class Misure {
public final int altezza, larghezza, profondita;
public Misure(int l, int a, int p) {
larghezza = l;
altezza = a;
profondita = p;
}
@Override
public String toString() {
return "L: "+larghezza+"cm, H: "+altezza+"cm, P: "+profondita+"cm";
}
}
private final String codice;
private Misure misure;
protected Articolo(String c, Misure m) {
codice = c;
misure = m;
}
public String getCodice() { return codice; }
public Misure getMisure() { return misure; }
public float getPrezzo() { return 0; }
@Override
public boolean equals(Object o) {
if (o == null) return false;
else if (o instanceof Articolo) {
Articolo a = (Articolo)o;
return codice.equals(a.codice);
} else
return false;
}
}
/***************************** FILE: Mobile.java *****************************/
import java.util.Arrays;
public class Mobile extends Articolo {
private final String categoria;
private float prezzo;
private String[] colori = new String[0];
public Mobile(String c, Misure m, String cat, float p) {
super(c, m);
categoria = cat;
prezzo = p;
}
public void setPrezzo(float p) { prezzo = p; }
@Override
public float getPrezzo() { return prezzo; }
public boolean addColore(String c) {
if (c == null)
throw new NullPointerException();
int nc = colori.length;
for (int i = 0 ; i < nc ; i++)
if (colori[i].equals(c)) return false;
colori = Arrays.copyOf(colori, nc + 1);
colori[nc] = c;
return true;
}
public String[] getColori() { return colori.clone(); }
public String getCategoria() { return categoria; }
@Override
public String toString() {
String str = categoria+" "+getCodice()+" "+getMisure();
if (colori.length > 0) {
str += "\nColori:";
for (int i = 0 ; i < colori.length ; i++)
str += " "+colori[i];
}
return str+"\nPrezzo: "+getPrezzo();
}
}
/***************************** FILE: Comb.java *****************************/
import java.util.Arrays;
public class Comb extends Articolo {
private int sconto = 0;
private Mobile[] componenti = new Mobile[0]; //I mobili componenti distinti
private int[] quant = new int[0]; //Per ogni componente la quantità
public Comb(String c, Misure m) {
super(c, m);
}
public void setSconto(int s) {
if (s < 0 || s > 100) throw new IllegalArgumentException();
sconto = s;
}
@Override
public float getPrezzo() {
float p = 0;
for (int i = 0 ; i < componenti.length ; i++)
p += componenti[i].getPrezzo()*quant[i];
return p*((100 - sconto)/100f);
}
public void addMobile(Mobile m) {
if (m == null) throw new NullPointerException();
int nc = componenti.length;
for (int i = 0 ; i < nc ; i++)
if (componenti[i].equals(m)) {
quant[i]++;
return;
}
componenti = Arrays.copyOf(componenti, nc + 1);
quant = Arrays.copyOf(quant, nc + 1);
componenti[nc] = m;
quant[nc] = 1;
}
public int contains(Mobile m) {
for (int i = 0 ; i < componenti.length ; i++)
if (componenti[i].equals(m)) return quant[i];
return 0;
}
@Override
public String toString() {
String str = "Combinazione "+getCodice()+" "+getMisure();
for (int i = 0 ; i < componenti.length ; i++) {
Mobile m = componenti[i];
str += "\n"+quant[i]+" "+m.getCategoria()+" "+m.getCodice()+" "+m.getMisure();
}
return str + "\nPrezzo: "+getPrezzo();
}
}