Progetto - Gestione archivio studenti e piani di studio

Realizzare un programma C++ che offra funzioni di base per la gestione di un semplice archivio di studenti, corsi e piani di studio. In particolare si considerino i seguenti tre sottoproblemi: 
1.	Gestione studenti — Funzione di base: 
(a)	immissione nuovo studente. Per ogni studente vengono registrate (almeno) le seguenti informazioni: 
•	cognome e nome 
•	matricola
•	anno di corso (1, 2, 3, …)
•	data di nascita
•	recapito 
•	indirizzo e-mail
(b)	ricerca di uno studente in base a: 
•	matricola 
•	cognome 
Se la ricerca ha esito positivo, viene visualizzata la scheda dello studente trovato. La ricerca può avvenire anche in base ad una sottostringa del cognome. Nel caso siano presenti più studenti soddisfacenti i criteri di ricerca, vengono mostrate, una alla volta, le schede di tutti gli studenti individuati. 
(c)	cancellazione o modifica studente (individuato in base alla matricola). È possibile modificare soltanto le informazioni relative al recapito, indirizzo e-mail e anno iscrizione.
2.	Gestione corsi — Funzione di base: 
(a)	immissione nuovo corso. Per ogni corso vengono registrate (almeno) le seguenti informazioni:
•	titolo del corso 
•	codice del corso  (codice numerico unico, assegnato dal sistema) 
•	settore
•	CFU
•	anno e semestre
•	propedeuticità 
(b)	ricerca di un corso in base a:
•	codice corso
•	titolo 
Se la ricerca ha esito positivo, viene visualizzata la scheda del corso trovato. Le ricerche possono avvenire anche in base ad una sottostringa del titolo del corso. Nel caso siano presenti più corsi soddisfacenti i criteri di ricerca, vengono mostrate, una alla volta, le schede di tutti i corsi individuati.
(c)	cancellazione o modifica corso individuato in base al codice corso. È possibile modificare soltanto le informazioni relative all'anno, al semestre e alle propedeuticità.
3.	Gestione piani di studio — Funzione di base: 
(a)	Compilazione piano di studio. Per ogni piano di studio compilato da uno studente vengono registrate le seguenti informazioni: 
•	matricola studente 
•	elenco corsi scelti nei settori INF e ING-INF/05
•	elenco corsi scelti nei settori BIO, CHIM, FIS, GEO, MAT
•	elenco corsi scelti in altri settori.
Ciascun corso è individuato dal proprio codice. Nel caso in cui si digiti il carattere '?' al posto del codice di un corso viene mostrato l'elenco di tutti i corsi dei settori in questione. Nel caso in cui si digiti il carattere '?' al posto della matricola viene attivato il menù di ricerca studente (punto 1.b).
(b)	elaborazioni e ricerche
•	stampa piano di studio di un dato studente  
•	calcolo del numero di studenti che hanno inserito nel proprio piano di studio un certo corso 
•	ricerca e stampa i nominativi di tutti gli studenti che hanno inserito nel proprio piano di studio un certo corso.
(c)	verifica che un piano di studio (individuato in base alla matricola studente) soddisfi i seguenti vincoli: numero totale CFU, almeno 55; numero CFU nei settori INF e ING-INF/05, almeno 13; numero CFU nei settori BIO, CHIM, FIS, GEO, MAT, almeno 12; numero CFU in esami del II anno, almeno 23; rispetto delle propedeuticità.
(d)	cancellazione o modifica piano di studio individuato in base alla matricola studente. È possibile modificare gli elenchi dei corsi cancellando o aggiungendo uno o più corsi.

Tutti i dati relativi a studenti, corsi e piani di studio devono venir salvati su file. Il file completo dei corsi, in formato testo, e’ disponibile all’indirizzo
http://www.math.unipr.it/~gianfr/Teaching/FondProgr/progetto05-06_dati_corsi.txt.
L'interazione con l'utente deve avvenire tramite menù a più livelli. Il sistema provvede anche ad effettuare controlli di base sulla correttezza dei dati immessi (ad esempio, validità dei CFU, validità delle date, ecc.).