[C con Clase] urgente antes del 4/3/02

jose omar leon luna gyakuza en gmail.com
Vie Mar 2 05:45:30 CET 2012


hola otravez tengo un codigo y en las opciones de buscar, modificar y eliminar ya no se ejecuta las demas parece que funciona, espero puedan indicarme y corregir los errores y por que esta mal, bien este es el codigo, gracias :-(:

/*
Programa: Menu Escuela
Programador: José Omar León Luna
Descripción: Captura y actualiza datos de alumnos
*/

#include <stdio.h> 
#include <string.h> 
#include <conio.h> 
#include <stdlib.h>

typedef struct alumno{ 
   int matricula;     
   char nombre[20]; 
   char direccion[30]; 
   int nota; 
} 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(), buscar(), modificar(), eliminar(), ordenar(), mostrar(); 
char menu(void); 

int main(void) 
{ 
   system ("cls"); 
   /*cargar(); */
   char op; 

   for(;;)/*menu permanente*/ 
   { 
     switch(op=menu()) 
     { 
        case '1': 
           ingresar(); 
           getch(); 
           break; 
        case '2': 
           buscar(); 
           getch(); 
           break; 
        case '3': 
           modificar(); 
           getch(); 
           break; 
        case '4': 
           eliminar(); 
           getch(); 
           break; 
        case '5': 
           ordenar(); 
           getch(); 
           break; 
        case '6': 
           mostrar(); 
           getch(); 
           break; 
        case '7': 
           break; 
        default : 
           printf("Opcion no valida"); 
           getch(); 
           break; 
     } 

     if(op=='7') break; 
     system ("cls"); 
   } 

/* printf("Presione (g) para guardar los cambios: ");

   if(getche()=='g')
      guardar(); */
} 


void insertar(Alumno info) 
{ 
   alumnos[total].matricula = info.matricula;  
   strcpy(alumnos[total].nombre, info.nombre); 
   strcpy(alumnos[total].direccion, info.direccion); 
   alumnos[total].nota = info.nota; 
   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 boleta: "); scanf("%d", &(info.matricula)); 
   printf("Ingrese nombre: "); fflush(stdin); gets(info.nombre); 
   printf("Ingrese direccion: "); gets(info.direccion);
   printf("Ingrese nota: "); scanf("%d", &(info.nota));
   insertar(info); 
   printf("Alumno ingresado exitosamente");
}

void buscar()
{
   int matricula;
   int i;

   printf("Ingrese boleta a buscar: ");
   scanf("%d", matricula);

   for(i=0; i<total; i++)
      if(alumnos[i].matricula == matricula)
      {
	 printf("--- Datos del alumno ---\n");
	 printf("Num.: %d\n", i+1);
	 printf("Boleta: %d", alumnos[i].matricula);
	 printf("Nota: %d", alumnos[i].nota);
	 printf("Nombre: %s\n", alumnos[i].nombre);
	 printf("Direccion: %s\n", alumnos[i].direccion);
	 printf("Nota: %d", alumnos[i].nota);

	 break;
      }

   if(i==total)
      printf("Alumno no encontrado");
}

void modificar()
{
   int matricula;
   int i;

   printf("Ingrese boleta del alumno a modificar: ");
   scanf("%d", matricula);

   for(i=0; i<total; i++)
      if(alumnos[i].matricula == matricula)
      {
	 printf("--- Datos actuales del alumno ---\n");
	 printf("Num.: %d\n", i+1);
	 printf("Boleta: %d", alumnos[i].matricula);
	 printf("Nombre: %s\n", alumnos[i].nombre);
	 printf("Direccion: %s\n", alumnos[i].direccion);
	 printf("Nota: %d\n\n", alumnos[i].nota);

         printf("--- Nuevos datos del alumno ---\n");
         printf("Ingrese boleta: "); scanf("%d", &(alumnos[i].matricula));   
         printf("Ingrese nombre: "); gets(alumnos[i].nombre); 
         printf("Ingrese direccion: "); gets(alumnos[i].direccion); 
         printf("Ingrese nota: "); scanf("%d", &(alumnos[i].nota));

         printf("\n\nDatos actualizados exitosamente!");

         break;
      } 

   if(i==total) 
      printf("Alumno no encontrado"); 
} 

void eliminar() 
{ 
   int matricula;
   int i;
    
   printf("Ingrese boleta del alumno a modificar: ");
   scanf("%d", matricula);


   for(i=0; i<total; i++) 
      if(alumnos[i].matricula == matricula)
      { 
         /* Recorre registros posteriores */
         for(int j=i+1; j<total; j++) 
         { 
            alumnos[j-1].matricula = alumnos[j].matricula;
            strcpy(alumnos[j-1].nombre, alumnos[j].nombre); 
            strcpy(alumnos[j-1].direccion, alumnos[j].direccion); 
            alumnos[j-1].nota = alumnos[j].nota; 
         } 

         printf("Alumno eliminado"); 
         total--; 
         break; 
      } 

   if(i==total) 
      printf("Alumno no encontrado"); 
} 

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 */
         temp.matricula = alumnos[i].matricula;
         strcpy(temp.nombre, alumnos[i].nombre); 
         strcpy(temp.direccion, alumnos[i].direccion); 
         temp.nota = alumnos[i].nota; 

         /* Intercambia informacion */
         alumnos[i].matricula = alumnos[j].matricula; 
         strcpy(alumnos[i].nombre, alumnos[j].nombre); 
         strcpy(alumnos[i].direccion, alumnos[j].direccion); 
         alumnos[i].nota = alumnos[j].nota; 

         alumnos[j].matricula = temp.matricula; 
         strcpy(alumnos[j].nombre, temp.nombre); 
         strcpy(alumnos[j].direccion, temp.direccion); 
         alumnos[j].nota = temp.nota;        
      } 
   }
   printf("Se han ordenado los registros"); 
} 

void mostrar() 
{ 
   printf("--- Listado de alumnos ---\n"); 
   printf("Num - Boleta - Nombre - Direccion - Nota \n\n"); 
   for(int i=0; i<total; i++) 
   { 
      printf("%d - ", i+1);
      printf("%d - ", alumnos[i].matricula); 
      printf("%s - ", alumnos[i].nombre); 
      printf("%s - ", alumnos[i].direccion); 
      printf("%d\n", alumnos[i].nota); 
   } 
} 


char menu(void) 
{ 
   char c; 
   printf("(1)Ingresar, (2)Buscar, (3)Modificar, (4)Eliminar, (5)Ordenar, (6)Mostrar lista\n(7)Salir\n"); 

   printf("\nSeleccion: "); 
   c=getche(); 
   printf("\n"); 
   return(c); 
}
 


Más información sobre la lista de distribución Cconclase