AgendaGiornaliera.java
Created with JBuilder
class AgendaGiornaliera {

  // Assumo che gli appuntamenti non possano avere durata inferiore
  // alla mezz'ora e che la giornata lavorativa vada dalle 9 alle 17,
  // quindi posso avere 16 appuntamenti al massimo
  public static final Tempo DURATA_MIN = new Tempo(0,30);
  public static final Tempo INIZIO_GIORNATA = new Tempo(9,0);
  public static final Tempo FINE_GIORNATA = new Tempo(17,0);
  public static final int NUMERO_MAX_APPUNTAMENTI = 16;


  // Attributi dell'agenda
  private Appuntamento[] elencoAppuntamenti;
  private int numeroAppuntamenti;

  // Costruttore
  public AgendaGiornaliera( ) {
    elencoAppuntamenti = new Appuntamento[NUMERO_MAX_APPUNTAMENTI];
    numeroAppuntamenti = 0;
  }

  // Per essere inserito l'appuntamento deve:
  // 1 - avere durata maggiore o uguale alla mezz'ora
  // 3 - non iniziare prima delle 9.00 o finire dopo le 17.00
  // 2 - non sovrapporsi con altri appuntamenti inseriti
  public boolean inserisciAppuntamento(Appuntamento a) {
    Tempo durata = a.restituisciDurata();
    // Controllo sulla durata
    if (durata.minoreDi(DURATA_MIN)) {
      return false;
    } else {
      Tempo fine = a.resituisciOrarioFine();
      Tempo inizio = a.resituisciOrario();
      // Controllo sull'orario di lavoro
      if (inizio.minoreDi(INIZIO_GIORNATA) ||
          fine.maggioreDi(FINE_GIORNATA)) {
        return false;
      } else {
        // Controllo sulle sovrapposizioni
        for (int i = 0; i < numeroAppuntamenti; i++) {
          Tempo fine2 = elencoAppuntamenti[i].resituisciOrarioFine();
          Tempo inizio2 = elencoAppuntamenti[i].resituisciOrario();
          if ((fine.maggioreDi(inizio2) && fine.minoreDi(fine2)) ||
              (inizio.maggioreDi(inizio2) && inizio.minoreDi(fine2))) {
            return false;
          }
        }
        // Non vi sono sovrapposizioni, l'appuntamento è inserito
        elencoAppuntamenti[numeroAppuntamenti] = a;
        ++numeroAppuntamenti;
        return true;
      }
    }
  }

  // Ricerca di un appuntamento
  public Persona cercaAppuntamentoPerNome(String nome) {
    for (int i = 0; i < numeroAppuntamenti; i++) {
      String nomeTrovato =
                 elencoAppuntamenti[i].restituisciPersona().restituisciNome();
      if (nomeTrovato.equals(nome)) {
        return elencoAppuntamenti[i].restituisciPersona();
      }
    }
    return null;
  }

  // Cancellazione di un appuntamento
  public boolean cancellaAppuntamentoPerNome(String nome) {
    for (int i = 0; i < numeroAppuntamenti; i++) {
      String nomeTrovato =
                 elencoAppuntamenti[i].restituisciPersona().restituisciNome();
      if (nomeTrovato.equals(nome)) {
        elencoAppuntamenti[i] = elencoAppuntamenti[numeroAppuntamenti - 1];
        --numeroAppuntamenti;
        return true;
      }
    }
    return false;
  }

  // Ricerca appuntamenti dopo una certa ora
  public AgendaGiornaliera cercaAppuntamentiPerOrario(Tempo orario) {
    AgendaGiornaliera estratto = new AgendaGiornaliera( );
    for (int i = 0; i < numeroAppuntamenti; i++) {
      Tempo orarioTrovato = elencoAppuntamenti[i].resituisciOrario();
      if (orarioTrovato.maggioreDi(orario)) {
        estratto.inserisciAppuntamento(elencoAppuntamenti[i]);
      }
    }
    return estratto;
  }

}

AgendaGiornaliera.java
Created with JBuilder