程序设计与实践
实验报告
实验一:个人资金账户管理
姓名: ****
学号: ***********
班级: *********
实验时间:****/**/**-****/**/**
一:实验名称:
个人资金账户管理
二:实验环境:
一台安装有VC6.0程序的电脑。
三:实验目的
(1)培养和锻炼对具有一定复杂度和规模的问题的分析与求解能力。
(2)掌握程序设计的综合方法,能综合应用各种数据类型实现较复杂数据的存储。
(3)培养良好的C程序设计风格与代码规范意识。
四:实验内容:
用C语言编程,实现对个人资金帐户的管理。
五:实验步骤:(实验设计,关键代码。实验结果需截图)
1、总体程序框图
2、各模块程序流程图
1)、主函数(程序流程图及运行界面)
主函数程序流程图
简要说明:该功能主要是给用户显示一个功能菜单界面。
主函数运行界面
2)、录入资金信息(源代码及运行界面)
程序代码
void addNewLog()
{
FILE *tfp;
int m=0;
char ch[2];
struct LogData log[MAX];
if((tfp=fopen("cashbox.dat","ab+"))==NULL)
{
printf("不能打开文件!\n");
exit(0);
}
while(!feof(tfp)) /*统计记录的条数*/
if(fread(&log[m],LEN,1,tfp)==1)
m++;
fclose(tfp);
if((tfp=fopen("cashbox.dat","wb"))==NULL)
{
printf("不能打开文件!\n");
exit(0);
}
for(int i=0;i
fwrite(&log[i] ,LEN,1,tfp);/*向指定的磁盘文件写入信息*/
printf("是否添加账户资金信息(Y/N): ");
scanf("%s",ch);
while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
{
printf("请输入以下信息...\n\n");
printf("日期(格式:<2000-01-01> ) :");
scanf("%s",&log[m].logdate);
printf("说明:");
scanf("%s",&log[m].lognote);
printf("费用(收入为+,支出为-) :");
scanf("%lf",&log[m].charge);
log[m].logid=m+1;
if(m==0)
{
log[m].balance=0;
log[m].balance=log[m].balance+log[m].charge;
}
else if(m>0)
log[m].balance=log[m-1].balance+log[m].charge;
if(fwrite(&log[m],LEN,1,tfp)!=1)
printf("保存失败!");
else
{
printf("该记录保存成功!\n");
m++;
}
printf("是否继续添加(Y/N):");
scanf("%s",ch);
}
fclose(tfp);
}
运行界面
3)、显示资金信息(源代码及运行界面)
程序代码
void listLog()
{
FILE *tfp;
struct LogData log[MAX];
int i,n,m=0;
if((tfp=fopen("cashbox.dat","ab+"))==NULL)
{
printf("不能打开文件!\n");
exit(0);
}
while(!feof(tfp))
if(fread(&log[m],LEN,1,tfp)==1)
m++;
fclose(tfp);
printf("请选择:\n1、查询全部\n2、查询余额\n您的选择是:");
scanf("%d",&n);
switch(n)
{
case 1:
printf("编号\t\t日期\t\t说明\t\t费用\t\t余额\n");
for(i=0;i
printf("%2d%21s%15s%15.0lf%15.0lf\n",log[i].logid,log[i].logdate, log[i].lognote,log[i].charge,log[i].balance);
system("pause");
break;
case 2:
printf("编号\t\t日期\t\t说明\t\t费用\t\t余额\n");
printf("%2d%21s%15s%15.0lf%15.0lf\n",log[m-1].logid,log[m-1].logdate,log[m-1].lognote,log[m].charge,log[m-1].balance);
system("pause");
break;
}
}
运行界面
3)、修改资金信息(源代码及运行界面)
程序代码
void updateLog()
{
FILE *tfp;
char ch[2];
struct LogData log[MAX];
int t,n,m=0;
if((tfp=fopen("cashbox.dat","a+"))==NULL)
{
printf("不能打开文件!\n");
exit(0);
}
while(!feof(tfp))
if(fread(&log[m],LEN,1,tfp)==1)
m++;
fclose(tfp);
if(m==0)
{
printf("没有找到该记录!\n");
return;
}
else
{
printf("请输入你要修改的记录的ID:");
scanf("%d",&n);
}
for(int i=0;i
if(n==log[i].logid)
t=i;
if(t==m)
{
printf("没有找到该记录!\n");
return;
}
printf("编号\t\t日期\t\t说明\t\t费用\t\t余额\n");
printf("%2d%21s%15s%15.0lf%15.0lf\n",log[t].logid,log[t].logdate,log[t].lognote,log[t].charge,log[t].balance);
printf("是否对该记录进行修改(Y/N):");
scanf("%s",ch);
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
{
printf("请输入以下信息...\n\n");
printf("日期(格式:<2000-01-01> ) :");
scanf("%s",&log[t].logdate);
printf("说明:");
scanf("%s",&log[t].lognote);
printf("费用(收入为+,支出为-) :");
scanf("%lf",&log[t].charge);
log[t].balance=log[t-1].balance+log[t].charge;
if((tfp=fopen("cashbox.dat","w"))==NULL)
{
printf("不能打开文件!\n");
exit(0);
}
for(int j=0;j
{
log[j].balance=log[j-1].balance+log[j].charge;
if(fwrite(&log[j],LEN,1,tfp)!=1)
{
printf(" 不能保存!\n");
fclose(tfp);
return;
}
else
printf("该记录修改成功!\n");
}
fclose(tfp);
}
system("pause");
fclose(tfp);
}
运行界面(修改、修改后)
六:实验小结:
此次课程设计,将上学期课本上所学的内容应用到本次实践当中,使我更加清楚的理解并掌握了C语言部分内容,通过一些错误使我更加深刻的认识到C语言程序的严谨性。
此次实践内容的难点是“修改函数”与其他函数之间的相互影响,记录内容被修改后,其他函数的相关内容也要相应的随之改变,由于缺乏实践经验,在编程中感觉此处有些难度。幸运的是,在老师的指导之下,明白了,其他函数中相应更改的内容,要在写入文件前,将内容修改,然后再写入文件。于是问题得以解决。
由于目前知识水平的限制,仅仅是完成了各功能的实现,然而代码编写的还不够优化,看起来有些繁杂。代码的质量有待于改进。
本文来源:https://www.2haoxitong.net/k/doc/befca80627284b73f3425054.html
文档为doc格式