edutecnica

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' :
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() .

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

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.

import java.io.*;
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