GestioneParcoAuto.java
Created with JBuilder
import javabook.*;

class GestioneParcoAuto {
  // Attributi costanti
  private static final String[] VOCE_MENU =
  { "Acquisto veicolo",
    "Dismissione veicolo",
    "Ricerca (per targa)",
    "Elenco veicoli da revisionare",
    "Termina" };

  // Attributi variabili
  private static ParcoAuto  parcoAuto;
  private static MainWindow finestra;

  public static void main(String[] args) {

    // Crea e visualizza la finestra dell'applicazione
    finestra = new MainWindow("Gestione Parco Auto");
    finestra.show();

    // Inizializza il parco auto
    InputBox richiediDati = new InputBox(finestra, "Inizializzazione");
    int numeroMaxAutomezzi =
        richiediDati.getInteger("Numero massimo di automezzi?");
    parcoAuto = new ParcoAuto(numeroMaxAutomezzi);

    // Ripeti fino a quando l'utente non desidera terminare
    boolean ripeti = true;
    while (ripeti) {
      // Crea e visualizza il menu principale
      ListBox menuPrincipale = new ListBox(finestra, "Menu Principale");
      for (int i = 0; i < VOCE_MENU.length; ++i) {
        menuPrincipale.addItem(VOCE_MENU[i]);
      }
      String scelta = menuPrincipale.getSelectedItem();

      // Gestisce la scelta dell'utente
      if (scelta != null) {
        if (scelta.equals(VOCE_MENU[0])) {
          aggiungiAutomezzo();
        } else if (scelta.equals(VOCE_MENU[1])) {
          eliminaAutomezzo();
        } else if (scelta.equals(VOCE_MENU[2])) {
          ricercaAutomezzoPerTarga();
        } else if (scelta.equals(VOCE_MENU[3])) {
          ricercaAutomezziDaRevisionare();
        } else {
          ripeti = false;
        }
      }
    }
    System.exit(0);
  }

  // Metodo per gestire IO di aggiunta automezzo
  private static void aggiungiAutomezzo()
  {
    // Creazione della maschera di ingresso
    String[] etichette =
    { "Marca", "Modello", "Targa", "Anno Immatricolazione" };
    MultiInputBox richiediAutomezzo =
        new MultiInputBox(finestra, etichette);

    // Richiesta e gestione dati
    String[] datiInseriti = richiediAutomezzo.getInputs();
    int annoImmatricolazione =
        Integer.parseInt(datiInseriti[3]);

    // Creazione di una nuova auto e inserimento nel parco
    Automezzo nuovaAuto =
        new Automezzo(datiInseriti[0],
                      datiInseriti[1],
                      datiInseriti[2],
                      annoImmatricolazione,
                      annoImmatricolazione);
    boolean ok = parcoAuto.aggiungi(nuovaAuto);
    MessageBox mb = new MessageBox(finestra);
    if (ok) {
      mb.show("Inserimento effettuato!");
    } else {
      mb.show("Capacità del parco auto esaurita!");
    }
  }

  // Metodo per gestire IO di cancellazione automezzo
  private static void eliminaAutomezzo()
  {
    // Creazione della maschera di ingresso
    InputBox richiediTarga =
        new InputBox(finestra, "Eliminazione automezzo");

    // Richiesta dati
    String targa = richiediTarga.getString("Targa del mezzo?");

    // Cancellazione dell'auto dal parco
    boolean ok = parcoAuto.elimina(targa);
    MessageBox mb = new MessageBox(finestra);
    if (ok) {
      mb.show("Cancellazione effettuata!");
    } else {
      mb.show("Il mezzo targato " + targa +
              " non è presente nel parco automezzi!");
    }
  }

  // Metodo per gestire IO di ricerca per targa
  private static void ricercaAutomezzoPerTarga()
  {
    // Creazione della maschera di ingresso
    InputBox richiediTarga =
        new InputBox(finestra, "Ricerca automezzo");

    // Richiesta dati
    String targa = richiediTarga.getString("Targa del mezzo?");

    // Ricerca dell'auto nel parco
    Automezzo auto = parcoAuto.cercaPerTarga(targa);
    OutputBox ob =
        new OutputBox(finestra, "Risultato della ricerca");
    if (auto != null) {
      visualizzaDatiAuto(auto, ob);
    }else {
      ob.printLine("Il mezzo targato " + targa +
                   " non è presente nel parco automezzi!");
    }
    ob.show();
    ob.waitUntilClose();
  }

 // Metodo per la ricerca di automezzi da revisionare
  private static void ricercaAutomezziDaRevisionare()
  {
    // Creazione della maschera di ingresso
    InputBox richiediAnno =
        new InputBox(finestra, "Ricerca veicoli da revisionare");

    // Richiesta dati
    int anno = richiediAnno.getInteger("Anno corrente?");

    // Estrazione delle auto da revisionare
    ParcoAuto daRevisionare =
        parcoAuto.cercaAutomezziDaRevisionare(anno);

    // Creazione della maschera di uscita
    OutputBox uscitaDati =
        new OutputBox(finestra, "Veicoli da revisionare");
    if (daRevisionare.restituisciNumeroAutomezzi() > 0) {
      daRevisionare.iniziaScansione();
      Automezzo auto = daRevisionare.prossimoAutomezzo();
      while (auto != null) {
        visualizzaDatiAuto(auto, uscitaDati);
        auto = daRevisionare.prossimoAutomezzo();
      }
    } else {
      uscitaDati.printLine("Non vi sono automezzi da revisionare");
    }
    uscitaDati.show();
    uscitaDati.waitUntilClose();
  }

  // Metodo per visualizzare i dati di un automezzo
  private static void visualizzaDatiAuto(
      Automezzo auto,
      OutputBox ob)
  {
    ob.printLine("Marca: " + auto.resituisciMarca());
    ob.printLine("Modello: " + auto.restituisciModello());
    ob.printLine("Targa: " + auto.restituisciTarga());
    ob.printLine("Immatricolata nel: " +
                 auto.restituisciAnnoImmatricolazione());
    ob.printLine("Revisionata nel: " +
                 auto.restituisciAnnoRevisione());
  }
}

GestioneParcoAuto.java
Created with JBuilder