Progetto
- Gestione biblioteca
Realizzare un programma C++ che offra
funzioni di base per la gestione di una semplice biblioteca. In particolare si considerino i seguenti tre
sottoproblemi:
1. Gestione schedario libri — Funzione di
base:
(a)
immissione nuovo libro.
Per ogni libro vengono registrate le seguenti informazioni:
−
cognome e nome del/degli autore/i
−
titolo del libro
−
casa editrice
−
anno di pubblicazione
−
codice collocazione (codice unico alfanumerico)
−
argomenti (max. 3, di tipo stringa)
(b) ricerca di un
libro in base a:
−
codice collocazione
−
cognome autore
−
argomento
Se la ricerca ha esito positivo,
viene visualizzata la scheda del libro trovato. Le ricerche relative agli
ultimi due punti possono avvenire anche in base ad una sottostringa del cognome
o dell'argomento da ricercare.
(a) cancellazione o modifica libro
(individuato in base a codice collocazione). È possibile modificare soltanto le
informazioni relative agli argomenti. La cancellazione di un libro non è
possibile se il libro si trova in prestito.
2. Gestione schedario utenti — Funzione di
base:
(a)
immissione nuovo
utente. Per ogni utente vengono registrate le seguenti informazioni:
−
cognome e nome dell'utente
−
categoria di utente (ad esempio, normale, speciale,
…)
−
recapito
−
codice utente (codice unico numerico)
−
indirizzo e-mail
(b) ricerca di un
utente in base a:
−
codice utente
−
cognome
Se la ricerca ha esito positivo,
viene visualizzata la scheda dell'utente trovato. Le ricerche relative
all'ultimo punto possono avvenire anche in base ad una sottostringa del
cognome da ricercare.
(c) cancellazione utente
(individuato in base a codice utente). La cancellazione di un utente è
possibile soltanto se l'utente non ha più libri in prestito.
3. Gestione prestiti — Funzione di
base:
(a)
prestito. Per
ogni prestito effettuato vengono registrate le seguenti informazioni:
−
utente (codice utente)
−
libro (codice collocazione)
−
data prestito
Nel caso in cui si digiti il carattere '?'
al posto del codice collocazione o del codice utente viene attivato,
rispettivamente, il menù di ricerca libro (punto 1.b) o di ricerca utente
(punto 2.b).
(b)
restituzione (=
cancellazione prestito): libro e utente individuati in base a codice
collocazione e codice utente.
(c) ricerche:
−
libro in prestito? (dato codice libro, se il libro è in prestito
determina codice utente e data del prestito; altrimenti comunica "libro
disponibile")
−
prestiti attivi per un utente? (dato codice utente,
determina codice libro e data prestito di tutti i libri in prestito all'utente)
−
prestiti scaduti (determina codice libro e codice utente
relativi a prestiti che hanno superato il limite max. (di norma, 1 mese;
eventualmente variabile in base al tipo di utente)).
Tutti i dati relativi a libri, utenti e
prestiti vengono memorizzati su file. Il programma provvede a caricare i
dati da file in memoria principale e viceversa su esplicita richiesta
dell'operatore. L'interazione con l'operatore avviene tramite menù a più
livelli. Il sistema provvede anche ad effettuare controlli di base sulla
correttezza dei dati immessi (ad esempio, validità codici, validità delle date,
ecc.). Nelle funzioni di ricerca qualora vengano individuati più oggetti
soddisfacenti i criteri di ricerca, vengono mostrate, una alla volta, le schede
di tutti gli oggetti individuati.
Vincoli di implementazione (obbligatori). Realizzare i tipi di dato libro
e utente come classi. In particolare, definire utente come
classe derivata dalla classe persona. Realizzare anche la nozione di data_del_giorno
come classe. Realizzare la gestione di situazioni anomale tramite i meccanismi
di gestione eccezioni del C++.