1、程序设计与实践实验报告实验二:个人资金账户管理一:实验名称:随机数及其应用二:实验环境: 一台安装有 C 语言编译器的电脑。三:实验目的(1)培养和锻炼对具有一定复杂度和规模的问题的分析与求解能力。(2)掌握程序设计的综合方法,能综合应用各种数据类型实现较复杂数据的存储。(3)培养良好的 C 程序设计风格与代码规范意识。四:实验内容:用 c 语言编写代码,并对程序进行调试、改错,使之符合如下具体功能。 资金账户的信息统一放在随机文件中,该随机文件包括的数据项有记录ID、发生日期、发生事件、发生金额(正的表示收入,负的表示支出)和金额。每发生一笔收支,文件要增加一条记录,并计算一次余额。, 程序
2、实现 3 个功能,包括:(1),能创建资金账户文件并添加收入或支出信息记录;(2),能显示所有记录,得知资金账户的收支流水账;(3),能查询最后一条记录,获知账户最后的余额。账户文件名命名为 cashbox.dat,文件部分内容如下; 增加修改资金账户的功能。输入一个记录 ID,如果文件中已存在该记录,则输入新的记录信息并更新资金账户文件中相应记录的信息。要求定义和调用函数 Update Log(),其功能是修改资金账户记录。LongID CreateDateNote Charge Balance1 2006-06-01 alimony 500.00 500.002 2006-06-08 sh
3、opping -300.00 200.003 2006-06-15 shopping -60.00 140.004 2006-06-20 workingpay 200.00 340.005 2006-08-01 scholarship 1000.00 1340.00五:实验步骤:(实验设计,关键代码。实验结果需截图)1.实验设计主函数:给用户显示一个功能菜单界面,通过输入操作序号,调用函数以实现对用户账号进行各种操作。主程序界面:(略)主程序代码:int main(void)FILE *fp;int choice;if(fp=fopen(“cashbox.dat“, “ab+“) = NULL
4、)printf(“can not open file cashbox.dat!n“);exit(0);size = sizeof(struct LogData);while(choice=inputchoice()!=0)switch(choice)case 1:fp=fopen(“cashbox.dat“, “ab+“);AddNewLog(fp);break;case 2:fp=fopen(“cashbox.dat“, “ab+“);ListAllLog(fp);break;case 3:fp=fopen(“cashbox.dat“, “ab+“);QueryLastLog(fp);bre
5、ak;case 4:fp=fopen(“cashbox.dat“, “rb+“);Updatelog(fp);break;case 5:fp=fopen(“cashbox.dat“, “rb+“);Deletelog(fp);break;default:printf(“Input Error.“);break;if(fclose(fp) printf( “Can not close the file!n“ );exit(0);return 0;增加用户账户文件:(源代码)void AddNewLog(FILE *cfptr) struct LogData log,lastlog;long lo
6、gcount;printf(“Input logdate(format:2006-01-01):“);scanf(“%s“,log.logdate);printf(“Input lognote:“);scanf(“%s“,log.lognote);printf(“Input Charge:Income+ and expend-:“);scanf(“%lf“,logcount=getLogcount(cfptr);if(logcount0)fseek(cfptr,size*(logcount-1),SEEK_SET);fread(log.logid=lastlog.logid+1;log.bal
7、ance=log.charge+lastlog.balance;elselog.logid=1;log.balance=log.charge;rewind(cfptr);getch();fwrite(fclose(cfptr);列出账户记录:(源代码)void ListAllLog(FILE *cfptr) struct LogData log;long logcount;logcount=getLogcount(cfptr);if(logcount0) fseek(cfptr,0L,SEEK_SET);fread(printf(“logID logdate lognote charge ba
8、lancen“);while(!feof(cfptr)printf(“%6ld %-11s %-15s %10.2lf %10.2lfn“,log.logid,log.logdate,log.lognote,log.charge,log.balance);fread(;elseprintf(“no logs in file!n“);printf(“Press any key to continue.“);getch();查看最后一条账户记录(源代码):void QueryLastLog(FILE *cfptr) struct LogData log;long logcount;logcount
9、=getLogcount(cfptr);if(logcount0)fseek(cfptr,size*(logcount-1),SEEK_SET);fread(printf(“The last log is:n“);printf(“logid:%-6ldnlogdate:%-11snlognote:%-15sn“,log.logid,log.logdate,log.lognote);printf(“charge:%-10.2lfnbalance:%-10.2lfn“,log.charge,log.balance); else printf(“no logs in file!n“);printf(
10、“Press any key to continue.“);getch();增加修改资金账户(源代码)void Updatelog(FILE *cfptr) struct LogData log1000,*plog=log, newlog;long logcount,logid,i,index=-1; printf(“Input LogID:“); scanf(“%ld“,logcount=getLogcount(cfptr);rewind(cfptr); fread(plog,size,logcount,cfptr); for(i=0;i=0) printf(“Input logdate(f
11、ormat:2006-01-01):“);scanf(“%s“,newlog.logdate); printf(“Input lognote:“);scanf(“%s“,newlog.lognote); printf(“Input Charge:Income+ and expend-:“);scanf(“%lf“,if(strcmp(logindex.lognote,newlog.lognote)!=0) strcpy(logindex.lognote,newlog.lognote); if(strcmp(logindex.logdate,newlog.logdate)!=0) strcpy(
12、logindex.logdate,newlog.logdate); if(newlog.charge!=logindex.charge) newlog.balance=logindex.balance-logindex.charge+newlog.charge; logindex.charge=newlog.charge; logindex.balance=newlog.balance;for(i=index+1;i=0) for(i=index;i=logcount-1;i+)logi.logid=i+1;strcpy(logi.logdate,logi+1.logdate); strcpy
13、(logi.lognote,logi+1.lognote); logi.charge=logi+1.charge;logi.balance=logi-1.balance+logi.charge;printf(“logid logdatelognote charge balancen“);for(i=0;ilogcount-1;i+)printf(“%6ld %-11s %-15s %10.2lf %10.2lfn“, logi.logid,logi.logdate,logi.lognote,logi.charge,logi.balance);getch();fp1=fopen(“cashbox.dat“, “wb+“);rewind(fp1); fwrite(plog,size,logcount-1,fp1);fclose(fp1);else printf(“Error logid and try another!n“);printf(“Press any key to continue.“);getch(); 六:实验小结:略。