class Cliente { // Attributi costanti public static final int NUMERO_INIZIALE_ARTICOLI = 1; public static final double PERCENTUALE_VENDITORE = 0.65; // Attributi variabili private String nominativo; private String codiceFiscale; private double importoRealizzato; private Articolo[] elencoArticoli; private int numeroArticoli; // Costruttore public Cliente( String n, String cf ) { nominativo = n; codiceFiscale = cf; importoRealizzato = 0.0; elencoArticoli = new Articolo[NUMERO_INIZIALE_ARTICOLI]; numeroArticoli = 0; } // Metodi di richiesta public String restituisciNominativo() { return nominativo; } public String restituisciCodiceFiscale() { return codiceFiscale; } public double restituisciImportoRealizzato() { return importoRealizzato; } // Messa in vendita di un articolo public void mettiInVendita( Articolo a ) { if (numeroArticoli == elencoArticoli.length) { espandiElenco(); } elencoArticoli[numeroArticoli++] = a; } // Ritiro dalla vendita di un articolo public boolean ritiraDallaVendita( Articolo a ) { int pos = cercaPosizioneArticolo(a); if (pos >= 0) { elencoArticoli[pos] = elencoArticoli[numeroArticoli - 1]; --numeroArticoli; return true; } else { return false; } } // Vendita di un articolo public boolean concludiVendita( Articolo a ) { if (ritiraDallaVendita(a)) { importoRealizzato += a.restituisciPrezzo() * PERCENTUALE_VENDITORE; return true; } else { return false; } } // Calcolo dell'importo complessivo degli articoli in vendita public double calcolaValoreComplessivoVendite() { double r = 0.0; for (int i = 0; i < numeroArticoli; ++i) { r += elencoArticoli[i].restituisciPrezzo(); } return r; } // Metodi privati private void espandiElenco() { Articolo[] tmp = new Articolo[numeroArticoli * 2]; for (int i = 0; i < numeroArticoli; ++i) { tmp[i] = elencoArticoli[i]; } elencoArticoli = tmp; } private int cercaPosizioneArticolo( Articolo a ) { for (int i = 0; i < numeroArticoli; i++) { int ni = elencoArticoli[i].restituisciNumeroInventario(); if (ni == a.restituisciNumeroInventario()) { return i; } } return -1; } }