Ejercicio en C++ con archivo CSV, listas ligadas y disponibilidad de camas

En este post te mostraré la solución a un ejercicio en C++ que tiene que ver con archivos CSV y disponibilidad de camas en hospitales.

Básicamente es leer un archivo CSV, pasarlo a la lista enlazada (estructura de datos) y luego generar estadísticas, eliminar repetidos, eliminar un registro y borrarlo.

Nos vamos a basar ampliamente en dos tutoriales que ya he publicado en mi blog: leer archivos CSV con C++ y listas enlazadas en C++.

Descripción del ejercicio

La Secretaría Regional de cierto lugar del Ministerio de Salud cuenta con datos almacenados dentro de un archivo CSV que registra las camas UCI ocupadas diariamente a nivel regional.

Este archivo representa los datos mediante la siguiente estructura de 3 campos: fecha;codigo_hospital;numero_de_cama

El valor del campo fecha corresponde a la fecha (en formato aaaammdd) en que fue generado el registro.

El valor del campo codigo_hospital corresponde a un identificador único para cada hospital de la región y el valor del campo numero_de_cama es la identificación de la misma.

Al respecto, una cama es única en un hospital; si el mismo número se repite en dos hospitales distintos se trata, entonces, de dos camas diferentes.

Requerimientos

Usted debe implementar un programa en lenguaje C++ que dé cobertura a los siguientes requerimientos:

  1. leeProcesa(string, Lista): Al iniciarse la ejecución del programa, este invoca a la función leeProcesa que leerá el contenido del archivo CSV y almacenará su contenido completo en la memoria utilizando para su almacenamiento una lista de tipo LLS.
  2. nuevaListaSinDuplicados(Lista, Lista): Escribir el operador nuevaListaSinDuplicados que partir de la LLS genera una nueva LLS sin repetidos, dejando sólo una ocurrencia de cada información presente en la lista (A partir del punto 3, esta nueva lista será la que trabajaremos).
  3. seleccionar(Lista, int, Lista): Proveer la funcionalidad seleccionar, que a partir de los datos contenidos en una LLS como la creada en el punto 2 y un código de un hospital pasado como parámetro, creará una nueva LLS únicamente con los datos de las camas del hospital referido.
  4. estadistico(Lista): Proveer la funcionalidad estadístico, que dada una LLS permitirá mostrar en pantalla la cantidad de camas registradas por cada hospital. A modo de ejemplo:
    1. hospital 17 tiene en total 112 cama(s) distintas.
    2. hospital 14 tiene en total 16 cama(s) distintas.
    3. hospital 15 tiene en total 18 cama(s) distintas.
  5. contar(Lista, int, int, int): Proveer la funcionalidad contar, que dada una LLS y una fecha (dia, mes, anho) retorna la cantidad de camas ocupadas existentes de esa fecha.
  6. eliminarHospital(Lista, int): Proveer la funcionalidad eliminarHospital, que dada una LLS y un identificador de hospital eliminará todas las ocurrencias contenidas en la LLS asociadas a dicho hospital.

Proveer de un menú de diálogo para el usuario que le permita acceder a las funciones definidas en los puntos anteriores.

  • Crear Lista desde archivo
  • Crear Lista sin duplicados
  • Crear Lista de un Hospital
  • Mostrar estadísticas de número de camas por Hospital
  • Cantidad de camas ocupadas por fecha especificada.
  • Eliminar registros de camas de un hospital
  • Salir

Nota: Al seleccionar cada opción, debe mostrar la lista respectiva

Explicación del algoritmo

Necesitamos la clase Cama que irá dentro de la clase Nodo. Y la clase Lista que maneja los nodos. También necesitamos ciertos métodos que nos permitan eliminar los nodos ya sea por cama (para los duplicados) o por código de hospital.

Igualmente en el constructor de la clase Cama vamos a necesitar separar la fecha por año, mes y día. Para ello cortamos con substr y luego convertimos a entero con stoi.

Código completo

Una vez que he explicado los términos generales veamos el código. En este caso primero tenemos el de la lista:

Luego tenemos el código principal en donde incluimos al archivo anteriormente mostrado, implementamos las funciones y el menú que se solicitó.

Por cierto, el archivo CSV de ejemplo es el siguiente:

Finalmente puedes probar el ejercicio aquí o leer más sobre C++ en el blog de Parzibyte.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario