Archivos Secuenciales

Me dirías si tiene algún error este programa que sirve para dar de alta y baja proveedores.
Otra pregunta:
¿Tiene sentido primero cargar los datos de los proveedores en un archivo(novedades.txt) y luego con un programa actualizar proveedores.txt leyendo las altas y bajas desde novedades.txt?
Gracias
Archivos Secuenciales: proveedores.txt
#include <stdio.h>
struct proveedores
{
int long cl_prov;
char razon_social[30];
char domicilio[30];
char telefono[15];
char contacto[30];
int long credito;
}prove;
struct contr
{
int long cl_prov;
char razon_social[30];
char domicilio[30];
char telefono[15];
char contacto[30];
int long credito;
}control;
void main(void)
{
FILE *arch1,*arch2,*arch3;
int codigo,clave,contro,contro1=0,existe=0,contar,contae,contbr,contbi;
contar=0;contae=0;contbr=0;contbi=0;
clrscr();
//codigos: 1.-Alta 2.-Baja
printf("¨Que operacion desea realizar? (Salir=0)");
gets(codigo);
do{
if(codigo==0)
break;
switch(codigo)
{
case 1:
arch1=fopen("c:\\proveedores.txt","at+");
printf("Ingrese codigo:");
gets(prove.cl_prov);
fflush(stdin);
printf("Ingrese razon:");
gets(prove.razon_social);
printf("Ingrese domicilio");
gets(prove.domicilio);
printf("Ingrese telefono:");
gets(prove.telefono);
printf("Ingrese contacto:");
gets(prove.contacto);
printf("Ingrese credito");
scanf("%d",&prove.credito);
rewind(arch1);
while(!feof(arch1))
{
fread(&control,sizeof(control),1,arch1);
if(control.cl_prov!=prove.cl_prov)
{
existe=0;
}
else
existe=1;
};
if(existe==0)
{
fwrite(&prove,sizeof(prove),1,arch1);
printf("Alta Realizada");
contar=contar+1;
}
else
{
arch2=fopen("c:\\incorrectos.txt","at+");
fwrite(&prove,sizeof(prove),1,arch2);
printf("Alta Existente");
contae=contae+1;
}
fclose(arch1);
fclose(arch2);
case 2:
arch1=fopen("c:\\proveedores.txt","r+");
arch2=fopen("c:\\temporal.txt","at+");
arch3=fopen("c:\\incorr2.txt","at+");
printf("¨Que registro desea eliminar?");
scanf("%d",&clave);
while(fread(&prove,sizeof(prove),1,arch1)==1)
{
if(clave!=prove.cl_prov)
{
fwrite(&prove,sizeof(prove),1,arch2);
contro=0;
}
else
contro1=1;
};
if(contro==0 && contro1==0)
{
printf("\nBaja Inexistente");
contbi=contbi+1;
}
if(contro==0 && contro1==1);
{
printf("\nBaja realizada");
contbr=contbr+1;
}
fclose(arch1);
fclose(arch2);
fclose(arch3);
remove("c:\\proveedores.txt");
rename("C:\\temporal.txt","C:\\proveedores.txt");
}
printf("\n¨Que operacion desea realizar?");
scanf("%d",&codigo);
}while(codigo!=0);
}

1 Respuesta

Respuesta
1
Si veo un error y es que en el archivo proveedores.txt estas metiendo dos tipos de estructuras proveedores y contr. Esto a la hora de leer te va a dar error.
Sobre la otra pregunta, si, tiene sentido. Así te ahorras el tener que estar releyendo, renombrando etc constantemente los archivos.
Pero si cargo los datos en el archivo novedades.txt el usuario va a tener que primero ejecutar un programa para incorporarlos al archivo y otro programa para ingresarlos en proveedores.txt
¿Se justifica hacerlo? ¿Es mejor?
Gracias
Julio
Puedes hacerlo en un mismo programa con dos fases. En la primera cargas los datos al novedades.txt y cuando los tienes todos, actualizar proveedores.txt

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas