/*
Joshue Andre Marquez Luna
Practica #9
El uso y manipulacion de las estructuras(registros) en C y con archivo
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Fecha{
int dia;
int mes;
int anio;
};
struct Estudiante{
char nombre[100];
int matricula;
int edad;
Fecha fechaNacimiento;
};
#define TotalAlumnos 5
void altas(Estudiante alumnos[], int *numAlumnos);
void listado(Estudiante alumnos[], int *numAlumnos);
void modifica(Estudiante alumnos[], int *numAlumnos);
void bajas(Estudiante alumnos[], int *numAlumnos);
void respaldarBD(Estudiante alumnos[], int *numAlumnos);
void restaurarBD(Estudiante alumnos[], int *numAlumnos);
main(){
int op,numAlumnos=0;
Estudiante alumnos[TotalAlumnos];
do{
printf("-----BASE DE DATOS DE ESTUDIANTES DE LA UABC-----");
printf("\n-------------------------------------------------");
printf("\n-----------------Menu de datos-------------------");
printf("\n-------------------------------------------------");
printf("\n1.- Altas");
printf("\n2.- Bajas");
printf("\n3.- Modificaciones");
printf("\n4.- Listado");
printf("\n5.- Respaldar BD");
printf("\n6.- Restaurar BD");
printf("\n7.- Salir");
printf("\nSeleccione una opcion entre el 1 y el 7\n");
scanf("%d",&op);
switch(op){
case 1 :
printf("-------------------------------------------------\n");
printf("-----------------Menu de altas-------------------\n");
printf("-------------------------------------------------\n");
altas(alumnos,&numAlumnos);
fflush(stdin);
break;
case 2 : printf("Elegiste BAJAS. \n");
bajas(alumnos,&numAlumnos);
break;
case 3 : printf("Elegiste MODIFICACIONES. \n");
modifica(alumnos,&numAlumnos);
break;
case 4 : system("cls");
listado(alumnos,&numAlumnos);
break;
case 5 : respaldarBD(alumnos, &numAlumnos);
break;
case 6 : restaurarBD(alumnos, &numAlumnos);
break;
case 7 : respaldarBD(alumnos, &numAlumnos);
printf("Gracias por usar este menu ^-^/ \n");
break;
default : printf("\nOpcion invalida.........\n");
}
system("pause");
system("cls");
}while(op!=7);
void altas(Estudiante alumnos[], int *numAlumnos){
fflush(stdin);
puts("Ingresa el nombre del estudiante: ");
gets(alumnos[*numAlumnos].nombre);
printf("\nIngresa la matricula: ");scanf("%d",&alumnos[*numAlumnos].matricula);
printf("\nIngrese la edad del estudiante %s: ", alumnos[*numAlumnos].nombre);scanf("%d",&alumnos[*numAlumnos].edad);
printf("\nIngresa la fecha de nacimiente de %s en formato dd/mm/aaaa: ",alumnos[*numAlumnos].nombre);
scanf("%d%d%d",&alumnos[*numAlumnos].fechaNacimiento.dia,
&alumnos[*numAlumnos].fechaNacimiento.mes,&alumnos[*numAlumnos].fechaNacimiento.anio);
*numAlumnos= *numAlumnos+1;
}
void listado(Estudiante alumnos[], int *numAlumnos){
int i;
printf("\n---------------------------------------------\n");
printf("\n-------------------DATOS---------------------\n");
printf("\n---------------------------------------------\n");
for(i=0;i<*numAlumnos;i++){
printf("\nNombre: %s",alumnos[i].nombre);
printf("\nMatricula: %d", alumnos[i].matricula);
printf("\nEdad: %d", alumnos[i].edad);
printf("\nFecha de Nacimiento: %d/%d/%d \n", alumnos[i].fechaNacimiento.dia, alumnos[i].fechaNacimiento.mes, alumnos[i].
fechaNacimiento.anio);
}
}
void modifica(Estudiante alumnos[], int *numAlumnos){
int i,matricula,opcion;
bool encontro=false;
printf("Ingresa la matricula del estudiante que quieres modificar: \n");scanf("%d",&matricula);
for(i=0;i<*numAlumnos;i++){
if(alumnos[i].matricula == matricula){
printf("\n----------------DATOS A MODIFICAR-----------------");
printf("\n1. Nombre: ");
printf("\n2. Matricula:");
printf("\n3. Edad:");
printf("\n4. Fecha de Nacimiento: \n");
printf("\n---------------------------------------------------\n");
scanf("%d",&opcion);
switch(opcion){
case 1 : fflush(stdin);
printf("Ingresa el nuevo nombre: \n");
fflush(stdin);
gets(alumnos[i].nombre);
break;
case 2 : printf("Ingresa la matricula: \n");
scanf("%d",&alumnos[i].matricula);
break;
case 3 :printf("Ingresa la edad: \n");
scanf("%d",&alumnos[i].edad);
break;
case 4 : printf("\nIngresa la fecha de nacimiente en formato dd/mm/aaaa: ");
scanf("%d%d%d",&alumnos[i].fechaNacimiento.dia,&alumnos[i].fechaNacimiento.mes,&alumnos
[i].fechaNacimiento.anio);
break;
default : printf("\nOpcion no valida");
break;
}
encontro=true;
}
if(encontro==true){
printf("\nSus datos han sido modificados\n");
}
else{
printf("\nLa matricula no fue encontrada\n");
}
}
}
void bajas(Estudiante alumnos[], int *numAlumnos){
int i,matricula,j;
bool encontro=false;
char borrar;
printf("Ingresa la matricula del estudiante que quieres dar de baja: \n");scanf("%d",&matricula);
for(i=0;i<*numAlumnos;i++){
if(alumnos[i].matricula == matricula){
fflush(stdin);
printf("Estas seguro que lo quieres borrar? teclea [s/n]");scanf("%c",&borrar);
if(borrar == 's'){
for(j=i;j<=*numAlumnos;j++){
alumnos[j]=alumnos[j+1];
}
encontro=true;
printf("El estudiante fue dado de baja\n");
}
}
}
*numAlumnos=*numAlumnos-1;
if(encontro==false){
printf("\nEl estudiante no fue encontrado\n");
}
}
void respaldarBD(Estudiante alumnos[], int *numAlumnos){
FILE *archivo;
int i;
archivo = fopen("bdatos.dat","wb");
for(i=0;i<*numAlumnos;i++){
fwrite(&alumnos[i], sizeof(struct Estudiante), 1, archivo);
}
fclose(archivo);
printf("\nLa informacion fue respaldada");
}
void restaurarBD(Estudiante alumnos[], int *numAlumnos){
FILE *archivo;
int i=0;
archivo = fopen("bdatos.dat","rb");
while(fread(&alumnos[i], sizeof(struct Estudiante), 1, archivo)!= NULL){
i++;
*numAlumnos = *numAlumnos +1;
}
fclose(archivo);
printf("\nLa informacion fue restaurada con exito...\n");
}