Queremos simular las modificaciones de la matrícula de estudiantes a asignaturas de la FIB. Al inicio se leerá la matrícula original de estudiantes i después el programa ofrecerá un menú de opciones:
"matricula" lee un nombre de estudiante y una
asignatura, y consiste en asignar la asignatura leída al estudiante. Si
el estudiante ya estaba matriculado a aquella asignatura no hay que
hacer nada.
"anular" lee un nombre de estudiante y una
asignatura, y se elimina la asignatura del conjunto de asignaturas
matriculadas por el estudiante. Si el estudiante no había matriculado la
asignatura no se hace nada. Si el estudiante ha anulado todas las
asignaturas que hubiera matriculado, éste/a saldrá del sistema. Si es
por el contrario la asignatura la que se ha quedado con zero
estudiantes, consideramos que la asignatura todavía existe en el
sistema, aunque no tenga estudiantes matriculados.
"matricula_asignatura" lee un nombre de asignatura,
y escribe el número de estudiantes matriculados en ella.
"matricula_estudiante" lee un nombre de estudiante,
y escribe la relación de asignaturas matriculadas por éste en orden
alfabético.
"fin", que indica la finalización del
programa.
Después de ejecutar la opción "fin" y salir del menú, se
escribe en orden alfabético la relación de asignaturas que se han
matriculado en algún momento (aunque se hayan anulado sus matrículas), y
el número de estudiantes que las van a cursar. Además, también se
escribirá por orden alfabético la relación de estudiantes que tienen
asignaturas matriculadas (no aquellos que hayan anulado todas las
asignaturas que hubieran matriculado), seguido de las asignaturas que
van a cursar.
Primero se lee el número de estudiantes matriculados (un entero), y
luego los correspondientes nombres de estudiantes seguidos de las
asignaturas matriculadas. Cada estudiante y sus asignaturas ocupan una
línea, y el estudiante es un solo string sin espacios, y las asignaturas
son también strings separados por espacios.
Las opciones de menú tienen un formato variable pero empiezan siempre
por la opción como un string, i en cada caso le siguen los
datos necesarios para ejecutar la opción, que son un nombre de
estudiante o de asignatura, o ambos. No hay que suponer que las opciones
de menú estan en líneas separadas, pueden estar todas seguidas.
La salida consiste en una parte con la salida de cada una de las opciones del menú indicadas a la entrada, cuyas opciones tienen la salida siguiente:
matricula: no produce salida.
anular: no produce salida.
matricula_asignatura: Se muestra una frase como
“asig tiene num matriculados”, donde
asig es el nombre de la asignatura y num es el
número de estudiantes matriculados.
matricula_estudiante: Se muestra una frase como
“est a1 a2 …”, donde
est es el nombre del estudiante y a1,
a2, …son las asignaturas matriculadas por el estudiante. Si
el estudiante no tiene asignaturas matriculadas, entonces hay que
mostrar: “est no tiene asignaturas matriculadas”.
Una vez detectada la opción “fin”, el programa muestra
un listado de las asignaturas y el número de matriculados, ordenado por
nombre de asignatura, con una asignatura por línea, y con una línea
vacía al final.
Después se muestra un listado de los estudiantes, ordenado por nombre de estudiante, y las asignaturas que cursan, ordenadas por nombre de asignatura, y con una línea vacía al final.
Nota: es conveniente que uses la clase
stringstream y la acción getline para poder
leer secuencias sin centinela delimitadas por el salto de línea.
Recuerda que al leer un entero, hay que leer un getline
extra para consumir el salto de línea.
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