c语言银行账户系统 课程设计.docx
《c语言银行账户系统 课程设计.docx》由会员分享,可在线阅读,更多相关《c语言银行账户系统 课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
c语言银行账户系统课程设计
作品编号:
DG134********078972981
创作者:
玫霸*
课程设计任务书
题目:
银行个人账户管理系统
(2)
一、课程设计时间
共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
1储户开户(储户数据包括帐号,姓名,身份证号,密码和账户余额等),储户的信息保存在account.dat文件中,应对储户的开户金额做出限制(如金额不低于10元钱)。
2储户的密码修改。
3储户的余额查询。
4储户销户。
5储户的各项信息更改后,应同时更新account.dat文件中的内容。
三、课程设计要求
1.程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“储户开户”、“密码修改”、“余额查询”、“销户”和“退出”5项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、说明书成绩
六、教师评语
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为九个模块,每一个模块对应一个函数。
在这些函数当中,储户开户函数,余额查询函数,储户销户函数,密码查询函数的实现严格按照题目的要求,而更改数据函数和显示函数属于附加功能。
读取文件函数和保存信息函数对其它函数的实现起辅助作用,主函数及菜单函数控制程序的整体运行。
1.储户开户函数主要实现程序最初运行时储户信息的录入以及其后的运行中储户信息的追加功能;
2.余额查询函数允许按照账号和密码对储户的余额进行查询;
3.储户销户函数实现的功能是按照账号和密码对储户的信息进行删除;;
4.储户密码修改函数可以实现对储户的密码进行修改;
5.显示函数实现的是显示目前所有的有效储户记录信息。
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一个储户记录都包含账号,姓名,密码,身份证号和余额,在程序当中,将储户记录类型定义为结构体类型,添加以及追加的储户信息直接写入E盘的account.dat文件中,其它函数每次对储户记录的访问,其数据来源都是account.dat文件,这样做不但可以保证储户信息的一致性,而且可以对储户信息进行永久保存,保证每次运行程序都可以采用原来的数据。
二、程序流程图
1.程序总体结构图
图1程序总体结构图
2.具体功能框图
(1)储户开户函数add
图2添加储户信息函数
(2)读取储户信息函数reads
图3读取储户信息
(3)储户销户函数del
图4删除储户记录
三、核心技术的实现说明及相应程序段
本程序主要由九个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。
在这些函数当中,添加储户开户函数、余额查询函数和储户销户函数是程序中较为核心的部分,下面分别进行说明。
1.储户开户函数
开户分为两种情况,其一是在储户文件(account.dat)不存在的情况下,首先由程序创建一个新文件,并将录入的储户信息写入该文件当中;其二是在储户文件(account.dat)已经存在的情况下,此时文件以追加的方式打开,这样才可以保证以前已经存在的信息不丢失。
具体的程序段如下:
if((fp=fopen("account.dat","a"))==NULL)//如果文件已经存在,可以追加储户信息
{
if((fp=fopen("account.dat","w"))==NULL)//文件不存在时,创建新文件,输入储户信息
{
printf("用户不存在!
\n");
return;
}
}
printf("\n请输入储户帐号,并按回车键确认:
\n");
scanf("%s",dep.num);
fprintf(fp,"\n%s\n",dep.num);
printf("\n请输入储户姓名,并用回车键确认:
\n");
scanf("%s",dep.name);
fprintf(fp,"\n%s\n",dep.name);
printf("\n请输入储户身份证号,并用回车键确认:
\n");
scanf("%s",dep.per);
fprintf(fp,"\n%s\n",dep.per);
printf("\n请输入储户密码,并用回车键确认:
\n");
scanf("%f",&dep.sec);
fprintf(fp,"\n%f\n",dep.sec);
printf("\n请输入储户金额,并按回车键确认:
\n");
scanf("%f",&dep.mon);
fprintf(fp,"\n%f\n",dep.mon);
printf("\n**********************开户成功*************************\n");
fclose(fp);
}2.余额查询函数
对储户的余额查询首先调用reads函数将文件中的储户信息读入数组当中,并由用户输入待查询储户的账号和密码,而后按照该账号和密码进行查找,如果文件中存在该储户的信息,则采用查询函数进行查询,否则输出输入错误的提示信息。
具体程序段如下:
n=reads(dep);
printf("\n请用户输入账号,密码,用空格隔开,按回车键确认:
\n");
scanf("%s%f",s,&t);
for(i=0;iif(strcmp(s,dep[i].num)==0&&t==dep[i].sec)break;
if(i>=n||t!
=dep[i].sec)
{
printf("\n输入错误\n");
return;
}
else
{printf("*********************储户的余额如下**********************\n");
printf("余额\n");
printf("\n%11.2f\n",dep[i].mon);
printf("**********************************************************\n");
}
3.储户销户函数
该函数的核心内容是删除算法以及最终对源文件的更新。
该函数执行时,首先调用reads函数将文件中的储户信息读入数组当中,并由用户输入待删除储户的账号和密码,而后按照该账号和密码进行查找,如果文件中存在该储户的信息,则采用删除算法删除,否则输出储户信息不存在的提示信息。
对储户信息的具体删除算法是在结构体数组中实现的,当储户的信息被找到后,位于数组中该储户后面的储户记录依次向前移动一个元素的位置,这些操作完成后,要删除的储户信息就被后面的数组元素覆盖掉了,也就实现了删除。
在数组中删除储户信息后,还要将更改后的信息重新写回文件当中,以保证数据的一致性。
具体程序段如下:
n=reads(dep);
printf("\n请输入要删除储户账号,密码,用空格隔开,按回车键确认:
");
scanf("%s%f",number,&t);
for(i=0;iif(strcmp(number,dep[i].num)==0&&t==dep[i].sec)break;
if(i>=n||t!
=dep[i].sec)
{
printf("没有找到该储户信息!
\n");
return;
}
else
{
for(j=i+1;jdep[j-1]=dep[j];
}
save(dep,n-1);
printf("销户成功!
\n");
}
四、课设总结
本次课设,我感受很多。
深刻地懂得了理论联系实际的重要性。
在课设过程中,我发现了自己有很多欠缺的地方,比如:
涉及的相关知识不全面,知识学得不够透彻,在课设时就会遇到重重困难,它启示着我在以后的学习中要精益求精,对有用的知识要做到深入研究。
我很感谢指导老师,和在课设过程中帮助过我的同学,他们能在我困难的时候,帮我从困境中解脱出来,让我能顺利地在有限的时间里,完成任务。
本次课设,不仅深化了我对课本内容的理解,而且拓宽了我的知识面。
我的程序按照指导任务书的要求顺利地完成了任务,实现了所有的功能,整个程序采用模块化设计方法,在程序界面,以菜单的形式调用各功能函数;程序可读性强,界面友好;输出形式美观。
五、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
六、源程序
#include
#include
#include
#include"conio.h"
#defineN20
structdepositor
{charnum[20];
charname[20];
charper[20];
floatsec;
floatmon;
};
voidmenu();
intreads(structdepositordep[N]);
voidsave(structdepositordep[N],intn);
voidadd();
voiddel();
voidchange();
voidshow();
voidmain()
{
intn;
while
(1)
{
menu();
printf("\n请输入您要选择的操作序号,按回车键确认:
");
scanf("%d",&n);
switch(n)
{
case1:
add();break;
case2:
show();break;
case3:
del();break;
case4:
change();break;
case5:
exit(0);
default:
printf("输入错误,请输入列表中存在的序号!
\n");
}
}
}
voidmenu()
{
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
printf("\n*************************银行个人账户管理系统***************************");
printf("\n1储户开户");
printf("\n2余额查询");
printf("\n3储户销户");
printf("\n4密码修改");
printf("\n5退出");
printf("\n**************************************************************************");
printf("\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
}
intreads(structdepositordep[N])//读取储户内容
{
FILE*fp;
inti=0;
if((fp=fopen("account.dat","r"))==NULL)
{
printf("文件打开失败!
\n");
return0;
}
else
{
for(i=0;!
feof(fp);i++)
fscanf(fp,"\n%s%s%s%f%f\n",dep[i].num,dep[i].name,dep[i].per,&dep[i].sec,&dep[i].mon);
}
fclose(fp);
returni;
}
voidsave(structdepositordep[N],intn)//储户保存后信息
{
FILE*fp;
inti=0;
if((fp=fopen("account.dat","w"))==NULL)
{
printf("文件打开失败!
\n");
return;
}
else
{
for(i=0;ifprintf(fp,"\n%s%s%s%f%f\n",dep[i].num,dep[i].name,dep[i].per,dep[i].sec,dep[i].mon);
}
fclose(fp);
}
voidadd()/*储户开户*/
{
FILE*fp;
structdepositordep;
if((fp=fopen("account.dat","a"))==NULL)//如果文件已经存在,可以追加储户信息
{
if((fp=fopen("account.dat","w"))==NULL)//文件不存在时,创建新文件,输入储户信息
{
printf("用户不存在!
\n");
return;
}
}
printf("\n请输入储户帐号,并按回车键确认:
\n");
scanf("%s",dep.num);
fprintf(fp,"\n%s\n",dep.num);
printf("\n请输入储户姓名,并用回车键确认:
\n");
scanf("%s",dep.name);
fprintf(fp,"\n%s\n",dep.name);
printf("\n请输入储户身份证号,并用回车键确认:
\n");
scanf("%s",dep.per);
fprintf(fp,"\n%s\n",dep.per);
printf("\n请输入储户密码,并用回车键确认:
\n");
scanf("%f",&dep.sec);
fprintf(fp,"\n%f\n",dep.sec);
printf("\n请输入储户金额,并按回车键确认:
\n");
scanf("%f",&dep.mon);
fprintf(fp,"\n%f\n",dep.mon);
printf("\n**********************开户成功*************************\n");
fclose(fp);
}
voidshow()//余额查询
{
structdepositordep[N];
inti,n;
chars[20];
floatt;
n=reads(dep);
printf("\n请用户输入账号,密码,用空格隔开,按回车键确认:
\n");
scanf("%s%f",s,&t);
for(i=0;iif(strcmp(s,dep[i].num)==0&&t==dep[i].sec)break;
if(i>=n||t!
=dep[i].sec)
{
printf("\n输入错误\n");
return;
}
else
{printf("*********************储户的余额如下**********************\n");
printf("余额\n");
printf("\n%11.2f\n",dep[i].mon);
printf("**********************************************************\n");
}
}
voiddel()/*储户信息删除函数*/
{
structdepositordep[N];
charnumber[20];
floatt;
intn,i,j;
n=reads(dep);
printf("\n请输入要删除储户账号,密码,用空格隔开,按回车键确认:
");
scanf("%s%f",number,&t);
for(i=0;iif(strcmp(number,dep[i].num)==0&&t==dep[i].sec)break;
if(i>=n||t!
=dep[i].sec)
{
printf("没有找到该储户信息!
\n");
return;
}
else
{
for(j=i+1;jdep[j-1]=dep[j];
}
save(dep,n-1);
printf("销户成功!
\n");
}
voidchange()//储户密码更改
{
structdepositordep[N];
intn,i;
floatt;
charnumber[20];
printf("\n请输入要更改密码的储户账号,密码,用空格隔开,按回车键确认:
");
scanf("%s%f",number,&t);
n=reads(dep);
for(i=0;iif(strcmp(number,dep[i].num)==0&&t==dep[i].sec)
break;
if(i>=n||t!
=dep[i].sec)
{
printf("无此储户信息!
");
return;
}
printf("\n请输入更改后密码,按回车键确认:
\n");
scanf("%f",&dep[i].sec);
save(dep,n);
printf("\n修改成功\n");
}
作品编号:
DG134********078972981
创作者:
玫霸*