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++.