DistributoreAutomatico.java
Created with JBuilder |
class DistributoreAutomatico {
//////////////////////////////////////////////////////////////////////////
// Attributi costanti
//////////////////////////////////////////////////////////////////////////
// Le bevande disponibili
public static final int CHINOTTO = 0;
public static final int ARANCIATA = 1;
public static final int THE_FREDDO = 2;
// Le monete inseribili
public static final int CINQUE = 5;
public static final int DIECI = 10;
public static final int CINQUANTA = 50;
// Il costo di una bevanda
public static final int COSTO_BEVANDA = 55;
// Segnalazione di errata chiave elettronica
public static final int ERRORE = -1;
//////////////////////////////////////////////////////////////////////////
// Attributi variabili comuni a tutte le istanze
//////////////////////////////////////////////////////////////////////////
// La somma totale contenuta nelle casse
// di tutti i distributori (euro e centesimi di euro)
private static int introitoEuro = 0;
private static int introitoCentesimi = 0;
//////////////////////////////////////////////////////////////////////////
// Attributi dell'oggetto distributore
//////////////////////////////////////////////////////////////////////////
// Le quantità disponibili per le varie bibite
private int numeroChinotti;
private int numeroAranciate;
private int numeroThe;
// Il credito utilizzabile dall'utente (in centesimi)
private int creditoUtente;
// La somma totale contenuta nel distributore (in centesimi)
private int introitoDistributore;
// Chiave elettronica di accesso al distributore (per la
// ricarica delle bevande e l'interrogazione dell'introito)
private int chiaveElettronica;
//////////////////////////////////////////////////////////////////////////
// Costruttori
//////////////////////////////////////////////////////////////////////////
// Questo costruttore consente di impostare una chiave elettronica
// per l'autorizzazione alle operazioni di ricarica e interrogazione
// del saldo del distributore
public DistributoreAutomatico(int chiaveElettronica) {
numeroChinotti = numeroAranciate = numeroThe = 0;
creditoUtente = 0;
introitoDistributore = 0;
this.chiaveElettronica = chiaveElettronica;
}
//////////////////////////////////////////////////////////////////////////
// Interfaccia per l'utente
//////////////////////////////////////////////////////////////////////////
// Metodo per inserire monete
// Restituisce false se la moneta inserita non è accettata
public boolean inserisciMonete(int moneta, int quantità) {
switch (moneta) {
case CINQUE :
case DIECI :
case CINQUANTA :
creditoUtente += moneta * quantità;
return true;
default : return false;
}
}
// Restituzione delle monete inserite: il credito viene azzerato
public void restituisciMonete() {
creditoUtente = 0;
}
// Metodo per ottenere una bevanda
// Restituisce false se il credito non è sufficiente, se la
// selezione della bevanda è errata, oppure se la bevanda
// selezionata è esaurita; true altrimenti
public boolean richiediBevanda(int bevanda) {
if (creditoUtente < COSTO_BEVANDA) {
// Le monete inserite non sono sufficienti a coprire il costo
return false;
} else {
// Le monete inserite coprono il costo, quindi la
// quantità della bevanda selezionata diminuisce di 1
switch (bevanda) {
case CHINOTTO :
if (numeroChinotti > 0) {
--numeroChinotti; break;
} else {
// I chinotti sono esauriti
return false;
}
case ARANCIATA :
if (numeroAranciate > 0) {
--numeroAranciate; break;
} else {
// Le aranciate sono esaurite
return false;
}
case THE_FREDDO :
if (numeroThe > 0) {
--numeroThe; break;
} else {
// I the sono esauriti
return false;
}
default : return false;
}
// La bevanda è stata selezionata correttamente
// quindi è necessario aggiornare il credito e l'introito
creditoUtente -= COSTO_BEVANDA;
aggiornaIncasso();
return true;
}
}
//////////////////////////////////////////////////////////////////////////
// Interfaccia per la ditta di servizio (protetta con chiave di accesso)
//////////////////////////////////////////////////////////////////////////
// Metodo per ricaricare il distributore
// Restituisce true se la ricarica è stata eseguita correttamente
// e false nel caso in cui (i) la bevanda non sia stata specificata
// correttamente o (ii) la chiaveElettronica non sia corretta
public boolean ricarica(int chiaveElettronica, int bevanda, int quantità) {
if (chiaveElettronica == this.chiaveElettronica) {
switch (bevanda) {
case CHINOTTO : numeroChinotti += quantità; return true;
case ARANCIATA : numeroAranciate += quantità; return true;
case THE_FREDDO : numeroThe += quantità; return true;
default : return false;
}
} else {
return false;
}
}
// Metodo per interrogare l'incasso del distributore (in centesimi)
// Restituisce ERRORE se la chiave elettronica inserita è scorretta
public int richiediIntroito(int chiaveElettronica) {
if (chiaveElettronica == this.chiaveElettronica) {
return introitoDistributore;
} else {
return ERRORE;
}
}
// Metodo per prelevare l'introito del distributore
// Restituisce ERRORE se la chiave elettronica inserita è scorretta
public int prelevaIntroito(int chiaveElettronica) {
if (chiaveElettronica == this.chiaveElettronica) {
int somma = introitoDistributore + creditoUtente;
introitoDistributore = creditoUtente = 0;
return somma;
} else {
return ERRORE;
}
}
// Metodo per interrogare l'introito totale dei distributori
// Per avere tale importo è sufficiente conoscere la chiave
// elettronica di un solo distributore
// Restituisce ERRORE se la chiave di accesso è scorretta
public double richiediIntroitoTotale() {
if (chiaveElettronica == this.chiaveElettronica) {
return ((double)introitoEuro +
(double)introitoCentesimi / (double)100);
} else {
return ERRORE;
}
}
//////////////////////////////////////////////////////////////////////////
// Metodi private
//////////////////////////////////////////////////////////////////////////
private void aggiornaIncasso() {
// Aggiorna la cassa del distributore (in centesimi)
introitoDistributore += COSTO_BEVANDA;
// Aggiorna l'introito complessivo dei distributori
introitoCentesimi += COSTO_BEVANDA;
if (introitoCentesimi > 100) {
introitoCentesimi -= 100;
++introitoEuro;
}
}
}
DistributoreAutomatico.java
Created with JBuilder |