-
-
Save parzibyte/96afd0426d3a0e9309aaa2a4c6840c87 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
____ _____ _ _ _ | |
| _ \ | __ \ (_) | | | | |
| |_) |_ _ | |__) |_ _ _ __ _____| |__ _ _| |_ ___ | |
| _ <| | | | | ___/ _` | '__|_ / | '_ \| | | | __/ _ \ | |
| |_) | |_| | | | | (_| | | / /| | |_) | |_| | || __/ | |
|____/ \__, | |_| \__,_|_| /___|_|_.__/ \__, |\__\___| | |
__/ | __/ | | |
|___/ |___/ | |
____________________________________ | |
/ 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