Ejemplos de C - Actualización de ficheros secuenciales (altas, bajas y modificaciones)

1.- Programa que actualiza un fichero maestro a partir de los datos de altas que se introducen en otro fichero:

#include<stdio.h>
#include<limits.h>

struct strcuentas
{
long int nro_cuenta;
long int fecha;
int codigo;
char tipocuenta;
long int saldo;
};
void leer_fcuentas(FILE *fcuentas, struct strcuentas *rcuentas);
void leer_faltacta(FILE *faltacta, struct strcuentas *raltacta);

void main()
{
FILE *fcuentas;
FILE *faltacta;
FILE *fctasact;
struct strcuentas rcuentas, raltacta;
if ((fcuentas=fopen("a:\\ficheros\\fcuentas.d","rb"))==NULL)
{
puts("\nERROR DE APERTURA EN FCUENTAS");
goto fin;
}
if ((faltacta=fopen("a:\\ficheros\\faltacta.d","rb"))==NULL)
{
puts("\nERROR DE APERTURA EN FALTACTA");
goto fin;
}
if ((fctasact=fopen("a:\\ficheros\\fctasact.d","wb"))==NULL)
{
puts("\nERROR DE APERTURA EN FCTASACT");
goto fin;
}
leer_fcuentas(fcuentas,&rcuentas);
leer_faltacta(faltacta,&raltacta);
while (!feof(fcuentas) || !feof(faltacta))
{
if (rcuentas.nro_cuenta<raltacta.nro_cuenta)
{
fwrite((char*)&rcuentas,sizeof(struct strcuentas),1,fctasact);
leer_fcuentas(fcuentas,&rcuentas);
leer_faltacta(faltacta,&raltacta);
}
else
if (rcuentas.nro_cuenta==rcuentas.nro_cuenta)
{
fwrite((char*)&rcuentas,sizeof(struct strcuentas),1,fctasact);
leer_fcuentas(fcuentas,&rcuentas);
leer_faltacta(faltacta,&raltacta);
}
else
{
fwrite((char*)&rcuentas,sizeof(struct strcuentas),1,fctasact);
leer_fcuentas(fcuentas,&rcuentas);
leer_faltacta(faltacta,&raltacta);
}
}
fclose(fcuentas);
fclose(faltacta);
fclose(fctasact);
fin: puts("\n FINAL DEL PROGRAMA");
}
void leer_fcuentas(FILE *fcuentas, struct strcuentas *rcuentas)
{
fread((char*)rcuentas,sizeof(struct strcuentas),1,fcuentas);
if (feof(fcuentas))
rcuentas->nro_cuenta=LONG_MAX;
}

void leer_faltacta(FILE *faltacta, struct strcuentas *raltacta)
{
fread((char*)raltacta,sizeof(struct strcuentas),1,faltacta);
if (feof(faltacta))
raltacta->nro_cuenta=LONG_MAX;
}

2.- Programa que actualiza un fichero maestro a partir de los datos de bajas que se introducen en otro fichero:

#include<stdio.h>
#include<limits.h>

struct strcuentas
{
long int nro_cuenta;
long int fecha;
int codigo;
char tipocuenta;
long int saldo;
};
void leer_fcuentas(FILE *fcuentas, struct strcuentas *rcuentas);
void leer_fbajacta(FILE *fbajacta, struct strcuentas *rbajacta);

void main()
{
FILE *fcuentas;
FILE *fbajacta;
FILE *fctasact;
struct strcuentas rcuentas, rbajacta;
if ((fcuentas=fopen("a:\\ficheros\\fcuentas.d","rb"))==NULL)
{
puts("\nERROR DE APERTURA EN FCUENTAS");
goto fin;
}
if ((fbajacta=fopen("a:\\ficheros\\fbajacta.d","rb"))==NULL)
{
puts("\nERROR DE APERTURA EN FBAJACTA");
goto fin;
}
if ((fctasact=fopen("a:\\ficheros\\fctasact.d","wb"))==NULL)
{
puts("\nERROR DE APERTURA EN FCTASACT");
goto fin;
}
leer_fcuentas(fcuentas,&rcuentas);
leer_fbajacta(fbajacta,&rbajacta);
while (!feof(fcuentas) || !feof(fbajacta))
{
if (rcuentas.nro_cuenta<rbajacta.nro_cuenta)
{
fwrite((char*)&rcuentas,sizeof(struct strcuentas),1,fctasact);
leer_fcuentas(fcuentas,&rcuentas);
leer_fbajacta(fbajacta,&rbajacta);
}
else
if (rcuentas.nro_cuenta==rbajacta.nro_cuenta)
{
fwrite((char*)&rcuentas,sizeof(struct strcuentas),1,fctasact);
leer_fcuentas(fcuentas,&rcuentas);
leer_fbajacta(fbajacta,&rbajacta);
}
else
{
fwrite((char*)&rcuentas,sizeof(struct strcuentas),1,fctasact);
leer_fcuentas(fcuentas,&rcuentas);
leer_fbajacta(fbajacta,&rbajacta);
}
}
fclose(fcuentas);
fclose(fbajacta);
fclose(fctasact);
fin: puts("\n FINAL DEL PROGRAMA");
}
void leer_fcuentas(FILE *fcuentas, struct strcuentas *rcuentas)
{
fread((char*)rcuentas,sizeof(struct strcuentas),1,fcuentas);
if (feof(fcuentas))
rcuentas->nro_cuenta=LONG_MAX;
}

void leer_fbajacta(FILE *fbajacta, struct strcuentas *rbajacta)
{
fread((char*)rbajacta,sizeof(struct strcuentas),1,fbajacta);
if (feof(fbajacta))
rbajacta->nro_cuenta=LONG_MAX;
}

3.- Programa que actualiza un fichero maestro a partir de los datos de modificaciones que se introducen en otro fichero:

#include<stdio.h>
#include<stdio.h>
#include<limits.h>

struct strcuentas
{
long int nro_cuenta;
long int fecha;
int codigo;
char tipocuenta;
long int saldo;
};
void leer_fcuentas(FILE *fcuentas, struct strcuentas *rcuentas);
void leer_fmodicta(FILE *fmodicta, struct strcuentas *rmodicta);

void main()
{
FILE *fcuentas;
FILE *fmodicta;
FILE *fctasact;
struct strcuentas rcuentas, rmodicta;
if ((fcuentas=fopen("a:\\ficheros\\fcuentas.d","rb"))==NULL)
{
puts("\nERROR DE APERTURA EN FCUENTAS");
goto fin;
}
if ((fmodicta=fopen("a:\\ficheros\\fmodicta.d","rb"))==NULL)
{
puts("\nERROR DE APERTURA EN FMODICTA");
goto fin;
}
if ((fctasact=fopen("a:\\ficheros\\fctasact.d","wb"))==NULL)
{
puts("\nERROR DE APERTURA EN FCTASACT");
goto fin;
}
leer_fcuentas(fcuentas,&rcuentas);
leer_fmodicta(fmodicta,&rmodicta);
while (!feof(fcuentas) || !feof(fmodicta))
{
if (rcuentas.nro_cuenta<rmodicta.nro_cuenta)
{
fwrite((char*)&rcuentas,sizeof(struct strcuentas),1,fctasact);
leer_fcuentas(fcuentas,&rcuentas);
leer_fmodicta(fmodicta,&rmodicta);
}
else
if (rcuentas.nro_cuenta==rmodicta.nro_cuenta)
{
fwrite((char*)&rcuentas,sizeof(struct strcuentas),1,fctasact);
leer_fcuentas(fcuentas,&rcuentas);
leer_fmodicta(fmodicta,&rmodicta);
}
else
{
fwrite((char*)&rcuentas,sizeof(struct strcuentas),1,fctasact);
leer_fcuentas(fcuentas,&rcuentas);
leer_fmodicta(fmodicta,&rmodicta);
}
}
fclose(fcuentas);
fclose(fmodicta);
fclose(fctasact);
fin: puts("\n FINAL DEL PROGRAMA");
}
void leer_fcuentas(FILE *fcuentas, struct strcuentas *rcuentas)
{
fread((char*)rcuentas,sizeof(struct strcuentas),1,fcuentas);
if (feof(fcuentas))
rcuentas->nro_cuenta=LONG_MAX;
}

void leer_fmodicta(FILE *fmodicta, struct strcuentas *rmodicta)
{
fread((char*)rmodicta,sizeof(struct strcuentas),1,fmodicta);
if (feof(fmodicta))
rmodicta->nro_cuenta=LONG_MAX;
}


VOLVER

A PROGRAMAR © 2002. All Rights Reserved.
Hosted by www.Geocities.ws

1