У меня есть два файла .dat (ascii).Оба отсортированы.
1: файл клиента, содержащий;номер счета, имя, баланс 2: файл транзакции, содержащий;номер счета, дата, сумма продажи (сумма транзакции)
То, что я пытаюсь выполнить, - это создать новый обновленный файл клиентов, в котором обновлены сальдо для клиентов на основе сложения или вычитания суммы продажи соответствующей транзакции.
Пока мой код позволяет мне:
1: если для клиента не более одной транзакции, код выполняется отлично, записывает файл .dat с клиентами и их обновленными балансами.
2: если для клиента имеется более одной транзакции, мой код будет работать практически идеально, поскольку он выведет на экран обновленных клиентов и учетных записей, например:
1 james 540.00 2 john 762.00 3Пол 414,00 4 Сам 502,00
будет отображаться, но поскольку есть две транзакции для Джона созданный файл .dat, в то время как содержат
1 Джеймс 540,00 2 Джон 662,00 2 Джон 762,00 3 Пол 414,00 4 Сам502.00
Моя проблема здесь, мне нужно найти способ, чтобы созданный .dat содержал только одну строку для each клиент (номер счета)
Мой код прилагается, любая помощь будет принята с благодарностью.
#include <stdio.h>
#include <string.h>
int main(void)
{
int account, matches=0; /* account number */
char date[ 30 ]; /* account Date */
double balance, saleamount,total=0, temp;; /* account SaleAmount */
int transaccount;
char name [ 30 ];
char lastname[30];
int lastaccount=-1;
double lastbalance;
FILE *cfPtr; /* cfPtr = clients.dat file pointer */
FILE *ctPtr; /* cfPtr = transaction.dat file pointer */
FILE *cfPtr2; /* cfPtr2 = new client file */
cfPtr2 = fopen( "clientupdate.dat", "w" );
/* fopen opens file; exits program if file cannot be opened */
if ( ( cfPtr = fopen( "clients.dat", "r" ) ) == NULL ) {
printf( "clients could not be opened\n" );
/*fflush(stdin);*/
} /* end if */
else
if( ( ctPtr = fopen( "transactions.dat", "r" ) ) == NULL)
{
printf( "File could not be opened\n" );
/*fflush(stdin);*/
}
else { /* read account, date,name, balance and SaleAmount from files */
fscanf( cfPtr, "%d%s%lf", &account, &name, &balance );
/*fflush(stdin);*/
fscanf( ctPtr, "%d%s%lf", &transaccount, &date, &saleamount );
/*fflush(stdin);*/
printf( "%-13s%-10s%s\n", " Account", "Name", "Balance" );
printf("|----------------------------------|\n");
while( !feof(ctPtr))
{
while( !feof(cfPtr) &&matches==0 )
{
if(account == transaccount)
{
if (lastaccount != account) {
if (lastaccount != -1)
printf(" %-10d%-10s%.2lf\n", lastaccount, lastname, lastbalance);
lastaccount = account;
strcpy (lastname, name);
}
matches=1;
total=0;
temp = balance+saleamount;
total = total + temp;
balance = total;
lastbalance = balance;
}
else
{
fscanf( cfPtr, "%d%s%lf", &account, &name, &balance );
/*fflush(stdin);*/
}
}
fprintf( cfPtr2, "%d %s %.2lf\n", account, name, total );
fscanf( ctPtr, "%d%s%lf", &transaccount, &date, &saleamount );
/*fflush(stdin);*/
matches=0;
}
}
if (lastaccount != -1)
printf(" %-10d%-10s%.2lf\n", lastaccount, lastname, lastbalance);
fclose( cfPtr2 );
getchar();
return 0;
}