GestioneBiblioteca.java
Created with JBuilder
class GestioneBiblioteca {
  // Attributi privati
  private Libro[] elencoLibri;
  private int numeroLibri;
  
  // Costruttore
  public GestioneBiblioteca(int numeroMaxLibri) {
    elencoLibri = new Libro[numeroMaxLibri];
    numeroLibri = 0;
  }
  
  // Aggiunta di un nuovo libro
  public boolean aggiungiLibro(Libro l) {
    if (numeroLibri < elencoLibri.length) {
      elencoLibri[numeroLibri] = l;
      ++numeroLibri;
      return true;
    } else {
      return false;
    }
  }
  
  // Dismissione di un libro (tutte le copie, ricerca per titolo) 
  public boolean dismettiLibro(String titolo) {
    for (int i = 0; i < numeroLibri; ++i) {
      String titoloTrovato = elencoLibri[i].restituisciTitolo();
      if (titoloTrovato.equals(titolo)) {
        elencoLibri[i] = elencoLibri[numeroLibri - 1];
        --numeroLibri;
        return true;
      }
    }
    return false;
  }
  
  // Ricerca di un libro per titolo
  public Libro ricercaPerTitolo(String titolo) {
    for (int i = 0; i < numeroLibri; ++i) {
      String titoloTrovato = elencoLibri[i].restituisciTitolo();
      if (titoloTrovato.equals(titolo)) {
        return elencoLibri[i];
      }
    }
    return null;
  }
  
  // Ricerca di un libro per autore (solo il primo trovato)
  public Libro ricercaPerAutore(String autore) {
    for (int i = 0; i < numeroLibri; ++i) {
      String autoreTrovato = elencoLibri[i].restituisciAutore();
      if (autoreTrovato.equals(autore)) {
        return elencoLibri[i];
      }
    }
    return null;
  }
  
  // Elenco di tutti i libri che hanno almeno un prestito scaduto
  public GestioneBiblioteca ricercaLibriConPrestitiScaduti(Data oggi) {
    GestioneBiblioteca libriConPrestitiScaduti = 
        new GestioneBiblioteca(numeroLibri);
    for (int i = 0; i < numeroLibri; ++i) {
      if (elencoLibri[i].calcolaNumeroPrestitiScaduti(oggi) > 0) {
        libriConPrestitiScaduti.aggiungiLibro(elencoLibri[i]);
      }
    }
    return libriConPrestitiScaduti;
  }
  
  // Elenco di tutti i prestiti in sofferenza
  public Prestito[] ricercaPrestitiScaduti(Data oggi) {
    // 1. Calcola il numero totale di prestiti in sofferenza
    int totalePrestitiScaduti = 0;
    for (int i = 0; i < numeroLibri; ++i) {
      totalePrestitiScaduti += 
                 elencoLibri[i].calcolaNumeroPrestitiScaduti(oggi);
    }
    // 2. Crea un vettore per contenere i prestiti in sofferenza
    Prestito[] elencoPrestitiScaduti = new Prestito[totalePrestitiScaduti];
    int numeroPrestitiScaduti = 0;
    for (int i = 0; i < numeroLibri; ++i) {
      Prestito[] scaduti = elencoLibri[i].cercaPrestitiScaduti(oggi);
      // I prestiti in sofferenza per ogni libro vanno aggiunti
      // all'elenco complessivo: scaduti contiene solo i prestiti scaduti
      for (int j = 0; j < scaduti.length; ++j) {
        elencoPrestitiScaduti[numeroPrestitiScaduti] = scaduti[j];
        ++numeroPrestitiScaduti;
      }
    }
    return elencoPrestitiScaduti;
  }
  
  // Totale del numero di libri disponibili al prestito
  public int calcolaTotaleLibriDisponibili() {
    int totaleLibriDisponibili = 0;
    for (int i = 0; i < numeroLibri; ++i) {
      totaleLibriDisponibili += elencoLibri[i].restituisciCopieDisponibili();
    }
    return totaleLibriDisponibili;
  }
}

GestioneBiblioteca.java
Created with JBuilder