GestioneMercatino.java
Created with JBuilder |
class GestioneMercatino {
// Attributi costanti
public static final int NUMERO_INIZIALE_ARTICOLI = 1;
public static final int NUMERO_INIZIALE_CLIENTI = 1;
// Attributi variabili
private Cliente[] elencoClienti;
private int numeroClienti;
private Articolo[] elencoArticoli;
private int numeroArticoli;
private double ricavoComplessivo;
// Costruttore
public GestioneMercatino() {
elencoClienti = new Cliente[NUMERO_INIZIALE_CLIENTI];
elencoArticoli = new Articolo[NUMERO_INIZIALE_ARTICOLI];
numeroClienti = numeroArticoli = 0;
ricavoComplessivo = 0.0;
}
// Messa in vendita di un articolo
public void messaInVendita( Cliente c, Articolo a ) {
Cliente c1 = aggiornaClienti(c);
c1.mettiInVendita(a);
aggiornaArticoli(a);
a.impostaVenditore(c1);
}
// Vendita di un articolo
public boolean concludiVendita( Articolo a ) {
int pos = cercaPosizioneArticolo(a);
if (pos >= 0) {
Cliente c = a.restituisciCliente();
if (c.concludiVendita(a)) {
ricavoComplessivo +=
a.restituisciPrezzo() * (1 - Cliente.PERCENTUALE_VENDITORE);
return true;
} else {
return false;
}
} else {
return false;
}
}
// Aggiornamento dei prezzi di vendita
public void aggiornaPrezzi( Data oggi, int giorniLimite ) {
for (int i = 0; i < numeroArticoli; ++i) {
int giorniTrascorsi =
oggi.sottrai(elencoArticoli[i].restituisciMessaInVendita());
if (giorniTrascorsi >= giorniLimite) {
double p = elencoArticoli[i].restituisciPrezzo();
elencoArticoli[i].impostaPrezzo(p * 0.5);
}
}
}
// Dismissione delle giacenze
public Articolo[] dismettiGiacenze( Data oggi, int giorniLimite ) {
Articolo[] daDismettere = new Articolo[numeroArticoli];
int j = 0;
for (int i = numeroArticoli - 1; i >= 0; --i) {
int giorniTrascorsi =
oggi.sottrai(elencoArticoli[i].restituisciMessaInVendita());
if (giorniTrascorsi >= giorniLimite) {
Cliente c = elencoArticoli[i].restituisciCliente();
c.ritiraDallaVendita(elencoArticoli[i]);
daDismettere[j++] = elencoArticoli[i];
elencoArticoli[i] = elencoArticoli[numeroArticoli - 1];
--numeroArticoli;
}
}
return daDismettere;
}
// Metodi privati per l'aggiornamento dei clienti e degli articoli
private Cliente aggiornaClienti( Cliente c ) {
for (int i = 0; i < numeroClienti; ++i) {
String cf = elencoClienti[i].restituisciCodiceFiscale();
if (cf.equals(c.restituisciCodiceFiscale())) {
return elencoClienti[i];
}
}
if (numeroClienti == elencoClienti.length) {
Cliente[] tmp = new Cliente[numeroClienti * 2];
for (int i = 0; i < numeroClienti; ++i) {
tmp[i] = elencoClienti[i];
}
elencoClienti = tmp;
}
elencoClienti[numeroClienti++] = c;
return c;
}
private void aggiornaArticoli( Articolo a ) {
if (numeroArticoli == elencoArticoli.length) {
Articolo[] tmp = new Articolo[numeroArticoli * 2];
for (int i = 0; i < numeroArticoli; ++i) {
tmp[i] = elencoArticoli[i];
}
elencoArticoli = tmp;
}
elencoArticoli[numeroArticoli++] = a;
}
// Metodo privato per la ricerca di un articolo
public int cercaPosizioneArticolo( Articolo a ) {
for (int i = 0; i < numeroArticoli; ++i) {
if (a.restituisciNumeroInventario() ==
elencoArticoli[i].restituisciNumeroInventario()) {
return i;
}
}
return -1;
}
}
GestioneMercatino.java
Created with JBuilder |