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