二工大程序设计与实践 个人资金账户管理.docx
- 文档编号:7150139
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:8
- 大小:16.28KB
二工大程序设计与实践 个人资金账户管理.docx
《二工大程序设计与实践 个人资金账户管理.docx》由会员分享,可在线阅读,更多相关《二工大程序设计与实践 个人资金账户管理.docx(8页珍藏版)》请在冰豆网上搜索。
二工大程序设计与实践个人资金账户管理
程序设计与实践
实验报告
实验二:
个人资金账户管理
一:
实验名称:
随机数及其应用
二:
实验环境:
一台安装有C语言编译器的电脑。
三:
实验目的
(1)培养和锻炼对具有一定复杂度和规模的问题的分析与求解能力。
(2)掌握程序设计的综合方法,能综合应用各种数据类型实现较复杂数据的存储。
(3)培养良好的C程序设计风格与代码规范意识。
四:
实验内容:
用c语言编写代码,并对程序进行调试、改错,使之符合如下具体功能。
①资金账户的信息统一放在随机文件中,该随机文件包括的数据项有记录ID、发生日期、发生事件、发生金额(正的表示收入,负的表示支出)和金额。
每发生一笔收支,文件要增加一条记录,并计算一次余额。
②程序实现3个功能,包括:
(1),能创建资金账户文件并添加收入或支出信息记录;
(2),能显示所有记录,得知资金账户的收支流水账;(3),能查询最后一条记录,获知账户最后的余额。
账户文件名命名为cashbox.dat,文件部分内容如下;
③增加修改资金账户的功能。
输入一个记录ID,如果文件中已存在该记录,则输入新的记录信息并更新资金账户文件中相应记录的信息。
要求定义和调用函数UpdateLog(),其功能是修改资金账户记录。
LongIDCreateDateNoteChargeBalance
12006-06-01alimony500.00500.00
22006-06-08shopping-300.00200.00
32006-06-15shopping-60.00140.00
42006-06-20workingpay200.00340.00
52006-08-01scholarship1000.001340.00
五:
实验步骤:
(实验设计,关键代码。
实验结果需截图)
1.实验设计
主函数:
给用户显示一个功能菜单界面,通过输入操作序号,调用函数以实现对用户账号进行各种操作。
主程序界面:
(略)
主程序代码:
intmain(void)
{
FILE*fp;intchoice;
if((fp=fopen("cashbox.dat","ab+"))==NULL){
printf("cannotopenfilecashbox.dat!
\n");
exit(0);
}
size=sizeof(structLogData);
while((choice=inputchoice())!
=0){
switch(choice){
case1:
fp=fopen("cashbox.dat","ab+");
AddNewLog(fp);break;
case2:
fp=fopen("cashbox.dat","ab+");
ListAllLog(fp);break;
case3:
fp=fopen("cashbox.dat","ab+");
QueryLastLog(fp);break;
case4:
fp=fopen("cashbox.dat","rb+");
Updatelog(fp);break;
case5:
fp=fopen("cashbox.dat","rb+");
Deletelog(fp);break;
default:
printf("InputError.");break;
}
}
if(fclose(fp)){
printf("Cannotclosethefile!
\n");
exit(0);
}
return0;
}
增加用户账户文件:
(源代码)
voidAddNewLog(FILE*cfptr)
{
structLogDatalog,lastlog;
longlogcount;
printf("Inputlogdate(format:
2006-01-01):
");
scanf("%s",log.logdate);
printf("Inputlognote:
");
scanf("%s",log.lognote);
printf("InputCharge:
Income+andexpend-:
");
scanf("%lf",&log.charge);
logcount=getLogcount(cfptr);
if(logcount>0){
fseek(cfptr,size*(logcount-1),SEEK_SET);
fread(&lastlog,size,1,cfptr);
log.logid=lastlog.logid+1;
log.balance=log.charge+lastlog.balance;
}
else{
log.logid=1;
log.balance=log.charge;
}
rewind(cfptr);
getch();
fwrite(&log,sizeof(structLogData),1,cfptr);
fclose(cfptr);
}
列出账户记录:
(源代码)
voidListAllLog(FILE*cfptr)
{
structLogDatalog;
longlogcount;
logcount=getLogcount(cfptr);
if(logcount>0)
{fseek(cfptr,0L,SEEK_SET);
fread(&log,size,1,cfptr);
printf("logIDlogdatelognotechargebalance\n");
while(!
feof(cfptr)){
printf("%6ld%-11s%-15s%10.2lf%10.2lf\n",
log.logid,log.logdate,log.lognote,log.charge,log.balance);
fread(&log,size,1,cfptr);
};
}
else
printf("nologsinfile!
\n");
printf("Pressanykeytocontinue...");
getch();
}
查看最后一条账户记录(源代码):
voidQueryLastLog(FILE*cfptr)
{
structLogDatalog;
longlogcount;
logcount=getLogcount(cfptr);
if(logcount>0)
{
fseek(cfptr,size*(logcount-1),SEEK_SET);
fread(&log,size,1,cfptr);
printf("Thelastlogis:
\n");
printf("logid:
%-6ld\nlogdate:
%-11s\nlognote:
%-15s\n",log.logid,log.logdate,log.lognote);
printf("charge:
%-10.2lf\nbalance:
%-10.2lf\n",
log.charge,log.balance);
}
else
printf("nologsinfile!
\n");
printf("Pressanykeytocontinue...");
getch();
}
增加修改资金账户(源代码)
voidUpdatelog(FILE*cfptr)
{
structLogDatalog[1000],*plog=log,newlog;
longlogcount,logid,i,index=-1;
printf("InputLogID:
");
scanf("%ld",&logid);
logcount=getLogcount(cfptr);
rewind(cfptr);
fread(plog,size,logcount,cfptr);
for(i=0;i { if(logid==log[i].logid) { printf("logidlogdatelognotechargebalance\n"); printf("%6ld%-11s%-15s%10.2lf%10.2lf\n",log[i].logid,log[i].logdate,log[i].lognote,log[i].charge,log[i].balance); index=i; break; } } rewind(cfptr); if(index>=0) { printf("Inputlogdate(format: 2006-01-01): "); scanf("%s",newlog.logdate); printf("Inputlognote: "); scanf("%s",newlog.lognote); printf("InputCharge: Income+andexpend-: "); scanf("%lf",&newlog.charge); if(strcmp(log[index].lognote,newlog.lognote)! =0) strcpy(log[index].lognote,newlog.lognote); if(strcmp(log[index].logdate,newlog.logdate)! =0) strcpy(log[index].logdate,newlog.logdate); if(newlog.charge! =log[index].charge) { newlog.balance=log[index].balance-log[index].charge+newlog.charge; log[index].charge=newlog.charge; log[index].balance=newlog.balance; for(i=index+1;i log[i].balance=log[i-1].balance+log[i].charge; } rewind(cfptr); fwrite(plog,size,logcount,cfptr); } else {printf("Errorlogidandtryanother! \n"); printf("Pressanykeytocontinue..."); getch(); } fclose(cfptr); } 删除账户资金记录(源代码): voidDeletelog(FILE*cfptr) { FILE*fp1; structLogDatalog[1000],*plog=log; longlogcount,logid,i,index=-1; printf("InputLogID: "); scanf("%ld",&logid); logcount=getLogcount(cfptr); rewind(cfptr); fread(plog,size,logcount,cfptr); for(i=0;i { if(logid==log[i].logid) { printf("logidlogdatelognotechargebalance\n"); printf("%6ld%-11s%-15s%10.2lf%10.2lf\n",log[i].logid,log[i].logdate,log[i].lognote,log[i].charge,log[i].balance); index=i; getch(); break; } } rewind(cfptr); if(index>=0) { for(i=index;i<=logcount-1;i++) { log[i].logid=i+1; strcpy(log[i].logdate,log[i+1].logdate); strcpy(log[i].lognote,log[i+1].lognote); log[i].charge=log[i+1].charge; log[i].balance=log[i-1].balance+log[i].charge; } printf("logidlogdatelognotechargebalance\n"); for(i=0;i { printf("%6ld%-11s%-15s%10.2lf%10.2lf\n",log[i].logid,log[i].logdate,log[i].lognote,log[i].charge,log[i].balance); } getch(); fp1=fopen("cashbox.dat","wb+"); rewind(fp1); fwrite(plog,size,logcount-1,fp1); fclose(fp1); } else {printf("Errorlogidandtryanother! \n"); printf("Pressanykeytocontinue..."); getch(); } } 六: 实验小结: 略。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二工大程序设计与实践 个人资金账户管理 二工大 程序设计 实践 个人 资金 账户 管理
![提示](https://static.bdocx.com/images/bang_tan.gif)