Squadra.java
Created with JBuilder
class Squadra {
  // Costante per il numero di operai e num. iniziale per le attrezzature
  public final static int NUMERO_MAX_OPERAI = 10;
  public final static int NUMERO_INIZIALE_ATTR = 10;

  // Attributo a livello di classe per la gestione del numero squadra
  private static int progressivoSquadre = 0;

  // Attributi
  private int            numero;
  private Operaio        capo;
  private Operaio[]      elencoOperai;
  private int            numeroOperai;
  private Attrezzatura[] elencoAttrezzature;
  private int            numeroAttrezzature;

  // Costruttore
  public Squadra(Operaio capo) {
    this.numero = progressivoSquadre;
    ++progressivoSquadre;
    this.capo = capo;
    elencoOperai = new Operaio[NUMERO_MAX_OPERAI];
    numeroOperai = 0;
    elencoAttrezzature = new Attrezzatura[NUMERO_INIZIALE_ATTR];
    numeroAttrezzature = 0;
    aggiungi(capo);
  }

  // Metodi di restituizione
  public int restituisciNumero() {
    return numero;
  }
  public Operaio restituisciCapo() {
    return capo;
  }

  // Metodi per aggiunta e rimozione di operai e attrezzature
  public boolean aggiungi(Operaio o) {
    if (numeroOperai < elencoOperai.length) {
      elencoOperai[numeroOperai++] = o;
      return true;
    } else {
      return false;
    }
  }
  public void aggiungi(Attrezzatura a) {
    if (numeroAttrezzature == elencoAttrezzature.length) {
      Attrezzatura[] nuovo = new Attrezzatura[numeroAttrezzature * 2];
      for (int i = 0; i < numeroAttrezzature; ++i) {
        nuovo[i] = elencoAttrezzature[i];
      }
      elencoAttrezzature = nuovo;
    }
    elencoAttrezzature[numeroAttrezzature++] = a;
  }
  public boolean rimuovi(Operaio o) {
    int posizione = cercaInterno(o);
    if (posizione >= 0) {
      elencoOperai[posizione] = elencoOperai[numeroOperai - 1];
      elencoOperai[numeroOperai - 1] = null;
      return true;
    } else {
      return false;
    }
  }
  public boolean rimuovi(Attrezzatura a) {
    int posizione = cercaInterno(a);
    if (posizione >= 0) {
      elencoAttrezzature[posizione] = elencoAttrezzature[numeroOperai - 1];
      elencoAttrezzature[numeroOperai - 1] = null;
      return true;
    } else {
      return false;
    }
  }

  // Metodo per la verifica della corretta composizione della squadra
  public boolean verifica() {
    for (int i = 0; i < numeroAttrezzature; ++i) {
      int qualificaRichiesta =
                 elencoAttrezzature[i].restituisciQualificaRichiesta();
      int j = 0;
      while ((j < numeroOperai) &&
             (elencoOperai[j].restituisciQualifica() != qualificaRichiesta)) {
          ++j;
      }
      // Se ho terminato la scansione degli operai, allora non esiste
      // un operaio nella squadra con la qualifica richiesta
      if (j == numeroOperai) {
        return false;
      }
    }
    // Per tutte le attrezzature è stato trovato almeno un operaio con
    // la qualifica necessaria ad utilizzarla
    return true;
  }

  // Calcolo dei costi orari (complessivo e per qualifica)
  public double calcolaCostoOrario() {
    double somma = 0.0;
    for (int i = 0; i < numeroOperai; i++) {
      somma += elencoOperai[i].restituisciPagaOraria();
    }
    for (int i = 0; i < numeroAttrezzature; i++) {
      somma += elencoAttrezzature[i].restituisciCostoOrario();
    }
    return somma;
  }
  public double calcolaCostoOrario(int qualifica) {
    double somma = 0.0;
    for (int i = 0; i < numeroOperai; i++) {
      if (elencoOperai[i].restituisciQualifica() == qualifica) {
        somma += elencoOperai[i].restituisciPagaOraria();
      }
    }
    return somma;
  }

  // Metodo per la verifica di appartenenza di un operaio
  // (necessario per le verifiche di GestioneImpresa)
  public boolean appartiene(Operaio o) {
    for (int i = 0; i < numeroOperai; ++i) {
      if (elencoOperai[i].restituisciMatricola() == o.restituisciMatricola()) {
        return true;
      }
    }
    return false;
  }

  // Metodi interni per la ricerca di attrezzature e operai
  private int cercaInterno(Operaio o) {
    for (int i = 0; i < numeroOperai; i++) {
      if (elencoOperai[i].restituisciMatricola() == o.restituisciMatricola()) {
        return i;
      }
    }
    return -1;
  }
  private int cercaInterno(Attrezzatura a) {
    for (int i = 0; i < numeroAttrezzature; i++) {
      if (elencoAttrezzature[i].restituisciCodice() == a.restituisciCodice()) {
        return i;
      }
    }
    return -1;
  }


}

Squadra.java
Created with JBuilder