/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* Programa en C++ para el registro de datos sobre el COVID-19, contiene las funciones: */
/* Registrar: datos de países (país, cantidad de contagios, cantidad de recuperaciones), síntomas, formas de prevención */
/* Ver: los paises, síntomas, formas de prevención */
/* Buscar: buscar paises contagiados (por nombre de país o cantidad de recuperados) */
/* Ver mensaje de la autora *** Autora: Raquel Medina */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include<locale.h> //para que reconozca todos los caracteres del español (ñ y acentos)
#include<string.h>
#include<stdlib.h> //para usar exit(1);
#include<iostream>
using namespace std;
//Funciones
void registrarPais();
void registrarPrevencion();
void registrarSintoma();
void verPais();
void verPrevencion();
void verSintoma();
void imprimirAut(const char *);
int buscarPais(char buscarP[], int *ptr_b2);
int buscarRecuperados(int buscarR, int *ptr_b2);
void modificarPais(int *ptr_idBus);
//Estructura para almacenar los datos del país
struct pais{
char nombre_pais[50];
int contagios;
int recuperaciones;
};
//Estructura para almacenar los datos de las formas de prevención
struct prevencion{
char titulo[50];
char descripcion[100];
};
//Estructura para almacenar los datos de los síntomas
struct sintomas{
char sintoma[100];
int gravedad;
};
#define nMax_registros 3
//Punteros dinámicos
pais *ptr_pais = new pais[nMax_registros];
prevencion *ptr_preven = new prevencion[nMax_registros];
sintomas *ptr_sintomas = new sintomas[nMax_registros];
int main(){
setlocale(LC_CTYPE,"spanish");//para que reconozca todos los caracteres del español (ñ y acentos)
int opc=0, idBus=0, b2=0, *ptr_idBus=NULL, busRecuperados=0;
char conti=' ', opc2=' ', busPais[50], autora[70]=" Raquel Medina";
do{
cout<<"**************************** Menú ******************************"<<endl;
cout<<"1. Registrar (paises, formas de prevención y síntomas)"<<endl;
cout<<"2. Ver (paises, formas de prevención y síntomas)"<<endl;
cout<<"3. Buscar paises contagiados (por país y cantidad de recuperados)"<<endl;
cout<<"4. Modificar los datos de un país"<<endl;
cout<<"5. Mensaje de la autora"<<endl;
cout<<"Digite una opción: ";
cin>>opc;
cout<<endl<<"****************************************************************"<<endl;
switch(opc){
case 1:
cout<<"-- Registrar --"<<endl;
cout<<"a- País"<<endl;
cout<<"b- Formas de prevención"<<endl;
cout<<"c- Síntoma"<<endl;
cout<<endl<<"Digita la letra de la opción deseada: ";
cin>>opc2;
cout<<endl;
switch(opc2){
case 'a': case 'A':
registrarPais();
break;
case 'b': case 'B':
registrarPrevencion();
break;
case 'c': case 'C':
registrarSintoma();
break;
default:
cout<<endl<<"ERROR: Opción inválida!!!"<<endl;
break;
}
break;
case 2:
cout<<"-- Ver --"<<endl;
cout<<"a- Paises"<<endl;
cout<<"b- Formas de prevención"<<endl;
cout<<"c- Síntomas"<<endl;
cout<<endl<<"Digita la letra de la opción deseada: ";
cin>>opc2;
switch(opc2){
case 'a': case 'A':
verPais();
break;
case 'b': case 'B':
verPrevencion();
break;
case 'c': case 'C':
verSintoma();
break;
default:
cout<<endl<<"ERROR: Opción inválida!!!"<<endl;
break;
}
break;
case 3:
fflush(stdin);
cout<<endl<<"-- Buscar --"<<endl;
cout<<"a- Por nombre del país"<<endl;
cout<<"b- Por cantidad de recuperados"<<endl;
cout<<endl<<"Digita la letra de la opción deseada: ";
fflush(stdin);
cin>>opc2;
fflush(stdin);
switch(opc2){
case 'a': case 'A':
cout<<endl<<"Digita el nombre del país a buscar: ";
cin.getline(busPais, 50);
idBus = buscarPais(busPais, &b2); //Guardando ID de pais buscado, pero acá no se usa.....guardo la dirección de &b2 en el parametro puntero de la función
break;
case 'b': case 'B':
cout<<endl<<"Digita la cantidad de recuperados a buscar: ";
cin>>busRecuperados;
if(busRecuperados >= 0){
buscarRecuperados(busRecuperados, &b2);
}else{
cout<<endl<<"MENSAJE: El número ingresado debe ser igual o mayor a cero";
break;
}
break;
default:
cout<<endl<<"ERROR: Opción inválida!!!"<<endl;
break;
}
break;
case 4:
b2 = 0;
cout<<endl<<"-- Modificar datos de un país --"<<endl;
cout<<endl<<"Digita el nombre del país a buscar: ";
fflush(stdin);
cin.getline(busPais, 50);
idBus = buscarPais(busPais, &b2); //Guardando ID de pais buscado
ptr_idBus = &idBus; //Asignando al puntero la dirección de la variable idBus
if(b2 == 0){ //significa que la funcion buscar SI encontró el registro
modificarPais(ptr_idBus); //Enviando el puntero como parámetro de la función
}
break;
case 5:
cout<<" -- Mensaje de la autora --"<<endl;
cout<<"Un saludo desde El Salvador, les deseo éxitos y bendiciones"<<endl;
cout<<" en el actual mundo del caos!!!!"<<endl;
imprimirAut(autora); //Función que recibe una variable con dato constante <- y la convierte en un puntero que apunta a ese dato constante
break;
default:
cout<<"ERROR: Opción inválida!!!"<<endl;
break;
}
cout<<endl<<"Desea continuar en el programa S/N ?: ";
cin>>conti;
}while(conti=='s' || conti=='S');
//Después utilizar punteros es necesario liberar la memoria
delete[] ptr_pais;
delete[] ptr_preven;
delete[] ptr_sintomas;
delete[] ptr_idBus;
return 0;
}
void registrarPais(){
cout<<"-- Registrar paises --"<<endl;
for(int i=0; i<nMax_registros; i++){
fflush(stdin);
cout<<i+1<<"- País: ";
cin.getline(ptr_pais[i].nombre_pais, 50);
cout<<" Cantidad de contagios: ";
cin>>ptr_pais[i].contagios;
if(ptr_pais[i].contagios>=0){
cout<<" Cantidad de recuperaciones: ";
cin>>ptr_pais[i].recuperaciones;
if(ptr_pais[i].recuperaciones < 0 || ptr_pais[i].recuperaciones > ptr_pais[i].contagios){
cout<<endl<<" ERROR: La cantidad de recuperados debe ser mayor o igual a cero"<<endl;
cout<<" y menor o igual a la cantidad de contagios!!!"<<endl;
break;
}
}else{
cout<<"MENSAJE: La cantidad de contagios no puede ser un número negativo!!!"<<endl;
break;
}
}
}
void registrarPrevencion(){
cout<<"-- Registrar formas de prevención --"<<endl;
for(int i=0; i<nMax_registros; i++){
fflush(stdin);
cout<<i+1<<"- Título: ";
cin.getline(ptr_preven[i].titulo, 50);
cout<<" Descripción: ";
cin.getline(ptr_preven[i].descripcion, 100);
}
}
void registrarSintoma(){
cout<<"-- Registrar síntomas --"<<endl;
for(int i=0; i<nMax_registros; i++){
fflush(stdin);
cout<<i+1<<"- Síntoma: ";
cin.getline(ptr_sintomas[i].sintoma, 100);
cout<<" Gravedad (puntaje del 1 al 5): ";
cin>>ptr_sintomas[i].gravedad;
if(ptr_sintomas[i].gravedad <1 || ptr_sintomas[i].gravedad > 5){
cout<<" ERROR: El nivel de gravedad debe estar entre 1 y 5!!!"<<endl;
break;
}
}
}
void verPais(){
cout<<endl<<"Paises registrados:--------------"<<endl;
for(int i=0; i<nMax_registros; i++){
fflush(stdin);
cout<<i+1<<"- País: "<<ptr_pais[i].nombre_pais<<endl;
cout<<" "<<"Contagios: "<<ptr_pais[i].contagios<<endl;
cout<<" "<<"Recuperaciones: "<<ptr_pais[i].recuperaciones<<endl;
}
}
void verPrevencion(){
cout<<endl<<"Formas de prevención:--------------"<<endl;
for(int i=0; i<nMax_registros; i++){
fflush(stdin);
cout<<i+1<<"- "<<ptr_preven[i].titulo<<": ";
cout<<ptr_preven[i].descripcion<<endl;
}
}
void verSintoma(){
cout<<endl<<"Síntomas:--------------"<<endl;
for(int i=0; i<nMax_registros; i++){
fflush(stdin);
cout<<i+1<<"- Síntoma: "<<ptr_sintomas[i].sintoma<<endl;
cout<<" Nivel de gravedad: "<<ptr_sintomas[i].gravedad<<endl;
}
}
void imprimirAut(const char *ptrA){ //El puntero *ptrA esta apuntando a la cadena constante de autora[]="Raquel Medina" en la posición CERO
//No se coloca inicialización en el FOR porque el puntero ya apunta a la posición inicial autora[0],
//dejará de imprimir hasta que encuentre el caracter nulo que hay al final del arreglo char autora[]
for( ; *ptrA!='\0'; ptrA++){
cout << *ptrA;
}
cout<<endl;
}
int buscarPais(char buscarP[], int *ptr_b2){ //*ptr_b2 es usada cuando se modifica
int b=0, res=0, aux=0;
for(int i=0; i<nMax_registros; i++){
fflush(stdin);
res = strcmp(ptr_pais[i].nombre_pais, buscarP); //strcmp() compara 2 cadenas
if(res == 0){
aux=i; //Guardando el ID del país buscado para ser usado cuando se quiera modificar los datos de dicho país
cout<<endl<<"MENSAJE: Registro encontrado con éxito ---"<<endl;
cout<<i+1<<"- País: "<<ptr_pais[i].nombre_pais<<endl;
cout<<" "<<"Contagios: "<<ptr_pais[i].contagios<<endl;
cout<<" "<<"Recuperaciones: "<<ptr_pais[i].recuperaciones<<endl;
b = 1;
}
}
if(b == 0){
*ptr_b2 = 1; //Uso es puntero porque en C++ no se puede retornar 2 valores, y debo saber si el dato buscado NO SE ENCUENTRA
cout<<endl<<"MENSAJE: No se encontraron registros!!!"<<endl;
}
b = 0;
return aux;
}
int buscarRecuperados(int buscarR, int *ptr_b2){
int b=0, aux=0;
for(int i=0; i<nMax_registros; i++){
fflush(stdin);
if(ptr_pais[i].recuperaciones == buscarR){
aux=i; //Guardando el ID para ser usado cuando se quiera modificar los datos de dicho país
cout<<endl<<"MENSAJE: Registro encontrado con éxito ---"<<endl;
cout<<i+1<<"- País: "<<ptr_pais[i].nombre_pais<<endl;
cout<<" "<<"Contagios: "<<ptr_pais[i].contagios<<endl;
cout<<" "<<"Recuperaciones: "<<ptr_pais[i].recuperaciones<<endl;
b = 1;
}
}
if(b == 0){
*ptr_b2 = 1; //Uso es puntero porque en C++ no se puede retornar 2 valores, y debo saber si el dato buscado NO SE ENCUENTRA
cout<<endl<<"MENSAJE: No se encontraron registros!!!"<<endl;
}
b = 0;
return aux;
}
void modificarPais(int *ptr_idBus){ //Uso de puntero como parámetro de una función, en la cual se trabaja con el valor del puntero
cout<<endl<<"- País: ";
cin.getline(ptr_pais[*ptr_idBus].nombre_pais, 50);
cout<<" Cantidad de contagios: ";
cin>>ptr_pais[*ptr_idBus].contagios;
if(ptr_pais[*ptr_idBus].contagios>=0){
cout<<" Cantidad de recuperaciones: ";
cin>>ptr_pais[*ptr_idBus].recuperaciones;
if(ptr_pais[*ptr_idBus].recuperaciones < 0 || ptr_pais[*ptr_idBus].recuperaciones > ptr_pais[*ptr_idBus].contagios){
cout<<endl<<" ERROR: La cantidad de recuperados debe ser mayor o igual a cero"<<endl;
cout<<" y menor o igual a la cantidad de contagios!!!"<<endl;
exit(1);// No puedo usar break; porque la isntruccion no está dentro de un FOR ni un SWITCH
}
}else{
cout<<"MENSAJE: La cantidad de contagios no puede ser un número negativo!!!"<<endl;
exit(1);
}
cout<<"MENSAJE: País modificado con éxito"<<endl;
}