Hola amigos. Aquí vuelvo de nuevo con otro programa que no me funciona. He revisado y cambiado un montón de veces mi código. Alguien puede ayudarme? Muchas gracias.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define CIERTO 1
struct fecha
{
int mes,dia,anio;
};
struct tregistro
{
char nombre[80];
char calle[80];
char ciudad[80];
int no_cta;
int tipo_cta;
float anterior_saldo;
float nuevo_saldo;
float pago;
struct fecha ultimopago;
};
struct tregistro leerpantalla(tregistro);
struct tregistro actualizar(tregistro);
void escribirarchivo(tregistro);
FILE *antpt,*nuept;
int mes,dia,anio;
main()
{
int INDICADOR=CIERTO;
struct tregistro cliente;
/*Abrir archivos de datos.*/
if((antpt=fopen("registro_ant.txt","r"))=NULL)
printf("\n Error al abrir archivo.");
else
{
nuept=fopen("registro_nue.txt","w");
printf("\n\t SISTEMA DE FACTURACION DE CLIENTES.");
printf("\n\t ACTUALIZACION.\n\n");
printf("\n Introduzca fecha actual(mm/dd/aa): ");
scanf("%d %d %d",&mes,&dia,&anio);
while(INDICADOR)
{
fscanf(antpt,"%s",cliente.nombre);
fprintf(nuept,"\n %s \n",cliente.nombre);
if(strcmp(cliente.nombre,"FIN")==0)
break;
cliente=leerpantalla(cliente);
cliente=actualizar(cliente);
escribirarchivo(cliente);
}
fclose(antpt);
fclose(nuept);
}
}
/*Definiciones de las funciones.*/
struct tregistro leerpantalla(struct tregistro cliente)
{
fscanf(antpt,"%s",cliente.calle);
fscanf(antpt,"%s",cliente.ciudad);
fscanf(antpt,"%d",&cliente.no_cta);
fscanf(antpt,"%c",&cliente.tipo_cta);
fscanf(antpt,"%f",&cliente.anterior_saldo);
fscanf(antpt,"%f",&cliente.nuevo_saldo);
fscanf(antpt,"%f",&cliente.pago);
fscanf(antpt,"%d %d %d",&cliente.ultimopago.mes,&cliente.ultimopago.di a,&cliente.ultimopago.anio);
return(cliente);
}
struct tregistro actualizar(struct tregistro cliente)
{
printf("\n\n\t Nombre: %s",cliente.nombre);
printf("\n\t Numero de cuenta: %d",cliente.no_cta);
printf("\n\t Saldo anterior: %f",cliente.anterior_saldo);
printf("\n\t Pago actual: "); scanf("%f",&cliente.pago);
if(cliente.pago>0)
{
cliente.ultimopago.mes=mes;
cliente.ultimopago.dia=dia;
cliente.ultimopago.anio=anio;
cliente.tipo_cta=(cliente.pago < 0.1 * cliente.anterior_saldo)? 'R':'A';
}
else
cliente.tipo_cta=(cliente.anterior_saldo > 0)? 'D':'A';
cliente.nuevo_saldo=cliente.anterior_saldo - cliente.pago;
printf("\n\t Nuevo saldo: %f",cliente.nuevo_saldo);
printf("\n\t Estado de la cuenta: ");
switch(cliente.tipo_cta)
{
case 'A':
printf("\n\t AL DIA");
break;
case 'R':
printf("\n\t RETRASADA");
break;
case 'D':
printf("\n\t DELINCUENTE");
break;
default:
printf("\n\t ERROR");
}
return(cliente);
}
void escribirarchivo(struct tregistro cliente)
{
fprintf(nuept,"\n %s ",cliente.calle);
fprintf(nuept,"\n %s ",cliente.ciudad);
fprintf(nuept,"\n %d ",cliente.no_cta);
fprintf(nuept,"\n %c ",cliente.tipo_cta);
fprintf(nuept,"\n %f ",cliente.anterior_saldo);
fprintf(nuept,"\n %f ",cliente.nuevo_saldo);
fprintf(nuept,"\n %f ",cliente.pago);
fprintf(nuept,"\n %d %d %d ",cliente.ultimopago.mes,cliente.ultimopago.dia,cl iente.ultimopago.anio);
return;
}
Muchas gracias por su paciencia y ayuda.