http://pastebin.com/m22a88102 ahi lo he subido, aunq tambien lo subo aki
/***************************************************************************
Programa: Ejercicio 5 Lista 8
Autor: Santiago Perez Gran
Fecha: 20/04/2008
Finalidad: Alumnos
Comentarios:
Historia: v1.0
Modo de utilizacion:
***************************************************************************/
#include <stdio.h> /* Funciones de entrada y salida de datos */
#include <conio.h> /* Funciones de entrada y salida de consola */
#include <dos.h> /* Delay */
#include <stdlib.h> /* Funciones de numeros aleatorios */
#include <string.h> /* Cadenas de caractereres */
struct alumno
{
int codigo;
char curso[4];
char nombre[45];
int edad;
};
FILE *fichero1;
FILE *fichero2;
void crear (struct alumno datos)
{
clrscr();
int ok;
char a;
fichero1=fopen("alum.dat","a+b");
if(fichero1==NULL)
{
gotoxy(20,12);
printf("Error en la apertura de los ficheros");
gotoxy(25,14);
printf("Pulse una tecla para continuar");
}
else
{
a=getc(fichero1);
if(a==EOF)
{
fclose(fichero1);
fichero1=fopen("alum.dat","a+b");
gotoxy(25,10);
printf("Codigo: ");
fflush(stdin);
scanf("%d",&datos.codigo);
gotoxy(25,12);
printf("Curso: ");
fflush(stdin);
gets(datos.curso);
gotoxy(25,14);
printf("Nombre: ");
gets(datos.nombre);
gotoxy(25,16);
printf("Edad: ");
fflush(stdin);
scanf("%d",datos.edad);
fwrite(&datos,sizeof(struct alumno),1,fichero1);
fclose(fichero1);
gotoxy(20,18);
printf("Pulse una tecla para continuar");
}
}
}
void visualizar(struct alumno datos)
{
fichero1=fopen("alum.dat","r+b");
clrscr();
if(fichero1==NULL)
{
gotoxy(25,12);
printf("Error en la apertura del fichero");
gotoxy(25,14);
printf("Pulse una tecla para continuar");
}
else
{
fread(&datos,sizeof(struct alumno),1,fichero1);
while(!feof(fichero1))
{
clrscr();
gotoxy(25,9);
printf("Codigo: %d",datos.codigo);
gotoxy(25,11);
printf("Curso: ");
puts(datos.curso);
gotoxy(25,13);
printf("Nombre: ");
puts(datos.nombre);
gotoxy(25,15);
printf("Edad: %d",datos.edad);
fread(&datos,sizeof(struct alumno),1,fichero1);
gotoxy(25,20);
printf("Pulse una teclar para continuar");
getche();
}
}
}
void anadir(struct alumno datos)
{
int opcion,fin,cod,ok;
do
{
fin=0;
clrscr();
gotoxy(25,11);
printf("1. Añadir un nuevo alumno");
gotoxy(25,13);
printf("2. Salir al menu principal");
gotoxy(25,15);
printf("Opcion: ");
scanf("%d",&opcion);
switch(opcion)
{
default:
{
clrscr();
gotoxy(28,12);
printf("Opcion erronea");
gotoxy(25,14);
printf("Pulse una tecla para continuar");
getche();
break;
}
case 1:
{
fichero1=fopen("alum.dat","a+b");
if(fichero1==NULL)
{
clrscr();
gotoxy(25,12);
printf("Error en la apertura del fichero");
gotoxy(25,14);
printf("Pulse una tecla para continuar");
getche();
}
else
{
do
{
clrscr();
gotoxy(30,3);
printf("Añadir alumno");
gotoxy(25,10);
printf("Codigo: ");
fflush(stdin);
scanf("%d",&cod);
ok=0;
rewind(fichero1);
fread(&datos,sizeof(struct alumno),1,fichero1);
while(!feof(fichero1))
{
if(datos.codigo==cod)
{
ok=1;
}
fread(&datos,sizeof(struct alumno),1,fichero1);
}
if(ok==1)
{
gotoxy(25,13);
printf("El numero de cuenta ya existe");
gotoxy(26,14);
printf("introduzca la cuenta de nuevo");
delay(1000);
}
}while(ok==1);
datos.codigo=cod;
gotoxy(25,12);
printf("Curso: ");
fflush(stdin);
gets(datos.curso);
gotoxy(25,14);
printf("Nombre alumno: ");
fflush(stdin);
gets(datos.nombre);
gotoxy(25, 16);
printf("Edad: ");
fflush(stdin);
scanf("%d",&datos.edad);
gotoxy(25,20);
printf("Pulse una tecla para continuar");
getche();
fwrite(&datos,sizeof(struct alumno),1,fichero1);
fclose(fichero1);
break;
}
}
case 2:
{
clrscr();
gotoxy(25,12);
printf("Volviendo al menu principal");
gotoxy(25,14);
printf("Pulse una tecla para continuar");
fin=1;
break;
}
}
}while(fin==0);
}
void buscar(struct alumno datos)
{
int ok,fin,opcion;
char bus[45];
do
{
fin=0;
clrscr();
gotoxy(25,11);
printf("1. Buscar un alumno por nombre");
gotoxy(25,13);
printf("2. Salir al menu principal");
gotoxy(25,15);
printf("Opcion: ");
scanf("%d",&opcion);
switch(opcion)
{
default:
{
clrscr();
gotoxy(28,12);
printf("Opcion incorrecta");
gotoxy(25,14);
printf("Pulse una tecla para continuar");
getche();
}
case 1:
{
clrscr();
ok=0;
gotoxy(20,6);
printf("Nombre de la persona: ");
fflush(stdin);
gets(bus);
fichero1=fopen("alum.dat","r+b");
fread(&datos,sizeof(struct alumno),1,fichero1);
while(!feof(fichero1) && ok==0)
{
if(strcmp(bus,datos.nombre)==0)
{
gotoxy(25,9);
printf("Codigo: %d",datos.codigo);
gotoxy(25,11);
printf("Curso. ");
puts(datos.curso);
gotoxy(25,13);
printf("Edad: %d",datos.edad);
gotoxy(20,18);
printf("Pulse una tecla para continuar");
getche();
ok=1;
}
else
{
fread(&datos,sizeof(struct alumno),1,fichero1);
}
if(feof(fichero1) && ok==0)
{
ok=1;
gotoxy(20,10);
printf("No hay ningun nombre que concuerde");
gotoxy(20,12);
printf("Pulse una tecla para continuar");
getche();
}
}
fclose(fichero1);
break;
} //fin case 1
case 2:
{
clrscr();
gotoxy(25,12);
printf("Volviendo al menu principal");
gotoxy(25,14);
printf("Pulse una tecla para continuar");
fin=1;
}
} //fin switch
}while(fin==0);
}
void borrar(struct alumno datos)
{
int fin,opcion, cod,ok=0;
do
{
fin=0;
clrscr();
gotoxy(25,11);
printf("1. Borrar un alumno por codigo");
gotoxy(25,13);
printf("2. Salir al menu principal");
gotoxy(25,15);
printf("Opcion: ");
scanf("%d",&opcion);
switch(opcion)
{
default:
{
clrscr();
gotoxy(28,12);
printf("Opcion incorrecta");
gotoxy(25,14);
printf("Pulse una tecla para continuar");
getche();
break;
}
case 1:
{
clrscr();
gotoxy(20,6);
printf("Codigo de la persona: ");
fflush(stdin);
scanf("%d",&cod);
fclose(fichero1);
fichero1=fopen("alum.dat","rb");
if(fichero1==NULL)
{
clrscr();
printf("Error en la apertura");
}
//fichero2=fopen("aux.dat","wb");
//fclose (fichero2); -> abro y cierro para comprobar que no falla en la apertura/cierre
fichero2=fopen("aux.dat","wb");
if(fichero2==NULL)
{
clrscr();
printf("Error en la apertura");
}
fread(&datos,sizeof(struct alumno),1,fichero1);
while(!feof(fichero1))
{
if(cod==datos.codigo)
{
gotoxy(25,9);
printf("Nombre: ");
puts(datos.nombre);
gotoxy(25,11);
printf("Curso. ");
puts(datos.curso);
gotoxy(25,13);
printf("Edad: %d",datos.edad);
gotoxy(25,15);
printf("Este alumno va a ser elimiando de la base");
gotoxy(25,18);
printf("Pulse una tecla para continuar");
getche();
ok=1;
}
else
{
printf("DEBUG \n");
//fprintf(fichero2,"%s",datos.nombre); Prueba para ver si da error tmb con fprintf. DA ERROR -_-
fwrite(&datos,sizeof(struct alumno),1,fichero2); //
}
fread(&datos,sizeof(struct alumno),1,fichero1);
}
if(feof(fichero1) && ok==0)
{
gotoxy(20,10);
printf("No hay ningun nombre que concuerde");
gotoxy(20,12);
printf("Pulse una tecla para continuar");
getche();
}
fclose(fichero1);
fclose(fichero2); // Al cerrar el fichero2 tmb da error
remove("alum.dat");
rename("aux.dat","alum.dat");
break;
} //fin case 1
case 2:
{
clrscr();
gotoxy(25,12);
printf("Volviendo al menu principal");
gotoxy(25,14);
printf("Pulse una tecla para continuar");
fin=1;
break;
}
} //fin switch
}while(fin==0);
}
void ver(struct alumno datos)
{
struct alumno ordenar[100];
int num=0,i,j,k;
fichero1=fopen("alum.dat","r+b");
fread(&datos,sizeof(struct alumno),1,fichero1);
while(!feof(fichero1))
{
ordenar[num]=datos;
num++;
fread(&datos,sizeof(struct alumno),1,fichero1);
}
for(i=0;i<num;i++)
{
for(j=i+1;j<num;j++)
{
strcpy(ordenar[99].nombre," ");
strcpy(ordenar[99].curso," ");
if(ordenar[i].edad>ordenar[j].edad)
{
ordenar[99]=ordenar[j];
ordenar[j]=ordenar[i];
ordenar[i]=ordenar[99];
}
}
}
for(i=0;i<num;i++)
{
clrscr();
gotoxy(25,9);
printf("Codigo: %d",ordenar[i].codigo);
gotoxy(25,11);
printf("Curso: ");
puts(ordenar[i].curso);
gotoxy(25,13);
printf("Nombre: ");
puts(ordenar[i].nombre);
gotoxy(25,15);
printf("Edad: %d",ordenar[i].edad);
gotoxy(25,20);
printf("Pulse una teclar para continuar");
getche();
}
}
void main()
{
struct alumno datos;
clrscr();
int i,fin=0,opcion;
do
{
clrscr();
gotoxy(22,3);
printf("Base de datos de alumnos");
gotoxy(25,6);
printf("Que desea hacer");
gotoxy(15,8);
printf("1. Crear y almacenar informacion en el archivo 'alum.dat'");
gotoxy(15,10);
printf("2. Visualizar el contenido del fichero 'alum.dat'");
gotoxy(15,12);
printf("3. A€adir nuevos datos al fichero (al final del fichero)");
gotoxy(15,14);
printf("4. Borrar un determinado registro buscando por el codigo");
gotoxy(15,16);
printf("5. Buscar un registro especifico (buscar por nombre");
gotoxy(15,18);
printf("6. Visualiza el fichero ordenado por edad");
gotoxy(15,20);
printf("7. Salir de la aplicacion");
gotoxy(20,22);
printf("Mi opcion es : ");
fflush(stdin);
scanf("%d",&opcion);
switch(opcion)
{
default:
clrscr();
gotoxy(28,12);
printf("Opcion erronea");
gotoxy(25,14);
printf("Pulse una tecla para continuar");
getche();
break;
case 1:
crear(datos);
getche();
break;
case 2:
visualizar(datos);
getche();
break;
case 3:
anadir(datos);
getche();
break;
case 4:
borrar(datos);
getche();
break;
case 5:
buscar(datos);
getche();
break;
case 6:
ver(datos);
break;
case 7:
fin=1;
gotoxy(25,24);
printf("Hasta la proxima");
delay(1500);
break;
}
}while(fin==0);
getche();
}