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 |