GestioneCalcolatore.java
Created with JBuilder
import javabook.*;

class GestioneCalcolatore {
  // Oggetti per l'IO
  private static MainWindow finestra;
  private static InputBox richiestaDati;
  private static OutputBox uscitaDati;
  // Calcolatore binario
  private static CalcolatoreBinario calcolatore;

  public static void main(String[] args) {
    inizializzaIO();
    calcolatore = new CalcolatoreBinario();

    String espressione = "";
    while (!espressione.equalsIgnoreCase("STOP")) {
      espressione = richiestaDati.getString("Operazione: ");
      espressione = espressione.trim();
      if (espressione.equalsIgnoreCase("REGISTRA")) {
        calcolatore.mettiInMemoria();
        uscitaDati.printLine("Risultato memorizzato.");
      } else if (espressione.equalsIgnoreCase("RICHIAMA")) {
        uscitaDati.printLine("Memoria: " + calcolatore.richiamaMemoria());
      } else if (espressione.equalsIgnoreCase("CANCELLA")) {
        calcolatore.cancellaMemoria();
        uscitaDati.printLine("Memoria cancellata.");
      } else if (espressione.equalsIgnoreCase("SOMMA")) {
        calcolatore.sommaInMemoria();
        uscitaDati.printLine("Risultato sommato alla memoria.");
      } else if (!espressione.equalsIgnoreCase("STOP")) {
        // Verifichiamo che si tratti di un'operazione valida e, nel caso,
        // eseguiamo l'operazione utilizzando il calcolatore
        uscitaDati.printLine(verificaECalcola(espressione));
      }
    }

    // Termina il programma e ritorna il controllo al sistema operativo
    System.exit(0);
  }

  private static String verificaECalcola(String espressione) {
    // Cerca il simbolo corrispondente all'operazione aritmetica
    int lunghezzaEspressione = espressione.length();
    for (int i = 0; i < lunghezzaEspressione; i++) {
      char c = espressione.charAt(i);
      if (c == '+' || c == '-' || c == '*' || c == '/') {
        // Estraggo gli operandi
        String op1 = espressione.substring(0, i);
        String op2 = espressione.substring(i + 1);
        return eseguiOperazione(op1, op2, c);
      }
    }
    // Non è stato trovato alcun operatore, quindi c'è un errore
    return ("Errore di sintassi nell'espressione: " + espressione);
  }

  private static String eseguiOperazione(String op1, String op2, char c) {
    String risultato;
    switch (c) {
      case '+' : risultato = calcolatore.somma(op1, op2); break;
      case '-' : risultato = calcolatore.sottrai(op1, op2); break;
      case '*' : risultato = calcolatore.moltiplica(op1, op2); break;
      case '/' : risultato = calcolatore.dividi(op1, op2); break;
      default : risultato = null;
    }
    if (risultato != null) {
      return ("Il risultato dell'operazione è: " + risultato);
    } else {
      return ("Errore nel calcolo di: " + op1 + c + op2);
    }
  }

  // Questo metodo crea gli oggetti necessari per gli IO
  // e li memorizza nei relativi attributi. Rende inoltre visibile
  // la finestra dell'applicazione e la finestra dei risultati
  private static void inizializzaIO() {
    // Dichiaro e creo gli oggetti necessari per l'IO
    finestra = new MainWindow("Elaborazione testi");
    richiestaDati = new InputBox(finestra, "Inserimento dati");
    uscitaDati = new OutputBox(finestra, "Risultati");

    // Imposta la visualizzazione di uscitaDati in modo da non
    // creare sovrapposizione con richiestaDati
    uscitaDati.setLocation(0,0);

    // Visualizza un messaggio di aiuto nella finestra dei risultati
    uscitaDati.printLine("--- Calcolatore Binario ---");
    uscitaDati.printLine("Il calcolatore accetta i seguenti ingressi:");
    uscitaDati.printLine("- <num1> <op> <num2> per eseguire <op> tra\n" +
                         "  <num1> e <num2> (<op> a scelta tra +,-,*,/)");
    uscitaDati.printLine("- REGISTRA per memorizzare l'ultimo risultato");
    uscitaDati.printLine("- RICHIAMA per richiamare la memoria");
    uscitaDati.printLine("- CANCELLA per cancellare la memoria");
    uscitaDati.printLine("- SOMMA per sommare l'ultimo risultato in memoria");
    uscitaDati.printLine("- STOP per terminare il programma\n");
    uscitaDati.show();
  }

}

GestioneCalcolatore.java
Created with JBuilder