要求
创建一个随机文件,用来存储银行账户和余额信息,程序要求能够查询某个账户的余额,当客户发生交易额时(正表示存入,负表示取出)能够更新余额。账户信息包括账号、账号名和余额三个数据项。试编写相应程序。
分析
难点在于如何更新余额,我认为可以采用两个文件来完成这一任务。假设a文件存的是原始的账户信息,那么在发生交易额时,将a文件中的所有信息逐一遍历到b文件里去,并且在遍历过程中比对发生交易额的账户的编号是否在a文件中,如果在的话便用该账户的交易额加上该账户的原始余额即得到该账户新余额。然后再依次将a文件中其他账户的信息全部录入b文件。
当a文件里的数据全都录入b文件后,删除a文件,并将b文件的文件名改为a文件,至此余额更新完成。
但我在写代码的时候发现remove和rename函数似乎无法在主函数以外的函数里成功调用,所以只能讲这两个函数写在主函数里。
代码实现过程
#include<stdio.h>
#define size sizeof(trade)
int flag=0;//因为remove与rename函数只能在主函数运行,所以引入全局变量flag
typedef struct account{
long AcctNo;
char ActName[20];
double charge;
double Balance;
}trade;
//打开文件的方式
FILE *fileopen(char *openmode){
FILE *fp;
fp=fopen("cashbox.dat",openmode);
return fp;
}
//获取当前文件的总记录数
long getaccountcount(FILE *fp){
long begin,end,getcount;
rewind(fp);
begin=ftell(fp);
fseek(fp,0L,2);
end=ftell(fp);
getcount=(end-begin)/size;
return getcount;
}
//添加新的账户记录
void addnew(FILE *fp){
trade a,b;//a保存的是新输入的账户信息,b保存的是当前账户最后一条账户信息
long getcount;
printf("请输入你的账户名:\n");
scanf("%s",a.ActName