私は2つの.dat(ascii)ファイルを持っています。どちらもソートされています。Cヘルプを更新して作成するファイル
1:クライアントファイル。口座番号、名前、残高 2:トランザクションファイル。アカウント番号、日付、販売数量(取引金額)
私が達成しようとしているのは、一致するトランザクションのsaleamountを加算または減算してクライアントの残高を更新した新しい更新済みクライアントファイルを作成することです。
1:
は私のコードは、これまでに私を可能にし、クライアントのために複数のトランザクションが存在しない場合、コードが完全に実行され、クライアントとその更新残高で.datファイルを書き込みます。
2:540.00 2ジョン762.00 3を
1ジェームズ:クライアントに複数の取引がある場合、それが画面に更新されたクライアントを印刷し、例えばを占めますように私のコードは、ほぼ完全に実行されますジョンのための2つのトランザクションを作成.datファイルの中にあるとしてポール414.00 4 SAM 502.00
は
1ジェームズ540.00 2ジョン662.00 2ジョンが含まれて表示されますが、 762.00 3ポール414.00 4 SAM 502.00
私の問題はここにある、私は各クライアント(口座番号)のための唯一の1行が含まれているの.dat作成したの方法を見つける必要がある
私のコードが添付されている任意の助けていただければ幸いです。
#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;
}
+1よく宿題をしました。あなたはいくつかのコードを書いて、あなたが書いたことを私たちに説明しました。私たちはここに多くの良い宿題の質問が表示されません:) – Earlz
@earlz私は大学でこれを勉強しています、私はそれを見て、私はそれを右に説明しない場合/偶然誰かが私を助けてくれたら。 – James