Matriculaciones Y89924


Statement
 

pdf   zip   tar

thehtml

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.

Entrada

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.

Sortida

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 “asignum 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.

Observació

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.

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
    Catalan
    Other languages
    Spanish
    Official solutions
    C++
    User solutions
    C++