C/Visual C - Empaquetado de registros

 
Vista:

Empaquetado de registros

Publicado por Dnafactor (1 intervención) el 27/05/2007 03:42:11
Como empaqueto los registros y los guardo en un archivo , que tomo de la entrada estandar o teclado, ya que yo lo hice de esta forma pero mi profesora U_U me dice que no es asi , alguien sabe.?

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct{
char no[50];
char di[50];
char fi[10];
char nc[10];

} reg;

typedef struct{
char nomat[50];
char nal[3];

} reg2;

typedef struct{
char ida[3];
char nca[3];
char ndc[3];
} reg3;

FILE *fa,*fc,*fn,*fb;
int mk2;

//prototipos de función
reg le(reg x);//guarda datos de alumno
reg2 lem(reg2 y);//Introduce una nueva materia
void bes(reg x);//Buscar algun alumno por su llave clave
void besm(reg3 y);//busca datos de alumnos inscritos en materias
void iesm(reg3 y);//Inscrbir un alumno en una materia
reg2 lem2(reg2 y);//lee las materias que hay en materia.txt

main()
{
int i;
char op,q,r;
reg ds;
reg2 ds2;
reg3 ds3;

op=2;
do{
//clrscr();
printf("\n Que deseas hacer\n");
printf("\n1.- Introducir datos de alumnos");
printf("\n2.- Buscar algun alumno por su llave clave");
printf("\n3.- Introducir una nueva materia");
printf("\n4.- Inscrbir un alumno en una materia");
printf("\n5.- Buscar a algun alumno en materias por su id(llave)");
printf("\n9.- Salir\n");
op=getch();

if(op=='1')
le(ds);
if(op=='2')
bes(ds);
if(op=='3')
lem(ds2);
if(op=='4')
iesm(ds3);
if(op=='5')
besm(ds3);

}while(op!='9');
printf("Adios, presiona enter para terminar");
getch();
}

//lee datos de alumno nuevo y los guarda
reg le(reg x)
{

if ((fa = fopen("alumno.txt", "a"))==NULL){
printf("Error al abrir y poner datos al fichero\n");
exit(1);
}
else
{
// clrscr();
printf ("Nombre : ");
gets(x.no);
printf ("\nDireccion : ");
gets(x.di);
printf ("\nFecha de ingreso : ");
gets(x.fi);
printf ("\n Numero de creditos completados : ");
gets(x.nc);
fwrite(&x, sizeof(reg), 1, fa);//guarda en fichero alumno.txt
// fputc('<',fp);
fclose(fa);
}
return(x);
}

//busca un alumno por su id(llave)
void bes(reg x)
{
int mk;
// clrscr();
if ((fb = fopen("alumno.txt", "r"))==NULL){
printf("Error al abrir y poner datos al fichero\n");
getch();
exit(1);
}
else
{
printf ("\n Cual es el numero de llave a buscar ");
scanf("%d",&mk);
mk=120*mk;
fseek ( fb , (mk), SEEK_SET );
fread(&x, sizeof(reg),1,fb);
printf ("Nombre : %s\n", x.no);
printf ("Direccion : %s\n", x.di);
printf ("Fecha de ingreso : %s\n", x.fi);
printf ("Numero de creditos completados : %s\n", x.nc);
getch();
}
fclose(fb);
return;
}


//introduce una nueva materia con 0 alumnos por default
reg2 lem(reg2 y)
{

if ((fc = fopen("materia.txt", "a"))==NULL){
printf("Error al abrir y poner datos al fichero\n");
exit(1);
}
else
{
// clrscr();
printf ("Nombre de la materia: ");
gets(y.nomat);
y.nal[0]=0;
fwrite(&y, sizeof(reg2), 1, fc);//guarda en fichero alumno.txt
// fputc('<',fp);
fclose(fc);
}
return(y);
}

//inscribe alumno en materia X
void iesm(reg3 y)
{
int i,j;
reg2 ds4;
lem2(ds4);//muestra las materias

//Incribe un alumno segun su id en una materia ya seleccionada
if ((fc = fopen("nalumno.txt", "a"))==NULL){
printf("Error al abrir y poner datos al fichero\n");
getch();
exit(1);
}
else
{
fseek ( fb , (mk2), SEEK_SET );
fread(&y, sizeof(reg3),1,fc);
/* printf ("Nombre : %s\n", x.no);
printf ("Direccion : %s\n", x.di);
printf ("Fecha de ingreso : %s\n", x.fi);
printf ("Numero de creditos completados : %s\n", x.nc);
*/ getch();
}
fclose(fc);
return;
}

reg2 lem2(reg2 y)
{
int i,lm;
i=1;
if ((fc = fopen("materia.txt", "r+"))==NULL){
printf("Error al abrir y poner datos al fichero\n");
exit(1);
}
else
{
printf ("\nEn cual materia deseas inscribir \n");
i=1;
fseek ( fc , 0, SEEK_SET );
do
{
fread(&y, sizeof(reg2),1,fc);
printf ("%d)%s \n",i, y.nomat);
printf ("Numero de alumnos inscritos : %s \n", y.nal);
i++;
}while(i<4);
scanf("%d",mk2);
if(mk2==1)
mk2=mk2*50;
else
{
lm=3*(mk2-1);
mk2=mk2*50;
mk2=mk2+lm;
}
fseek ( fc ,mk2, SEEK_SET );
y.nal[0]=y.nal[0]+1;
mk2=y.nal[0];
}
fclose(fc);
return(y);
}


void besm(reg3 y)
{
int mk2;
// clrscr();
if ((fc = fopen("nalumno.txt", "r"))==NULL){
printf("Error al abrir y poner datos al fichero\n");
getch();
exit(1);
}
else
{
printf ("\n Cual es el numero de llave a buscar ");
scanf("%d",&mk2);
mk2=120*mk2;
fseek ( fb , (mk2), SEEK_SET );
fread(&y, sizeof(reg3),1,fc);
}
fclose(fc);
return;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder