Código:
#include <stdio.h> #include <string.h> #include <conio.h> typedef struct alumno{ char nombre[50]; char cuenta[7]; char materia[20]; } Alumno; // Arreglo que almacena alumnos Alumno alumnos[100]; // Contiene el numero de alumnos actual int total = 0; void cargar(), guardar(), insertar(Alumno info); void ingresar(), eliminar(), mostrar(), ordenar(); char menu(void); void main(void) { clrscr(); cargar(); char op; for(;;) { switch(op=menu()) { case '1': ingresar(); printf("Alumno ingresado exitosamente"); getch(); break; case '2': eliminar(); getch(); break; case '3': ordenar(); printf("Se han ordenado los registros"); getch(); break; case '4': mostrar(); getch(); break; case '5': break; default : printf("Opcion no valida"); getch(); break; } if(op=='5') break; clrscr(); } guardar(); } void insertar(Alumno info) { strcpy(alumnos[total].nombre, info.nombre); strcpy(alumnos[total].cuenta, info.cuenta); strcpy(alumnos[total].materia, info.materia); total++; } void cargar() { Alumno info; FILE *fp; fp=fopen("alumnos.txt","r"); if(fp==NULL) { printf("No se puede abrir el archivo\n"); return; } while(!feof(fp)) { if(fread(&info, sizeof(Alumno), 1, fp)!=1) break; insertar(info); } fclose(fp); } void guardar() { Alumno info; FILE *fp; fp=fopen("alumnos.txt","w"); if(fp==NULL) { printf("No se puede abrir el archivo\n"); return; } for(int i=0; i<total; i++) fwrite(&alumnos[i], sizeof(Alumno), 1, fp); fclose(fp); } void ingresar() { Alumno info; printf("Ingrese nombre: "); scanf("%s",&(info.nombre)); printf("Ingrese No de cuenta: "); scanf("%s",&(info.cuenta)); printf("Ingrese la materia: "); scanf("%s", &(info.materia)); insertar(info); } void eliminar() { char nombre[20]; int i; //printf("Ingrese el numero de cuenta del alumno a eliminar: "); //gets(nombre); for(i=0; i<total; i++) if(!strcmp(alumnos[i].nombre, nombre)) { // Recorre registros posteriores for(int j=i+1; j<total; j++) { strcpy(alumnos[j-1].nombre, alumnos[j].nombre); strcpy(alumnos[j-1].cuenta, alumnos[j].cuenta); strcpy( alumnos[j-1].materia, alumnos[j].materia); printf("Alumno eliminado"); total--; break; } if(i==total) printf("Alumno no encontrado"); } void mostrar() { printf("--- Listado de alumnos ---\n"); printf("Num. - Nombre - No. de Cuenta - materia\n"); for(int i=0; i<total; i++) { printf("%d - ", i+1); printf("%s - ", alumnos[i].nombre); printf("%s - ", alumnos[i].cuenta); printf("%s\n", alumnos[i].materia); } } void ordenar() { int i, j; Alumno temp; for(i=0; i<total-1; i++) { for(j=i+1; j<total; j++) if(strcmp(alumnos[i].nombre, alumnos[j].nombre)>0) { // Copia en variable temporal datos actuales strcpy(temp.nombre, alumnos[i].nombre); strcpy(temp.cuenta, alumnos[i].cuenta); strcpy(temp.materia, alumnos[i].materia); // Intercambia informacion strcpy(alumnos[i].nombre, alumnos[j].nombre); strcpy(alumnos[i].cuenta, alumnos[j].cuenta); strcpy(alumnos[i].materia, alumnos[j].materia); strcpy(alumnos[j].nombre, temp.nombre); strcpy(alumnos[j].cuenta, temp.cuenta); strcpy(alumnos[j].materia, temp.materia); } } } char menu(void) { char c; printf("\n\n\tPROGRAMA DE ALTA DE ALUMNOS \n"); printf("\tREGISTRO DE ALUMNOS\n"); printf("Por favor teclee una opcion del menu \n"); printf("(1)Dar de alta almuno \n"); printf("(2) Eliminar alumno\n"); printf("(3) Ordenas la lista de alumnos \n"); printf("(4) Imprimir lista de alumnos \n"); printf("(5) Salir del programa \n"); printf("Seleccion:\n "); c=getche(); printf("\n"); return(c); }