GestioneStudenti.java
Created with JBuilder
import javabook.*;

class GestioneStudenti {
  // Attributi costanti
  private static final String[] VOCE_MENU =
  { "Inserimento studente",
    "Informazioni studente",
    "Ricerca (per matricola)",
    "Ricerca (per corso di Laurea)",
    "Termina" };
  private static final int MAX_ESAMI = 60;

  // Attributi variabili
  private static AnagraficaStudenti anagraficaStudenti;
  private static MainWindow         finestra;

  public static void main(String[] args)
  {
    // Crea e visualizza la finestra dell'applicazione
    finestra = new MainWindow("Gestione Studenti");
    finestra.show();

    // Inizializza l'anagrafica studenti
    InputBox richiediDati = new InputBox(finestra, "Inizializzazione");
    int numeroMaxStudenti =
        richiediDati.getInteger("Numero massimo di studenti?");
    anagraficaStudenti = new AnagraficaStudenti(numeroMaxStudenti);

    // 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();

      if (scelta != null) {
        // Gestisce la scelta dell'utente
        if (scelta.equals(VOCE_MENU[0])) {
          aggiungiStudente();
        } else if (scelta.equals(VOCE_MENU[1])) {
          informazioniStudente();
        } else if (scelta.equals(VOCE_MENU[2])) {
          ricercaStudentePerMatricola();
        } else if (scelta.equals(VOCE_MENU[3])) {
          ricercaStudentiPerCorso();
        } else {
          ripeti = false;
        }
      }
    }
    System.exit(0);
  }

  // Metodo per gestire IO di aggiunta studente
  private static void aggiungiStudente()
  {
    // Creazione della maschera di ingresso
    String[] etichette =
    { "Nome", "Cognome", "Matricola", "Corso di Laurea" };
    MultiInputBox richiediStudente =
        new MultiInputBox(finestra, etichette);

    // Richiesta e gestione dati
    String[] datiInseriti = richiediStudente.getInputs();
    int matricola = Integer.parseInt(datiInseriti[2]);

    // Creazione di un nuovo studente e inserimento nell'anagrafica
    Studente nuovoStudente =
        new Studente(datiInseriti[0],
        datiInseriti[1],
        matricola,
        datiInseriti[3],
        MAX_ESAMI);
    boolean ok = anagraficaStudenti.aggiungi(nuovoStudente);
    MessageBox mb = new MessageBox(finestra);
    if (ok) {
      mb.show("Inserimento effettuato!");
    } else {
      mb.show("Capacità dell'anagrafica esaurita!");
    }
  }

  // Metodo per gestire IO relativo alle informazioni sullo studente
  private static void informazioniStudente()
  {
    // Le voci del menu studente
    final String[] MENU_STUDENTE =
    { "Aggiungi Esame",
      "Calcolo crediti conseguiti",
      "Calcolo media esami sostenuti",
      "Termina" };

    // Richiede lo studente di cui modificare i dati
    Studente studente = ricercaStudentePerMatricola();

    if (studente != null) {
      boolean ripeti = true;
      while (ripeti) {
        // Crea e visualizza le possibili scelte
        ListBox menuStudente = new ListBox(finestra, "Menu Studente");
        for (int i = 0; i < MENU_STUDENTE.length; ++i) {
          menuStudente.addItem(MENU_STUDENTE[i]);
        }
        String scelta = menuStudente.getSelectedItem();

        // Gestisce la scelta dell'utente
        if (scelta != null) {
          if (scelta.equals(MENU_STUDENTE[0])) {
            richiediDatiEsame(studente);
          } else if (scelta.equals(MENU_STUDENTE[1])) {
            MessageBox mb = new MessageBox(finestra);
            mb.show("Il totale dei crediti conseguiti fino ad ora è " +
                    studente.calcolaTotaleCrediti());
          } else if (scelta.equals(MENU_STUDENTE[2])) {
            MessageBox mb = new MessageBox(finestra);
            mb.show("La media degli esami sostenuti è " +
                    studente.calcolaMediaEsami());
          } else {
            ripeti = false;
          }
        }
      }
    }
  }

  // Metodo per gestire IO di informazioni relative al singolo esame
  private static void richiediDatiEsame(Studente studente)
  {
    // Creazione della maschera di ingresso
    String[] etichette =
    { "Denominazione", "Crediti", "Votazione" };
    MultiInputBox richiediEsame =
        new MultiInputBox(finestra, etichette);

    // Richiesta e gestione dati
    String[] datiInseriti = richiediEsame.getInputs();
    int crediti = Integer.parseInt(datiInseriti[1]);
    int voto = Integer.parseInt(datiInseriti[2]);

    // Creazione di un nuovo studente e inserimento nell'anagrafica
    Esame nuovoEsame =
        new Esame(datiInseriti[0], crediti, voto);
    boolean ok = studente.aggiungiEsame(nuovoEsame);
    MessageBox mb = new MessageBox(finestra);
    if (ok) {
      mb.show("Inserimento effettuato!");
    } else {
      mb.show("Capacità del piano di studi esaurita!");
    }
  }

  // Metodo per gestire IO di ricerca per matricola
  // Restituisce anche lo studente trovato, o null nel
  // caso che lo studente non sia nell'anagrafica
  private static Studente ricercaStudentePerMatricola()
  {
    // Creazione della maschera di ingresso
    InputBox richiediMatricola =
        new InputBox(finestra, "Ricerca studente");

    // Richiesta dati
    int matricola = richiediMatricola.getInteger("Matricola dello studente?");

    // Ricerca dello studente nell'anagrafica
    Studente studente = anagraficaStudenti.cercaPerMatricola(matricola);
    OutputBox ob =
        new OutputBox(finestra, "Risultato della ricerca");
    if (studente != null) {
      visualizzaDatiStudente(studente, ob);
    }else {
      ob.printLine("Lo studente con matricola " + matricola +
                   " non è presente nell'anagrafica studenti!");
    }
    ob.show();
    ob.waitUntilClose();
    return studente;
  }

  // Metodo per la ricerca di studenti afferenti ad un corso di laurea
  private static void ricercaStudentiPerCorso()
  {
    // Creazione della maschera di ingresso
    InputBox richiediCorso =
        new InputBox(finestra, "Ricerca studenti per corso");

    // Richiesta dati
    String corso = richiediCorso.getString("Corso di Laurea?");

    // Estrazione delle auto da revisionare
    AnagraficaStudenti studentiDelCorso =
        anagraficaStudenti.cercaStudentiDelCorso(corso);

    // Creazione della maschera di uscita
    OutputBox uscitaDati =
        new OutputBox(finestra, "Studenti del corso " + corso);
    if (studentiDelCorso.restituisciNumeroStudenti() > 0) {
      studentiDelCorso.iniziaScansione();
      Studente studente = studentiDelCorso.prossimoStudente();
      while (studente != null) {
        visualizzaDatiStudente(studente, uscitaDati);
        studente = studentiDelCorso.prossimoStudente();
      }
    } else {
      uscitaDati.printLine("Non vi sono studenti in questo corso di laurea");
    }
    uscitaDati.show();
    uscitaDati.waitUntilClose();
  }

  // Metodo per visualizzare i dati di un automezzo
  private static void visualizzaDatiStudente(
      Studente s,
      OutputBox ob)
  {
    ob.printLine("Nome: " + s.restituisciNome());
    ob.printLine("Cognome: " + s.restituisciCognome());
    ob.printLine("Matricola: " + s.restituisciMatricola());
    ob.printLine("Corso: " + s.restituisciCorso());
    ob.printLine("Esami superati: ");
  }

}


GestioneStudenti.java
Created with JBuilder