#include<iostream>
#include<locale.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
/*
En Azul Web se desea hacer un programa en C++ que guarde la información de los maestros que ofrecen cursos
dentro de su plataforma, , el programa debe de realizar lo siguiente:
1.- Permitir guardar datos completos del maestro. Maestro; nombre, edad, país, especialidad. Especialidad;
programación, base de datos y servidores.
2.- También se desea ordenar los cursos que se están brindando. Curso; maestro, especialidad, y fecha.
Fecha: día, mes y año.
(Todos los dato se deben de guardar al momento de programar, no hay que pedírselo al usuario).
3.- Al momento de correr el programa se debe de mostrar en pantalla el siguiente menú:
>> Buscar cursos pro maestro.
>> Buscar cursos por especialidad.
>> Buscar cursos mayores a un año brindado por el usuario.
>> Buscar cursos menores a un año brindado por el usuario.
>> Permitir al usuario modificar cualquiera de los datos mostrados anteriormente utilizando una contraseña.
(La contraseña la definimos al momento de programar).
>> Permitir salir del programa. (El programa no se debe de cerrar hasta que el usuario así lo desee).
autor: Kevin Elián Valarezo Guamán
date: 22/03/2024
*/
//Estructura de los maestros.
struct maestros{
char nombre[50], pais[20], especialidad[50], id[20];
int edad;
};
//Estructura de los cursos.
struct cursos{
char profesionales[20], profesion[20];
char curso[50];
int dia, mes, anio;
};
//Estructura de la plataforma de Azul School.
struct plataforma{
maestros profesores;
cursos clases;
};
int main(){
setlocale(LC_CTYPE, "Spanish");
/*Variables 'int' a usar:
opcion: Permitirá navegar en el menú de opciones del programa.
v: Sirve mayormente para verificar que se ha encontrado algún dato que desea el usuario.
anio_buscar: Sirve para buscar a los cursos por el año.
aux: Sirve como auxialiar de reemplazo de edad u otro dato que desea reemplazar el usuario.
e: Tiene el mismo uso que i pero siendo independiente del for.
*/
int opcion = 0, v = 0, anio_buscar = 0, aux = 0, e = 0;
/*Variables 'char' a usar:
buscar: Sirve para buscar el nombre de un maestro.
ayuda: Ayuda en comparar a dos cadenas.
vrf: Verificará la posición donde se ha encontrado un dato.
buscar_id: Permite ingrese el ID único de cada maestro para buscarlo.
buscar_especialidad: Permite ingrese la especilidad de cada curso para buscar.
*/
char buscar[20] = "", ayuda[50] = "", vrf[10], buscar_id[10] = "", buscar_especialidad[20] = "",
contra[10] = "";
strcpy(contra, "Azul Web");
plataforma obtener[10]; //Obtener llamará a la estructura plataforma, la cual contiene los datos de
//los maestros y de los cursos.
/*Maestros*/
//Maestro N°1
strcpy(obtener[0].profesores.id, "9a87b6c5");
strcpy(obtener[0].profesores.nombre, "Luis Matinez");
obtener[0].profesores.edad = 32;
strcpy(obtener[0].profesores.pais, "México");
strcpy(obtener[0].profesores.especialidad, "Programacion");
//Maestro N°2
strcpy(obtener[1].profesores.id, "3f4e2d1c");
strcpy(obtener[1].profesores.nombre, "Ana Rodriguez");
obtener[1].profesores.edad = 28;
strcpy(obtener[1].profesores.pais, "España");
strcpy(obtener[1].profesores.especialidad, "Base de datos");
//Maestro N°3
strcpy(obtener[2].profesores.id, "7b8a9c1d");
strcpy(obtener[2].profesores.nombre, "Carlos Lopez");
obtener[2].profesores.edad = 30;
strcpy(obtener[2].profesores.pais, "Colombia");
strcpy(obtener[2].profesores.especialidad, "Servidores");
//Maestro N°4
strcpy(obtener[3].profesores.id, "5e6f7d8c");
strcpy(obtener[3].profesores.nombre, "María Garcia");
obtener[3].profesores.edad = 25;
strcpy(obtener[3].profesores.pais, "Argentina");
strcpy(obtener[3].profesores.especialidad, "Programacion");
//Maestro N°5
strcpy(obtener[4].profesores.id, "1a2b3c4d");
strcpy(obtener[4].profesores.nombre, "Juan Perez");
obtener[4].profesores.edad = 29;
strcpy(obtener[4].profesores.pais, "Chile");
strcpy(obtener[4].profesores.especialidad, "Base de datos");
//Maestro N°6
strcpy(obtener[5].profesores.id, "8c7b6a5d");
strcpy(obtener[5].profesores.nombre, "Laura Ramirez");
obtener[5].profesores.edad = 27;
strcpy(obtener[5].profesores.pais, "Perú");
strcpy(obtener[5].profesores.especialidad, "Servidores");
//Maestro N°7
strcpy(obtener[6].profesores.id, "4d3c2b1a");
strcpy(obtener[6].profesores.nombre, "Diego Herrera");
obtener[6].profesores.edad = 31;
strcpy(obtener[6].profesores.pais, "Ecuador");
strcpy(obtener[6].profesores.especialidad, "Programacion");
//Maestro N°8
strcpy(obtener[7].profesores.id, "6d5c4b3a");
strcpy(obtener[7].profesores.nombre, "Sofia Torres");
obtener[7].profesores.edad = 26;
strcpy(obtener[7].profesores.pais, "Costa Rica");
strcpy(obtener[7].profesores.especialidad, "Base de datos");
//Maestro N°9
strcpy(obtener[8].profesores.id, "2c1d3a5b");
strcpy(obtener[8].profesores.nombre, "Pedro Gomez");
obtener[8].profesores.edad = 33;
strcpy(obtener[8].profesores.pais, "Uruguay");
strcpy(obtener[8].profesores.especialidad, "Servidores");
//Maestro N°10
strcpy(obtener[9].profesores.id, "1c2d3a4b");
strcpy(obtener[9].profesores.nombre, "Mónica Jimenez");
obtener[9].profesores.edad = 24;
strcpy(obtener[9].profesores.pais, "Venezuela");
strcpy(obtener[9].profesores.especialidad, "Programacion");
/*Cursos*/
//Curso Número 1
strcpy(obtener[0].clases.curso, "Curso profesional de JAVA");
obtener[0].clases.dia = 20;
obtener[0].clases.mes = 03;
obtener[0].clases.anio = 2020;
//Curso Número 2
strcpy(obtener[1].clases.curso, "Curso de SQL");
obtener[1].clases.dia = 31;
obtener[1].clases.mes = 06;
obtener[1].clases.anio = 2020;
//Curso Número 3
strcpy(obtener[2].clases.curso, "Curso profesional C++");
obtener[2].clases.dia = 10;
obtener[2].clases.mes = 01;
obtener[2].clases.anio = 2021;
//Curso Número 4
strcpy(obtener[3].clases.curso, "Curso profesional Python");
obtener[3].clases.dia = 02;
obtener[3].clases.mes = 10;
obtener[3].clases.anio = 2020;
//Curso Número 5
strcpy(obtener[4].clases.curso, "Curso de Big Data");
obtener[4].clases.dia = 30;
obtener[4].clases.mes = 05;
obtener[4].clases.anio = 2022;
//Curso Número 6
strcpy(obtener[5].clases.curso, "Curso de Administración de Servidores Windows");
obtener[5].clases.dia = 31;
obtener[5].clases.mes = 06;
obtener[5].clases.anio = 2022;
//Curso Número 7
strcpy(obtener[6].clases.curso, "Curso de JavaScript");
obtener[6].clases.dia = 13;
obtener[6].clases.mes = 07;
obtener[6].clases.anio = 2020;
//Curso Número 8
strcpy(obtener[7].clases.curso, "Curso de Bases de Datos Relacionales");
obtener[7].clases.dia = 25;
obtener[7].clases.mes = 11;
obtener[7].clases.anio = 2022;
//Curso Número 9
strcpy(obtener[8].clases.curso, "Curso de Seguridad en Servidores");
obtener[8].clases.dia = 18;
obtener[8].clases.mes = 04;
obtener[8].clases.anio = 2021;
//Curso Número 10
strcpy(obtener[9].clases.curso, "Curso de Introducción a la Programación");
obtener[9].clases.dia = 29;
obtener[9].clases.mes = 04;
obtener[9].clases.anio = 2021;
/*Fase de prueba N°1
Presenta en pantalla todos los cursos con sus maestros a cargo.
Esto es para comprobar que lo que se ha hecho sirva, y no haya problemas con el usuario.
Prueba con exito, intentos 1.
for(int i = 0; i<10; i++)
{
std::cout<<"Número "<<i+1<<std::endl;;
std::cout<<"Datos del maestro\n";
std::cout<<" Maestro: "<<obtener[i].profesores.nombre<<std::endl;
std::cout<<" Edad: "<<obtener[i].profesores.edad<<std::endl;
std::cout<<" País: "<<obtener[i].profesores.pais<<std::endl;
std::cout<<" Especialidad: "<<obtener[i].profesores.especialidad<<std::endl<<std::endl;
std::cout<<"Curso a cargo\n";
std::cout<<" Curso: "<<obtener[i].clases.curso<<std::endl;
std::cout<<" Maestro: "<<obtener[i].clases.profesionales<<std::endl;
std::cout<<" Especialidad: "<<obtener[i].clases.profesion<<std::endl;
std::cout<<" Fecha: "<<obtener[i].clases.dia<<"/"<<obtener[i].clases.mes<<"/"<<obtener[i].clases.anio<<std::endl;
std::cout<<std::endl<<std::endl;
}*/
for(int i = 0; i<10; i++){ //Ciclo for para almacendar los nombres de cada maestro la estructura curso.
strcpy(obtener[i].clases.profesionales, obtener[i].profesores.nombre);
strcpy(obtener[i].clases.profesion, obtener[i].profesores.especialidad);
}
do{
//Todo como al principio en caso de que el usuario vuelva a repetir el programa.
for(int i = 0; i<10; i++) vrf[i] = 'F';
v = 0;
aux = 0;
e = 0;
do{
//Menú de opciones
std::cout<<">> 1 Buscar cursos por maestro."<<std::endl;
std::cout<<">> 2 Buscar cursos por especialidad."<<std::endl;
std::cout<<">> 3 Buscar cursos mayores a un año brindado por el usuario."<<std::endl;
std::cout<<">> 4 Buscar cursos menores a un año brindado por el usuario."<<std::endl;
std::cout<<">> 5 Modificar datos"<<std::endl;
std::cout<<">> 6 Salir"<<std::endl;
std::cout<<" Opción: ";
std::cin>>opcion;
if(opcion == 6) //En caso de salir del programa se agradecerá al usuario.
{
std::cout<<"\nGracias por usar este programa :D";
getch(); //No cerrará el programa de golpe.
}
else if(opcion >0 || opcion <6) //En caso de que elija una opción diferente de salir (6).
{
system("cls"); //Limpiador de pantalla.
switch(opcion) // Switch que hará entrar en una de las opciones del programa.
{
case 1: //Opcion N°1 para buscar a un curso por medio del maestro.
std::cin.ignore(10000, '\n');//Para que pueda leer lo que vamos a escribir.
std::cout<<"Ingrese el nombre del maestro: "; std::cin.getline(buscar, 20, '\n');
for(int i = 0; i<10; i++) //Ciclo for de búsqueda secuencial.
{
strcpy(ayuda, obtener[i].profesores.nombre);
if(strcmpi(strlwr(ayuda), strlwr(buscar))==0) //Comparará lo que ingrese el usuario sin importar mayusculas o minusculas.
{
vrf[i] = 'V';
v = 1; //Se verifica si mismo se ha encontrado.
}
}
std::cout<<std::endl;
if(v == 1)
{
std::cout<<"Curso a cargo: \n";
for(int i = 0; i<10; i++)
{
if(vrf[i] == 'V')
{
std::cout<<" Curso: "<<obtener[i].clases.curso<<std::endl;
std::cout<<" Maestro: "<<obtener[i].clases.profesionales<<std::endl;
std::cout<<" Especialidad: "<<obtener[i].clases.profesion<<std::endl;
std::cout<<" Fecha: "<<obtener[i].clases.dia<<"/"<<obtener[i].clases.mes<<"/"<<obtener[i].clases.anio<<std::endl;
std::cout<<std::endl;
}
}
}
else{
std::cout<<"Maestro no encontrado\n\n";
}
break;
case 2: //Opcion N°2 para buscar a cursos por meedio de la especialidad.
std::cin.ignore(10000, '\n'); //Para que pueda leer lo que vamos a escribir.
std::cout<<"Ingrese la especialidad: "; std::cin.getline(buscar, 20, '\n');
for(int i = 0; i<10; i++)//Ciclo for de búsqueda secuencial.
{
strcpy(ayuda, obtener[i].profesores.especialidad);
if(strcmpi(strlwr(ayuda), strlwr(buscar))==0) //Comparará lo que ingrese el usuario sin importar mayusculas o minusculas.
{
vrf[i] = 'V';
v = 1; //Se verifica si mismo se ha encontrado.
}
}
std::cout<<std::endl;
if(v == 1)
{
for(int i = 0; i<10; i++)
{
if(vrf[i] == 'V')
{
std::cout<<" Curso: "<<obtener[i].clases.curso<<std::endl;
std::cout<<" Maestro: "<<obtener[i].clases.profesionales<<std::endl;
std::cout<<" Especialidad: "<<obtener[i].clases.profesion<<std::endl;
std::cout<<" Fecha: "<<obtener[i].clases.dia<<"/"<<obtener[i].clases.mes<<"/"<<obtener[i].clases.anio<<std::endl;
std::cout<<std::endl;
}
}
}
else{
std::cout<<"Especialidad no encontrada\n\n";
}
break;
case 3: //Opción N°3 para buscar a cursos mayores a un año según el que haya ingresado el usuario.
std::cout<<"Ingrese el año a buscar: "; std::cin>>anio_buscar;
aux = anio_buscar + 1;
for(int i = 0; i<10; i++)
{
if(aux == obtener[i].clases.anio)
{
vrf[i] = 'V';
v = 1;
}
}
std::cout<<std::endl;
if(v == 1)
{
for(int i = 0; i<10; i++)
{
if(vrf[i] == 'V')
{
std::cout<<" Curso: "<<obtener[i].clases.curso<<std::endl;
std::cout<<" Maestro: "<<obtener[i].clases.profesionales<<std::endl;
std::cout<<" Especialidad: "<<obtener[i].clases.profesion<<std::endl;
std::cout<<" Fecha: "<<obtener[i].clases.dia<<"/"<<obtener[i].clases.mes<<"/"<<obtener[i].clases.anio<<std::endl;
std::cout<<std::endl;
}
}
}
else{
std::cout<<"Año no encontrado\n\n";
}
break;
case 4: //Opción N°3 para buscar a cursos menores a un año según el que haya ingresado el usuario.
std::cout<<"Ingrese el año a buscar: "; std::cin>>anio_buscar;
aux = anio_buscar - 1;
for(int i = 0; i<10; i++)
{
if(aux == obtener[i].clases.anio)
{
vrf[i] = 'V';
v = 1;
}
}
std::cout<<std::endl;
if(v == 1)
{
for(int i = 0; i<10; i++)
{
if(vrf[i] == 'V')
{
std::cout<<" Curso: "<<obtener[i].clases.curso<<std::endl;
std::cout<<" Maestro: "<<obtener[i].clases.profesionales<<std::endl;
std::cout<<" Especialidad: "<<obtener[i].clases.profesion<<std::endl;
std::cout<<" Fecha: "<<obtener[i].clases.dia<<"/"<<obtener[i].clases.mes<<"/"<<obtener[i].clases.anio<<std::endl;
std::cout<<std::endl;
}
}
}
else{
std::cout<<"Año no encontrado\n\n";
}
break;
case 5: //Caso N°5 para reemplazar datos.
std::cin.ignore(10000, '\n'); //Para que pueda leer lo que vamos a escribir.
std::cout<<"Ingrese la contraseña: "; std::cin.getline(ayuda, 20, '\n');
if(strcmp(ayuda, contra)==0) //Solamente puede modificar datos mientras que la contraseña que ingrese sea identicada a la creada (Azul Web).
{
do{
std::cout<<">> 1 Maestros"<<std::endl;
std::cout<<">> 2 Cursos"<<std::endl;
std::cout<<" Opcion: ";
std::cin>>opcion;
if(opcion<=0 || opcion>2) //if en caso de que el usuario elija una opción no establecida.
{
system("cls"); //Limpiador de pantalla.
std::cout<<"Error: Opción fuera de los parametros\n";
}
}while(opcion<=0 || opcion>2);
system("cls"); //limpiador de pantalla para las dos opciones.
std::cin.ignore(10000, '\n'); //Para que pueda leer lo que vamos a escribir.
switch(opcion) //Determinará a cual opción desea ingresar el usuario.
{
case 1: //Caso uno para editar a los maestros.
do{
std::cout<<"Ingrese el ID del maestro"<<std::endl;
std::cout<<"Si no sabe el ID del maestro ingrese 1, para mostrar a todos los maestros"<<std::endl;
std::cout<<" Ingreso: ";
std::cin.getline(buscar_id, 10, '\n');
strcpy(ayuda, "1"); //Ayuda tendrá el 1 para que se pueda verificar que el usuario necesita ayuda.
if(strcmp(ayuda, buscar_id)==0) //if solo si el usuario desea ver a todos los maestros con su ID única.
{
system("cls");
for(int i = 0; i<10; i++) //Ciclo for de ayuda para mostrar todos los maestros con su ID única.
{
std::cout<<"ID: "<<obtener[i].profesores.id<<std::endl;
std::cout<<" Maestro: "<<obtener[i].profesores.nombre<<std::endl;
std::cout<<std::endl;
}
}
}while(strcmp(ayuda, buscar_id)==0); //Ciclo do...while que solamente se repetirá cuando el usuario necesite la ayuda de mostrar todas las ID de cada maestro.
for(int i = 0; i<10; i++)
{
if(strcmp(buscar_id, obtener[i].profesores.id)==0)
{
vrf[i] = 'V';
v = 1;
}
}
if(v == 1)
{
system("cls");
do{
for(int i = 0; i<10; i++)
{
if(vrf[i] == 'V')
{
std::cout<<" Maestro: "<<obtener[i].profesores.nombre<<std::endl;
std::cout<<" Edad: "<<obtener[i].profesores.edad<<std::endl;
std::cout<<" País: "<<obtener[i].profesores.pais<<std::endl;
std::cout<<" Especialidad: "<<obtener[i].profesores.especialidad<<std::endl<<std::endl;
e = i;
}
}
std::cout<<">> 1 Modificar nombre"<<std::endl;
std::cout<<">> 2 Modificar edad"<<std::endl;
std::cout<<">> 3 Modificar país"<<std::endl;
std::cout<<">> 4 Modificar Especialidad"<<std::endl;
std::cout<<" Opción: ";
std::cin>>opcion;
if(opcion<=0 || opcion>4) //En caso de que el usuario ingrese una opción fuera de los parametros.
{
system("cls");
std::cout<<"Error: Opción fuera de los parametros\n\n";
}
}while(opcion<=0 || opcion>4); //Ciclo do...while que se repetirá mientras el usuario elija una opción no válida.
std::cin.ignore(10000, '\n'); //Para que pueda leer lo que vamos a escribir en cualquiera de los casos.
std::cout<<std::endl;
switch(opcion) //Determirá cual dato del maestro se va moficiar.
{
case 1: //Caso uno para el nombre.
std::cout<<"Ingrese el nuevo nombre: "; std::cin.getline(ayuda, 50, '\n');
strcpy(obtener[e].profesores.nombre, ayuda);
break;
case 2: //Caso dos para la edad.
std::cout<<"Ingrese la nueva edad: "; std::cin>>aux;
obtener[e].profesores.edad = aux;
break;
case 3: //Caso tres para el país.
std::cout<<"Ingrese el nuevo pais: "; std::cin.getline(ayuda, 50, '\n');
strcpy(obtener[e].profesores.pais, ayuda);
break;
case 4: //Caso cuatro para la especialidad.
std::cout<<"Ingrese la nueva especialidad: "; std::cin.getline(ayuda, 50, '\n');
strcpy(obtener[e].profesores.especialidad, ayuda);
break;
default:
std::cout<<"\nUPS! Error en el sistema";
getch();
break;
}
system("cls"); //Limpiador de pantalla.
std::cout<<"Guardado con exito";
}
else std::cout<<"\nID no encontrada";
std::cout<<std::endl<<std::endl;
break;
case 2: //Caso uno para editar a los cursos.
std::cout<<"Ingrese el nombre del curso: "; std::cin.getline(buscar_curso, 50, '\n');
for(int i = 0; i<10; i++)
{
strcpy(ayuda, obtener[i].clases.curso);
if(strcmp(strlwr(buscar_curso), strlwr(ayuda))==0) //Comparará a lo que haya ingresado el usuario sin importar mayúsculas o minúsculas.
{
vrf[i] = 'V';
v = 1;
}
}
std::cout<<std::endl;
if(v == 1)
{
for(int i = 0; i<10; i++)
{
if(vrf[i] == 'V')
{
std::cout<<" Curso: "<<obtener[i].clases.curso<<std::endl;
std::cout<<" Maestro: "<<obtener[i].clases.profesionales<<std::endl;
std::cout<<" Especialidad: "<<obtener[i].clases.profesion<<std::endl;
std::cout<<" Fecha: "<<obtener[i].clases.dia<<"/"<<obtener[i].clases.mes<<"/"<<obtener[i].clases.anio<<std::endl;
std::cout<<std::endl;
e = i; //e que almacenará la posición de i.
}
}
std::cout<<"Ingrese el nuevo nombre: "; std::cin.getline(ayuda, 50, '\n');
strcpy(obtener[e].clases.curso, ayuda); //Reemplazará el nuevo nombre del curso con el original.
system("cls");
std::cout<<"Guardado con exito";
}else{
std::cout<<"Curso no encontrado";
}
std::cout<<std::endl<<std::endl;
break;
default:
std::cout<<"\nUPS! Error en el sistema"; //Default en caso de que haya un error en el programa se pueda saber y que no se cierre el programa de golpe.
getch();
break;
}
}
else{
std::cout<<"Contraseña incorrecta\n\n";
opcion = 1;
}
break;
default: //Default en caso de que haya un error en el programa se pueda saber y que no se cierre el programa de golpe.
system("cls");
std::cout<<"Error: Opción fuera de los parametros\n";
break;
}
}
}while(opcion<=0 || opcion>6);
}while(opcion>0 && opcion<5); //Ciclo do...while que se repetirá mientras se haya elejido una opción diferente de salir (6).
return 0;
}