Macchinette

Progetto di Programmazione II per l'appello di Aprile 2016

Consegna

L'appello di Aprile è basato su un progetto che va realizzato in gruppi di due o tre persone. Eccezionalmente sono ammessi gruppi di più di tre persone o di meno di due persone (sono sconsigliati i gruppi con meno di una persona); questi casi richiedono però un'autorizzazione ottenuta scrivendo al docente una e-mail con subject "Progetto di Programmazione II: formazione gruppi".

Se siete interessati a sostenere l'esame a Febbraio procedete come segue:

Il vostro elaborato deve consistere di:

Come vedrete dal testo, lasciamo una quasi completa libertà di decisione su quali classi si debbano realizzare, quale sia la loro organizzazione gerarchica ecc. Uno degli aspetti che verranno valutati sarà esattamente la vostra capacità di organizzare in modo appropriato il materiale.

Suggeriamo fortemente che i sorgenti siano ben documentati (usando javadoc) e che ci siano uno o più classi eseguibili da utilizzare come esempio d'uso.

Testo del progetto

Dovete realizzare un progetto che riguarda delle venditrici automatiche (macchinette). Ogni macchinetta vende diversi prodotti. Ogni prodotto ha un nome (e.g., "Cracker salati Gnagnaus") e un prezzo unitario (e.g., EUR 1.20). I prodotti possono appartenere a diverse categorie, ad esempio snack, bevande in bottiglia, bevande in lattina o bevande calde. Per la categoria bevande calde l'utente all'acquisto può anche selezionare la quantità di zucchero. Ogni prodotto ha inoltre un contenuto calorico (che è fisso per alcuni prodotti, mentre cambia a seconda della quantità di zucchero per le bevande calde).

Una macchinetta può essere rifornita di diversi prodotti, e ogni volta che un utente effettua un acquisto un'unità del prodotto corrispondente viene tolta. Alcuni dei prodotti inizialmente inseriti nella macchinetta possono quindi esaurirsi.

La macchinetta ha inoltre una opportuna funzionalità chiamata "Poveraccio": un utente inserisce la quantità di denaro a sua disposizione e la macchinetta gli fornisce dei prodotti di costo complessivo non superiore alla cifra inserita (gli darà eventualmente un resto per la parte non utilizzata) e aventi un contenuto calorico massimo possibile. Siccome risolvere questo problema in modo esatto è difficile, la macchinetta adotta una tecnica greedy: