Esercizio 28 – Implementazione di un portafoglio
- Novembre 03, 2010
- by
- Donatantonio
Implementare e testare una classe Purse come collezione di monete.
Una moneta è un’istanza di una classe Coin:
gli oggetti di Coin sono immutabili e hanno un nome (nome della moneta) e un valore (valore della moneta).
Deve essere possibile recuperare l’informazione contenuta in ogni oggetto Coin oltre che implementare i seguenti metodi:
- addCoin(Coin aCoin): aggiungere una moneta al portafoglio
- conteggio(String nomeCoin): conta il numero di monete dato un nome moneta
- getTotal(): restituisce il totale monete presenti nel portafoglio
- remove(Coin aCoin): rimuove una moneta di valore pari a a Coin se presente nella borsa
- find(Coin aCoin): restituisce l’indice di una moneta di valore pari a Coin (private)
Vediamo innanzitutto la semplice classe Coin.java:
public class Coin
{
double valore;
String nome;
// Metodo Costruttore Coin inizializzato con nome moneta e relativo valore
public Coin(double v, String n){
valore = v;
nome = n;
}
// Metodo che restituisce il valore della moneta
public double getValue(){
return valore;
}
// Metodo che restituisce il nome della moneta
public String getNome(){
return nome;
}
}
Quindi la classe che gestisce la collezzione di monete Purse.java:
import java.util.ArrayList;
public class Purse
{
private ArrayList<Coin> lista;
// Metodo Costruttore vuoto
public Purse(){
this.lista = new ArrayList<Coin>();
}
public void addCoin(Coin c){
lista.add(c);
}
// Metodo che restituisce il totale di monete presenti nel portafoglio
public void getTotal()
{
double totale = 0;
for(int i=0 ; i<lista.size(); i++)
{
Coin a = (Coin) lista.get(i);
double t = a.getValue();
totale = totale + t;
}
System.out.println(totale);
}
/* Metodo che conta il numero di monete presenti nel portafoglio
data una moneta
**/
public int conteggio(String nome)
{
int c = 0;
for(int i=0 ; i<lista.size(); i++)
{
Coin a = (Coin) lista.get(i);
String m = a.getNome();
if(m.equalsIgnoreCase(nome))
{
c++;
}
}
return c;
}
// Metodo che elimina una moneta dal portafolio
public String remove(Coin a)
{
String nome = a.getNome();
int i =0;
while (i < lista.size())
{
Coin b = (Coin) lista.get(i);
String v = b.getNome();
if(v.equalsIgnoreCase(nome))
{
lista.remove(i);
return "Moneta eliminata";
}
i++;
}
return "Moneta non presente";
}
// Metodo che verifica l'uguaglianza tra due monete
public boolean find(Coin a)
{
String nome = a.getNome();
int i =0;
while (i < lista.size())
{
Coin b = (Coin) lista.get(i);
String v = b.getNome();
if(v.equalsIgnoreCase(nome))
{
return true;
}
i++;
}
return false;
}
}
Infine una classe di test che permette all’utente di accedere, tramite un menu, alle funzioni di aggiunta moneta, rimozione moneta, stampa del saldo, conteggio e ricerca di monete.
La classe TestPurse.java:
import java.util.Scanner;
public class TestPurse {
public static void main(String[] args)
{
// Costruisco un oggetto Purse
Purse fabio = new Purse();
Scanner in = new Scanner(System.in);
String exit = "no";
// Visualizzo le varie procedure possibili
while (exit.equalsIgnoreCase("no"))
{
System.out.println(" *** MENU *** ");
System.out.println("1 - Aggiungere monete");
System.out.println("2 - Sottrarre monete");
System.out.println("3 - Cercare una moneta");
System.out.println("4 - Stampare il totale borsa");
System.out.println("5 - Esci");
int menu= in.nextInt();
String continua = "si";
String continua2 = "si";
// Aggiungo monete al portafoglio
if(menu == 1){
while (continua.equalsIgnoreCase("si")){
System.out.println("Quale moneta vuoi aggiungere alla borsa?");
System.out.println("1 - 1 Euro");
System.out.println("2 - 2 Euro");
System.out.println("3 - 50 Centesimi di Euro");
System.out.println("4 - 20 Centesimi di Euro");
int scelta = in.nextInt();
if(scelta == 1){
Coin moneta = new Coin(1,"Un Euro");
fabio.addCoin(moneta);
}
if(scelta == 2){
Coin moneta = new Coin(2,"Due Euro");
fabio.addCoin(moneta);
}
if(scelta == 3){
Coin moneta = new Coin(0.50,"50 Centesimi");
fabio.addCoin(moneta);
}
if(scelta == 4){
Coin moneta = new Coin(0.20,"20 Centesimi");
fabio.addCoin(moneta);
}
// Stampo a video il contenuto del portafoglio
System.out.print("Nella tuo portafoglio è presente questa somma: ");
fabio.getTotal();
System.out.print("Vuoi continuare a inserire monete?");
continua = in.next();
}
}
// Elimino monete dal portafoglio
if(menu == 2){
while ( continua2.equalsIgnoreCase("si")){
System.out.println("Quale moneta vuoi eliminare dalla borsa?");
System.out.println("1 - 1 Euro");
System.out.println("2 - 2 Euro");
System.out.println("3 - 50 Centesimi di Euro");
System.out.println("4 - 20 Centesimi di Euro");
int scelta = in.nextInt();
if(scelta == 1){
Coin daEliminare = new Coin(1,"Un Euro");
System.out.println(fabio.remove(daEliminare));
}
if(scelta == 2){
Coin daEliminare = new Coin(2,"Due Euro");
System.out.println(fabio.remove(daEliminare));
}
if(scelta == 3){
Coin daEliminare = new Coin(0.50,"50 centesimi");
System.out.println(fabio.remove(daEliminare));
}
if(scelta == 4){
Coin daEliminare = new Coin(0.20,"20 centesimi");
System.out.println(fabio.remove(daEliminare));
}
// Stampo a video il contenuto del portafoglio
System.out.print("Nella tua borsa è presente questa somma: ");
fabio.getTotal();
System.out.print("Vuoi continuare a eliminare monete?");
continua2 = in.next();
}
}
// Cerco una moneta nel portafoglio
if (menu == 3){
System.out.println("Quale moneta vuoi cercare nella borsa?");
System.out.println("1 - Un Euro");
System.out.println("2 - Due Euro");
System.out.println("3 - 50 Centesimi");
System.out.println("4 - 20 Centesimi");
int scelta = in.nextInt();
if(scelta == 1){
Coin daCercare = new Coin(1,"Un Euro");
System.out.println(fabio.find(daCercare));
}
if(scelta == 2){
Coin daCercare = new Coin(2,"Due Euro");
System.out.println(fabio.find(daCercare));
}
if(scelta == 3){
Coin daCercare = new Coin(0.50,"50 centesimi");
System.out.println(fabio.find(daCercare));
}
if(scelta == 4){
Coin daCercare = new Coin(0.20,"20 centesimi");
System.out.println(fabio.find(daCercare));
}
}
// Stampo a video il contenuto del portafoglio
if(menu == 4){
System.out.print("Il totale della borsa è : ");
fabio.getTotal();
}
// Termino esecuzione
if (menu == 5){
exit = "si";
}
}
}
}
Cliccando qui è possibile scaricare l’eseguibile.

