Compilation.java
Created with JBuilder
class Compilation {
  // Attributo costante: la durata max di un CD è 60 minuti
  public static final Tempo DURATA_MAX = new Tempo(60,0);

  // Attributi della classe
  private Brano[] brano;
  private int     numeroBrani;
  private Tempo   spazioRimasto;

  private String nome;
  private int    codice;
  private int    copie;

  // Costruttore della classe
  public Compilation(String nome, int copie)
  {
    // Impostazione attributi standard
    this.nome = nome;
    this.copie = copie;
    // Il codice non è noto al momento della creazione
    codice = 0;
    // Dividendo la durata max del CD per la durata min di un brano
    // si ottiene il numero max di brani registrabili su un CD
    int numeroMaxBrani =
        (DURATA_MAX.inSecondi() / Brano.DURATA_MIN.inSecondi()) + 1;
    brano = new Brano[numeroMaxBrani];
    numeroBrani = 0;
    spazioRimasto = new Tempo(DURATA_MAX.minuti(), DURATA_MAX.secondi());
  }

  // Metodi di interrogazione
  public String nome()
  {
    return nome;
  }
  public int codice()
  {
    return codice;
  }
  public int copie()
  {
    return copie;
  }
  // Metodi di impostazione
  public void impostaCodice(int c)
  {
    codice = c;
  }

  // Aggiunta di un brano
  public boolean aggiungi(Brano b)
  {
    if (b.durata().inSecondi() < spazioRimasto.inSecondi()) {
      brano[numeroBrani] = b;
      numeroBrani += 1;
      spazioRimasto.sottrai(b.durata());
      return true;
    } else {
      return false;
    }
  }

  // Calcolo della durata totale
  public Tempo calcolaDurataTotale()
  {
    Tempo t = new Tempo();
    for (int i = 0; i < numeroBrani; ++i) {
      t.somma(brano[i].durata());
    }
    return t;
  }

 // Calcolo (approssimato) della durata media
  public Tempo calcolaDurataMedia()
  {
    Tempo t = new Tempo();
    t = calcolaDurataTotale();
    t.daSecondi(t.inSecondi() / numeroBrani);
    return t;
  }

  // Ricerca di un brano dato il titolo
  public Brano ricercaPerTitolo(String titolo)
  {
    for (int i = 0; i < numeroBrani; ++i) {
      if (titolo.equals(brano[i].titolo())) {
        return brano[i];
      }
    }
    return null;
  }

  // Ricerca dei brani dato un autore
  public Brano[] ricercaPerAutore(String autore)
  {
    Brano[] stessoAutore = new Brano[numeroBrani];
    int j = 0;
    for (int i = 0; i < numeroBrani; ++i) {
      if (autore.equals(brano[i].autore())) {
        stessoAutore[j++] = brano[i];
      }
    }
    return stessoAutore;
  }
}

Compilation.java
Created with JBuilder