GestioneCompilation.java
Created with JBuilder
class GestioneCompilation {
  // Attributi della classe
  private Compilation[] compilation;
  private int numeroCompilation;
  private int posCodiceMin;

  // Costruttore
  public GestioneCompilation(int numeroMaxCompilation)
  {
    compilation = new Compilation[numeroMaxCompilation];
    numeroCompilation = 0;
    posCodiceMin = 0;
  }

  // Aggiunta di una compilation
  public boolean aggiungi(Compilation c)
  {
    if (numeroCompilation < compilation.length) {
      compilation[numeroCompilation] = c;
      // Imposto il codice della compilation come progressivo
      c.impostaCodice(numeroCompilation);
      numeroCompilation += 1;
      return true;
    } else {
      return false;
    }
  }

  // Cancellazione di una compilation (per codice)
  // Nota: la cancellazione fa si che il vettore non sia garantito
  // essere in ordine di codice!
  public Compilation cancella(int codiceCercato)
  {
    Compilation temp = null;
    for (int i = 0; i < numeroCompilation; ++i) {
      if (compilation[i].codice() == codiceCercato) {
        temp = compilation[i];
        compilation[i] = compilation[numeroCompilation - 1];
        numeroCompilation -= 1;
      }
    }
    return temp;
  }

  // Modifica di una compilation (per codice)
  // E' necessario eseguire la ricerca (vedi metodo cancella)
  public Compilation modifica(int codiceCercato)
  {
    for (int i = 0; i < numeroCompilation; ++i) {
      if (compilation[i].codice() == codiceCercato) {
        return compilation[i];
      }
    }
    return null;
  }

  // Ricerca di tutte le compilation contenenti un certo brano musicale
  public Compilation[] cercaTutteConTitolo(String titoloCercato)
  {
    Compilation[] stessoTitolo = new Compilation[numeroCompilation];
    int j = 0;
    for (int i = 0; i < numeroCompilation; ++i) {
      if (compilation[i].ricercaPerTitolo(titoloCercato) != null) {
        stessoTitolo[j++] = compilation[i];
      }
    }
    return stessoTitolo;
  }

  // Ricerca di tutte le compilation con durata media superiore ad una data
  public Compilation[] cercaTutteConMediaSuperioreA(Tempo durataMedia)
  {
    Compilation[] durataSup = new Compilation[numeroCompilation];
    int j = 0;
    for (int i = 0; i < numeroCompilation; ++i) {
      int sec = compilation[i].calcolaDurataMedia().inSecondi();
      if (sec > durataMedia.inSecondi()) {
        durataSup[j++] = compilation[i];
      }
    }
    return durataSup;
  }

  // Ricerca di tutte le compilation con durata media totale ad una data
  public Compilation[] cercaTutteConTotaleSuperioreA(Tempo durataTotale)
  {
    Compilation[] durataSup = new Compilation[numeroCompilation];
    int j = 0;
    for (int i = 0; i < numeroCompilation; ++i) {
      int sec = compilation[i].calcolaDurataTotale().inSecondi();
      if (sec > durataTotale.inSecondi()) {
        durataSup[j++] = compilation[i];
      }
    }
    return durataSup;
  }

  // Scorrimento di tutte le compilation per ordine di codice crescente
  // Nota: alla prima invocazione di scorriPerCodice, posCodiceMin non č
  // detto che corrisponda alla compilation con il codice pių basso.
  // Dopo il primo scorrimento, il metodo memorizza in posCodiceMin la
  // compilation con il codice pių basso di tutte. Le successive invocazioni
  // del metodo consentono di avere compilation con codici via via crescenti.
  // Naturalmente il metodo funziona se non vengono effettuate modifiche
  // durante lo scorrimento. L'effetto collaterale č quello di ordinare
  // l'elenco delle compilation.
  public void inziaScorrimento() {
    posCodiceMin = 0;
  }
  public Compilation scorriPerCodice() {
    for (int i = posCodiceMin + 1; i < numeroCompilation; ++i) {
      if (compilation[i].codice() < compilation[posCodiceMin].codice()) {
        Compilation temp = compilation[posCodiceMin];
        compilation[posCodiceMin] = compilation[i];
        compilation[i] = temp;
      }
    }
    posCodiceMin += 1;
    return compilation[posCodiceMin - 1];
  }
}

GestioneCompilation.java
Created with JBuilder