GestionePalestra.java
Created with JBuilder
class GestionePalestra {
  // Gestione degli elenchi iscritti e corsi
  public static final int NUMERO_ISCRITTI_INIZIALE = 1;
  public static final int NUMERO_CORSI_INIZIALE = 1;

  // Gestione dei numeri chiusi
  public static final int[] MAX_ISCRITTI = {20,15,10,40,20,20};

  // Attributi
  private Iscritto[] elencoIscritti;
  private int numeroIscritti;
  private Corso[] elencoCorsi;
  private int numeroCorsi;

  // Costruttore
  public GestionePalestra( ) {
    elencoIscritti = new Iscritto[NUMERO_ISCRITTI_INIZIALE];
    elencoCorsi = new Corso[NUMERO_CORSI_INIZIALE];
    numeroIscritti = numeroCorsi = 0;
  }

  // Iscrizione
  public void iscrivi(String nome, String cognome, int anni) {
    Iscritto iscritto = new Iscritto(nome, cognome, anni);
    if (elencoIscritti.length == numeroIscritti) {
      espandiElencoIscritti();
    }
    elencoIscritti[numeroIscritti] = iscritto;
    ++numeroIscritti;
  }

  // Ritiro della persona
  public boolean ritira(Iscritto iscritto) {
    // Verifica che l'iscritto sia in elenco
    for (int i = 0; i < numeroIscritti; ++i) {
      if (elencoIscritti[i].restituisciNumeroTessera() ==
          iscritto.restituisciNumeroTessera()) {
        // Ritira l'iscritto da tutti i corsi di cui fa parte
        for (int j = 0; j < numeroCorsi; ++j) {
          boolean r = elencoCorsi[j].ritira(iscritto);
        }
        return true;
      }
    }
    return false;
  }

  // Istituzione di un nuovo corso
  public void creaNuovoCorso(int tipo, Iscritto istruttore,
                             double costoOrario, int numeroOre) {
    if (verificaIstruttore(istruttore)) {
      Corso c = new Corso(tipo, istruttore, costoOrario, numeroOre,
                          MAX_ISCRITTI[tipo]);
      if (numeroCorsi == elencoCorsi.length) {
        espandiElencoCorsi();
      }
      elencoCorsi[numeroCorsi] = c;
      ++numeroCorsi;
    }
  }

  // Cancellazione di un corso
  public boolean cancellaCorso(Iscritto istruttore) {
    for (int i = 0; i < numeroCorsi; ++i) {
      Iscritto istruttoreTrovato =
                 elencoCorsi[i].restituisciIstruttore();
      if (istruttore.restituisciNumeroTessera() ==
          istruttoreTrovato.restituisciNumeroTessera()) {
        elencoCorsi[i] = elencoCorsi[numeroCorsi - 1];
        --numeroCorsi;
        return true;
      }
    }
    return false;
  }

  // Calcolo del ricavo complessivo della palestra
  public double calcolaRicavoComplessivo( ) {
    double ricavo = 0.0;
    for (int i = 0; i < numeroCorsi; ++i) {
      ricavo += elencoCorsi[i].calcolaRicavoComplessivo();
    }
    return ricavo;
  }

  // Elenco degli iscritti alla palestra con tipologia ed età
  // superiore ad una data
  // Ipotesi: una stessa persona non è iscritta a più corsi dello stesso tipo
  public Iscritto[] elencoIscrittiPerTipoEdAnni( int tipo, int anni ) {
    int k = 0;
    Iscritto[] risultato = new Iscritto[numeroIscritti];
    for (int i = 0; i < numeroCorsi; ++i){
      if (elencoCorsi[i].restituisciTipo() == tipo) {
        Iscritto[] temp =
          elencoCorsi[i].elencoIscrittiConAnniMaggioreDi(anni);
        int j = 0;
        while (temp[j] != null) {
          risultato[k] = temp[j];
          ++j;
          ++k;
        }
      }
    }
    return risultato;
  }

  // Elenco per tipologie del numero degli iscritti
  public int[] calcolaNumeroIscrittiPerTipologia( ) {
    int[] risultato = new int[Corso.NUMERO_TIPI];
    for (int i = 0; i < numeroCorsi; ++i) {
      ++risultato[elencoCorsi[i].restituisciNumeroIscritti()];
    }
    return risultato;
  }

  // Elenco di tutti gli iscritti  che spendono più di una certa somma
  public Iscritto[] iscrittiConSpesaSuperioreA(double somma) {
    Iscritto[] risultato = new Iscritto[numeroIscritti];
    for (int i = 0; i < numeroIscritti; ++i) {
      Iscritto iscritto = elencoIscritti[i];
      double spesa = 0.0;
      for (int j = 0; j < numeroCorsi; ++j) {
        int numeroTessera = iscritto.restituisciNumeroTessera();
        if (elencoCorsi[j].ricercaPerNumeroTessera(numeroTessera) != null) {
          spesa += elencoCorsi[i].restituisciCosto();
        }
      }
    }
    return risultato;
  }

  // Verifica che l'istruttore sia iscritto e che non sia già istruttore
  private boolean verificaIstruttore(Iscritto istruttore) {
    for (int i = 0; i < numeroIscritti; ++i) {
      if (elencoIscritti[i].restituisciNumeroTessera() ==
          istruttore.restituisciNumeroTessera()) {
        for (int j = 0; j < numeroCorsi; ++j) {
          int tesseraIstruttore =
            elencoCorsi[j].restituisciIstruttore().restituisciNumeroTessera();
          if (tesseraIstruttore == istruttore.restituisciNumeroTessera()) {
            // L'istruttore è iscritto ma tiene già un corso
            return false;
          }
        }
        // OK, l'istruttore è iscritto e non ha altri corsi
        return true;
      }
    }
    // L'istruttore non è iscritto
    return false;
  }

  // Espansione degli elenchi
  private void espandiElencoIscritti() {
    Iscritto[] temp = new Iscritto[numeroIscritti * 2];
    for (int i = 0; i < numeroIscritti; ++i) {
      temp[i] = elencoIscritti[i];
    }
    elencoIscritti = temp;
  }
  private void espandiElencoCorsi() {
    Corso[] temp = new Corso[numeroCorsi * 2];
    for (int i = 0; i < numeroCorsi; ++i) {
      temp[i] = elencoCorsi[i];
    }
    elencoCorsi = temp;
  }
}

GestionePalestra.java
Created with JBuilder