La classe TestApp nel package example contiene degli esempi e fornisce i principali casi di test (ma non tutti). Le eccezioni sono lanciate tramite la classe OException; è richiesta la verifica solo delle condizioni esplicitamente specificate e non di tutte quelle possibili. Se un metodo lancia un'eccezione non viene fatta nessuna modifica ai dati presenti nella classe principale. Suggerimento: guardare la classe TestApp per comprendere i requisiti dei metodi; dopo aver implementato ciascun metodo eseguire i test in TestApp per verificare l'esito.
LA documentazione JDK è disponibile all'indirizzo: https://oop.polito.it/api/.
Il metodo int getNumberOfProducts (String productType) throws OException restituisce il numero di prodotti di un dato tipo; lancia un'eccezione se il tipo di prodotto non esiste.
Il metodo groupingProductTypeByPrices() raggruppa i tipi dei prodotti per prezzo (crescente). I tipi con lo stesso prezzo sono listati un ordine alfabetico.
Gli ordini dei clienti possono essere inseriti tramite il metodo int customerOrder(String customer, String ptpn, int discount) throws OException
che ha tre parametri: il cliente, i prodotti con le relative quantità, e lo sconto richiesto (eventualmente anche 0).
Un esempio di uso nella classe TestApp è il seguente: customerOrder("ctr1", "tableX:2 loungeChair:1", 20);
questa chiamata inserisce un ordine del cliente ctr1 per due tavoli (tableX è il tipo di prodotto) ed una
loungeChair, chiedendo uno sconto di 20.
La stringa di specifica ha due sottostringhe separate da uno spazio, ogni sottostringa è formata dal tipo di prodotto e dal numero di
oggetti, separati da :.
Il risultato è il prezzo totale, dato dalla somma dei prezzi di tutti i prodotti meno lo sconto.
Possibili casi problematici:
1) se non tutte le quantità di prodtti sono disponibili il risultato è 0 e il cliente non acquista nulla.
2) se lo sconto richiesto eccede lo sconto disponibile per il cliente, viene lanciata un'eccezione.
Se non ci sono problemi, il numero di prodotti è ridotto del numero di prodotti acquistati tramite l'ordine.
Inoltre lo sconto disponibile per il cliente è decrementato dello sconto richiesto;
lo sconto disponibile è quello che potrà essere usato nelle successive chiamta del metodo.
Il metodo int getDiscountAvailable (String customer) restituisce lo sconto disponibile per un cliente (può essere 0).
Il metodo int getScoreFromProductType (String customer, String productType) throws OException mostra il punteggio asegnato da un cliente al prodotto dato. Viene lanciata un'eccezione se il cliente non ha mai assegnato un punteggio al tipo di prodotto.
Il metodo groupingCustomersByScores(String productType) raggruppa il clienti per punteggi crescenti assegnati al tipo di prodotto dato. I clienti con pari punteggio sono in una lista ordinata alfabeticamente.
Il metodo largestExpenseForCustomer () fornisce la maggior spesa in un singolo ordine per ciascun cliente (in ordine alfabetico). I clienti che non hanno effettuato ordini non sono riportati.