GestioneFiliali.java
Created with JBuilder
class GestioneFiliali {
  // Attributi costanti per la gestione del riepilogo a livello di filiale
  public static final int RACCOLTA = 0;
  public static final int ESPOSIZIONE = 1;
  public static final int GIACENZA = 2;

  // Attributi della gestione filiali
  private Filiale[] elencoFiliali;
  private int numeroFiliali;

  // Costruttore
  public GestioneFiliali(int numeroMaxFiliali) {
    elencoFiliali = new Filiale[numeroMaxFiliali];
    ++numeroFiliali;
  }

  // La filiale viene aperta (e il relativo oggetto restituito) solo
  // se c'è ancora spazio nell'elenco; altrimenti restituisce null
  public Filiale apriFiliale(String indirizzo) {
    if (numeroFiliali < elencoFiliali.length) {
      Filiale filiale = new Filiale(indirizzo);
      elencoFiliali[numeroFiliali++] = filiale;
      return filiale;
    } else {
      return null;
    }
  }

  public Filiale chiudiFiliale(String indirizzo) {
    for (int i = 0; i < numeroFiliali; ++i) {
      String indirizzoTrovato =
                 elencoFiliali[i].restituisciIndirizzo();
      if (indirizzoTrovato.equals(indirizzo)) {
        Filiale filiale = elencoFiliali[i];
        elencoFiliali[i] = elencoFiliali[numeroFiliali - 1];
        --numeroFiliali;
        return filiale;
      }
    }
    return null;
  }

  public double[] calcolaSituazioneFiliali() {
    double[] riepilogo = {0.0, 0.0, 0.0};
    for (int i = 0; i < numeroFiliali; ++i) {
      riepilogo[RACCOLTA] += elencoFiliali[i].calcolaRaccolta();
      riepilogo[ESPOSIZIONE] += elencoFiliali[i].calcolaEsposizione();
      riepilogo[GIACENZA] += elencoFiliali[i].calcolaGiacenzaMedia();
    }
    riepilogo[GIACENZA] = riepilogo[GIACENZA] / numeroFiliali;
    return riepilogo;
  }

  public int calcolaTotaleConti() {
    int n = 0;
    for (int i = 0; i < numeroFiliali; ++i) {
      n += elencoFiliali[i].restituisciNumeroConti();
    }
    return n;
  }

  // Questo metodo conteggia tutte le filiali per cui l'esposizione
  // supera la raccolta
  public Filiale[] elencoFilialiEsposte() {
    Filiale[] elenco = new Filiale[numeroFiliali];
    int k = 0;
    for (int i = 0; i < numeroFiliali; ++i) {
      if (elencoFiliali[i].calcolaEsposizione() >
          elencoFiliali[i].calcolaRaccolta()) {
      elenco[k++] = elencoFiliali[i];
      }
    }
    return elenco;
  }

  // Questo metodo calcola tutte le filiali per cui i conti con esposizione
  // superiore al 90% del fido superano il 50% dei conti della filiale
  public Filiale[] elencoFilialiProblematiche() {
    Filiale[] elenco = new Filiale[numeroFiliali];
    int k = 0;
    for (int i = 0; i < numeroFiliali; ++i) {
      if (elencoFiliali[i].numeroContiProblematici() >
          (elencoFiliali[i].restituisciNumeroConti() / 2)) {
      elenco[k++] = elencoFiliali[i];
      }
    }
    return elenco;
  }

}

GestioneFiliali.java
Created with JBuilder