diff --git a/ArchivoCursos.txt b/ArchivoCursos.txt new file mode 100644 index 0000000..2d3b4e6 --- /dev/null +++ b/ArchivoCursos.txt @@ -0,0 +1,9 @@ +2001,15235,1,2022 +2002,15200,1,2022 +2003,15304,1,2022 +2001,16400,2,2022 +2002,16723,2,2022 +2003,16315,2,2022 +3002,16550,2,2022 +3002,16572,2,2022 +2001,15742,3,2022 diff --git a/ArchivoMaterias.txt b/ArchivoMaterias.txt new file mode 100644 index 0000000..bb55e36 --- /dev/null +++ b/ArchivoMaterias.txt @@ -0,0 +1,6 @@ +2001,Programacion,5,2,Fundamentos programacion +2002,Calculo II,5,2,Derivadas integrales +2003,Lenguaje,2,2,lectura y escritura +3001,Programacion,4,3,Estructura de datos +3002,Calculo III,4,3,Ecuaciones diferencia +3003,estudios gene,2,3,Ciencia Tecnologia diff --git a/ArchivoPersonas.txt b/ArchivoPersonas.txt new file mode 100644 index 0000000..4c012ba --- /dev/null +++ b/ArchivoPersonas.txt @@ -0,0 +1,6 @@ +1234,Pedro Perez,2003,12,12,catia. Caracas,15235,15,N,15200,10,N,15304,15,N,16723,15,N,16550,8,N,16572,17,N,0 +5678,Ana Lopez,2001,10,3,Chacao. Caracas,16400,7,N,16315,18,N,15742,10,N,0 +1123,Jenny Torres,2005,8,31,Rochester. Inglaterra,15235,2,N,15200,11,N,15304,14,N,16400,15,N,16550,2,N,16572,12,N,0 +3456,Jose Mata,2005,3,15,Merida Merida.,16400,16,R,16315,17,R,16550,10,N,0 +7890,Andres Gomez,2003,6,7,Valencia. Carabobo,16400,18,N,16315,15,N,16550,12,N,0 +9012,Carla Diaz,1986,7,4,Maturin. Monagas,15235,10,R,15200,12,N,15304,12,N,16400,17,N,16550,10,R,16572,10,N,0 diff --git a/CentroDeEstudiantes.cpp b/CentroDeEstudiantes.cpp new file mode 100644 index 0000000..1ccae68 --- /dev/null +++ b/CentroDeEstudiantes.cpp @@ -0,0 +1,2362 @@ +/*Gabriel Castellano C.I:28059781,Jesus Gil C.I:30175126,Andres Guilarte C.I:30246084*/ + +#include +#include +#include + +/*estructuras y tipos secundarios*/ +typedef int year; typedef int month; typedef int day; typedef int Codigo_curso; typedef int Codigo_Materia; const int maxEntero=1294967295; + +struct fecha +{ + year yyyy; + month mm; + day dd; +}; + +struct Participacion +{ + Codigo_curso Codigo_del_curso; + int nota; + char status; + Participacion *prx; +}; + +/*Se tienen tres listas principales:*/ +struct Materias +{ + Codigo_Materia Codigo_de_la_Materia;//no se puede repetir + char Nombre_de_la_Materia[30];//no debe estar vacio + char Descripcion_de_la_Materia[100];//no debe estar vacio + int Semestre;// se debe restringir al rango de 1 a 10 + char SemestreEnRomano[5];// se debe restringir al rango de I a X + int Creditos_de_la_Materia;// se debe restringir al rango de 2 a 5 + Materias *prx; +}; + +struct Cursos +{/*Cuando se elimina un curso, deben borrarse todas sus referencias en el sistema.*/ + Codigo_curso Codigo_del_curso;/*Para registrar un curso deben preexistir la materia */ + Codigo_Materia Codigo_de_la_Materia; //debe existir previamente + year AAAA;//se restringe de 1900 a 2100 + int lapso;// se debe restringir al rango de 1 a 3 + Cursos *prx; +}; + +struct Personas +{/*Si se elimina una persona en el sistema deben eliminarse todas sus referencias en el sistema.*/ + long int cedula;// restricion: no se puede modificar + char nombre_apellido[30]; + fecha Fecha_de_Nacimiento; + char direccion[40]; + Participacion *Record; + Personas *prx; +}; + +/*Rutinas*/ +void Encabezado (char Menu[]); +int Verificar_Semestre(); +void Semestre_Romano(int,Materias**); +void Agregar_Materia(Materias**); +void insertar_MateriaOrdenadamente(Materias**,Materias**); +void Agregar_Curso(Cursos**,Materias**); +void insertar_CursoOrdenadamente(Cursos**,Cursos**); +void Agregar_Persona(Personas**); +void insertar_PersonaOrdenadamente(Personas**,Personas**); +int DentrodeRango(int*,int,int); +void ingresarDato(int*,char De[20],int,int); +void Ingresar_codigo(int*,char De[15], Materias**); +void Ingresar_codigo_curso(int*,char De[15],Cursos**); +void Ingresar_cedula(long int*,char De[15],Personas**); +void Ingresar_Fecha(year*,month*,day *); +int Existe_codigo(int,Materias**); +int Existe_codigo_curso(int,Cursos**); +int Existe_cedula(long int,Personas**); +int validar_numero (char numero[]); +void Modificar_Materia(Materias**); +void Modificar_Curso(Cursos**); +void Modificar_Persona(Personas**); +void Consultar_materia(Materias*); +void Consultar_curso(Cursos*); +void Consultar_Personas(Personas*); +void Eliminar_curso_materia (Cursos**,int,Personas *); +void Eliminar_materia (Materias**,Cursos **,Personas *); +void Eliminar_curso (Cursos**,Personas *); +void Eliminar_persona(Personas**); +void Eliminar_curso_persona(Personas *); +void Eliminar_persona_curso(Participacion **, int x); +int Aprob(Participacion *,Cursos *, int ,int ,int *); +void Agregar_nota(Participacion **, int,int); +void Agregar_Curso_persona(Personas *,Cursos *,Materias *); +void Modificar_Curso_persona(Personas **, Cursos **c); +void Modificar_cod_persona(Participacion *, Cursos **); +int Regresa_cod_mat(Cursos *, int x); +int Inscribe_o_no(Cursos *, Participacion *); +void C_NombreMateria(Materias* ,Cursos* ); +void c_Materia(Materias*,Cursos*,Personas*); +void c_CursosDePeriodo(Materias*,Cursos*,Personas*); +void C_NombreAlumno(Personas*); +void C_Aprobados(Personas*,Cursos*); +void C_Cursos(Materias* ,Cursos*,Personas*); +void C_CursosDeAnyoLapso(Materias*,Cursos*,Personas*); +void C_Alumno(Personas*); +char IngresarEstatus(); +int validarStatus(char); +int isdigit(char); +int bisiesto (year); +int LimitarCaracteres (char*,int); +int compararCadenas(char*,char*); +void cambio(char c1[]); +int verificarRuta(char); +void HM(); +void HC(); +void HP(); +void FormatoFecha(fecha); +void FormatoMateria(Materias*); +void FormatoCurso(Cursos*); +void FormatoPersona(Personas*,int); +void calificaciones(Participacion* calificacion); +int Exportar_Materias(Materias*,char ruta[]); +int Exportar_Cursos(Cursos*,char ruta[]); +int Exportar_Personas(Personas*,char ruta[]); +int Importar_Materias(Materias**,char ruta[]); +int Importar_Cursos(Cursos**,Materias*,char ruta[]); +int Importar_Personas(Personas**,Cursos *,char ruta[]); + +int main () +{ + Materias *Materia=NULL;Cursos *Curso =NULL;Personas *Persona=NULL; + char Ruta[150]=""; char Nuevaruta[4]; char UbicacionMenu[80]="MENU PRINCIPAL"; + + printf("\n\tDesea cambiar la ruta de los ficheros?"); + fgets(Nuevaruta,4,stdin);cambio(Nuevaruta);fflush(stdin); + if (Nuevaruta[0]=='Y'||Nuevaruta[0]=='y'||Nuevaruta[0]=='S'||Nuevaruta[0]=='s') + { + do{ + printf("\nIngrese la Nueva ruta (disco:/carpeta/): "); + fgets(Ruta,130,stdin);cambio(Ruta);fflush(stdin); + if (!strcmp(Ruta,""))printf("\nDebe haber una ruta Y "); + if (validar_numero(Ruta))printf("\tla ruta no debe ser numerica\n"); + }while(!strcmp(Ruta,"")||validar_numero(Ruta)); + } + + if (Importar_Materias(&Materia,Ruta));else {printf("no se pudo importar el archivo de Materias\n");system("pause");} + if (Importar_Cursos(&Curso,Materia,Ruta));else {printf("no se pudo importar el archivo de cursos\n");system("pause");} + if (Importar_Personas(&Persona,Curso,Ruta));else {printf("no se pudo importar el archivo de personas\n");system("pause");} + + char opciones[3]; + opciones[0]='0'; + do + {//Menu + system("cls"); + Encabezado(UbicacionMenu); + printf("Ruta = %s \n", UbicacionMenu); + printf("\n 1- MANTENIMIENTO\n 2- CONTROL DE ESTUDIOS\n 3- CONSULTAS\n\n 0- SALIR\n\n Escriba su opcion (0-3) = "); + fflush(stdin);fgets(opciones,2,stdin);cambio(opciones);fflush(stdin); + if(opciones[1]!='\0') + printf(" \n Esta opcion no es valida\n\n"); + else + switch(opciones[0]) + { + case '1'://Mantenimiento del sistema + { + char opciones_mantenimiento[3]; + opciones_mantenimiento[0]='0'; + do + {//Menu de Mantenimiento del sistema + system("cls"); + Encabezado("MENU DE MANTENIMIENTO");char UbicacionMenu[80]="MENU PRINCIPAL/";strcat(UbicacionMenu, "MANTENIMIENTO/"); + printf("Ruta = %s \n", UbicacionMenu); + printf("\n 1- Materias\n 2- Cursos\n 3- Personas\n\n 0- SALIR\n\n Escriba su opcion (0-3) = "); + fflush(stdin);fgets(opciones_mantenimiento,2,stdin);cambio(opciones_mantenimiento);fflush(stdin); + if(opciones_mantenimiento[1]!='\0') + printf(" \n Esta opcion no es valida\n\n"); + else + switch(opciones_mantenimiento[0]) + { + case '1': + { + char opciones_mantenimiento_Materia[3]; + opciones_mantenimiento_Materia[0]='0'; + do + {//Menu de Mantenimiento Materias + system("cls"); + Encabezado("MENU DE MANTENIMIENTO DE MATERIAS");char UbicacionMenu[80]="MENU PRINCIPAL/"; strcat(UbicacionMenu, "MANTENIMIENTO/MATERIAS"); + printf("Ruta = %s \n", UbicacionMenu); + printf("\n 1- Agregar\n 2- Modificar\n 3- Consultar\n 4- Eliminar\n\n 0- SALIR\n\n Escriba su opcion (0-4) = "); + fflush(stdin);fgets(opciones_mantenimiento_Materia,2,stdin);cambio(opciones_mantenimiento_Materia);fflush(stdin); + if(opciones_mantenimiento_Materia[1]!='\0') + printf(" \n Esta opcion no es valida\n\n"); + else + switch(opciones_mantenimiento_Materia[0]) + { + case '1'://Agregar Materia + Agregar_Materia(&Materia); break; + + case '2'://Modificar + Modificar_Materia(&Materia);break; + + case '3'://Consultar + Consultar_materia(Materia);break; + + case '4'://Eliminar + Eliminar_materia(&Materia,&Curso,Persona);break; + + default: + if (opciones_mantenimiento_Materia[0]!='0') + {printf("\n\nEsta opcion no es valida\n");system("pause");break;} + } + }while (opciones_mantenimiento_Materia[0]!='0'); + if (Exportar_Materias(Materia,Ruta)); + else printf("\t Se genero un error al exportar las materias, no se guardo en memoria secundaria\n"); + if (Exportar_Cursos(Curso,Ruta)); + else printf("\t Se genero un error al exportar los cursos, no se guardo en memoria secundaria\n"); + if (Exportar_Personas(Persona,Ruta)); + else printf("\t Se genero un error al exportar las personas, no se guardo en memoria secundaria\n"); + break; + } + case '2': + { + char opciones_mantenimiento_Cursos[3]; + opciones_mantenimiento_Cursos[0]='0'; + do + {//Menu de Mantenimiento Cursos + system("cls"); + Encabezado("MENU DE MANTENIMIENTO DE CURSOS");char UbicacionMenu[80]="MENU PRINCIPAL/"; strcat(UbicacionMenu, "MANTENIMIENTO/CURSOS"); + printf("Ruta = %s \n", UbicacionMenu); + printf("\n 1- Agregar\n 2- Modificar\n 3- Consultar\n 4- Eliminar\n\n 0- SALIR\n\n Escriba su opcion (0-4) = "); + fflush(stdin);fgets(opciones_mantenimiento_Cursos,2,stdin);cambio(opciones_mantenimiento_Cursos);fflush(stdin); + if(opciones_mantenimiento_Cursos[1]!='\0') + printf(" \n Esta opcion no es valida\n\n"); + else + switch(opciones_mantenimiento_Cursos[0]) + { + case '1'://Agregar + Agregar_Curso(&Curso,&Materia);break; + + case '2'://Modificar + Modificar_Curso(&Curso);break; + + case '3'://Consultar + Consultar_curso(Curso);break; + + case '4'://Eliminar + Eliminar_curso(&Curso,Persona);break; + + default: + if (opciones_mantenimiento_Cursos[0]!='0') + {printf("\n\nEsta opcion no es valida\n");system("pause");break;} + } + }while (opciones_mantenimiento_Cursos[0]!='0'); + if (Exportar_Cursos(Curso,Ruta)); + else printf("\t Se genero un error al exportar los cursos, no se guardo en memoria secundaria\n"); + if (Exportar_Personas(Persona,Ruta)); + else printf("\t Se genero un error al exportar las personas, no se guardo en memoria secundaria\n"); + break; + } + case '3': + { + char opciones_mantenimiento_Personas[3]; + opciones_mantenimiento_Personas[0]='0'; + do + {//Menu de Mantenimiento Personas + system("cls"); + Encabezado("MENU MANTENIMIENTO DE PERSONAS");char UbicacionMenu[80]="MENU PRINCIPAL/"; strcat(UbicacionMenu, "MANTENIMIENTO/PERSONAS"); + printf("Ruta = %s \n", UbicacionMenu); + printf("\n 1- Agregar\n 2- Modificar\n 3- Consultar\n 4- Eliminar\n\n 0- SALIR\n\n Escriba su opcion (0-4) = "); + fflush(stdin);fgets(opciones_mantenimiento_Personas,2,stdin);cambio(opciones_mantenimiento_Personas);fflush(stdin); + if(opciones_mantenimiento_Personas[1]!='\0') + printf(" \n Esta opcion no es valida\n\n"); + else + switch(opciones_mantenimiento_Personas[0]) + { + case '1'://Agregar + Agregar_Persona(&Persona); + break; + + case '2'://Modificar + Modificar_Persona(&Persona); + break; + + case '3'://Consultar + Consultar_Personas(Persona); + break; + + case '4': + Eliminar_persona(&Persona); + break; + + default: + if (opciones_mantenimiento_Personas[0]!='0') + {printf("\n\nEsta opcion no es valida\n");system("pause");break;} + } + }while (opciones_mantenimiento_Personas[0]!='0'); + if (Exportar_Personas(Persona,Ruta)); + else printf("\t se genero un error al exportar las personas, no se guardo en memoria secundaria\n"); + break; + } + default: + if (opciones_mantenimiento[0]!='0') + {printf("\n\nEsta opcion no es valida\n");system("pause");break;} + } + }while (opciones_mantenimiento[0]!='0'); + break; + } + + case '2': + { + char opciones_control_estudios[3]; + opciones_control_estudios[0]='0'; + do + {//Menu Control de Estudios + system("cls"); + Encabezado("MENU CONTROL DE ESTUDIOS");char UbicacionMenu[80]="MENU PRINCIPAL/"; strcat(UbicacionMenu, "CONTROL DE ESTUDIOS/"); + printf("Ruta = %s \n", UbicacionMenu); + printf(" 1- Agregar alumnos \n 2- Modificar alumnos \n 3- Eliminar alumnos\n\n 0- SALIR\n\n Escriba su opcion (0-3) = "); + fflush(stdin);fgets(opciones_control_estudios,2,stdin);cambio(opciones_control_estudios);fflush(stdin); + if(opciones_control_estudios[1]!='\0') + printf(" \n Esta opcion no es valida\n\n"); + else + switch(opciones_control_estudios[0]) + { + case '1'://Agregar alumnos + Agregar_Curso_persona(Persona,Curso,Materia); + break; + + case '2'://Modificar alumnos + Modificar_Curso_persona(&Persona,&Curso); + break; + + case '3'://eliminar alumnos en cursos con sus notas correspondientes. + Eliminar_curso_persona(Persona); + break; + + default: + if (opciones_control_estudios[0]!='0') + {printf("\n\nEsta opcion no es valida\n");system("pause");break;} + } + if (Exportar_Personas(Persona,Ruta)); + else + printf("\t se genero un error al exportar las personas, no se guardo en memoria secundaria\n"); + + }while (opciones_control_estudios[0]!='0'); + break; + } + + case '3': + { + char opciones_consultas[3]; + opciones_consultas[0]='0'; + do + {//Menu Reportes + system("cls"); + Encabezado("MENU DE REPORTES");char UbicacionMenu[80]="MENU PRINCIPAL/"; strcat(UbicacionMenu, "REPORTES/"); + printf("Ruta = %s \n", UbicacionMenu); + printf(" \n\n 1-Buscar codigos por nombre\n 2-Buscar cedula por nombre\n 3-cursos de cierto a%co y lapso\n 4-Datos de Materia \n 5-Todos los cursos \n 6-Alumnos aprobados en una materia \n 7-Cursos de un periodo \n 8-Notas por cedula\n 0- SALIR\n\n ",164); + fflush(stdin);fgets(opciones_consultas,2,stdin);cambio(opciones_consultas);fflush(stdin); + if(opciones_consultas[1]!='\0') + printf(" \n Esta opcion no es valida\n\n"); + else + switch(opciones_consultas[0]) + { + case '1'://Dado un nombre de curso(materia ya que los cursos no tienen nombre) buscar su c�digo. + printf("\n\tDado un nombre de materia buscar sus codigos asociados\n\n"); + C_NombreMateria(Materia,Curso); + break; + + case '2'://Dado un nombre de alumno buscar su(s) c�dula(s) asociada(s) y dem�s datos (sin�nimos para ubicar la c�dula que nos interesa). + printf("\n\tDado un nombre buscar cedulas asociadas\n\n"); + C_NombreAlumno(Persona); + break; + + case '3'://Dado un anyo y un lapso ubicar todos los cursos dictados ( nombre de curso, materia, cantidad de alumnos aprobados y reprobados) + printf("\n\tDado un a%co(AAAA) y lapso mostrar cursos \n\n",164); + C_CursosDeAnyoLapso(Materia,Curso,Persona); + break; + + case '4': //Dado un codigo de materia mostrar todos los cursos que la han dictado (nombre de curso, materia, cantidad de alumnos aprobados y reprobados) + printf("\n\tDada una materia se muestran todos sus datos relacionados \n\n"); + c_Materia(Materia,Curso,Persona); + break; + + case '5'://Dado un codigo de curso mostrar todos los datos del mismo con la materia y los alumnos con sus notas + printf("\n\tTodos los cursos con materia, personas y notas \n\n"); + C_Cursos(Materia,Curso,Persona); + break; + + case '6'://Dada una materia ( codigo ) mostrar los alumnos que la han aprobado (cedula, apellido y nombre con su nota ) + printf("\n\tDada una materia mostrar alumnos aprobados \n\n"); + C_Aprobados(Persona,Curso); + system("Pause"); + break; + + case '7'://Todos los cursos (con sus alumnos y notas) dictados en un periodo(Semestre) dado. + printf("\n\ttTodos los cursos de un periodo con personas y notas \n\n"); + c_CursosDePeriodo(Materia,Curso,Persona); + break; + + case '8'://Dada una cedula mostrar todos los cursos con sus notas tomadas por esa persona + printf("\n\tDada una cedula mostrar datos con cursos y notas \n\n"); + C_Alumno(Persona); + break; + + default: + if (opciones_consultas[0]!='0') + {printf("\n\nEsta opcion no es valida\n");system("pause");break;} + } + }while (opciones_consultas[0]!='0'); + break; + } + + default: + if (opciones[0]!='0') + {printf("\n\nEsta opcion no es valida\n");system("pause");break;} + } + }while (opciones[0]!='0'); + system("pause"); + return 0; +} + +void Encabezado (char Menu[40]) +{printf ("\n\t %s\n\n", Menu);} + +void Agregar_Materia(Materias **Lista_materia) +{/*Crea un nodo llamado aux y lo ingresa en la lista de materias*/ + Materias *Aux= new Materias; fflush(stdin); + Ingresar_codigo(&Aux->Codigo_de_la_Materia,"de la materia",Lista_materia); + do{ + printf("\nIngrese el nombre de la materia: ");fflush(stdin); + fgets(Aux->Nombre_de_la_Materia,30,stdin);cambio(Aux->Nombre_de_la_Materia);fflush(stdin); + if (!strcmp(Aux->Nombre_de_la_Materia,"")) + printf("\nLa materia debe tener un nombre "); + else + if (validar_numero(Aux->Nombre_de_la_Materia)) + printf("\tAdvertencia: El nombre de la materia es Numerico\n"); + }while(!strcmp(Aux->Nombre_de_la_Materia,"")); + do{ + printf("\nIngrese la Descripcion de la materia: "); + fgets(Aux->Descripcion_de_la_Materia,100,stdin);cambio(Aux->Descripcion_de_la_Materia);fflush(stdin); + if (!strcmp(Aux->Descripcion_de_la_Materia,"")) + printf("\nDebe haber una descripcion "); + else + if (validar_numero(Aux->Descripcion_de_la_Materia)) + printf("\tAdvertencia: la descripcion de la materia es Numerica\n"); + }while(!strcmp(Aux->Descripcion_de_la_Materia,"")); + Aux->Semestre=Verificar_Semestre(); + Semestre_Romano(Aux->Semestre,&Aux);fflush(stdin); + ingresarDato(&Aux->Creditos_de_la_Materia,"Creditos de la materia",5,2); + insertar_MateriaOrdenadamente( Lista_materia, &Aux); + printf("\n Se agrego a : \n");HM();FormatoMateria(Aux);system("Pause"); +} + +void insertar_MateriaOrdenadamente( Materias **lista, Materias **Nuevo_nodo) +{/*Inserta el nodo materia de manera ordenada en la lista ordenada*/ + if (*lista==NULL || (*Nuevo_nodo)->Semestre<(*lista)->Semestre)//mientras el nuevo nodo sea la nueva cabeza + { + (*Nuevo_nodo)->prx = *lista;//apunta a lo que apuntaba p + *lista = *Nuevo_nodo;//hace el nuevo nodo cabeza + }else + { + Materias *aux=*lista;//crea un auxiliar + while(aux->prx && aux->prx->Semestre <= (*Nuevo_nodo)->Semestre) + aux=aux->prx;// este avanza hasta encontrar la posicion + (*Nuevo_nodo)->prx=aux->prx;//enlazamos el nodo a lo que apunta e auxiliar + aux->prx=*Nuevo_nodo; //enlazamos el auxiliar al nuevo nodo + } +} + +void Agregar_Curso(Cursos **c,Materias **Materia) +{/*Dado un codigo de materia permite Ingresar un curso*/ + Cursos *Aux=*c;int cod; + if(*Materia) + {/*si existen materias procede a generar*/ + ingresarDato(&cod,"Codigo de la materia",maxEntero,1); + if(Existe_codigo(cod,Materia)) + { + Cursos *Aux= new Cursos;printf("\n"); + Aux->Codigo_de_la_Materia = cod; + Ingresar_codigo_curso(&Aux->Codigo_del_curso,"del Curso", c);printf("\n"); + ingresarDato(&Aux->AAAA,"Anio del curso",2100,1900);printf("\n"); + ingresarDato(&Aux->lapso,"Lapso del curso",3,1); + insertar_CursoOrdenadamente(c,&Aux); + printf("\n Se agrego a : \n");HC();FormatoCurso(Aux);system("Pause"); + }else + {printf("La materia no existe, por lo que no se creara el curso\n");system("Pause");} + }else + {printf("No existen materias, por lo que no se pueden crear cursos\n");system("Pause");} +} + +void insertar_CursoOrdenadamente( Cursos **lista, Cursos **Nuevo_nodo) +{/*Inserta el nodo materia de manera ordenada en la lista ordenada*/ + if (*lista==NULL || (*Nuevo_nodo)->lapso<(*lista)->lapso)//mientras el nuevo nodo sea la nueva cabeza + { + (*Nuevo_nodo)->prx = *lista;//apunta a lo que apuntaba p + *lista = *Nuevo_nodo;//hace el nuevo nodo cabeza + }else + { + Cursos *aux=*lista;//crea un auxiliar + while(aux->prx && aux->prx->lapso <= (*Nuevo_nodo)->lapso) + aux=aux->prx;// este avanza hasta encontrar la posicion + (*Nuevo_nodo)->prx=aux->prx;//enlazamos el nodo a lo que apunta e auxiliar + aux->prx=*Nuevo_nodo; //enlazamos el auxiliar al nuevo nodo + } +} + +void Agregar_Persona(Personas **Nueva_persona) +{ + Personas *aux=new Personas; + Ingresar_cedula(&aux->cedula,"del estudiante",Nueva_persona); + do{ + printf("\n Ingrese nombre y apellido de la persona: "); + fflush(stdin);fgets(aux->nombre_apellido,40,stdin);cambio(aux->nombre_apellido);fflush(stdin); + if (!strcmp(aux->nombre_apellido,"")) + printf("\nLa Persona debe tener un nombre "); + else + if (validar_numero(aux->nombre_apellido)) + printf("\t El nombre de la Persona es Numerico\n"); + }while(!strcmp(aux->nombre_apellido,"")||validar_numero(aux->nombre_apellido)); + Ingresar_Fecha(&aux->Fecha_de_Nacimiento.yyyy,&aux->Fecha_de_Nacimiento.mm,&aux->Fecha_de_Nacimiento.dd); + do{ + printf("\n Ingrese la direccion: "); + fflush(stdin);fgets(aux->direccion,40,stdin);cambio(aux->direccion);fflush(stdin); + if (!strcmp(aux->direccion,"")) + printf("\nLa direccion debe tener un nombre "); + else + if (validar_numero(aux->direccion)) + printf("advertencia: la direcion es Numerica\n"); + }while(!strcmp(aux->direccion,"")); + aux->Record = NULL; + insertar_PersonaOrdenadamente(Nueva_persona,&aux); + printf("\n Se agrego a : \n");HP();FormatoPersona(aux,false);system("Pause"); +} + +void insertar_PersonaOrdenadamente( Personas **lista, Personas **Nuevo_nodo) +{ + if (*lista==NULL || (*Nuevo_nodo)->cedula<(*lista)->cedula)//mientras el nuevo nodo sea la nueva cabeza + { + (*Nuevo_nodo)->prx = *lista;//apunta a lo que apuntaba p + *lista = *Nuevo_nodo;//hace el nuevo nodo cabeza + }else + { + Personas *aux=*lista;//crea un auxiliar + while(aux->prx && aux->prx->cedula <= (*Nuevo_nodo)->cedula) + aux=aux->prx;// este avanza hasta encontrar la posicion + (*Nuevo_nodo)->prx=aux->prx;//enlazamos el nodo a lo que apunta e auxiliar + aux->prx=*Nuevo_nodo; //enlazamos el auxiliar al nuevo nodo + } +} + +void Modificar_Materia(Materias **materia) +{/*Verificar*/ + Materias *Respaldo= *materia; int Elegido; + if (*materia) + { + Materias *consulta=*materia, *temp=NULL; + ingresarDato(&Elegido," Codigo de La materia a modificar",maxEntero,1); + while((Respaldo)&&(Respaldo->Codigo_de_la_Materia != Elegido)) + Respaldo=Respaldo->prx; + if (!Respaldo) + {printf("\n\tLa materia [%i] no se encuentra\n", Elegido);system("pause");} + else + { + char opciones_de_Modificacion[3]; + opciones_de_Modificacion[0]=0; + do + {//Menu de Mantenimiento Cursos + system("cls");printf("\t Que desea modificar?\n\n"); + printf(" 1- Nombre de la materia\n 2- Descripcion de la materia\n 3- Semestre de la materia\n 4- Creditos de la materia\n\n 0- SALIR\n\n Escriba su opcion (0-4) = "); + fflush(stdin);fgets(opciones_de_Modificacion,2,stdin);cambio(opciones_de_Modificacion);fflush(stdin); + if(opciones_de_Modificacion[1]!='\0') + printf(" \n Esta opcion no es valida\n\n"); + else + switch(opciones_de_Modificacion[0]) + { + case '1'://Nombre + do{ + printf("\nIngrese el nuevo nombre de la materia: ");fflush(stdin); + fflush(stdin);fgets(Respaldo->Nombre_de_la_Materia,30,stdin);cambio(Respaldo->Nombre_de_la_Materia);fflush(stdin); + if (!strcmp(Respaldo->Nombre_de_la_Materia,"")) + printf("\nLa materia debe tener un nombre "); + else + if (validar_numero(Respaldo->Nombre_de_la_Materia)) + printf("\tAdvertencia: El nombre de la materia es Numerico\n"); + }while(!strcmp(Respaldo->Nombre_de_la_Materia,"")); + printf("\nNombre de [%s] modificado ",Respaldo->Nombre_de_la_Materia);system("Pause"); + break; + + case '2'://Descripcion + do{ + printf("\nIngrese la nueva Descripcion de la materia: "); + fflush(stdin);fgets(Respaldo->Descripcion_de_la_Materia,100,stdin);cambio(Respaldo->Descripcion_de_la_Materia);fflush(stdin);fflush(stdin); + if (!strcmp(Respaldo->Descripcion_de_la_Materia,"")) + printf("\nDebe haber una descripcion "); + else + if (validar_numero(Respaldo->Descripcion_de_la_Materia)) + printf("\tAdvertencia: La descripcion de la materia es Numerica\n"); + }while(!strcmp(Respaldo->Descripcion_de_la_Materia,"")); + printf("\nDescripcion de [%s] modificada a [%s] ",Respaldo->Nombre_de_la_Materia,Respaldo->Descripcion_de_la_Materia);system("Pause"); + break; + + case '3'://Semestre + Respaldo->Semestre=Verificar_Semestre();fflush(stdin); + Semestre_Romano(Respaldo->Semestre,&Respaldo);fflush(stdin); + printf("\nSemestre de [%s] modificado a [%s] ",Respaldo->Nombre_de_la_Materia,Respaldo->SemestreEnRomano);system("Pause"); + break; + + case '4'://Creditos + ingresarDato(&Respaldo->Creditos_de_la_Materia,"ingrese los creditos ",5,2); + printf("Creditos de [%s] modificados a [%i] ",Respaldo->Nombre_de_la_Materia, Respaldo->Creditos_de_la_Materia);system("Pause"); + break; + + default: + if (opciones_de_Modificacion[0]!='0') + {printf("\n\nEsta opcion no es valida\n");system("pause");break;} + } + }while (opciones_de_Modificacion[0]!='0'); + Respaldo = *materia; + } + }else + {printf("\n\tNO HAY MATERIAS PARA MODIFICAR\n");system("pause");} +} + +void Modificar_Curso(Cursos **curso) +{ + Cursos *Respaldo= *curso; int Elegido; + if (*curso) + { + Cursos *consulta=*curso, *temp=NULL; + ingresarDato(&Elegido," Codigo del curso a modificar",maxEntero,1); + while((Respaldo)&&(Respaldo->Codigo_del_curso != Elegido)) + Respaldo=Respaldo->prx; + if (!Respaldo) + {printf("\n\tEl curso [%i] no se encuentra\n", Elegido);system("pause");} + else + { + char opciones_de_Modificacion[3]; + opciones_de_Modificacion[0]=0; + do{//Menu de Mantenimiento Cursos + system("cls"); + printf("\t Que desea modificar?\n\n"); + printf(" 1- Anio del curso\n 2- Lapso del curso\n 0- SALIR\n\n Escriba su opcion (0-2) = "); + fflush(stdin);fgets(opciones_de_Modificacion,2,stdin);cambio(opciones_de_Modificacion);fflush(stdin); + if(opciones_de_Modificacion[1]!='\0') + printf(" \n Esta opcion no es valida\n\n"); + else + switch(opciones_de_Modificacion[0]) + { + case '1'://Anio + ingresarDato(&Respaldo->AAAA,"Ingrese el nuevo anio",maxEntero,1); + printf("Se modifico el anio de %i ",Respaldo->Codigo_del_curso); + system("Pause"); + break; + + case '2'://Lapso + ingresarDato(&Respaldo->lapso, "Lapso",3,1); + printf("Se modifico el lapso de %i ",Respaldo->Codigo_del_curso); + system("Pause"); + break; + + default: + if (opciones_de_Modificacion[0]!='0') + {printf("\n\nEsta opcion no es valida\n");system("pause");break;} + } + }while (opciones_de_Modificacion[0]!='0'); + Respaldo = *curso; + } + }else + {printf("\n\tNO HAY CURSOS PARA MODIFICAR\n");system("pause");} +} + +void Modificar_Persona(Personas **persona) +{ + Personas *Respaldo= *persona; int Elegido; + if (*persona) + { + Personas *consulta=*persona, *temp=NULL; + ingresarDato(&Elegido," Cedula del estdiante a modificar",maxEntero,1); + while((Respaldo)&&(Respaldo->cedula != Elegido)) + Respaldo=Respaldo->prx; + if (!Respaldo) + {printf("\n\tEl estudiante de cedula [%i] no se encuentra\n", Elegido);system("pause");} + else + { + char opciones_de_Modificacion[3]; + opciones_de_Modificacion[0]=0; + do{//Menu de Mantenimiento Cursos + system("cls"); + printf("\t Que desea modificar?\n\n"); + printf(" 1- Nombre y apellido\n 2- Fecha de nacimiento\n 3- Direccion\n 0- SALIR\n\n Escriba su opcion (0-3) = "); + fflush(stdin);fgets(opciones_de_Modificacion,2,stdin);cambio(opciones_de_Modificacion);fflush(stdin); + if(opciones_de_Modificacion[1]!='\0') + printf(" \n Esta opcion no es valida\n\n"); + else + switch(opciones_de_Modificacion[0]) + { + case '1'://Nombre y apellido + do{ + printf("\n Ingrese el nuevo nombre nombre y apellido de la persona: "); + fflush(stdin);fgets(Respaldo->nombre_apellido,40,stdin);cambio(Respaldo->nombre_apellido);fflush(stdin); + if (!strcmp(Respaldo->nombre_apellido,"")) + printf("\nLa persona debe tener un nombre "); + else + if (validar_numero(Respaldo->nombre_apellido)) + printf("\t El nombre de la Persona es Numerico\n"); + }while(!strcmp(Respaldo->nombre_apellido,"")||validar_numero(Respaldo->nombre_apellido)); + printf("\nNombre de [%i] modificado a [%s] ",Respaldo->cedula, Respaldo->nombre_apellido);system("Pause"); + fflush(stdin); + break; + + case '2'://Fecha de nacimiento + Ingresar_Fecha(&Respaldo->Fecha_de_Nacimiento.yyyy,&Respaldo->Fecha_de_Nacimiento.mm,&Respaldo->Fecha_de_Nacimiento.dd); + printf("\nFecha de nacimiento de [%i] modificada ",Respaldo->cedula);system("Pause"); + break; + + case '3'://Direccion + do{ + printf("\nIngrese la nueva direccion: "); + fflush(stdin);fgets(Respaldo->direccion,40,stdin);cambio(Respaldo->direccion);fflush(stdin); + if (!strcmp(Respaldo->direccion,"")) + printf("\nLa direccion debe tener un nombre "); + else + if (validar_numero(Respaldo->direccion)) + printf("Advertencia: La direcion es Numerica\n"); + }while(!strcmp(Respaldo->direccion,"")); + printf("\nDireccion de [%i] modificada a [%s] ",Respaldo->cedula, Respaldo->direccion);system("Pause"); + break; + + default: + if (opciones_de_Modificacion[0]!='0') + {printf("\n\nEsta opcion no es valida\n");system("pause");break;} + } + }while (opciones_de_Modificacion[0]!='0'); + Respaldo = *persona; + } + }else + {printf("\n\tNO HAY PERSONAS PARA MODIFICAR\n");system("pause");} +} + +void Ingresar_codigo( int *codigo,char De[15], Materias **q) +{ + char copia[10];int Numero_valido; + do + { + printf("Codigo %s:",De);fflush(stdin); + gets_s(copia);fflush(stdin); + Numero_valido=validar_numero(copia); + *codigo=atoi(copia); + int z= Existe_codigo(*codigo,q); + if( (*codigo>=maxEntero) || (*codigo<=0) || (!(Numero_valido))||(z)) + printf("\n Este codigo no es valido (INGRESE OTRO)\n"); + }while ( (*codigo>=maxEntero) || (*codigo<=0) || (!(Numero_valido))||(Existe_codigo(*codigo,q))); + *codigo=atoi(copia); +} + +void Ingresar_codigo_curso( int *codigo,char De[15], Cursos **q) +{ + char copia[10];int Numero_valido; + do + { + printf("Codigo %s:",De); + fflush(stdin);gets_s(copia);fflush(stdin); + Numero_valido=validar_numero(copia); + *codigo=atoi(copia); + int z= Existe_codigo_curso(*codigo,q); + if( (*codigo>=maxEntero) || (*codigo<=0) || (!(Numero_valido))||(z)) + printf("\n Este codigo no es valido (INGRESE OTRO)\n"); + }while ( (*codigo>=maxEntero) || (*codigo<=0) || (!(Numero_valido))||(Existe_codigo_curso(*codigo,q))); + *codigo=atoi(copia); +} + +void Ingresar_cedula( long int *codigo,char De[15], Personas **q) +{ + char copia[10];int Numero_valido; + do + { + printf("Cedula %s:",De); + fflush(stdin);gets_s(copia);fflush(stdin); + Numero_valido=validar_numero(copia); + *codigo=atol(copia); + int z= Existe_cedula(*codigo,q); + if( (*codigo>=maxEntero) || (*codigo<=0) || (!(Numero_valido))||(z)) + printf("\n Esta cedula no es valida (INGRESE OTRO)\n"); + }while ( (*codigo>=maxEntero) || (*codigo<=0) || (!(Numero_valido))||(Existe_cedula(*codigo,q))); + *codigo=atol(copia); +} + +int DentrodeRango(int *Valor,int mayor,int menor) +{ + if (*Valor>mayor||*Valorprx) + { + Materias *aux=*En_Materias; + while(aux) + {/**/ + if(aux->Codigo_de_la_Materia == codigo) + return 1; + else + aux=aux->prx; + } + return 0; + }else + {/**/ + Materias *aux=*En_Materias; + if(aux->Codigo_de_la_Materia == codigo) + return 1; + else + return 0; + } + } + else + return 0; +} + +int Existe_codigo_curso(int codigo,Cursos **En_Cursos) +{ + if(*En_Cursos) + { + if((*En_Cursos)->prx) + { + Cursos *aux=*En_Cursos; + while(aux) + {/**/ + if(aux->Codigo_del_curso == codigo) + return 1; + else + aux=aux->prx; + } + return 0; + }else + {/**/ + Cursos *aux=*En_Cursos; + if(aux->Codigo_del_curso == codigo) + return 1; + else + return 0; + } + } + else + return 0; +} + +int Existe_cedula(long int codigo,Personas **En_Personas) +{ + if(*En_Personas) + { + if((*En_Personas)->prx) + { + Personas *aux=*En_Personas; + while(aux) + {/**/ + if(aux->cedula == codigo) + return 1; + else + aux=aux->prx; + } + return 0; + }else + {/**/ + Personas *aux=*En_Personas; + if(aux->cedula == codigo) + return 1; + else + return 0; + } + } + else + return 0; +} + +int Verificar_Semestre() +{// lee romanos devuelve entero + char aux[5]; + do{/*Ciclo infinito hasta que retorne algun valor*/ + printf("\nIngrese el semestre de la materia: "); + fflush(stdin);fgets(aux,4,stdin);cambio(aux); + if (aux[0]=='\0')printf("Por favor ingrese un semestre \n"); + if (((aux[0]=='I')||(aux[0]=='i'))&&(aux[1]=='\0')) + return 1; + if (((aux[0]=='I')||(aux[0]=='i'))&&((aux[1]=='I')||(aux[1]=='i'))&&(aux[2]=='\0')) + return 2; + if (((aux[0]=='I')||(aux[0]=='i'))&&((aux[1]=='I')||(aux[1]=='i'))&&((aux[2]=='I')||(aux[2]=='i'))&&(aux[3]=='\0')) + return 3; + if (((aux[0]=='I')||(aux[0]=='i'))&&((aux[1]=='V')||(aux[1]=='v'))&&(aux[2]=='\0')) + return 4; + if (((aux[0]=='V')||(aux[0]=='v'))&&(aux[1]=='\0')) + return 5; + if (((aux[0]=='V')||(aux[0]=='v'))&&((aux[1]=='I')||(aux[1]=='i'))&&(aux[2]=='\0')) + return 6; + if (((aux[0]=='V')||(aux[0]=='v'))&&((aux[1]=='I')||(aux[1]=='i'))&&((aux[2]=='I')||(aux[2]=='i'))&&(aux[3]=='\0')) + return 7; + if (((aux[0]=='V')||(aux[0]=='v'))&&((aux[1]=='I')||(aux[1]=='i'))&&((aux[2]=='I')||(aux[2]=='i'))&&((aux[3]=='I')||(aux[3]=='i'))&&(aux[4]=='\0')) + return 8; + if (((aux[0]=='I')||(aux[0]=='i'))&&((aux[1]=='X')||(aux[1]=='x'))&&(aux[2]=='\0')) + return 9; + if (((aux[0]=='X')||(aux[0]=='x'))&&(aux[1]=='\0')) + return 10; + printf("\tEl semestre ingresado no es valido, intente denuevo"); fflush(stdin); + }while(true); +} + +void Semestre_Romano(int Numero,Materias **Nodo) +{// dado un numero del 1 al 10, lo convierte en romano + switch (Numero) + { + case 1: + strcpy((*Nodo)->SemestreEnRomano,"I"); + break; + case 2: + strcpy((*Nodo)->SemestreEnRomano,"II"); + break; + case 3: + strcpy((*Nodo)->SemestreEnRomano,"III"); + break; + case 4: + strcpy((*Nodo)->SemestreEnRomano,"IV"); + break; + case 5: + strcpy((*Nodo)->SemestreEnRomano,"V"); + break; + case 6: + strcpy((*Nodo)->SemestreEnRomano,"VI"); + break; + case 7: + strcpy((*Nodo)->SemestreEnRomano,"VII"); + break; + case 8: + strcpy((*Nodo)->SemestreEnRomano,"VIII"); + break; + case 9: + strcpy((*Nodo)->SemestreEnRomano,"IX"); + break; + case 10: + strcpy((*Nodo)->SemestreEnRomano,"X"); + break; + default: + break; + } +} + +int validar_numero (char numero[]) +{/*Funcion que nos permite validar dado un string, saber si tiene solo numeros*/ + for(int i=0;unsigned(i)prx;} + system("pause"); + break; + + case '2': + int x,cont;x=Verificar_Semestre();cont=0; + HM(); + while(consulta) + { /*imprime los datos del nodo de la materia y pasa al siguiente nodo*/ + if (x==consulta->Semestre) + {FormatoMateria(consulta);cont++;} + consulta=consulta->prx; + } + if (!cont) + printf("\n\tNo hay materias de dicho semestre\n\n"); + system("pause"); + break; + + case '3': + char nombre[30];int Mats;Mats=0; + printf("\n\tIngrese el nombre a buscar:"); + fflush(stdin);fgets(nombre,30,stdin);cambio(nombre);fflush(stdin); + while(consulta) + { /*imprime los datos del nodo de la materia y pasa al siguiente nodo*/ + if (strstr(strupr(consulta->Nombre_de_la_Materia),strupr(nombre))!=NULL) + {FormatoMateria(consulta);Mats++;} + consulta=consulta->prx; + } + if (!Mats) + printf("\n\t No hay materias con nombres que coincidan\n"); + system("pause"); + break; + + case '4': + int y;ingresarDato(&y,"Codigo a consultar",maxEntero,1); + HM(); + while(consulta) + { /*imprime los datos del nodo de la materia y pasa al siguiente nodo*/ + if (y==consulta->Codigo_de_la_Materia) + FormatoMateria(consulta); + consulta=consulta->prx; + } + system("pause"); + break; + + default: + if (opciones_Consulta[0]!='0') + {printf("\n\nEsta opcion no es valida\n");system("pause");} + break; + } + }while (opciones_Consulta[0]!='0'); + }else + {printf("No hay materias para consultar\n");system("pause");} +} + +void C_NombreMateria(Materias* consulta,Cursos* CursosAsociado) +{ + char nombre[30];int cont=0; + printf("\n\tIngrese el nombre a buscar:"); + fflush(stdin);fgets(nombre,30,stdin);cambio(nombre);fflush(stdin); + HM(); + while(consulta) + { /*imprime los datos del nodo de la materia y pasa al siguiente nodo*/ + if (strstr(strupr (consulta->Nombre_de_la_Materia),strupr (nombre))!=NULL) + { + FormatoMateria(consulta);int cont2=0; + printf("\tCursos asociados a %s:\n\n",consulta->Nombre_de_la_Materia);HC(); + while(CursosAsociado) + { + if(consulta->Codigo_de_la_Materia==CursosAsociado->Codigo_de_la_Materia) + {FormatoCurso(CursosAsociado);cont2++;} + CursosAsociado=CursosAsociado->prx; + } + if (!cont2) + printf("\tNingun curso fue asociado a esta materia\n\n"); + cont++; + } + consulta=consulta->prx; + } + if (!cont) + printf("\n\t No hay materias con nombres que coincidan\n"); + system("pause"); +} + +void Consultar_curso(Cursos *Los_cursos) +{ + if(Los_cursos) + { + char opciones_Consulta[5]; + opciones_Consulta[0]='0'; + do + { + Cursos *consulta=Los_cursos;;system("cls"); + printf("\t Consultar\n\n"); + printf(" 1- Todas los cursos\n 2- Cursos de cierto año \n 3- Cursos de cierto lapso\n 4- Cursos de cierta materia\n 5- Curso especifico \n\n 0- SALIR\n\n Escriba su opcion (0-5) = "); + fflush(stdin);fgets(opciones_Consulta,2,stdin);cambio(opciones_Consulta);fflush(stdin); + if(opciones_Consulta[1]!='\0') + printf(" \n Esta opcion no es valida\n\n"); + else + switch(opciones_Consulta[0]) + { + case '1': + HC(); + while(consulta) + {FormatoCurso(consulta);consulta=consulta->prx;} + system("pause"); + break; + + case '2': + int AAAA;ingresarDato(&AAAA,"Ingrese el anio",2100,1900); + HC(); + while(consulta) + { + if (AAAA==consulta->AAAA) + FormatoCurso(consulta); + consulta=consulta->prx; + } + system("pause"); + break; + + case '3': + int Lapso;ingresarDato(&Lapso,"Ingrese el Lapso",3,1); + HC(); + while(consulta) + { + if (Lapso==consulta->lapso) + FormatoCurso(consulta); + consulta=consulta->prx; + } + system("pause"); + break; + + case '4': + int Codigo;ingresarDato(&Codigo,"Codigo de la materia",maxEntero,1); + while(consulta) + { + if (Codigo==consulta->Codigo_de_la_Materia) + FormatoCurso(consulta); + consulta=consulta->prx; + } + system("pause"); + break; + + case '5': + int CodigoC;ingresarDato(&CodigoC,"Codigo del curso",maxEntero,1); + HC(); + while(consulta) + { + if (CodigoC==consulta->Codigo_del_curso) + FormatoCurso(consulta); + consulta=consulta->prx; + } + system("pause"); + break; + + default: + if (opciones_Consulta[0]!='0') + {printf("\n\n\tEsta opcion no es valida\n");system("pause");} + break; + } + }while (opciones_Consulta[0]!='0'); + }else + {printf("\tNo hay cursos para consultar\n");system("pause");} +} + +void Consultar_Personas(Personas *Las_personas) +{ + if(Las_personas) + {/*Debe haber algo que consultar*/ + char opciones_Consulta[10]; + opciones_Consulta[0]='0'; + do + { + int cont =0; + Personas *consulta=Las_personas;system("cls"); + printf("\t Consultar\n\n"); + printf(" 1- Todas las personas\n 2- Nombres que coinciden\n 3- Cedula \n\n 0- SALIR\n\n Escriba su opcion (0-3) = "); + fflush(stdin);fgets(opciones_Consulta,2,stdin);cambio(opciones_Consulta);fflush(stdin); + if(opciones_Consulta[1]!='\0') + printf(" \n Esta opcion no es valida\n\n"); + else + switch(opciones_Consulta[0]) + { + case '1': + HP(); + while(consulta) + {FormatoPersona(consulta,true);consulta=consulta->prx;} + system("pause"); + break; + + case '2': + char nombre[40]; + printf("Introduzca el nombre a consultar: "); + fflush(stdin);fgets(nombre,40,stdin);cambio(nombre);fflush(stdin);HP(); + while(consulta) + { /*imprime los datos del nodo de la persona y pasa al siguiente nodo*/ + if (strstr(strupr(consulta->nombre_apellido),strupr(nombre))!=NULL) + {FormatoPersona(consulta,false);cont++;} + consulta=consulta->prx; + } + if(!cont) + printf("No hay ningun estudiante con ese nombre\n"); + system("pause"); + break; + + case '3': + C_NombreAlumno(consulta); + break; + + default: + if (opciones_Consulta[0] !='0') + {printf("\n\nEsta opcion no es valida\n");system("pause");} + break; + } + }while (opciones_Consulta[0] !='0'); + + } + else + {printf("\tNo hay personas para consultar\n");system("pause");} +} + +void C_NombreAlumno(Personas*consulta) +{ + char nombre[40];int cont =0; + printf("\n\tIntroduzca el nombre a consultar: "); + fflush(stdin);fgets(nombre,40,stdin);cambio(nombre);fflush(stdin); + HP(); + while(consulta) + { /*imprime los datos del nodo de la persona y pasa al siguiente nodo*/ + if (strstr(strupr(consulta->nombre_apellido),strupr(nombre))!=NULL) + {FormatoPersona(consulta,false);cont++;} + consulta=consulta->prx; + } + if(!cont) + printf("\tNo hay ningun estudiante con ese nombre\n"); + system("pause"); +} + +void c_Materia(Materias*M,Cursos*cursosDados,Personas*PersonasInscritas) +{ + Personas *Aux;Participacion *Inscritoencurso; int CodigoDado,cursosdelamateria=0,Inscritos=0,Aprobados=0; + ingresarDato(&CodigoDado,"Codigo de la materia",maxEntero,0); + while (M && M->Codigo_de_la_Materia!=CodigoDado) + M=M->prx; + if(M) + { + printf("\n\tMateria=\n\n"); + FormatoMateria(M); + printf("\tCursos=\n\n"); + while (cursosDados) + { + if(cursosDados->Codigo_de_la_Materia==M->Codigo_de_la_Materia) + { + FormatoCurso(cursosDados);cursosdelamateria++; + Aux=PersonasInscritas; + while(Aux) + { + Inscritoencurso=Aux->Record; + while(Inscritoencurso) + { + if(Inscritoencurso->Codigo_del_curso==cursosDados->Codigo_del_curso) + { + Inscritos++; + if((Inscritoencurso->nota>9)&&((Inscritoencurso->status == 'N'))||(Inscritoencurso->status == 'n')) + Aprobados++; + } + Inscritoencurso=Inscritoencurso->prx; + } + Aux=Aux->prx; + } + } + cursosDados=cursosDados->prx; + } + if(!cursosdelamateria) + printf("\n\tEsta Materia no tiene cursos asociados\n\n"); + if(Inscritos) + printf("\n\t *Inscritos: %i, *Aprobados: %i, *Reprobados: %i\n\n\n",Inscritos,Aprobados,Inscritos-Aprobados); + else + printf("\n\t Esta Materia no tiene personas inscritas\n\n"); + } + else + printf("\n\tLa materia solicitada no se encuentra registrada\n\n"); + system("Pause"); +} + +void c_CursosDePeriodo(Materias*Mats,Cursos*cursosDados,Personas*PersonasInscritas) +{ + Materias*MATERIASDELSEMESTRE=Mats;Personas *Aux;Participacion *Inscritoencurso; int CursosDeLaFecha=0,Inscritos,Aprobados,SemestreDado; + SemestreDado=Verificar_Semestre(); + printf("\n\tCursos del semestre:\n\n\n"); + while(MATERIASDELSEMESTRE) + { + if(MATERIASDELSEMESTRE->Semestre==SemestreDado) + while (cursosDados) + { + if(cursosDados->Codigo_de_la_Materia==MATERIASDELSEMESTRE->Codigo_de_la_Materia) + { + Materias *M=Mats; + HC();CursosDeLaFecha++; + FormatoCurso(cursosDados); + if (M) + while (M) + { + if(M->Codigo_de_la_Materia==cursosDados->Codigo_de_la_Materia) + { + printf("\tMateria del curso=\n\n");FormatoMateria(M); + break; + } + M=M->prx; + } + Aux=PersonasInscritas; + Inscritos=0;Aprobados=0; + while(Aux) + { + Inscritoencurso=Aux->Record; + while(Inscritoencurso) + { + if((Inscritoencurso->Codigo_del_curso==cursosDados->Codigo_del_curso)&&((Inscritoencurso->status == 'N'))||(Inscritoencurso->status == 'n')) + { + Inscritos++; + if(Inscritoencurso->nota>9) + Aprobados++; + } + Inscritoencurso=Inscritoencurso->prx; + } + Aux=Aux->prx; + } + printf("\n\t *Inscritos: %i *Aprobados: %i *Reprobados: %i\n\n\n",Inscritos,Aprobados,Inscritos-Aprobados); + } + cursosDados=cursosDados->prx; + } + MATERIASDELSEMESTRE=MATERIASDELSEMESTRE->prx; + } + if (CursosDeLaFecha==0) + printf("\tNo hay cursos en la fecha solicitada\n\n"); + system("Pause"); +} + +void C_Aprobados(Personas* aprobado,Cursos* Cursomateria) +{//Dada una materia ( c�digo ) mostrar los alumnos que la han aprobado (cedula, apellido y nombre con su nota ) + int CodigoIngresado,Aprobados=0; + ingresarDato(&CodigoIngresado,"\t Codigo de la materia",maxEntero,0); + while (Cursomateria) + { + if(Cursomateria->Codigo_de_la_Materia==CodigoIngresado) + { + while(aprobado) + { + Participacion *Aux=aprobado->Record; + while (Aux) + { + if (Aux->Codigo_del_curso==Cursomateria->Codigo_del_curso) + { + if((Aux->nota>9)&&((Aux->status == 'N')||(Aux->status == 'n'))) + { + FormatoPersona(aprobado,false); + Aprobados++; + } + } + Aux=Aux->prx; + } + aprobado=aprobado->prx; + } + if (Aprobados) + printf("\n\tTotal de aprobados %i\n\n",Aprobados); + else + printf("\n\tNo hubo aprobados en esta maetria\n\n"); + return; + } + Cursomateria=Cursomateria->prx; + } + printf("\n\tNo Existe dicha materia\n\n"); +} + +void C_Cursos(Materias* Mats,Cursos*cursosDados,Personas*PersonasInscritas) +{//Todos los cursos (con sus alumnos y notas) + Personas *Aux;Participacion *Inscritoencurso; int Inscritos; + while (cursosDados) + { + Materias *M=Mats; + printf("\tCurso=\n\n"); + FormatoCurso(cursosDados); + if (M) + while (M) + { + if(M->Codigo_de_la_Materia==cursosDados->Codigo_de_la_Materia) + { + printf("\tMateria del curso=\n\n");FormatoMateria(M); + break; + } + M=M->prx; + } + Aux=PersonasInscritas; + Inscritos=0; + printf("\tPersonas del curso=\n\n"); + while(Aux) + { + Inscritoencurso=Aux->Record; + while(Inscritoencurso) + { + if(Inscritoencurso->Codigo_del_curso==cursosDados->Codigo_del_curso) + { + Inscritos++; + FormatoPersona(Aux,false); + printf("\t Nota: %i Estatus: %c\n\n",Inscritoencurso->nota,Inscritoencurso->status); + } + Inscritoencurso=Inscritoencurso->prx; + } + Aux=Aux->prx; + } + if(Inscritos) + printf("\n\t *Total de inscritos: %i\n\n\n",Inscritos); + else + printf("\t Este curso no tiene personas inscritas\n\n"); + cursosDados=cursosDados->prx; + } + system("Pause"); +} + +void C_CursosDeAnyoLapso(Materias* Mats,Cursos*cursosDados,Personas*PersonasInscritas) +{ + Personas *Aux;Participacion *Inscritoencurso; int CursosDeLaFecha=0,Inscritos,Aprobados,AAAA,lapso; + ingresarDato(&AAAA,"AAAA: ",2100,1900); + ingresarDato(&lapso,"Lapso: ",3,1); + printf("\n\tCursos del lapso %i en %i:\n\n\n",lapso,AAAA); + while (cursosDados) + { + if(cursosDados->AAAA==AAAA && cursosDados->lapso==lapso) + { + Materias *M=Mats; + HC();CursosDeLaFecha++; + FormatoCurso(cursosDados); + if (M) + while (M) + { + if(M->Codigo_de_la_Materia==cursosDados->Codigo_de_la_Materia) + { + printf("\tMateria del curso=\n\n");FormatoMateria(M); + break; + } + M=M->prx; + } + Aux=PersonasInscritas; + Inscritos=0;Aprobados=0; + while(Aux) + { + Inscritoencurso=Aux->Record; + while(Inscritoencurso) + { + if(Inscritoencurso->Codigo_del_curso==cursosDados->Codigo_del_curso) + { + Inscritos++; + if(Inscritoencurso->nota>9) + Aprobados++; + } + Inscritoencurso=Inscritoencurso->prx; + } + Aux=Aux->prx; + } + printf("\n\t *Inscritos: %i *Aprobados: %i *Reprobados: %i\n\n\n",Inscritos,Aprobados,Inscritos-Aprobados); + } + cursosDados=cursosDados->prx; + } + if (CursosDeLaFecha==0) + printf("\tNo hay cursos en la fecha solicitada\n\n"); + system("Pause"); +} + +void C_Alumno(Personas* consulta) +{//Dada una cedula mostrar todos los cursos con sus notas tomadas por esa persona + int CedulaIngresada; + ingresarDato(&CedulaIngresada,"\t Cedula de la persona",maxEntero,0); + while(consulta && consulta->cedulaprx; + if (consulta->cedula==CedulaIngresada) + { + printf("\t%s",consulta->nombre_apellido); + calificaciones(consulta->Record); + } + else + printf("\tNo existe registro de dicha persona"); + system("Pause"); +} + +void Eliminar_materia (Materias **Las_materias, Cursos **El_curso,Personas *Las_Personas) +{ + int codigo_mat,cont=0; + if (*Las_materias) + { + Materias *consulta=*Las_materias, *temp=NULL; + ingresarDato(&codigo_mat,"Codigo de materia a eliminar",maxEntero,1); + if(*El_curso) + Eliminar_curso_materia(El_curso,codigo_mat,Las_Personas); + system("cls"); + if ((consulta->Codigo_de_la_Materia) == codigo_mat) + { + temp = *Las_materias; + *Las_materias = (*Las_materias)->prx; + delete temp; + printf("\n\tMATERIA ELIMINADA CORRECTAMENTE!\n"); + system("pause"); + }else + { + while(consulta->prx) + { + if (consulta->prx->Codigo_de_la_Materia == codigo_mat) + { + temp = consulta->prx; + consulta->prx = temp->prx; + delete temp; + cont ++; + printf("\n\tMATERIA ELIMINADA CORRECTAMENTE!\n"); + system("pause"); + } + else + consulta = consulta->prx; + } + if(cont != 1) + {printf("\n\tLa materia [%i] no se encuentra\n", codigo_mat);system("pause");} + } + }else + {printf("\n\tNO HAY MATERIAS PARA ELIMINAR\n");system("pause");} +} + +void Eliminar_curso (Cursos **Los_cursos,Personas *p) +{ + int codigo_mat,cont=0; + if (*Los_cursos) + { + Cursos *consulta=*Los_cursos, *temp=NULL; + ingresarDato(&codigo_mat,"Codigo del curso a eliminar",maxEntero,1); + if ((consulta->Codigo_del_curso) == codigo_mat) + { + while(p) + { + Eliminar_persona_curso(&(p->Record),codigo_mat); + system("cls"); + p=p->prx; + } + temp = *Los_cursos; + *Los_cursos = (*Los_cursos)->prx; + delete temp; + }else + { + while(consulta->prx) + { + if (consulta->prx->Codigo_del_curso == codigo_mat) + { + while(p) + { + Eliminar_persona_curso(&(p->Record),codigo_mat); + system("cls"); + p=p->prx; + } + temp = consulta->prx; + consulta->prx = temp->prx; + delete temp; + cont +=1; + printf("\n\tCURSO ELIMINADO CORRECTAMENTE!\n"); + system("pause"); + } + else + consulta = consulta->prx; + } + if(cont != 1) + printf("\n\tEl curso [%i] no se encuentra\n", codigo_mat); + } + } + else + {printf("\n\tNO HAY CURSOS PARA ELIMINAR\n");system("pause");} +} + +void Eliminar_persona (Personas **Las_personas) +{ + int codigo_per,cont=0; + if (*Las_personas) + { + Personas *consulta=*Las_personas, *temp=NULL; + ingresarDato(&codigo_per,"Cedula del estudiante a eliminar",maxEntero,1); + if ((consulta->cedula) == codigo_per) + { + while(consulta->Record) + { + Participacion *aux2=consulta->Record; + consulta->Record=consulta->Record->prx; + delete aux2; + } + temp = *Las_personas; + *Las_personas = (*Las_personas)->prx; + delete temp; + }else + { + while(consulta->prx) + { + if (consulta->prx->cedula == codigo_per) + { + while(consulta->Record) + { + Participacion *aux2=consulta->Record; + consulta->Record=consulta->Record->prx; + delete aux2; + } + temp = consulta->prx; + consulta->prx = temp->prx; + delete temp; + cont +=1; + printf("\n\tPERSONA ELIMINADA CORRECTAMENTE!\n"); + system("pause"); + } + else + consulta = consulta->prx; + } + if(cont != 1) + printf("\n\tEl estudiante de cedula [%i] no se encuentra\n", codigo_per); + } + }else + {printf("\n\tNO HAY PERSONAS PARA ELIMINAR\n");system("pause");} +} + +void Eliminar_curso_materia (Cursos **Los_cursos, int codigo_mat, Personas *p) +{ + if (*Los_cursos) + { + Cursos *consulta=*Los_cursos, *temp=NULL; + Personas *aux=p; + if ((consulta->Codigo_de_la_Materia) == codigo_mat) + { + while(aux) + { + int ch=consulta->Codigo_del_curso; + Eliminar_persona_curso(&(aux->Record),ch); + aux=aux->prx; + } + temp = *Los_cursos; + *Los_cursos = (*Los_cursos)->prx; + delete temp; + Eliminar_curso_materia (Los_cursos, codigo_mat,p); + }else + { + Personas *o=aux; + while(consulta->prx) + { + if (consulta->prx->Codigo_de_la_Materia == codigo_mat) + { + while(aux) + { + int ch=consulta->prx->Codigo_del_curso; + Eliminar_persona_curso(&(aux->Record),ch); + aux=aux->prx; + } + aux=o; + temp = consulta->prx; + consulta->prx = temp->prx; + delete temp; + }else + consulta = consulta->prx; + } + } + } +} + +void Eliminar_persona_curso(Participacion **cur, int x){ + if(*cur) + { + if((*cur)->Codigo_del_curso == x) + { + Participacion *aux=*cur; + *cur=(*cur)->prx; + delete aux; + printf("\tEstudiante eliminado del curso correctamente\n"); + } + else + { + Participacion *t=*cur; + while((t->prx)&&(t->prx->Codigo_del_curso != x)) + t=t->prx; + if(t->prx) + { + Participacion *aux=t->prx; + t->prx=aux->prx; + delete aux; + printf("\tEstudiante eliminado del curso correctamente\n"); + } + else + printf("\tEl estudiante no se encuentra en el curso [%i]\n",x); + } + } + else + printf("\tEl estudiante no se encuentra en ningun curso\n"); +} + +void Eliminar_curso_persona(Personas *p){ + if(p) + { + int Ele=0; + ingresarDato(&Ele,"Cedula del estudiante",maxEntero,1); + while((p)&&(p->cedula != Ele)) + p=p->prx; + if(p) + { + int cod=0; + ingresarDato(&cod,"Codigo del curso a eliminar",maxEntero,1); + Eliminar_persona_curso(&p->Record,cod); + } + else + printf("E\tl estudiante de cedula [%i] no esta en el sistema\n",Ele); + } + else + printf("\tNo existen estudiantes en el sistema\n"); + system("pause"); +} + +int Inscribe_o_no(Cursos *c,Participacion *p){ + if(p){ + int cont=0; + while(p){ + int n=Regresa_cod_mat(c,p->Codigo_del_curso); + Participacion *q=p->prx; + if(n == Regresa_cod_mat(c,p->Codigo_del_curso)&&(((p->nota <= 9)&&(p->status=='N'||p->status=='n'))||(p->status=='I'||p->status=='i'))) + cont+=1; + while(q){ + if((n == Regresa_cod_mat(c,q->Codigo_del_curso))&&(((q->nota <= 9)&&(q->status=='N'||q->status=='n'))||(q->status=='I'||q->status=='i'))) + cont+=1; + q=q->prx; + } + if(cont>4) + break; + else + { + cont=0; + p=p->prx; + } + } + if (cont<=4) + return 1; + else + return 0; + } + else + return 1; +} + +int Regresa_cod_mat(Cursos *c, int x){ + while((c)&&(c->Codigo_del_curso != x)) + c=c->prx; + if(c) + return c->Codigo_de_la_Materia; + else + return 0; +} + +int Aprob(Participacion *AUX,Cursos *Copia, int e,int codicur,int *cont){ + int c2=0; + while(AUX) + { + while (Copia) + { + if(AUX->Codigo_del_curso==Copia->Codigo_del_curso) + if(Copia->Codigo_de_la_Materia==e) + { + if((AUX->nota>9)&&(AUX->status=='N'||AUX->status=='n')) + c2++; + } + Copia=Copia->prx; + } + if(AUX->Codigo_del_curso==codicur) + *cont+=1; + AUX=AUX->prx; + } + if(c2 != 0) + return 1; + else + return 0; +} + +void Agregar_nota(Participacion **p, int n,int c){ + Participacion *aux=new Participacion; + aux->Codigo_del_curso=c; + aux->nota=n; + aux->prx=*p; + *p=aux; +} + +char IngresarEstatus() +{ + char Estatus[12]; + while(true) + { + printf("\n\tIntroduzca el estatus actual del alumno(Normal,Inasistente,retirado)\n"); + printf("\t:"); + fflush(stdin);fgets(Estatus,11,stdin);fflush(stdin); + if(Estatus[1]!='\0') + printf("\n\t Nt:solo se considera el primer caracter %c de %s\n",Estatus[0],Estatus); + if(validarStatus(Estatus[0])) + return Estatus[0]; + } +} + +int validarStatus(char stats) +{ + if(stats=='N'||stats=='n'||stats=='I'||stats=='i'||stats=='R'||stats=='r') + return true; + return false; +} + +void Agregar_Curso_persona(Personas *Listaper, Cursos *listacur, Materias *listamat) +{ + if((Listaper)&&(listamat)&&(listacur)) + { + int cod=0; + ingresarDato(&cod,"Cedula del estudiante a agregar al curso",maxEntero,1); + while((Listaper)&&(Listaper->cedula != cod)) + Listaper=Listaper->prx; + if(Listaper) + { + int nota=0,codicur=0,Registrado; + Registrado=Inscribe_o_no(listacur,Listaper->Record); + if(Registrado){ + ingresarDato(&codicur,"Codigo del curso",maxEntero,1); + Cursos *Copia=listacur;Participacion *AUX=Listaper->Record;int ExisteCurso=0,Aprobado=0,RegistradoEnCurso=0; + ExisteCurso=Regresa_cod_mat(listacur,codicur); + if(ExisteCurso) + { + Aprobado=Aprob(AUX,Copia,ExisteCurso,codicur,&RegistradoEnCurso); + if (RegistradoEnCurso) + printf("\n\tEste Estudiante ya fue registrado en el curso, no se puede registrar nuevamente\n\n"); + else + { + if(!Aprobado) + { + ingresarDato(¬a,"Nota del estudiante en el curso",20,0); + Agregar_nota(&Listaper->Record,nota,codicur); + Listaper->Record->status=IngresarEstatus(); + printf("\tEstudiante de c.i: [%i] agregado a: CURSO[%i] con nota:(%i/20 pts) y estatus: %c",Listaper->cedula,Listaper->Record->Codigo_del_curso,Listaper->Record->nota,Listaper->Record->status); + if((Listaper->Record->status=='N'||Listaper->Record->status=='n')) + printf("ormal\n\n"); + else + if((Listaper->Record->status=='R'||Listaper->Record->status=='r')) + printf("etirado\n"); + else + if((Listaper->Record->status=='I'||Listaper->Record->status=='i')) + printf("nasistente\n"); + }else + printf("\n\tEste estudiante ya aprobo esta materia en otro curso\n\n"); + } + } + else + printf("\tEl curso no existe\n"); + }else + printf("\tEste estudiante reprobo mas de 4 veces una materia\n\tPor lo que ya no puede ser inscrito en el instituto\n"); + }else + printf("\tEste estudiante no se encuentra en el sistema\n"); + }else + printf("\tNo se cumplen las condiciones para registrar a un estudiante en un curso\n"); + system("pause"); +} + +void Modificar_cod_persona(Participacion *p, Cursos **cu) +{ + if(p) + { + int nuevocod; + ingresarDato(&nuevocod," Codigo del nuevo curso",maxEntero,1); + if(Existe_codigo_curso(nuevocod,cu)) + { + p->Codigo_del_curso=nuevocod; + printf("\tEl estudiante ahora esta inscrito en el curso [%i]\n",nuevocod); + p->status=IngresarEstatus(); + } + else + printf("\tEl curso seleccionado no se encuentra en el sistema\n"); + } + else + printf("\tEl estudiante no esta inscrito en ningun curso\n"); + system("pause"); +} + +void Modificar_Curso_persona(Personas **persona, Cursos **c){ + Personas *Respaldo= *persona; int Elegido,Ele2; + if((*persona)&&(*c)){ + Personas *consulta=*persona, *temp=NULL; + ingresarDato(&Elegido," Cedula del estdiante a modificar",maxEntero,1); + while((Respaldo)&&(Respaldo->cedula != Elegido)) + Respaldo=Respaldo->prx; + if (!Respaldo) + {printf("\n\tEl estudiante de cedula [%i] no se encuentra\n", Elegido);system("pause");} + else + { + ingresarDato(&Ele2," Curso a modificar",maxEntero,1); + Participacion *aux=Respaldo->Record; + while((Respaldo->Record)&&(Respaldo->Record->Codigo_del_curso != Ele2)) + Respaldo->Record=Respaldo->Record->prx; + if(Respaldo->Record){ + char opciones_de_Modificacion[3]; + opciones_de_Modificacion[0]=0; + do{//Menu de Mantenimiento Cursos + system("cls"); + printf("\t Que desea modificar?\n\n"); + printf(" 1- Nota en el curso\n 2- Codigo del curso \n 0- SALIR\n\n Escriba su opcion (0-2) = "); + fflush(stdin);fgets(opciones_de_Modificacion,2,stdin);cambio(opciones_de_Modificacion);fflush(stdin); + if(opciones_de_Modificacion[1]!='\0') + printf(" \n Esta opcion no es valida\n\n"); + else + switch(opciones_de_Modificacion[0]) + { + case '1'://Nota + if((Respaldo->Record->status == 'N')||(Respaldo->Record->status == 'n')) + { + ingresarDato(&Respaldo->Record->nota," Nueva nota del curso",20,0); + printf_s("\tNota del curso [%i] modificada exitosamente a [%i]\n",Respaldo->Record->Codigo_del_curso,Respaldo->Record->nota);system("pause"); + } + else + { + printf("Este estudiante no curso normalmente la materia, por lo que su nota no se modificara\n"); + system("pause"); + } + break; + + case '2'://Fecha de nacimiento + Modificar_cod_persona(Respaldo->Record,c); + break; + default: + if (opciones_de_Modificacion[0]!='0') + {printf("\n\n\tEsta opcion no es valida\n");system("pause");break;} + } + }while (opciones_de_Modificacion[0]!='0'); + Respaldo->Record=aux; + Respaldo = *persona; + } + else + printf("\tEl estudiante no se encuentra en el curso [%i]",Ele2); + } + } + else if(!(*persona)) + printf("\tNo existen estudiantes para modificar sus cursos\n"); + else if(!(*c)) + printf("\tNo hay estudiantes en el sistema\n"); + else + printf("\tNo hay ni personas ni cursos en el sistema\n"); + system("pause"); +} + +int isdigit(char c) +{ + if(c=='0'||c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9') + return 1; + return 0; +} + +int bisiesto (year Y) +{ + if (Y%4) + if(Y%100) + if(Y%400) + return 0; + else + return 1; + else + return 0; + else + return 1; +} + +int LimitarCaracteres (char *copia, int max) +{ + if (!(strlen(copia)>0)||!(strlen(copia)<=unsigned(max))) + return 0; + else + return 1; +} + +void cambio(char c1[]) +{// // evita salto de linea luego de un fgets y cambia las comas por punto para evitar errores en los archivos + for(int i=0;unsigned(i)Codigo_de_la_Materia,Nodo->Nombre_de_la_Materia,Nodo->SemestreEnRomano,Nodo->Creditos_de_la_Materia,Nodo->Descripcion_de_la_Materia);} + +void FormatoCurso(Cursos* Nodo) +{printf("\t [%d] \"%i\" (%i): %i \n\n",Nodo->Codigo_de_la_Materia,Nodo->Codigo_del_curso,Nodo->lapso,Nodo->AAAA);} + +void FormatoPersona(Personas* Nodo,int todo) +{ + printf("\t%s\tC.I:%i ",Nodo->nombre_apellido,Nodo->cedula);FormatoFecha(Nodo->Fecha_de_Nacimiento);printf(" [%s]",Nodo->direccion); + if (todo) + calificaciones(Nodo->Record); + else + printf("\n\n"); +} + +void calificaciones(Participacion* calificacion) +{if (calificacion!=NULL) + { + Participacion* inscripcion=calificacion; + printf("\n\t Inscrito en [Curso] (nota) 'Status'\n"); + while (inscripcion) + { + printf("\t\t\t[%d] (%i/20) '%c'\n",inscripcion->Codigo_del_curso,inscripcion->nota,inscripcion->status); + inscripcion=inscripcion->prx; + }printf("\n"); + } + else + printf("\n\t Sin inscripciones\n\n");} + +int Exportar_Materias(Materias *nodos,char ruta[]) +{/* Exporta en un archivo el contenido de las materias*/ + FILE *Nuevo_archivo = NULL;;char rutaMat[100]; + strcpy(rutaMat,ruta);strcat(rutaMat,"ArchivoMaterias.txt"); + Nuevo_archivo = fopen(rutaMat,"w");/*Abre el archivo creado*/ + if(Nuevo_archivo == NULL ) + {printf("No fue posible abrir el archivo\n");return 0;} + while (nodos) + {fprintf (Nuevo_archivo,"%i,%s,%i,%i,%s\n",nodos->Codigo_de_la_Materia,nodos->Nombre_de_la_Materia,nodos->Creditos_de_la_Materia,nodos->Semestre,nodos->Descripcion_de_la_Materia);nodos=nodos->prx;} + fclose(Nuevo_archivo);return 1; +} + +int Exportar_Cursos(Cursos *nodos,char ruta[]) +{/* Exporta en un archivo el contenido de los cursos*/ + FILE *Nuevo_archivo = NULL;char rutaCur[100]; + strcpy(rutaCur,ruta);strcat(rutaCur,"ArchivoCursos.txt"); + Nuevo_archivo = fopen(rutaCur,"w"); + if(Nuevo_archivo == NULL ) + {printf("No fue posible abrir el archivo\n");return 0;} + while (nodos) + {fprintf (Nuevo_archivo,"%i,%i,%i,%i\n",nodos->Codigo_de_la_Materia,nodos->Codigo_del_curso,nodos->lapso,nodos->AAAA);nodos=nodos->prx;} + fclose(Nuevo_archivo);return 1; +} + +int Exportar_Personas(Personas *nodos,char ruta[]) +{/* Exporta en un archivo el contenido de las persdonas*/ + FILE *Nuevo_archivo = NULL;;char rutaPer[100]; + strcpy(rutaPer,ruta);strcat(rutaPer,"ArchivoPersonas.txt"); + Nuevo_archivo = fopen(rutaPer,"w"); + if(Nuevo_archivo == NULL ) + {printf("No fue posible abrir el archivo\n");return 0;} + while (nodos) + { + fprintf (Nuevo_archivo,"%i,%s,%i,%i,%i,%s",nodos->cedula,nodos->nombre_apellido,nodos->Fecha_de_Nacimiento.yyyy,nodos->Fecha_de_Nacimiento.mm,nodos->Fecha_de_Nacimiento.dd,nodos->direccion); + if (nodos->Record!=NULL) + { + Participacion *aux=nodos->Record; + while (aux) + { + fprintf(Nuevo_archivo,",%i,%i,%c",aux->Codigo_del_curso,aux->nota,aux->status); + aux=aux->prx; + } + } + fprintf(Nuevo_archivo,",0\n"); + nodos=nodos->prx; + } + fclose(Nuevo_archivo);return 1; +} + +int Importar_Materias(Materias **nodos,char ruta[]) +{ + FILE *Archivo_entrada = NULL;char linea[150];char *Elemento;char rutaMat[100]; + strcpy(rutaMat,ruta);strcat(rutaMat,"ArchivoMaterias.txt"); + Archivo_entrada= fopen(rutaMat,"r"); + if(Archivo_entrada == NULL ) + {printf("No fue posible abrir el archivo\n");return 0;} + rewind(Archivo_entrada);printf("\n Importar a:\n\n");HM(); + while (fgets(linea, sizeof(linea), Archivo_entrada)) + {// Lee cada línea del archivo y lo convierte en un nodo completo + Materias *Nuevo_nodo= new Materias; int error=0; + Elemento = strtok(linea, ","); + if ( atoi(Elemento)>=maxEntero || atoi(Elemento)<=0 || !validar_numero(Elemento) || Existe_codigo(atoi(Elemento),nodos) ) + { + printf("\t Se encontro un error en el codigo de la materia de este nodo\n"); + error++; + } + else + Nuevo_nodo->Codigo_de_la_Materia=atoi(Elemento); + + Elemento = strtok(NULL, ",");cambio(Elemento); + if (LimitarCaracteres (Elemento, 30)) + strcpy(Nuevo_nodo->Nombre_de_la_Materia,Elemento); + else + { + printf("\t Se encontro un error en el nombre de la materia de este nodo\n"); + error++; + } + + Elemento = strtok(NULL, ","); + if ((atoi(Elemento) <2)||(atoi(Elemento) >5)) + { + printf("\t Se encontro un error en los creditos de la materia de este nodo\n"); + error++; + } + else + Nuevo_nodo->Creditos_de_la_Materia=atoi(Elemento); + + Elemento = strtok(NULL, ","); + if ((atoi(Elemento) <1)||(atoi(Elemento) >10)) + { + printf("\t Se encontro un error en el semestre de la materia de este nodo\n"); + error++; + } + else + {Nuevo_nodo->Semestre=atoi(Elemento);Semestre_Romano(Nuevo_nodo->Semestre,&Nuevo_nodo);} + + Elemento = strtok(NULL, ",");cambio(Elemento); + if (LimitarCaracteres (Elemento, 100)) + strcpy(Nuevo_nodo->Descripcion_de_la_Materia,Elemento); + else + { + printf("\t Se encontro un error en la descripcion de la materia de este nodo\n"); + error++; + } + + if(error) + printf("%i errores en el nodo, no se pudo guardar la materia\n",error); + else + {insertar_MateriaOrdenadamente(nodos, &Nuevo_nodo);FormatoMateria(Nuevo_nodo);} + Elemento = strtok(NULL, ","); + } + system("pause");fclose(Archivo_entrada);return 1; +} + +int Importar_Cursos(Cursos **nodos,Materias *materia,char ruta[]) +{ + FILE *Archivo_entrada = NULL;char linea[150];char *Elemento;char rutaCur[100]; + strcpy(rutaCur,ruta);strcat(rutaCur,"ArchivoCursos.txt"); + Archivo_entrada = fopen(rutaCur,"r");/*Abre el archivo creado*/ + if(Archivo_entrada == NULL ) + {printf("No fue posible abrir el archivo\n");return 0;} + rewind(Archivo_entrada);printf("\n Importar a:\n\n");HC(); + while (fgets(linea, sizeof(linea), Archivo_entrada)) + {// Lee cada línea del archivo y lo convierte en un nodo completo + Cursos *Nuevo_nodo= new Cursos; int error=0; + Elemento = strtok(linea, ","); + if ( atoi(Elemento)>=maxEntero ||atoi(Elemento)<=0 || !validar_numero(Elemento)||!Existe_codigo(atoi(Elemento),&materia) ) + { + printf("\t Se encontro un error en el Codigo de materia del curso de este nodo\n"); + error++; + } + else + Nuevo_nodo->Codigo_de_la_Materia=atoi(Elemento); + + Elemento = strtok(NULL, ","); + if ( atoi(Elemento)>=maxEntero || atoi(Elemento)<=0 || !(validar_numero(Elemento)) ) + { + printf("\t Se encontro un error en el Codigo del curso de este nodo\n"); + error++; + } + else + Nuevo_nodo->Codigo_del_curso=atoi(Elemento); + + Elemento = strtok(NULL, ","); + if (atoi(Elemento)<1||atoi(Elemento)>3) + { + printf("\t Se encontro un error en el Lapso del curso de este nodo\n"); + error++; + } + else + Nuevo_nodo->lapso=atoi(Elemento); + + Elemento = strtok(NULL, ",");cambio(Elemento); + if (atoi(Elemento)<1900||atoi(Elemento)>2100) + { + printf("\t Se encontro un error en el a%co del curso de este nodo\n",164); + error++; + } + else + Nuevo_nodo->AAAA=atoi(Elemento); + + if(error) + printf("%i errores en el nodo, no se pudo guardar este curso\n",error); + else + {insertar_CursoOrdenadamente(nodos,&Nuevo_nodo); FormatoCurso(Nuevo_nodo);} + Elemento = strtok(NULL, ","); + } + system("pause");fclose(Archivo_entrada);return 1; +} + +int Importar_Personas(Personas **nodos,Cursos *curso,char ruta[]) +{ + FILE *Archivo_entrada = NULL;char linea[150];char *Elemento;char rutaPer[100]; + strcpy(rutaPer,ruta);strcat(rutaPer,"ArchivoPersonas.txt"); + Archivo_entrada = fopen(rutaPer,"r"); + if(Archivo_entrada == NULL ) + {printf("No fue posible abrir el archivo\n");return 0;} + rewind(Archivo_entrada);printf("\n Importar a:\n\n");HP(); + while (fgets(linea, sizeof(linea),Archivo_entrada)) + {// Lee cada línea del archivo y lo convierte en un nodo completo + Personas *Nuevo_nodo= new Personas; int error=0; + Elemento = strtok(linea, ","); + if ( atoi(Elemento)>=maxEntero ||atoi(Elemento)<=0 || !validar_numero(Elemento) ) + { + printf("\t Se encontro un error en la cedula de la persona de este nodo\n"); + error++; + } + else + Nuevo_nodo->cedula=atoi(Elemento); + + Elemento = strtok(NULL, ",");cambio(Elemento); + if (LimitarCaracteres (Elemento, 30)) + strcpy(Nuevo_nodo->nombre_apellido,Elemento); + else + { + printf("\t Se encontro un error en el nombre de la persona de este nodo\n"); + error++; + } + + Elemento = strtok(NULL, ",");cambio(Elemento); + if (atoi(Elemento)<1900||atoi(Elemento)>2100) + { + printf("\t Se encontro un error en el a%co de nacimiento de la persona de este nodo\n",164); + error++; + } + else + Nuevo_nodo->Fecha_de_Nacimiento.yyyy=atoi(Elemento); + + Elemento = strtok(NULL, ",");cambio(Elemento); + if (atoi(Elemento)<1||atoi(Elemento)>12) + { + printf("\t Se encontro un error en el mes de nacimiento de la persona de este nodo\n"); + error++; + } + else + {Nuevo_nodo->Fecha_de_Nacimiento.mm=atoi(Elemento);} + + Elemento = strtok(NULL, ",");cambio(Elemento); + if (atoi(Elemento)<1||atoi(Elemento)>31) + {/*Esta validacion no es la que verifica el mes o si el anyo es bisiesto*/ + printf("\t Se encontro un error en dia de naciemiento de la persona de este nodo\n"); + error++; + } + else + Nuevo_nodo->Fecha_de_Nacimiento.dd=atoi(Elemento); + + Elemento = strtok(NULL, ",");cambio(Elemento); + if (LimitarCaracteres (Elemento, 40)) + strcpy(Nuevo_nodo->direccion,Elemento); + else + { + printf("\t Se encontro un error en la direcion de la persona de este nodo\n"); + error++; + } + + Elemento = strtok(NULL, ",");cambio(Elemento); + if (Elemento[0]=='0') + Nuevo_nodo->Record=NULL; + else + { + Nuevo_nodo->Record=NULL; + while((Elemento[0]!='0')) + { + Participacion* NuevaInscripcion= new Participacion;int ErrorSubNodo=0; + + if ( atoi(Elemento)>=maxEntero ||atoi(Elemento)<=0 || !validar_numero(Elemento)|| !Regresa_cod_mat(curso,atoi(Elemento)) ) + { + printf("\t||Se encontro un error en el codigo del curso||\n"); + ErrorSubNodo++; + } + else + NuevaInscripcion->Codigo_del_curso=atoi(Elemento); + + Elemento = strtok(NULL, ",");cambio(Elemento); + if ( atoi(Elemento)>20 || atoi(Elemento)<0 || !validar_numero(Elemento) ) + { + printf("\t||Se encontro un error en la nota||\n"); + ErrorSubNodo++; + } + else + NuevaInscripcion->nota=atoi(Elemento); + + Elemento = strtok(NULL, ",");cambio(Elemento); + if ( !validarStatus(Elemento[0]) ) + { + printf("\t||Se encontro un error en el Status ||\n"); + ErrorSubNodo++; + } + else + NuevaInscripcion->status=Elemento[0]; + + if (ErrorSubNodo==0) + { + NuevaInscripcion->prx=Nuevo_nodo->Record; + Nuevo_nodo->Record=NuevaInscripcion; + }else + printf("\t%i Errores al agregar el curso, se omite\n\n",ErrorSubNodo); + Elemento = strtok(NULL, ",");cambio(Elemento); + } + } + if(error) + printf("\t%i Errores en el nodo, no se pudo guardar la persona\n",error); + else + {insertar_PersonaOrdenadamente(nodos,&Nuevo_nodo);FormatoPersona(Nuevo_nodo,true);} + Elemento = strtok(NULL, ","); + } + system("pause");fclose(Archivo_entrada);return 1; +} diff --git a/Proyecto b/Proyecto deleted file mode 100644 index 7b54c76..0000000 --- a/Proyecto +++ /dev/null @@ -1,317 +0,0 @@ -#include -#include -#include -#include -#include -#include - - -typedef struct fecha{ - int anio; - int mes; - int dia; -} Fecha; - -typedef struct materias{ - int codigomateria; - char nombre[30]; - char descripcion[100]; - char semestre[3]; - int creditos; //DE 2 A 5 - materias *prx; -} Materias; - -typedef struct cursos{ - int codigocurso; - materias codigomateria; - fecha anio; - int lapso; // DE 1 A 3 - cursos *prx; -} Cursos; - -typedef struct personas{ - long int cedula; // NO SE PUEDE MODIFICAR - char nombre_apellido[30]; - fecha fecha; - char direccion[40]; - Materias *prx; - Cursos *aba; -} Personas; - -//DECLARACION DE FUNCIONES - -void introduciropcion(int *opcion); -int validar_num (char numero[]); - -int main (){ - int op, aux, aux2; - do { - printf("\t MENU\n\n"); - - printf(" 1- MANTENIMIENTO\n 2- CONTROL DE ESTUDIOS\n 3- CONSULTAS\n\n 0- SALIR\n\n "); - - fflush(stdin); - introduciropcion(&op); - - system("cls"); - switch (op) { - - //MENU MANTENIMIENTO - case 1: - do { - printf("\n\tMANTENIMIENTO\n\n"); - printf(" 1- MATERIAS\n 2- CURSOS\n 3- PERSONAS\n\n 0- VOLVER\n\n "); - fflush(stdin); - introduciropcion(&aux); - system("cls"); - switch (aux){ - case 0: - break; - //MENU MATERIAS - case 1: - do { - printf("\n\tMATERIAS \n\n"); - printf(" 1- AGREGAR\n 2- MODIFICAR\n 3- CONSULTAR\n 4- ELIMINAR\n\n 0- VOLVER\n\n "); - fflush(stdin); - introduciropcion(&aux2); - system("cls"); - switch (aux2){ - case 0: - break; - //Agregar Materia - case 1: printf("\n\tAGREGAR\n\n"); - break; - //Modificar Materia - case 2 : printf("\n\tMODIFICAR\n\n"); - break; - //Consultar Materia - case 3: printf("\n\tCONSULTAR\n\n"); - /*if (materias) - printf("\ntHOLA"); - else - printf(" NO EXISTE NINGUNA MATERIA EN EL SISTEMA \n\n");*/ - break; - //Eliminar Materia - case 4: printf("\n\tELIMINAR\n\n"); - /*if (materias) - printf("\ntHOLA"); - else - printf(" NO EXISTE NINGUNA MATERIA EN EL SISTEMA\n\n");*/ - break; - default: - printf(" DEBE ELEGIR UNA OPCION VALIDA\n"); - Sleep(1000); - } - }while(aux2!=0); - break; - //MENU CURSOS - case 2 : - do { - printf("\n\tCURSOS \n\n"); - printf(" 1- AGREGAR\n 2- MODIFICAR\n 3- CONSULTAR\n 4- ELIMINAR\n\n 0- VOLVER\n\n "); - fflush(stdin); - introduciropcion(&aux2); - system("cls"); - switch (aux2){ - case 0: - break; - //Agregar Curso - case 1: printf("\n\tAGREGAR\n\n"); - break; - //Modificar Curso - case 2 : printf("\n\tMODIFICAR\n\n"); - break; - //Consultar Curso - case 3: printf("\n\tCONSULTAR\n\n"); - /*if (cursos) { - } else printf(" NO EXISTE NINGUN CURSO EN EL SISTEMA \n\n");*/ - break; - //Eliminar Curso - case 4: printf("\n\tELIMINAR\n\n"); - /*if (cursos) - { - } else printf(" NO EXISTE NINGUN CURSO EN EL SISTEMA\n\n");*/ - break; - default: - printf(" DEBE ELEGIR UNA OPCION VALIDA\n"); - Sleep(1000); - } - }while(aux2!=0); - break; - //MENU PERSONAS - case 3: - do { - printf("\n\tPERSONAS \n\n"); - printf(" 1- AGREGAR\n 2- MODIFICAR\n 3- CONSULTAR\n 4- ELIMINAR\n\n 0- VOLVER\n\n "); - fflush(stdin); - introduciropcion(&aux2); - system("cls"); - switch (aux2){ - case 0: - break; - //Agregar Persona - case 1: printf("\n\tAGREGAR\n\n"); - break; - //Modificar Persona - case 2 : printf("\n\tMODIFICAR\n\n"); - break; - //Consultar Persona - case 3: printf("\n\tCONSULTAR\n\n"); - /*if (personas) { - } else printf(" NO EXISTE NINGUNA PERSONA EN EL SISTEMA \n\n");*/ - break; - //Eliminar Materia - case 4: printf("\n\tELIMINAR\n\n"); - /*if (personas) - { - } else printf(" NO EXISTE NINGUNA PERSONAS EN EL SISTEMA\n\n");*/ - break; - default: - printf(" DEBE ELEGIR UNA OPCION VALIDA\n"); - Sleep(1000); - } - }while(aux2!=0); - - break; - - default: - printf(" DEBE ELEGIR UNA OPCION VALIDA\n"); - } // Fin del Switch del menu de MANTENIMIENTO - if (aux !=0) - { - system("pause"); - system("cls"); - } - - }while(aux !=0); - break; - - //MENU CONTROL DE ESTUDIOS - ///////////////////////////////////////////////////////////////////////////////// - case 2: - do { - printf("\n\tCONTROL DE ESTUDIOS \n\n"); - printf(" 1- AGREGAR\n 2- MODIFICAR\n 3- CONSULTAR\n 4- ELIMINAR\n\n 0- VOLVER\n\n "); - fflush(stdin); - introduciropcion(&aux2); - system("cls"); - switch (aux2){ - case 0: - break; - //Agregar Persona - case 1: printf("\n\tAGREGAR\n\n"); - break; - //Modificar Persona - case 2 : printf("\n\tMODIFICAR\n\n"); - break; - //Consultar Persona - case 3: printf("\n\tCONSULTAR\n\n"); - /*if (personas) { - } else printf(" NO EXISTE NINGUNA PERSONA EN EL SISTEMA \n\n");*/ - break; - //Eliminar Materia - case 4: printf("\n\tELIMINAR\n\n"); - /*if (personas) - { - } else printf(" NO EXISTE NINGUNA PERSONA EN EL SISTEMA\n\n");*/ - break; - default: - printf(" DEBE ELEGIR UNA OPCION VALIDA\n"); - system("pause"); - } - }while(aux2!=0); - - break; - //MENU CONSULTA - ///////////////////////////////////////////////////////////////////////////////// - case 3: - do { - printf("\n\t\t MENU DE CONSULTA \n\n"); - printf("\t 1- DADO UN NOMBRE DE CURSO, BUSCA SU CODIGO\n"); - printf("\t 2- DADO UN NOMBRE DE ALUMNO, BUSCAR SU CEDULA ASOCIADA Y DATOS\n"); - printf("\t 3- DADO UN ANIO Y UN LAPSO, UBICAR TODOS LOS CURSOS DICTADOS \n"); - printf("\t 4- DADO UN CODIGO DE MATERIA, MOSTRAR TODOS LOS CURSOS QUE LA HAN DICTADO\n"); - printf("\t 5- DADO UN CODIGO DE CUROS, MOSTRAR TODOS LOS DATOS DEL MISMO\n"); - printf("\t 6- DADA UNA MATERIA, MOSTRAR TODOS LOS ALUMNOS QUE HAN APROBADO\n"); - printf("\t 7- TODOS LOS CURSOS DICTADOS EN UN PERIODO DADO\n"); - printf("\t 8- DADA UNA CEDULA, MOSTRAR TODOS LOS CURSOS CON SUS NOTAS TOMADAS POR ESA PERSONA\n"); - fflush(stdin); - introduciropcion(&aux2); - system("cls"); - switch (aux2){ - case 0: - break; - //Agregar Persona - case 1: printf("\n\tAGREGAR\n\n"); - break; - //Modificar Persona - case 2 : printf("\n\tMODIFICAR\n\n"); - break; - //Consultar Persona - case 3: printf("\n\tCONSULTAR\n\n"); - /*if (personas) { - } else printf(" NO EXISTE NINGUNA PERSONA EN EL SISTEMA \n\n");*/ - break; - //Eliminar Materia - case 4: printf("\n\tELIMINAR\n\n"); - /*if (personas) - { - } else printf(" NO EXISTE NINGUNA PERSONA EN EL SISTEMA\n\n");*/ - break; - default: - printf(" DEBE ELEGIR UNA OPCION VALIDA\n"); - system("pause"); - } - }while(aux2!=0); - - break; - ///////////////////////////////////////////////////////////////////////////////// - default: - if (op != 0) - { - printf(" DEBE ELEGIR UNA OPCION VALIDA "); - Sleep(1000); - } - } - system("cls"); - - }while(op !=0); // FIN DEL SWITCH DEL MENU PRINCIPAL - ///////////////////////////////////////////////////////////////////////////////// - - printf("\n HASTA PRONTO!!!\n"); - Sleep(1000); - return 0; - -} - -// FUNCIONES Y PROCEDIMIENTOS - -/*Funcion para validar que la opcion ingresada por el usuario es mayor que 1 y no contiene letras*/ -void introduciropcion(int *opcion) { - char copia[20]; - int valn; - fflush(stdin); - do{ - printf("\n INTRODUZCA NUMERO DE OPCION -> "); - scanf ("%s",&copia); - valn=validar_num(copia); - if ((strlen(copia)>1)||(valn!=0)) - printf("\n DEBE INGRESAR UN NUMERO QUE SE ENCUENTRE ENTRE LAS OPCIONES \n "); - } while ((strlen(copia)>1)||(valn!=0)); - *opcion=atoi(copia); - fflush(stdin); -} - -/*Funcion que nos permite validar dado un string, saber si tiene solo numeros o contiene letras*/ -int validar_num (char numero[]) { - int i=0, sw=0,j; - j=strlen(numero); - while((i +#include +#include +#include +#include +#include + +const int maxEntero=32767; // maximo numero para un ENTERO + +struct fecha +{ + int year; + int month; + int day; +} Fecha; + +struct materias +{ + int codigoMat; + char nombreMat[30]; + char descripcion[100]; + char semestre[3]; //DEL 1 AL 10 EN NUMEROS ROMANOS + int creditos; //DE 2 A 5 + materias *prx; +} Materias; + +struct cursos +{ + int codigocurso; + materias codigoMat; + fecha year; + int lapso; // DE 1 A 3 + cursos *prx; +} Cursos; + +struct personas +{ + long int cedula; // NO SE PUEDE MODIFICAR + char nombre_apellido[30]; + fecha fecha; + char direccion[40]; + materias *prx; + cursos *aba; + personas *sig; +} Personas; + +//DECLARACION DE FUNCIONES + +void introduciropcion(int *opcion); +int validar_num (char numero[]); +void AgregaMateria (materias **p); +void ingcodigo(int *codigo); +void ingnombre(char *Matnombre); +void ingDescripcion(char *Matdescripcion); +materias *buscarMateria(materias *mat, int codigo, char nombre[]); +void BloqMayus ( char s[] ); +void ingCredito(int *credito); + +int main (){ + materias *mat = NULL; + cursos *cur = NULL; + personas *per = NULL; + + int op, aux, aux2; + do + { + printf("\t MENU\n\n"); + + printf(" 1- MANTENIMIENTO\n 2- CONTROL DE ESTUDIOS\n 3- CONSULTAS\n\n 0- SALIR\n\n "); + + fflush(stdin); + introduciropcion(&op); + + system("cls"); + switch (op) + { + //MENU MANTENIMIENTO + case 1: + do + { + printf("\n\tMANTENIMIENTO\n\n"); + printf(" 1- MATERIAS\n 2- CURSOS\n 3- PERSONAS\n\n 0- VOLVER\n\n "); + fflush(stdin); + introduciropcion(&aux); + system("cls"); + switch (aux) + { + case 0: + break; + + case 1://MENU MATERIAS + do + { + printf("\n\tMATERIAS \n\n"); + printf(" 1- AGREGAR\n 2- MODIFICAR\n 3- CONSULTAR\n 4- ELIMINAR\n\n 0- VOLVER\n\n "); + fflush(stdin); + introduciropcion(&aux2); + system("cls"); + switch (aux2) + { + case 0: + break; + + case 1: //Agregar Materia + printf("\n\tAGREGAR\n\n"); + AgregaMateria(&mat); + fflush(stdin); + + printf("\n\n\tMATERIA AGREGADA CON EXITO!!!\n\n"); + system("cls"); + break; + + case 2 : //Modificar Materia + printf("\n\tMODIFICAR\n\n"); + break; + + case 3: //Consultar Materia + printf("\n\tCONSULTAR\n\n"); + /* + if (materias) + printf("\ntHOLA"); + else + printf(" NO EXISTE NINGUNA MATERIA EN EL SISTEMA \n\n"); + */ + break; + + case 4: //Eliminar Materia + printf("\n\tELIMINAR\n\n"); + /* + if (materias) + printf("\ntHOLA"); + else + printf(" NO EXISTE NINGUNA MATERIA EN EL SISTEMA\n\n"); + */ + break; + + default: + printf(" DEBE ELEGIR UNA OPCION VALIDA\n"); + Sleep(1000); + } + }while(aux2!=0); + break; + + case 2 ://MENU CURSOS + do + { + printf("\n\tCURSOS \n\n"); + printf(" 1- AGREGAR\n 2- MODIFICAR\n 3- CONSULTAR\n 4- ELIMINAR\n\n 0- VOLVER\n\n "); + fflush(stdin); + introduciropcion(&aux2); + system("cls"); + switch (aux2) + { + case 0: + break; + + case 1://Agregar Curso + printf("\n\tAGREGAR\n\n"); + break; + + case 2 : //Modificar Curso + printf("\n\tMODIFICAR\n\n"); + break; + + case 3: //Consultar Curso + printf("\n\tCONSULTAR\n\n"); + /* + if (cursos) + { + + } + else + printf(" NO EXISTE NINGUN CURSO EN EL SISTEMA \n\n"); + */ + break; + + case 4: //Eliminar Curso + printf("\n\tELIMINAR\n\n"); + /* + if (cursos) + { + + } + else + printf(" NO EXISTE NINGUN CURSO EN EL SISTEMA\n\n"); + */ + break; + + default: + printf(" DEBE ELEGIR UNA OPCION VALIDA\n"); + Sleep(1000); + } + }while(aux2!=0); + break; + + case 3: //MENU PERSONAS + do + { + printf("\n\tPERSONAS \n\n"); + printf(" 1- AGREGAR\n 2- MODIFICAR\n 3- CONSULTAR\n 4- ELIMINAR\n\n 0- VOLVER\n\n "); + fflush(stdin); + introduciropcion(&aux2); + system("cls"); + switch (aux2) + { + case 0: + break; + + case 1: //Agregar Persona + printf("\n\tAGREGAR\n\n"); + break; + + case 2: //Modificar Persona + printf("\n\tMODIFICAR\n\n"); + break; + + case 3: //Consultar Persona + printf("\n\tCONSULTAR\n\n"); + /* + if (personas) + { + } + else + printf(" NO EXISTE NINGUNA PERSONA EN EL SISTEMA \n\n"); + */ + break; + + case 4: //Eliminar Materia + printf("\n\tELIMINAR\n\n"); + /* + if (personas) + { + + } + else + printf(" NO EXISTE NINGUNA PERSONAS EN EL SISTEMA\n\n"); + */ + break; + + default: + printf(" DEBE ELEGIR UNA OPCION VALIDA\n"); + Sleep(1000); + } + }while(aux2!=0); + break; + + default: + printf(" DEBE ELEGIR UNA OPCION VALIDA\n"); + // Fin del Switch del menu de MANTENIMIENTO + } + if (aux !=0) + { + system("pause"); + system("cls"); + } + }while(aux !=0); + break; + + case 2:/*MENU CONTROL DE ESTUDIOS*/ + do + { + printf("\n\tCONTROL DE ESTUDIOS \n\n"); + printf(" 1- AGREGAR\n 2- MODIFICAR\n 3- CONSULTAR\n 4- ELIMINAR\n\n 0- VOLVER\n\n "); + fflush(stdin); + introduciropcion(&aux2); + system("cls"); + switch (aux2) + { + case 0: + break; + + case 1: //Agregar Persona + printf("\n\tAGREGAR\n\n"); + break; + + case 2 : //Modificar Persona + printf("\n\tMODIFICAR\n\n"); + break; + + case 3://Consultar Persona + printf("\n\tCONSULTAR\n\n"); + /* + if (personas) + { + + } + else + printf(" NO EXISTE NINGUNA PERSONA EN EL SISTEMA \n\n"); + */ + break; + //Eliminar Persona + case 4: + printf("\n\tELIMINAR\n\n"); + /* + if (personas) + { + ; + } + else + printf(" NO EXISTE NINGUNA PERSONA EN EL SISTEMA\n\n"); + */ + break; + + default: + printf(" DEBE ELEGIR UNA OPCION VALIDA\n"); + system("pause"); + break; + } + }while(aux2!=0); + break; + + case 3://MENU CONSULTA + do + { + printf("\n\t\t MENU DE CONSULTA \n\n"); + printf("\t 1- DADO UN NOMBRE DE CURSO, BUSCA SU CODIGO\n"); + printf("\t 2- DADO UN NOMBRE DE ALUMNO, BUSCAR SU CEDULA ASOCIADA Y DATOS\n"); + printf("\t 3- DADO UN ANIO Y UN LAPSO, UBICAR TODOS LOS CURSOS DICTADOS \n"); + printf("\t 4- DADO UN CODIGO DE MATERIA, MOSTRAR TODOS LOS CURSOS QUE LA HAN DICTADO\n"); + printf("\t 5- DADO UN CODIGO DE CUROS, MOSTRAR TODOS LOS DATOS DEL MISMO\n"); + printf("\t 6- DADA UNA MATERIA, MOSTRAR TODOS LOS ALUMNOS QUE HAN APROBADO\n"); + printf("\t 7- TODOS LOS CURSOS DICTADOS EN UN PERIODO DADO\n"); + printf("\t 8- DADA UNA CEDULA, MOSTRAR TODOS LOS CURSOS CON SUS NOTAS TOMADAS POR ESA PERSONA\n"); + fflush(stdin); + introduciropcion(&aux2); + system("cls"); + switch (aux2) + { + case 0: + break; + + case 1://Agregar Persona + printf("\n\tAGREGAR\n\n"); + break; + + case 2 ://Modificar Persona + printf("\n\tMODIFICAR\n\n"); + break; + //Consultar Persona + case 3: + printf("\n\tCONSULTAR\n\n"); + /* + if (personas) + { + + } + else + printf(" NO EXISTE NINGUNA PERSONA EN EL SISTEMA \n\n"); + */ + break; + + case 4: //Eliminar Materia + printf("\n\tELIMINAR\n\n"); + /* + if (personas) + { + + } + else + printf(" NO EXISTE NINGUNA PERSONA EN EL SISTEMA\n\n") + ;*/ + break; + + default: + printf(" DEBE ELEGIR UNA OPCION VALIDA\n"); + system("pause"); + break; + } + }while(aux2!=0); + break; + + default: + if (op != 0) + { + printf(" DEBE ELEGIR UNA OPCION VALIDA "); + Sleep(100); + } + } + system("cls"); + }while(op !=0); /* FIN DEL SWITCH DEL MENU PRINCIPAL*/ + printf("\n HASTA PRONTO!!!\n"); + Sleep(1000); + return 0; + +} + +/* FUNCIONES Y PROCEDIMIENTOS*/ + +void introduciropcion(int *opcion) +{/*Funcion para validar que la opcion ingresada por el usuario es mayor que 1 y no contiene letras*/ + char copia[20]; + int valn; + fflush(stdin); + do + { + printf("\n INTRODUZCA NUMERO DE OPCION -> "); + scanf_s ("%s",&copia); + valn=validar_num(copia); + if ((strlen(copia)>1)||(valn!=0)) + printf("\n DEBE INGRESAR UN NUMERO QUE SE ENCUENTRE ENTRE LAS OPCIONES \n "); + } while ((strlen(copia)>1)||(valn!=0)); + *opcion=atoi(copia); + fflush(stdin); +} + + +int validar_num (char numero[]) +{/*Funcion que nos permite validar dado un string, saber si tiene solo numeros o contiene letras*/ + int i=0, sw=0,j; + j=strlen(numero); + while((icodigoMat); + if (buscarMateria(*mat, ax->codigoMat, ax->nombreMat) != NULL) + {//Se valida que el codigo de la Materia sea unico + printf("\n EL CODIGO INTRODUCIDO YA SE ENCUENTRA EN EL SISTEMA \n"); + Sleep(1); + printf("\n\n"); + } + }while (buscarMateria(*mat, ax->codigoMat, ax->nombreMat) != NULL); + printf("\n"); + printf (" INTRODUZCA EL NOMBRE DE LA MATERIA [30 CARACTERES]: "); + ingnombre(ax->nombreMat); + printf (" INTRODUZCA UNA BREVE DESCRIPCION DE LA MATERIA [100 CARACTERES]: "); + ingDescripcion(ax->descripcion); + fflush(stdin); + printf (" INTRODUZCA LAS UNIDADES CREDITO [2-5]: "); + ingCredito(&ax->creditos); + + ax->prx = NULL; + printf(" %i -- %s -- %s -- %i\n\n", ax->codigoMat , ax->nombreMat, ax->descripcion, ax->creditos); + system("pause"); + if (mat==NULL) + { + *mat = ax; + } + else + { + ax->prx = *mat; + *mat = ax; + } +} + + +void ingcodigo(int *codigo) +{ + char copia[5]; + int valn; + do + { + scanf_s("%s",&copia); + valn=validar_num(copia); + *codigo=atoi(copia); + if((*codigo>=maxEntero)||(*codigo==0)||(valn!=0)) + { + printf("\n EL NUMERO INGRESADO NO ES VALIDO (INGRESE OTRO): "); + } + }while ((*codigo>=maxEntero)||(*codigo==0)||(valn!=0)); + fflush(stdin); + *codigo=atoi(copia); +} + + +void ingnombre(char *Matnombre) +{/*funcion para validar que el nombre no excede la cantidad de 30 caracteres*/ + do + { + fflush(stdin); + scanf_s (" %[^\n]s",&*Matnombre); + if (!(strlen(Matnombre)<=30)) + printf(" LA CADENA DEBE SER MENOR A 30 CARACTERES: "); + } while (!(strlen(Matnombre)<=30)); + BloqMayus(Matnombre); + printf (" \n"); + fflush(stdin); +} + +void ingDescripcion(char *Matdescripcion) +{/*funcion para validar que la descripcion no excede la cantidad de 100 caracteres*/ + do + { + fflush(stdin); + scanf_s (" %[^\n]s",&*Matdescripcion); + if (!(strlen(Matdescripcion)<=100)) + printf(" LA CADENA DEBE SER MENOR A 100 CARACTERES: "); + } while (!(strlen(Matdescripcion)<=100)); + BloqMayus(Matdescripcion); + printf (" \n"); + fflush(stdin); +} + +materias *buscarMateria(materias *mat, int codigo, char nombre[]) +{ + materias *temp = mat; + for ( ; temp ; temp=temp->prx) + { + if (codigo == 0) + { + if (strcmp(temp->nombreMat, nombre)==0) + return temp; //Se encontro una materia con el mismo nombre + } + else + { + if (temp->codigoMat == codigo) + return temp; //Se encontro una materia con el mismo codigo + } + } + return NULL; +} + +void BloqMayus ( char s[] ) +{/*Rutina que convierte todas las letras de un string en mayusculas*/ + int i; + for (i = 0; s[i]!='\0'; i++) + { + if(s[i] >= 'a' && s[i] <= 'z') + { + s[i] = s[i] - 32; + } + } +} + +void ingCredito(int *credito) +{/*funcion para validar las unidades credito de la materia*/ + char copiacredito[5]; + int valn; + bool ver = false; + do + { + fflush(stdin); + scanf_s ("%s",&copiacredito); + valn=validar_num(copiacredito); + if ((strlen(copiacredito)<1)||(valn!=0)) + { + + } + else + if ((atoi(copiacredito)>1) && (atoi(copiacredito)<6)) + { + *credito=atoi(copiacredito); + ver = true; + } + if (ver==false) + printf(" \n OPCION INVALIDA, INGRESE DE NUEVO -> "); + } while (ver == false); + fflush(stdin); +} diff --git a/Proyecto2023 25.pdf b/Proyecto2023 25.pdf new file mode 100644 index 0000000..de46e29 Binary files /dev/null and b/Proyecto2023 25.pdf differ