
10/11/2009, 20:56
|
| | Fecha de Ingreso: octubre-2009
Mensajes: 19
Antigüedad: 15 años, 5 meses Puntos: 0 | |
no puedo eliminar datos??? hola que tal miren tengo este programa el cual siento que hay la llevo pero me falta el poder borrar toda la lista o un solo dato alguien me podria orientar de como realizarlo
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);
}
|