Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created April 25, 2021 01:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parzibyte/96afd0426d3a0e9309aaa2a4c6840c87 to your computer and use it in GitHub Desktop.
Save parzibyte/96afd0426d3a0e9309aaa2a4c6840c87 to your computer and use it in GitHub Desktop.
/*
____ _____ _ _ _
| _ \ | __ \ (_) | | |
| |_) |_ _ | |__) |_ _ _ __ _____| |__ _ _| |_ ___
| _ <| | | | | ___/ _` | '__|_ / | '_ \| | | | __/ _ \
| |_) | |_| | | | | (_| | | / /| | |_) | |_| | || __/
|____/ \__, | |_| \__,_|_| /___|_|_.__/ \__, |\__\___|
__/ | __/ |
|___/ |___/
____________________________________
/ Si necesitas ayuda, contáctame en \
\ https://parzibyte.me /
------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
Creado por Parzibyte (https://parzibyte.me).
------------------------------------------------------------------------------------------------
| IMPORTANTE |
Si vas a borrar este encabezado, considera:
Seguirme: https://parzibyte.me/blog/sigueme/
Y compartir mi blog con tus amigos
También tengo canal de YouTube: https://www.youtube.com/channel/UCroP4BTWjfM0CkGB6AFUoBg?sub_confirmation=1
Twitter: https://twitter.com/parzibyte
Facebook: https://facebook.com/parzibyte.fanpage
Instagram: https://instagram.com/parzibyte
Hacer una donación vía PayPal: https://paypal.me/LuisCabreraBenito
------------------------------------------------------------------------------------------------
*/
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <algorithm>
#include "lista.cpp"
using namespace std;
void leeProcesa(string nombreArchivo, Lista *lista)
{
ifstream archivo(nombreArchivo);
string linea;
char delimitador = ';';
// Leemos la primer línea para descartarla, pues es el encabezado
getline(archivo, linea);
// Leemos todas las líneas
while (getline(archivo, linea))
{
stringstream stream(linea); // Convertir la cadena a un stream
string fecha, codigoHospital, numeroCama;
// Extraer todos los valores de esa fila
getline(stream, fecha, delimitador);
getline(stream, codigoHospital, delimitador);
getline(stream, numeroCama, delimitador);
lista->agregar(new Cama(fecha, codigoHospital, numeroCama));
}
archivo.close();
}
void nuevaListaSinDuplicados(Lista *original, Lista *sinDuplicados)
{
original->copiaSinDuplicados(sinDuplicados);
}
void seleccionar(Lista *lista, int codigoHospital, Lista *destino)
{
Nodo *temporal = lista->cabeza;
while (temporal != NULL)
{
if (temporal->cama->codigoHospital == codigoHospital)
{
destino->agregar(temporal->cama);
}
temporal = temporal->siguiente;
}
}
void estadistico(Lista *lista)
{
// Primero vamos a extraer códigos únicos para los hospitales, ya que no sabemos
// si van en orden, si son consecutivos y tampoco sabemos los límites
std::vector<int> codigos;
Nodo *temporal = lista->cabeza;
while (temporal != NULL)
{
int codigoHospital = temporal->cama->codigoHospital;
bool existe = find(codigos.begin(), codigos.end(), codigoHospital) != codigos.end();
if (!existe)
{
codigos.push_back(codigoHospital);
}
temporal = temporal->siguiente;
}
// Ahora recorremos el vector y generamos estadísticas
for (std::size_t i = 0; i < codigos.size(); i++)
{
int codigo = codigos[i];
int conteo = 0;
// Recorremos la lista de nuevo por cada código encontrado
Nodo *temporal = lista->cabeza;
while (temporal != NULL)
{
int codigoHospital = temporal->cama->codigoHospital;
if (codigoHospital == codigo)
{
conteo++;
}
temporal = temporal->siguiente;
}
cout << "Hospital " << codigo << " tiene en total " << conteo << " cama(s) distintas" << endl;
}
}
int contar(Lista *lista, int anho, int mes, int dia)
{
Nodo *temporal = lista->cabeza;
int conteo = 0;
while (temporal != NULL)
{
if (temporal->cama->anho == anho && temporal->cama->mes == mes && temporal->cama->dia == dia)
{
conteo++;
}
temporal = temporal->siguiente;
}
return conteo;
}
void eliminarHospital(Lista *lista, int codigoHospital)
{
while (lista->existe(codigoHospital))
{
lista->eliminar(codigoHospital);
}
}
void menu()
{
string seleccion = "";
Lista *listaConPosiblesRepetidos = new Lista();
Lista *listaSinRepetidos = new Lista();
while (seleccion != "g")
{
cout << "a. Crear lista desde archivo " << endl;
cout << "b. Crear lista sin duplicados" << endl;
cout << "c. Crear lista de un hospital" << endl;
cout << "d. Mostrar estadisticas de numero de camas por hospital" << endl;
cout << "e. Cantidad de camas ocupadas por fecha especificada" << endl;
cout << "f. Eliminar registro de camas de un hospital" << endl;
cout << "g. Salir" << endl;
cout << "Seleccione: " << endl;
cin >> seleccion;
if (seleccion == "a")
{
leeProcesa("camas_ocupadas.csv", listaConPosiblesRepetidos);
cout << "Lista leida desde archivo: " << endl;
listaConPosiblesRepetidos->imprimir();
}
if (seleccion == "b")
{
nuevaListaSinDuplicados(listaConPosiblesRepetidos, listaSinRepetidos);
cout << "Lista sin duplicados: " << endl;
listaSinRepetidos->imprimir();
}
if (seleccion == "c")
{
int codigo;
cout << "Ingresa el codigo de hospital: " << endl;
cin >> codigo;
Lista *deHospital = new Lista();
seleccionar(listaSinRepetidos, codigo, deHospital);
cout << "Datos del hospital solicitado: " << endl;
deHospital->imprimir();
}
if (seleccion == "d")
{
cout << "Estadisticas de la lista:" << endl;
estadistico(listaSinRepetidos);
}
if (seleccion == "e")
{
int anho, mes, dia;
cout << "Ingresa el anho: " << endl;
cin >> anho;
cout << "Ingresa el mes: " << endl;
cin >> mes;
cout << "Ingresa el dia: " << endl;
cin >> dia;
int conteo = contar(listaSinRepetidos, anho, mes, dia);
cout << "Camas ocupadas en fecha: " << conteo << endl;
}
if (seleccion == "f")
{
int codigo;
cout << "Ingresa el codigo de hospital para eliminar: " << endl;
cin >> codigo;
eliminarHospital(listaSinRepetidos, codigo);
cout << "Lista despues de haber eliminado el hospital: " << endl;
listaSinRepetidos->imprimir();
}
}
}
int main()
{
menu();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment