GestioneContatti.java
Created with JBuilder
class GestioneContatti {
  // Attributi
  private Contatto[] elencoContatti;
  private int        numeroContatti;

  // Costruttore
  public GestioneContatti(int maxContatti) {
    elencoContatti = new Contatto[maxContatti];
    numeroContatti = 0;
  }

  // Aggiungi un contatto
  public boolean aggiungiContatto(Contatto c) {
    if (numeroContatti < elencoContatti.length) {
      elencoContatti[numeroContatti] = c;
      ++numeroContatti;
      return true;
    } else {
      return false;
    }
  }

  // Elimina un contatto (data la denominazione)
  public boolean cancellaContatto(String denominazione) {
    int posizione = cercaPerDenominazioneInterno(denominazione);
    if (posizione > 0) {
      elencoContatti[posizione] = elencoContatti[numeroContatti - 1];
      elencoContatti[numeroContatti - 1] = null;
      --numeroContatti;
      return true;
    } else {
      return false;
    }
  }

  // Ricerca un contatto per denominazione
  public Contatto cercaPerDenominazione(String denominazione) {
    int posizione = cercaPerDenominazioneInterno(denominazione);
    if (posizione > 0) {
      return elencoContatti[posizione];
    } else {
      return null;
    }
  }

  // Ricerca di tutti i contatti svolgenti una data attivitą
  public GestioneContatti cercaPerAttivitą(String attivitąCercata) {
    GestioneContatti contattiPerAttivitą =
        new GestioneContatti(numeroContatti);
    for (int i = 0; i < numeroContatti; ++i) {
      String attivitąTrovata = elencoContatti[i].restituisciAttivitą();
      if (attivitąTrovata.equals(attivitąCercata)) {
        contattiPerAttivitą.aggiungiContatto(elencoContatti[i]);
      }
    }
    return contattiPerAttivitą;
  }

  // Ricerca di tutti i contatti che sono in posizione di
  // debito (credito) rispetto all'utente
  public GestioneContatti cercaPerSituazioneFinanziaria(boolean creditori) {
    GestioneContatti contattiPerSituazioneFinanziaria =
        new GestioneContatti(numeroContatti);
    for (int i = 0; i < numeroContatti; ++i) {
      double situazioneFinanziaria =
        elencoContatti[i].restituisciSituazione();
      if ((creditori && (situazioneFinanziaria < 0)) ||
          (!creditori && (situazioneFinanziaria > 0))) {
        contattiPerSituazioneFinanziaria.aggiungiContatto(elencoContatti[i]);
      }
    }
    return contattiPerSituazioneFinanziaria;
  }

  // Situazione finanziaria del libero professionista
  public double calcolaSituazioneFinanziaria() {
    double situazione = 0.0;
    for (int i = 0; i < numeroContatti; ++i) {
      situazione += elencoContatti[i].restituisciSituazione();
    }
    return situazione;
  }

  // Ricerca del contatto che deve la somma maggiore
  public Contatto cercaDebitoreMax() {
    if (numeroContatti > 0) {
      double importoMax = elencoContatti[0].restituisciSituazione();
      int posizioneMax = 0;
      for (int i = 1; i < numeroContatti; ++i) {
        if (elencoContatti[i].restituisciSituazione() > importoMax) {
          importoMax = elencoContatti[i].restituisciSituazione();
          posizioneMax = i;
        }
      }
      if (importoMax > 0) {
        return elencoContatti[posizioneMax];
      } else {
        return null;
      }
    } else {
      return null;
    }
  }

  // Metodo interno di ricerca per denominazione
  private int cercaPerDenominazioneInterno(String dCercata) {
    for (int i = 0; i < numeroContatti; ++i) {
      String dTrovata = elencoContatti[i].restituisciDenominazione();
      if (dTrovata.equals(dCercata)) {
        return i;
      }
    }
    return -1;
  }

}


GestioneContatti.java
Created with JBuilder