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 |