Matriculaciones Y89924


Statement
 

pdf   zip   tar

thehtml

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.

Entrada

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.

Salida

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.

Observación

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.

Public test cases
  • 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
    
    
  • Information
    Author
    PRO2
    Language
    Spanish
    Translator
    Original language
    Catalan
    Other languages
    Catalan
    Official solutions
    C++
    User solutions
    C++