Libro.java
Created with JBuilder
class Libro {
  // Attributi privati
  private String     autore;
  private String     titolo;
  private String     editore;
  private int        annoPubblicazione;
  private int        copieTotali;
  private int        copieDisponibili;
  private Prestito[] elencoPrestiti;

  // Costruttore
  public Libro(String a, String t, String e, int annoPubb, int copieTot) {
    autore = a;
    titolo = t;
    editore = e;
    annoPubblicazione = annoPubb;
    copieTotali = copieTot;
    copieDisponibili = copieTot;
    elencoPrestiti = new Prestito[copieTot];
  }

  // Metodi di restituzione
  public String restituisciAutore() {
    return autore;
  }
  public String restituisciTitolo() {
    return titolo;
  }
  public String restituisciEditore() {
    return editore;
  }
  public int restituisciAnnoPubblicazione() {
    return annoPubblicazione;
  }
  public int restituisciCopieDisponibili() {
    return copieDisponibili;
  }
  public int restituisciCopiePrestate() {
    return (copieTotali - copieDisponibili);
  }

  // Metodo per il prestito
  public boolean accendiPrestito(Prestito prestito) {
    if (copieDisponibili > 0) {
      int pos = restituisciCopiePrestate();
      elencoPrestiti[pos] = prestito;
      --copieDisponibili;
      return true;
    } else {
      return false;
    }
  }

  // Metodo per la restituzione
  public boolean estinguiPrestito(Prestito prestito) {
    // 1. Cerca il prestito nell'elenco
    int copiePrestate = restituisciCopiePrestate();
    for (int i = 0; i < copiePrestate; ++i ) {
      if (elencoPrestiti[i].restituisciDocumento() ==
          prestito.restituisciDocumento()) {
        // 2. Trovato il prestito, cancellalo dall'elenco
        elencoPrestiti[i] = elencoPrestiti[copiePrestate - 1];
        ++copieDisponibili;
        return true;
      }
    }
    return false;
  }

  // Metodo per il calcolo del numero di prestiti scaduti
  public int calcolaNumeroPrestitiScaduti(Data oggi) {
    int prestitiScaduti = 0;
    int copiePrestate = restituisciCopiePrestate();
    for (int i = 0; i < copiePrestate; ++i) {
      if (!elencoPrestiti[i].restituito()) {
        Data scadenza = elencoPrestiti[i].restituisciScadenza();
        if (scadenza.minoreDi(oggi)) {
          ++prestitiScaduti;
        }
      }
    }
    return prestitiScaduti;
  }

  // Metodo per l'individuazione dei prestiti scaduti
  public Prestito[] cercaPrestitiScaduti(Data oggi) {
    int copiePrestate = restituisciCopiePrestate();
    int totaleScaduti = calcolaNumeroPrestitiScaduti(oggi);
    Prestito[] elencoScaduti = new Prestito[totaleScaduti];
    int numeroScaduti = 0;
    for (int i = 0; i < copiePrestate; ++i) {
      if (!elencoPrestiti[i].restituito()) {
        Data scadenza = elencoPrestiti[i].restituisciScadenza();
        if (scadenza.minoreDi(oggi)) {
          elencoScaduti[numeroScaduti] = elencoPrestiti[i];
          ++numeroScaduti;
        }
      }
    }
    return elencoScaduti;
  }
}

Libro.java
Created with JBuilder