Se requiere un programa para la Oficina de Registro de una universidad. Los datos que se manejan son los relacionados a cursos, estudiantes, grupos y cobros de matrículas.

Para los cursos se requiere conocer la sigla, el nombre y el número de créditos. Para los estudiantes, el carnet, el nombre y la edad. Los grupos son cursos (recordar herencia) que tienen un ciclo y año en el cual se imparten, así como una lista de estudiantes que lo cursan o lo cursaron.

Los estudiantes que llevan los cursos pueden ser de tres tipos (recordar herencia): estudiantes de bachillerato, maestría y doctorado. Si son de bachillerato el costo de cada crédito es de 12,500.00 y poseen becas que van de la 0 a la 5, variando de en 20% de exoneración por cada nivel de beca. Para los estudiantes de maestría el costo de cada crédito es del doble y poseen becas que van de la 0 a la 5, variando de en 10% de exoneración por cada nivel de beca. Mientras que los estudiantes de doctorado no tienen exoneración y el costo de cada crédito es del triple del valor del crédito de bachillerato. (Su solución debe aplicar el uso de funciones virtuales y clases abstractas)

Los estudiantes pueden llevar cualquier curso. Su programa debe leer dos archivos. Un archivo que contiene todos los cursos que se imparten en la universidad y un archivo con los grupos y estudiantes. La beca de cada estudiante corresponde con el último número de su carnet y en el programa cada estudiante almacena el tipo de beca en una variable.

Los estudiantes menores de 19 y 20 años corresponden a estudiantes de Bachillerato, los de 21 y 22 corresponden a estudiantes de Maestría, mientras que los estudiantes de 23 y 24 corresponden a Doctorado.

Su solución debe crear al menos dos estructuras de datos de la STL una Deque para los cursos y un Map para los grupos, recordando que cada grupo contiene su respectiva lista de estudiantes asociada. Deben potenciar no duplicar datos, hacer uso eficiente de la memoria y utilizar iteradores para recorrer las estructuras de datos.

  1. Elabore un programa principal que cumpla con los siguientes requerimientos:

  2. Listar todos los estudiantes.

  3. Listar todos los cursos.

  4. Calcular el cobro de matrícula de todos los estudiantes para un ciclo y año.

  5. Mostrar los cursos que ha llevado un estudiante en un ciclo y año.

  6. Calcular el cobro de matrícula de un estudiante para un ciclo y año.

  7. Eliminar un grupo (solo si no tiene estudiantes).

  8. Eliminar un curso (solos si no existe un grupo)

  9. Eliminar estudiantes de un grupo.

  10. Agregar un estudiante a un grupo.

  11. Agregar un curso.

  12. Agregar un grupo.

Deben aplicar todas las buenas prácticas de programación. Entregar análisis, diseño, implementación y pruebas. La presentación del proyecto es en parejas. Archivos de datos:

  1. cursos.csv

  2. grupos.csv