Esercizio 2
Crea un programma per la gestione di un controcorrente gestito dalla classe CC. Il programma deve essere in grado di effettuare versamenti, prelievi, di restituire il saldo e di effettuare la lista degli ultimi 5 movimenti .
In questo programma vengono introdotti alcuni accorgimenti,
in considerazione delle varie operazioni I/O previste. Prima di tutto viene
creato un menů generale stile 'bancomat' : switch (ch) {
v-Versamento
p-Prelievo
l-Lista movimenti
s-Saldo
x-Exit
a secondo dell'operazione da effettuare bisognerŕ premere
il tasto corrispondente l'input viene affidato ad una stringa s di ingresso
he viene commutata subito in minuscolo:
s=( h.readLine() ).toLowerCase();
di questa stringa preleviamo il primo carattere:
ch = s.charAt(0);
il carattere ch rappresenta,dunque,l'opzione che viene in seguito valutata
da un costrutto switch() .
case 'v':
System.out.print("somma da versare:");
somma=Integer.parseInt(h.readLine().trim());
c.v(somma);
break;
case 'p':
System.out.print("somma da prelevare:");
somma=Integer.parseInt(h.readLine().trim());
c.p(somma);
break;
case 'l': c.l(); break;
case 's': System.out.println(c.s()); break;
case 'x': System.out.println("EXIT"); break;
default: System.out.println("selezione non valida");
break;
}//fine switch
Nel caso di versamento o prelievo, viene acquisita la somma corrispondente
e passata ai metodi p(int op) e v(int
op) dell'oggetto c istanziato di classe CC.
L'oggetto c di classe CC č dotato
di pochi attributi:
private int saldo,i;
private int T[] = new int[5];
La variabile i, viene usata come contatore, saldo
č ovviamente il saldo del conto corrente, il vettore T
deve tenere memoria delle ultime cinque operazioni di prelievo o versamento.
La classe CC non č dotata di costruttore per cui all'atto della creazione
dell'oggetto c tutti questi attributi numerici, vengono impostati a 0.
L'operazione di versamento eseguito dal metodo v(int op)
prevede di incrementare il saldo della somma inserita, gli elementi contenuti
nel vettore eseguono uno scorrimento verso sinistra e l'ultima somma versata
viene inserita nell'ultima posizione a destra del vettore.
public void v(int op){
saldo+=op;
for(i=0;i < T.length-1;i++)T[i]=T[i+1];
T[T.length-1]=op;
}//fine metodo v
Anche l'operazione di prelievo eseguito dal metodo p(int
op) esegue delle operazioni analoghe:il saldo viene decrementato
della somma immessa, la stessa somma (prelevata) viene inserita nell'ultima
posizione a destra del vettore con segno negativo, dopo che il vettore ha
subito uno scorrimento verso sinistra di una posizione.
class contocorrente{
public static void main (String args []) throws IOException {
InputStreamReader input=new InputStreamReader(System.in); BufferedReader h= new BufferedReader(input);
String s;
char ch;
int somma;
CC c = new CC();
do{
System.out.println("v-Versamento");
System.out.println("p-Prelievo");
System.out.println("l-Lista movimenti");
System.out.println("s-Saldo");
System.out.println("x-Exit");
s=(h.readLine()).toLowerCase();
ch = s.charAt(0);
switch (ch) {
case 'v':
System.out.print("somma da versare:"); somma=Integer.parseInt(h.readLine().trim());
c.v(somma);
break;
case 'p':
System.out.print("somma da prelevare:"); somma=Integer.parseInt(h.readLine().trim());
c.p(somma);
break;
case 'l': c.l(); break;
case 's': System.out.println(c.s()); break;
case 'x': System.out.println("EXIT"); break;
default: System.out.println("selezione non valida"); break;
}//fine switch
}while(ch!='x');
}//fine main
}// fine classe main
class CC{
private int saldo,i;
private int T[] = new int[5];
public void v(int op){
saldo+=op;
for(i=0;i < T.length-1;i++)T[i]=T[i+1];
T[T.length-1]=op;
}//fine metodo v
public void p(int op){
saldo-=op;
for(i=0;i < T.length-1;i++)T[i]=T[i+1];
T[T.length-1]=-op;
}//fine metodo p
public int s(){return saldo; }
public void l(){
for(i=0;i < T.length;i++)
if(T[i]!=0){
if(T[i] > 0)System.out.println("versamento:"+T[i]);
else System.out.println("prelievo :"+T[i]);
}
}//fine metodo l
}// fine classe CC