Progetto per l'orale del 12.02.02
Rubrica Compleanni
Progettare l'architettura ad oggetti ed implementare in C++ una rubrica personale
con le seguenti caratteristiche:
- i nominativi inseriti nella rubrica sono istanze di una classe
- ciascun nominativo è in gradi di indicare il proprio ordine di inserimento
rispetto al totale dei nominativi presenti nel sistema (*)
- per ogni nominativo, oltre alle usuali informazioni anagrafiche, viene conservata
la data di nascita
- i nominativi sono tenuti in ordine alfabetico crescente di cognome
- il sistema è in grado di produrre un elenco dei nominativi che, a partire
da "oggi", compieranno gli anni nei prossimi X giorni - per ciascuno viene
fornito nome, cognome, età al compleanno, distanza del compleanno da oggi
(in giorni)
- se N1 ed N2 sono due nominativi, l'operatore < (>) ritorna true se N1 è
più giovane (vecchio) di N2 - questi operatori tengono in considerazione
solamente l'età in anni alla data odierna
- se N1 ed N2 sono due nominativi, l'operatore << (>>) ritorna true se N1 è
più giovane (vecchio) di N2 - questi operatori tengono in considerazione
l'età precisa (in giorni) alla data odierna
- il sistema deve consentire inserimento e rimozione di nominativi
- il sistema deve salvare i dati su file al termine dell'esecuzione e leggerli all'avvio
- il sistema deve estrarre un nominativo a partire da nome e cognome e visualizzarne i dati
- eseguendo il programma devono essere opportunamente dimostrate tutte le caratteristiche
sopra elencate
Facoltativo:
Gestire input ed output dei nominativi mediante ridefinizione degli operatori di iostream
(<< e >>, vedi "Non-member operators", capitolo 12, Eckel)
Commenti e suggerimenti:
- utilizzare una corretta architettura ad oggetti
- utilizzare allocazione dinamica della memoria (dove utile)
- utilizzare un'efficiente algoritmo di ricerca (vedi tabelle di hash)
- incapsulare le operazioni sulle date in una opportuna classe
Domande:
Utilizzare il forum del corso
(link)
per porre domande sul progetto.
(*) Nota:
Ad esempio, se vengono inseriti (in quest'ordine) i nominativi AAA, CCC, BBB, FFF,
per BBB l'ordine di inserimento è "3/4". Se viene successivamente
aggiunto il nominativo GGG, l'ordine di inserimento per BBB diventa "3/5".
L'ordine di inserimento non ha relazione con l'ordinamento degli elementi,
dove BBB occupa invece la seconda posizione.