Esame di Programmazione 1 - 9CFU
Docente: Vittorini
Università di Napoli Federico II
Corso di Laurea in Ingegneria Informatica
Prova pratica del 18 giugno 2012
Durata della prova: 2h
Testo della prova
Si realizzi in C++ la gerarchia Alimentari, ProdottiFreschi.
La classe Alimentari è una classe astratta, e prevede le seguenti variabili membro:
- Codice: codice identificativo del prodotto, stringa allocata dinamicamente (char *)
- Descrizione: descrizione del prodotto, stringa allocata dinamicamente (char *)
- MeseScadenza: mese di scadenza del prodotto, numero intero.
- Costo: costo unitario espresso in euro (float).
La classe ProdottiFreschi aggiunge alla classe Alimentari la variabile membro:
- DataConfezione: data di confezione del prodotto, stringa allocata dinamicamente (char *)
Entrambe le classi devono prevedere gli opportuni costruttori, distruttori e devono gestire correttamente l'estensione dinamica attraverso le opportune funzionalità. Devono inoltre fornire le funzioni membro stampa_Dati e memorizza_Dati che consentono rispettivamente di visualizzare e stampare su file di tipo testo i dati relativi all'oggetto.
Le classi prevedono inoltre la funzionalità Offerta, funzione membro che calcola il prezzo di un prodotto in offerta in base al tipo di prodotto alimentare. Per la classe ProdottiFreschi, Offerta è calcolata in base ad uno sconto del 20% sul costo del prodotto se il mese di scadenza è dicembre.
Si realizzi quindi un elenco di ProdottiFreschi, mediante una classe Lista, ricorrendo ad una implementazione linkata (a puntatori). La classe ElencoFreschi fornisce le seguenti funzionalità:
- Inserimento: in testa, deve avvenire assicurando l'univocità del codice nella lista, nel caso si tenti di inserire un codice già esistente la funzione lancia una eccezione di tipo Duplicato (fornita dallo studente) che porta con sé l'informazione relativa al numero di codice che ha generato l'eccezione.
- Ricerca di un prodotto per codice.
- Visualizzazione dell'elenco.
- Stampa su file dell'elenco.
- Eliminazione di un codice dato.
- Empty e full.
Si strutturi il codice secondo le appropriate tecniche di programmazione modulare illustrate durante il corso e nei libri di testo adottati.