InterfacciaSpedizioni.java
Created with JBuilder
import javabook.*;

class InterfacciaSpedizioni {

  // Attributi relativi all'interfaccia grafica
  private static MainWindow    finestra;
  private static ListBox       menuPrincipale;
  private static ListBox       menuRicerca;
  private static MultiInputBox schedaDestinatario;
  private static MultiInputBox schedaSpedizione;
  private static InputBox      richiesta;
  private static OutputBox     uscita;
  private static MessageBox    messaggio;

  // Attributo relativo alla gestione spedizioni
  private static GestioneSpedizioni gestioneSpedizioni;
  private static long               codiceProgressivo = 0;

  public static void main(String[] args) {
    inizializzaInterfaccia();
    // Chiede all'utente il massimo numero di spedizioni
    int numeroMaxSpedizioni = richiesta.getInteger("Numero MAX spedizioni? ");
    gestioneSpedizioni = new GestioneSpedizioni(numeroMaxSpedizioni);
    // Presenta all'utente il menu principale in un ciclo continuo
    while (true) {
      int selection = menuPrincipale.getSelectedIndex();
      switch (selection) {
        case 0 : inserisciSpedizione(); break;
        case 1 : cercaSpedizionePerCodice(); break;
        case 2 : cercaSpedizioneAvanzato(); break;
        case 3 : effettuaConsegna(); break;
        case 4 : System.exit(0);
        default : break;
      }
    }
  }

  private static void inizializzaInterfaccia( ) {
    // Imposta la finestra principale, un InputBox e un OutputBox
    finestra = new MainWindow("Gestione spedizioni");
    finestra.show();
    richiesta = new InputBox(finestra, "Richiesta Dati");
    uscita = new OutputBox(finestra, "Visualizzazione Risultati");
    uscita.setLocation(0,0);
    messaggio = new MessageBox(finestra);
    // Crea le schede per i destinatari e le spedizioni
    creaSchedaDestinatario();
    creaSchedaSpedizione();
    // Crea i menu: principale e ricerche avanzate
    creaMenuPrincipale();
    creaMenuRicerche();
  }

  private static void inserisciSpedizione() {
    // Inserisci il destinatario
    String[] campiDestinatario = schedaDestinatario.getInputs();
    if ((campiDestinatario != null) && controllaScheda(campiDestinatario)) {
      Destinatario d = new Destinatario(campiDestinatario[0],
                                        campiDestinatario[1],
                                        campiDestinatario[2],
                                        campiDestinatario[3]);
      // Inserisci gli altri campi della spedizione
      String[] campiSpedizione = schedaSpedizione.getInputs();
      if ((campiSpedizione != null) && controllaScheda(campiSpedizione)) {
        Spedizione s = new Spedizione(codiceProgressivo,
                                      Integer.parseInt(campiSpedizione[0]),
                                      Integer.parseInt(campiSpedizione[1]),
                                      d, campiSpedizione[2]);
        ++codiceProgressivo;
        gestioneSpedizioni.presaInCarico(s);
        messaggio.show("Inserimento effettuato ");
      }
    }
  }

  private static void cercaSpedizionePerCodice() {
    long codice = richiesta.getInteger("Inserisci il codice da cercare: ");
    Spedizione s = gestioneSpedizioni.cercaPerCodice(codice);
    if (s == null) {
      // La spedizione non č stata trovata
      messaggio.show("La spedizione con codice " + codice +
                     " non č tra quelle in carico ");
    } else {
      // La spedizione č ancora pendente
      uscita.clear();
      uscita.printLine("La seguente spedizione č stata trovata.");
      visualizzaSpedizione(uscita, s);
      uscita.show();
    }
  }

  private static void cercaSpedizioneAvanzato() {
    // Presenta all'utente il menu ricerca
    int[] data;
    boolean continua = true;
    GestioneSpedizioni estratto = null;
    while (continua) {
      int selection = menuRicerca.getSelectedIndex();
      switch (selection) {
        case 0 :
          String cittā = richiesta.getString("Inserisci cittā: ");
          estratto = gestioneSpedizioni.cercaSpedizioniPerCittā(cittā);
          break;
        case 1 :
          data = richiediData();
          estratto =
              gestioneSpedizioni.cercaSpedizioniStessaData(data[0], data[1]);
          break;
        case 2 :
          data = richiediData();
          estratto =
              gestioneSpedizioni.cercaSpedizioniScadute(data[0], data[1]);
          break;
        case 3 : continua = false;
        default : break;
      }
      if (estratto != null) {
        visualizzaSpedizioni(estratto);
      }
    }
  }

  private static void effettuaConsegna() {
    long codice =
        richiesta.getInteger("Codice della spedizione consegnata? ");
    Spedizione s = gestioneSpedizioni.consegnaEffettuata(codice);
    if (s == null) {
      // La spedizione non č stata trovata
      messaggio.show("La spedizione con codice " + codice +
                     " č giā stata consegnata");
    } else {
      uscita.clear();
      uscita.printLine("La seguente spedizione č stata consegnata.");
      visualizzaSpedizione(uscita, s);
      uscita.show();
    }
  }

  private static void visualizzaDestinatario(OutputBox ob, Destinatario d) {
    ob.printLine("Nome: " + d.restituisciNome());
    ob.printLine("Indirizzo: " + d.restituisciIndirizzo());
    ob.printLine("Cittā: " + d.restituisciCittā());
    ob.printLine("Telefono: " + d.restituisciCap());
  }

  private static void visualizzaSpedizione(OutputBox ob, Spedizione s) {
    ob.printLine("Codice: " + s.restituisciCodice());
    ob.printLine("Dati del destinatario:");
    visualizzaDestinatario(ob, s.restituisciDestinatario());
    ob.printLine("Data spedizione: " +
                 s.restituisciGiorno() + "/" + s.restituisciMese());
    ob.printLine("Descrizione: " + s.restituisciDescrizione());
  }

  private static void visualizzaSpedizioni(GestioneSpedizioni estratto) {
    uscita.clear();
    uscita.printLine("Le spedizioni richieste sono:");
    Spedizione s = estratto.inizio();
    while (s != estratto.fine()) {
      visualizzaSpedizione(uscita, s);
      s = estratto.prossima();
    }
    uscita.show();
  }

  private static int[] richiediData() {
    String[] etichetteData = {"Giorno", "Mese"};
    MultiInputBox dataBox = new MultiInputBox(finestra, etichetteData);
    String[] campiData = dataBox.getInputs();
    if ((campiData != null) &&
        (campiData[0].length() > 0) && (campiData[1].length() > 0)) {
      int[] data = new int[2];
      data[0] = Integer.parseInt(campiData[0]);
      data[1] = Integer.parseInt(campiData[1]);
      return data;
    } else {
      return null;
    }
  }

  private static boolean controllaScheda(String[] campi) {
    for (int i = 0; i < campi.length; i++) {
      if (campi[i].length() == 0){
        messaggio.show("Non hai compilato correttamente la scheda");
        return false;
      }
    }
    return true;
  }


  private static void creaSchedaDestinatario() {
    String[] etichetteDest = {"Nome", "Indirizzo", "Cittā", "CAP"};
    schedaDestinatario = new MultiInputBox(finestra, etichetteDest);
    schedaDestinatario.setTitle("Scheda Destinatario");
  }

  private static void creaSchedaSpedizione() {
    String[] etichetteSped = {"Giorno", "Mese", "Descrizione"};
    schedaSpedizione = new MultiInputBox(finestra, etichetteSped);
    schedaSpedizione.setTitle("Scheda Spedizione");
  }

  private static void creaMenuPrincipale() {
    String[] vociMenuPrincipale = {
      "Inserisci spedizione", "Cerca per codice",
      "Ricerche avanzate", "Segnala una consegna",
      "Termine operazioni"};
    menuPrincipale = new ListBox(finestra, "Menu Principale", true);
    for (int i = 0; i < vociMenuPrincipale.length; i++) {
      menuPrincipale.addItem(vociMenuPrincipale[i]);
    }
  }

  private static void creaMenuRicerche() {
    String[] vociMenuRicerca = {
      "Ricerca per cittā", "Ricerca per data di spedizione",
      "Ricerca spedizioni in ritardo", "Ritorna al menu principale" };
    menuRicerca = new ListBox(finestra, "Menu Ricerca", true);
    for (int i = 0; i < vociMenuRicerca.length; i++) {
      menuRicerca.addItem(vociMenuRicerca[i]);
    }
  }

}



InterfacciaSpedizioni.java
Created with JBuilder