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.