GestioneEventi.java
Created with JBuilder
class GestioneEventi {
  // Attributi costanti
  public static final int NUMERO_INIZIALE_EVENTI = 100;

  // Attributi variabili
  private Evento[] elencoEventi;
  private int      numeroEventi;

  // Costruttore
  public GestioneEventi( ) {
    elencoEventi = new Evento[NUMERO_INIZIALE_EVENTI];
    numeroEventi = 0;
  }

  // Metodi per aggiunta, cancellazione e ricerca di un evento
  public void aggiungi(Evento e) {
    if (numeroEventi == elencoEventi.length) {
      espandiElenco(2);
    }
    elencoEventi[numeroEventi++] = e;
  }
  public boolean rimuovi(String nome) {
    int posizione = cercaPosizione(nome);
    if (posizione >= 0) {
      elencoEventi[posizione] = elencoEventi[numeroEventi - 1];
      elencoEventi[numeroEventi - 1] = null;
      --numeroEventi;
      return true;
    } else {
      return false;
    }
  }
  public Evento cerca(String nome) {
    int posizione = cercaPosizione(nome);
    if (posizione >= 0) {
      return elencoEventi[posizione];
    } else {
      return null;
    }
  }

  // Metodo per la ricerca di eventi per durata e partecipanti
  public Evento[] elencaEventi(int durata, int partecipanti) {
    Evento[] elenco = new Evento[numeroEventi];
    int j = 0;
    for (int i = 0; i < numeroEventi; ++i) {
      if ((elencoEventi[i].restituisciDurata() > durata) &&
          (elencoEventi[i].restituisciNumeroPartecipanti() > partecipanti)) {
      elenco[j++] = elencoEventi[i];
    }
    }
    return elenco;
  }

  // Metodo per la ricerca di eventi in perdita
  public Evento[] elencaEventiInPerdita(String luogo) {
    Evento[] elenco = new Evento[numeroEventi];
    int j = 0;
    for (int i = 0; i < numeroEventi; ++i) {
      if (luogo.equals(elencoEventi[i].restituisciLuogo())) {
        double ricavo = elencoEventi[i].restituisciQuota() *
          elencoEventi[i].restituisciNumeroPartecipanti();
        if (ricavo < elencoEventi[i].restituisciCostoTotale()) {
          elenco[j++] = elencoEventi[i];
        }
      }
    }
    return elenco;
  }

  // Metodo per la ricerca dei partecipanti morosi
  public Partecipante[] elencaPartecipantiMorosi() {
    int numeroMorosi = 0;
    for (int i = 0; i < numeroEventi; ++i) {
      numeroMorosi += elencoEventi[i].calcolaNumeroMorosi();
    }
    Partecipante[] elencoMorosi = new Partecipante[numeroMorosi];
    int j = 0;
    for (int i = 0; i < numeroEventi; ++i) {
      Partecipante[] temp = elencoEventi[i].elencoMorosi();
      for (int k = 0; k < temp.length; ++k) {
        elencoMorosi[j++] = temp[k];
      }
    }
    return elencoMorosi;
  }

  // Metodo per l'elencazione degli eventi in utile (perdita)
  public Evento[] elencaEventiInUtile() {
    Evento[] elenco = new Evento[numeroEventi];
    int j = 0;
    for (int i = 0; i < numeroEventi; ++i) {
      double ricavo = elencoEventi[i].restituisciQuota() *
        elencoEventi[i].restituisciNumeroPartecipanti();
      if (ricavo > elencoEventi[i].restituisciCostoTotale()) {
        elenco[j++] = elencoEventi[i];
      }
    }
    return elenco;
  }
  public Evento[] elencaEventiInPerdita() {
    Evento[] elenco = new Evento[numeroEventi];
    int j = 0;
    for (int i = 0; i < numeroEventi; ++i) {
      double ricavo = elencoEventi[i].restituisciQuota() *
        elencoEventi[i].restituisciNumeroPartecipanti();
      if (ricavo < elencoEventi[i].restituisciCostoTotale()) {
        elenco[j++] = elencoEventi[i];
      }
    }
    return elenco;
  }

  // Metodo per il calcolo dell'utile (o della perdita) totale sugli eventi
  public double calcolaRisultatoGlobale() {
    double risultato = 0;
    for (int i = 0; i < numeroEventi; ++i) {
      double ricavo = elencoEventi[i].restituisciQuota() *
        elencoEventi[i].restituisciNumeroPartecipanti();
      risultato += (ricavo - elencoEventi[i].restituisciCostoTotale());
    }
    return risultato;
  }

  // Metodi privati per la ricerca di un evento e per l'espansione dell'elenco
  private int cercaPosizione(String nome) {
    for (int i = 0; i < numeroEventi; ++i) {
      if (nome.equals(elencoEventi[i].restituisciNome())) {
        return i;
      }
    }
    return -1;
  }
  private void espandiElenco(int fattore) {
    Evento[] nuovoElenco = new Evento[elencoEventi.length * fattore];
    for (int i = 0; i < elencoEventi.length; ++i) {
      nuovoElenco[i] = elencoEventi[i];
    }
    elencoEventi = nuovoElenco;
  }

}

GestioneEventi.java
Created with JBuilder