GestioneVolo.java
Created with JBuilder
class GestioneVolo {
    public static final int N_INIZIALE_VOLI = 1;

    private Volo[] elencoVoli;
    private int    numeroVoli;

    public GestioneVolo() {
        elencoVoli = new Volo[N_INIZIALE_VOLI];
        numeroVoli = 0;
    }

    public void aggiungiVolo( Volo v ) {
        if (!esisteVolo(v)) {
            if (numeroVoli == elencoVoli.length) {
                espandiElenco();
            }
            elencoVoli[numeroVoli] = v;
            numeroVoli += 1;
        }
    }

    public boolean eliminaVolo( String codice ) {
        int pos = ricercaVolo(codice);
        if (pos>=0) {
            elencoVoli[pos] = elencoVoli[numeroVoli-1];
            numeroVoli -= 1;
            return true;
        } else {
            return false;
        }
    }

    public Volo[] cercaVoliCon(String part, String dest) {
        Volo[] elenco = new Volo[numeroVoli];
        int pos = 0;
        for (int i = 0; i < numeroVoli; ++i) {
            Volo vi = elencoVoli[i];
            if (part.equals(vi.restituisciPartenza()) &&
                dest.equals(vi.restituisciDestinazione())) {
                elenco[pos] = vi;
                pos += 1;
            }
        }
        return elenco;
    }

    public int contaVoliConVelMediaInferioreA( double soglia ) {
        int c = 0;
        for (int i = 0; i < numeroVoli; i++) {
            double velMedia = 
                    elencoVoli[i].restituisciDistanza() / 
                    elencoVoli[i].restituisciDurata();
            if (velMedia < soglia) {
                c += 1;
            }
        }
        return c;
    }

    public int[] contaTipologie() {
        int[] frequenza = new int[Volo.N_TIPOLOGIE];
        for (int i = 0; i < numeroVoli; i++) {
            int tipo = elencoVoli[i].restituisciTipo();
            frequenza[tipo] += 1;
        }
        return frequenza;
    }

    public boolean collegateUnoScalo(String partenza,
                                     String destinazione) {
        // Per ogni volo...
        for (int i = 0; i < numeroVoli; i++) {
            // ... controlla se per la partenza data ...
            String pt = elencoVoli[i].restituisciPartenza();
            if (pt.equals(partenza)) {
                String di = elencoVoli[i].restituisciDestinazione();
                // ... esiste una destinazione intermedia...
                for (int j = 0; j < numeroVoli; j++) {
                    String pi = elencoVoli[j].restituisciPartenza();
                    String dt = elencoVoli[j].restituisciDestinazione();
                    // ... che conduce alla destinazione data.
                    if (pi.equals(di) && dt.equals(destinazione)) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    private boolean esisteVolo( Volo v ) {
        for (int i = 0; i < numeroVoli; i++) {
            Volo vi = elencoVoli[i];
            if (vi.confronta(v)) {
                return true;
            }
        }
        return false;
    }

    private int ricercaVolo( String codice ) {
        for (int i = 0; i < numeroVoli; i++) {
            String ct = elencoVoli[i].restituisciCodice();
            if (ct.equals(codice)) {
               return i; 
            }
        }
        return -1;
    }

    private void espandiElenco(){
        Volo[] nuovoElenco =
            new Volo[numeroVoli * 2];
        for (int i = 0; i < elencoVoli.length; i++) {
            nuovoElenco[i] = elencoVoli[i];
        }
        elencoVoli = nuovoElenco;
    }
}


GestioneVolo.java
Created with JBuilder