Archivos Secuenciales
Hola jujaro:
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);
}
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 de jujaro
1