Volem simular les modificacions de la matrícula d’estudiants a assignatures de la FIB. Al començament es llegirà la matrícula original d’estudiants i després el programa oferirà un menú d’opcions:
"matricula" llegeix un nom d’estudiant i una
assignatura, i consisteix a assignar l’assignatura llegida a
l’estudiant. Si l’estudiant ja estava matriculat a aquella assignatura,
no caldrà fer res.
"anular" llegeix un nom d’estudiant i una
assignatura, i s’elimina l’assignatura del conjunt d’assignatures
matriculades per l’estudiant. Si l’estudiant no havia matriculat
l’assignatura no es fa res. Si l’estudiant ha anul·lat totes les
assignatures que hagués matriculat, aquest/a sortirà del sistema. Si per
contra és l’assignatura la que s’ha quedat amb zero estudiants,
considerem que l’assignatura encara existeix en el sistema, tot i que no
tingui estudiants matriculats.
"matricula_assignatura" llegeix un nom
d’assignatura, i escriu el nombre d’estudiants matriculats en
ella.
"matricula_estudiant" llegeix un nom d’estudiant, i
escriu la relació d’assignatures matriculades per aquest en ordre
alfabètic.
"fi", que indica la finalització del
programa.
Després d’executar l’opció "fi" i sortir del menú,
s’escriu en ordre alfabètic la relació d’assignatures que s’han
matriculat en algun moment (tot i que s’hagin anul·lat les seves
matrícules), i el nombre d’estudiants que les cursaran. A més, també
s’escriurà per ordre alfabètic la relació d’estudiants que tenen
assignatures matriculades (no aquells que hagin anul·lat totes les
assignatures que haguessin matriculat), seguit de les assignatures que
cursaran.
Primer es llegeix el nombre d’estudiants matriculats (un enter), i
després els corresponents noms d’estudiants seguits de les assignatures
matriculades. Cada estudiant i les seves assignatures ocupen una línia,
i l’estudiant és un sol string sense espais, i les assignatures són
també strings separats per espais.
Les opcions de menú tenen un format variable però comencen sempre per
l’opció com un string, i en cada cas segueixen les dades
necessàries per executar l’opció, que són un nom d’estudiant o
d’assignatura, o tots dos. No cal suposar que les opcions de menú estan
en línies separades, poden estar totes seguides.
La sortida consisteix en una part amb la sortida de cadascuna de les opcions del menú indicades a l’entrada, les opcions de les quals tenen la sortida següent:
matricula: no produeix sortida.
anular: no produeix sortida.
matricula_assignatura: Es mostra una frase com
“asig té num matriculats”, on
asig és el nom de l’assignatura i num és el
nombre d’estudiants matriculats.
matricula_estudiant: Es mostra una frase com
“est a1 a2 …”, on
est és el nom de l’estudiant i a1,
a2, …són les assignatures matriculades per l’estudiant. Si
l’estudiant no té assignatures matriculades, aleshores cal mostrar:
“est no té assignatures matriculades”.
Una vegada detectada l’opció “fi”, el programa mostra un
llistat de les assignatures i el nombre de matriculats, ordenat per nom
d’assignatura, amb una assignatura per línia, i amb una línia buida al
final.
Després es mostra un llistat dels estudiants, ordenat per nom d’estudiant, i les assignatures a les que estan matriculats, ordenades per nom d’assignatura, i amb una línia buida al final.
Nota: és convenient que facis servir la classe
stringstream i l’acció getline per poder
llegir seqüències sense centinella delimitades pel salt de línia.
Recorda que en llegir un enter, cal llegir un getline extra
per consumir el salt de línia.
Input
4 juan pro1 mates1 ac ana pro2 mates2 mates3 pol pro1 mates1 fisica jordi pro2 mates2 fisica matricula_estudiante ana matricula ana fisica matricula_estudiante ana anular juan mates1 matricula_estudiante juan matricula jose pro2 matricula_asignatura pro2 matricula_estudiante jose anular jose pro1 anular jose pro2 matricula jordi biologia matricula_estudiante jordi matricula_estudiante jose anular juan ac anular juan pro1 anular juan mates1 matricula_estudiante juan matricula maria mates1 matricula maria pro1 matricula_estudiante maria fin
Output
ana mates2 mates3 pro2 ana fisica mates2 mates3 pro2 juan ac pro1 pro2 tiene 3 alumnos jose pro2 jordi biologia fisica mates2 pro2 jose no tiene asignaturas matriculadas juan no tiene asignaturas matriculadas maria mates1 pro1 ac 0 biologia 1 fisica 3 mates1 2 mates2 2 mates3 1 pro1 2 pro2 2 ana fisica mates2 mates3 pro2 jordi biologia fisica mates2 pro2 maria mates1 pro1 pol fisica mates1 pro1