《程序设计应用基础》设计报告 银行管理系统.docx
- 文档编号:7010734
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:46
- 大小:802.23KB
《程序设计应用基础》设计报告 银行管理系统.docx
《《程序设计应用基础》设计报告 银行管理系统.docx》由会员分享,可在线阅读,更多相关《《程序设计应用基础》设计报告 银行管理系统.docx(46页珍藏版)》请在冰豆网上搜索。
《程序设计应用基础》设计报告银行管理系统
《程序设计应用基础》课程设计报告
题目银行管理系统
学院
班级
组员姓名
学号
指导教师
《程序设计应用基础》课程设计计划书
设计题目
银行管理系统
已知技术参数和设计要求
整个系统可以设计为数据插入模块、数据修改模块、数据删除模块、数据显示模块和数据查询模块。
信息记录要存放到文件中去,因而要实现文件的输入输出操作;要实现数据的插入、删除、修改和显示功能,因而要实现插入、删除、修改和显示操作;要实现按银行账户进行查询的功能,因而要提供查找操作;另外还应该提供键盘式选择菜单以实现功能选择
设计内容与步骤
采用结构体数组。
(1)数据添加模块;
(2)数据显示模块;
(3)数据删除模块;
(4)数据查询模块;
(5)数据修改模块。
成员分工
设计工作计划与进度安排
月日:
设计算法,并验证。
月日:
完成程序。
月日:
检查程序是否满足设计要求并完善。
月日:
完成设计报告。
设计考核要求
1编写程序,调试,测试
2完成设计报告
3完成答辩
银行管理系统
摘要:
银行账户管理系统可以创造出很方便的数据的输入与输出,记录,保存,修改,删除
程序运用了条件、循环、结构体、函数等知识点,实现了通过电脑对数据输入与输出的操作,相比于用纸质档案记录银行账户的信息,这种方式更加的快捷方便,可以节省大量的时间和人力。
本程序操作界面简但美观,便于理解与操作,同时又满足了银行对数据存储的基本要求。
通过编写该程序,可以更好地理解在课堂上所学习的c语言知识,并把它应用于实际的操作当中,不仅仅巩固了知识点,更是增加了c语言实践的经历,C语言离开了现实的应用是没有意义的,编写程序更能是我们了解到c语言的应用是多么方便,并为以后写出更简单快捷的程序打下基础。
关键词:
银行账户管理系统;结构体;条件语句;循环结构;指针
1引言
编写程序,就是要解决生活中那些繁琐复杂又重复性极高的行为,使用程序便可以把人力从这些复杂繁琐的工作中解放出来,因此使用程序具有十分重要的现实意义。
经过一年对c语言的学习,对c语言有了初步的了解,为了进一步加深对c语言的认识,于是基于有关银行管理方面的一些问题,编写了这个程序,编写程序是一件逻辑紧密又要注重细节的事情,在编写程序的过程中,有一个紧密的逻辑一步步的实现程序的编写是非常重要的,程序不可能一下子被写出来,也是需要基于现实一步步的实现,对此模块化程序设计就发挥了他的作用,再无从下手的时候,模块化程序设计往往会给出突破点,当然这也离不开具体要解决什么什么样的问题,因此对实际问题的了解也有助于如何解决程序的编写问题。
通过学习,对c语言的理解一步步加深相信会编写出更简便实用的程序。
2设计方案
2.1设计思路
银行账户管理过程中,数据的输入与输出都是先一步步进行后在进行的,因此,在设计程序的时候也要一步步的进行每一个选择。
首先定义菜单函数时则调用了登录函数,登陆函数又调用了管理员模式函数,管理员模式函数又调用了管理模式下的用户注册,管理模式下的账户注销,管理模式下的信息查询函数和修改密码函数,那么编写代码时就按照1函数的功能一个个定义并调用,让后,再在主函数中运行。
3程序设计与实施
3.1根据该流程图定义数据类型建立函数
voidMenu();//菜单
voidLog_In();//登陆
voidClient();//用户模式
voidAdministrator();//管理员模式
voidPsw_Change();//修改密码
voidWithdraw();//提款
voidDeposit();//存款
voidClient_Inquiry();//账户流水查询
voidRegister();//管理模式下的用户注册
voidAccount_Cancel();//管理模式下的账户注销
voidAdmin_Inquiry();//管理模式下的信息查询
3.2主函数及其流程图、
定义主函数 main()和一系列的功能函数,只有通过这些函数才可实现程序 银行账户系统 注册账户 用户信息查询 注销账户 修改管理员密码 退出系统 五个一级函数的功能。
其中一级函数又包含多个子函数。
每次使用都会调用多个函数。
主函数主要是利用switch语句对数据进行 处理,流程图如下图3.1所示。
3.3其他函数
3.3.1.菜单函数
输入1,登录,输入2退出。
3.3.2登陆函数
输入账号,账号存在,输入密码。
帐号不存在,输入1重新输账号,输入2退出。
输入密码,密码正确,是管理员账号,执行管理员模式函数,否者执行用户模式函数,密码不正确,输入1重新输入密码,输入2退出。
3.3.3管理员模式函数
输入1,执行用户注册函数,输入2执行管理员模式下的用户信息查询,输入3执行管理员模式下的用户注销函数,输入4执行修改密码函数,输入5退出系统
3.3.4管理员模式下的用户注册函数
输入账号,账号已存在,输入1重新输入账号,输入2退出系统。
账号未存在,输入密码,输入姓名,输入1,表示确定,输入2重新填写,输入3退出系统,不注册。
3.3.5管理员模式下的信息查询函数
开始,存在已有帐户,输出账户账号和用户名信息,不存在已有帐户,结束。
存在已有账户,输入账户账号,账号存在在,输出账号信息,账号不存在,输入1,重新输入,输入,结束。
输出账号信息。
输入1进一步查询账户流水,输出账户流水。
输入2,查询其它账户。
输出账户流水后,输入1,查询其他账户信息,输入2结束。
3.3.6管理员模式下的账户注销函数
账户是否存在,否,结束,是输入注销账户。
是否为管理员账户,是,重新输入注销账户,否,账户是否存在。
账户是否存在否,输入1,重新输入账户,输入2结束。
账户是否存在,是,输入1,注销成功,输入2,重新输入注销账户,输入三,结束,不注销。
3.3.7修改密码函数
开始,输入原密码,密码正确,输入新密码,退出,密码错误,输入1,重新输入原密码,输入2,结束。
3.3.8用户模式函数
开始,输入一运行存款函数,输入2运行取款函数,输入3运行账户流水查询函数,输入4运行修改密码函数,输入5直接退出。
3.3.9存款函数
开始,输出已有余额,输入要存金额,输入1,运行存取日志函数,存款成功输入2重新输入存取金额,输入3结束。
3.3.10取款函数
开始。
输出余额值。
输入提款金额。
提款金额大于余额值,输入1重新输入提款金额,输入2结束。
提款金额小于余额,输入1确定取款,输入2,重新输入取款金额,输入3直接结束。
3.3.11账户流水查询函数
输入1,查询余额,输入2,运行存取日志展示函数,显示流水日期,输入3,直接结束
4设计结果与分析
开始编译如图4.1,菜单函数运行,输入1登录,运行登录函数如图4.24.3,输入2退出系统。
图4.1
输入账号密码,若为管理员账号运行管理员模式函数,显示如图4.4,若账号为账户账号,运行用户模式函数如图4.9显示。
4.2
4.3
输入1,运行管理员模式下的主车函数,如图4.5输入2,运行管理员模式下的信息查询函数如图4.6,输入3,运行管理员模式下的注销函数如图4.7.输入4,运行修改密码函数,如图4.8.修改管理员密码,输入5退出系统
4.4
如图,输入账号密码后,输入1,确定,输入2,重新填写,输入3,退出系统。
4.5
输入要查询的账号,输入1,继续查询账户流水,输入2返回重新输入要查询账户,输入3退出系统。
输入1,显示流水,输入1继续输入新的账号进行查询,输入2退出。
4.6
输入要注销的账号,让后输入1,确定注销,输入2重新输入要注销的账号,输入3退出。
4.7
账号修改函数运行如下,输入原有的账号和新的账号,按任意键修改成功。
4.8
输入1,运行存款函数,如图4.10所示,输入2运行取款函数如图4.11,输入3运行账户流水查询函数,运行结果如4.12,输入4,进行修改密码,运行结果如4.8,输入5,结束进程。
4.9
存款函数运行如下,函数输出已有余额,输入要存的金额,继续输入1,表示确定,输入2,返回重新输入存款金额,输入3,退出存款函数。
4.10
取款函数显示如图4.11,若输入金额大于已有存款数,显示第一张图,输入1重新输入取款金额,输入2退出函数,若取款金额小于已有存款金额,输出第二张图,输入1表示确认取款,输入2重新输入要取金额,输入三退出取款函数。
4.11
账户流水查询函数运行结果如图4.12所示输入1查询余额,输入2,查询流水,输入3结束查询。
4.12
5源程序
#define_CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
#include
#defineLEN21
structPERSON
{
charAccount_Num[LEN];
charPassword[LEN];
charName[LEN];
doubleasset;
structPERSON*prev;
structPERSON*next;//便于建立链表
};
typedefPERSONPerson;
typedefstruct
{
charDate[20];
charTime[20];
charMode[5];
doubleAmount;//数额
doubleBalance;//余额
}Info;
Person*P_Head=NULL;//链表首个
Person*P_End=NULL;//链表尾部
Person*P_Log_In=NULL;//登录账号的信息
voidBasic_File_Load();//本地文件加载
voidMenu();//菜单
voidLog_In();//登陆
voidClient();//用户模式
voidAdministrator();//管理员模式
voidPsw_Change();//修改密码
voidWithdraw();//提款
voidDeposit();//存款
voidClient_Inquiry();//账户流水查询
voidRegister();//管理模式下的用户注册
voidAccount_Cancel();//管理模式下的账户注销
voidAdmin_Inquiry();//管理模式下的信息查询
voidData_Save();//存储信息
voidRelease();//释放申请的内存空间
voidDraw_Line(intLength);//画横线
voidLog_Save(doubleAmount,constchar*Mode);//存取日志
voidLog_Display(char*);//存取日志展示
voidCtime_Trans(char*Date,char*Time,char*Source);//用于将ctime()显示的日期转成中国人常用日期
doubleAmount_Trans(doubleAmount);//用于丢掉小数点两位后的数据(存取钱用)
Person*Search(charAcc_Num[LEN]);//查找账号是否存在
//账号不存在返回NULL,存在则返回账号信息所在内存的指针
intmain()
{
Basic_File_Load();
Menu();
Release();
return0;
}
voidBasic_File_Load()
{
if(_access("E:
\\Bank_Management_System",00)==-1)
{
system("mdE:
\\Bank_Management_System");
}//判断文件夹是否存在,不存在则建立该文件夹
if(_access("E:
\\Bank_Management_System\\Data",00)==-1)
{
system("mdE:
\\Bank_Management_System\\Data");
}//判断另外一个文件夹是否存在,不存在则建立该文件夹
if(_access("E:
\\Bank_Management_System\\Account.dat",00)==-1)
{
FILE*fp=fopen("E:
\\Bank_Management_System\\Account.dat","wb");
charName[LEN]="Administrator";//管理员账号、用户名
charPaswd[LEN]="123456";//管理员密码
doubleasset=0;
fprintf(fp,"%s%s%s%lf\n",Name,Paswd,Name,asset);//管理员账户的创建
fclose(fp);
}//判断用户账户信息文件是否存在,不存在则建立该文件,并添加一个管理员
FILE*fp=fopen("E:
\\Bank_Management_System\\Account.dat","rb+");
Person*pnow=(Person*)malloc(sizeof(Person));
fscanf_s(fp,"%s%s%s%lf\n",pnow->Account_Num,20,pnow->Password,20,pnow->Name,20,&pnow->asset);
P_Head=pnow;
P_Head->prev=NULL;
//根据设定,文件中至少有一个账户Administrator,所以不必打开文件就检查是否达到文件尾部
while(!
feof(fp))//如果文件中还有账户,则继续载入
{
Person*pnext=(Person*)malloc(sizeof(Person));
fscanf_s(fp,"%s%s%s%lf\n",pnext->Account_Num,20,pnext->Password,20,pnext->Name,20,&pnext->asset);
pnext->prev=pnow;
pnow->next=pnext;
pnow=pnext;//移入下一位
}
pnow->next=NULL;
P_End=pnow;
//用户账户信息载入完毕,存放于以P_Head为首的链表里
fclose(fp);
return;
}
voidMenu()
{
boolexit=false;//是否退出系统true:
是false:
否
while(!
exit)
{
charchoice;
do
{
system("cls");
printf("\t欢迎来到账户管理系统\n\t\t1.登陆\n\t\t2.退出系统\n\t请选择:
");
choice=getchar();
rewind(stdin);
/*
关于rewind(stdin):
用于清空缓冲区
在这里加个清空缓冲区的语句其实和加个getchar()一样
都是为了去掉回车('\n'),避免回车对后面输入的影响
而这个比getchar()可以少一个bug
那就是如果你一开始直接按回车
后面的getchar()和前面的getchar赋值语句就会让你就会陷入死循环
后面会常用到,就不多加解释了。
*/
}while(choice<'1'||choice>'2');
switch(choice)
{
case'1':
Log_In();break;
case'2':
exit=true;break;
}
}
}
Person*Search(charAcc_Num[LEN])//这个人员搜索函数很重要
{
Person*search=NULL;
Person*now=P_Head;
while(now!
=NULL)
{
if(!
strcmp(now->Account_Num,Acc_Num))
{
search=now;
break;//找到账号就可以退出循环了
}
now=now->next;//不是所找账号,指向下一位
}
returnsearch;
}//返回NULL代表没有找到
voidLog_In()
{
charInputs[LEN];
charPaswd_In[LEN]={0};
boolAcc_Exist=false;//是否存在该账号
charGo_Back='2';//是否返回注册1.返回注册2.继续输入
do
{
system("cls");
printf("\t请输入账号:
\n\t");
scanf_s("%s",Inputs,20);
rewind(stdin);
P_Log_In=Search(Inputs);
if(P_Log_In!
=NULL)
{
Acc_Exist=true;//账号存在
}
if(!
Acc_Exist)
{
do
{
system("cls");
printf("\t输入的账号不存在!
\n");
printf("1.返回2.重新输入\n");
printf("\t请选择:
");
Go_Back=getchar();
rewind(stdin);
}while(Go_Back!
='1'&&Go_Back!
='2');//这个循环限制输入的数在1-2,防止不匹配的现象出现
}//后续会很常出现,请留意
}while(Go_Back=='2'&&Acc_Exist==false);
boolmatch=false;//标记密码是否正确
while(Acc_Exist&&(!
match))
{
system("cls");
printf("\t账号:
%s存在\n",P_Log_In->Account_Num);
printf("\t请输入密码:
\n\t");
scanf_s("%s",Paswd_In,20);
rewind(stdin);
match=(bool)!
strcmp(Paswd_In,P_Log_In->Password);//密码是否正确,1代表正确
charReinput='1';//是否重新输入密码
if(!
match)
{
do
{
system("cls");
printf("\t输入的密码错误!
\n");
printf("\t是否重新输入?
\n");
printf("\t1.是\t2.否\n");
printf("\t请选择:
");
Reinput=getchar();
rewind(stdin);
}while(Reinput!
='1'&&Reinput!
='2');
if(Reinput=='2')
{
break;
}
}
}
if(match)//密码正确则成功登录
{
if(!
strcmp(P_Log_In->Account_Num,"Administrator"))
{
Administrator();//管理员模式
}
else
{
Client();//用户模式
}
}
}
voidRegister()
{
charInputs[LEN];//注册账号
charPaswd_In[LEN];//密码
charName_In[LEN];//用户姓名
do
{
charRestart='1';//是否重头填写,后面会用到
boolAcc_Exist=false;//判断要注册的账号是否已经存在
charReinput='1';//是否重新输入
do
{
system("cls");
printf("\t请输入要注册的账户账号:
\n\t");
scanf_s("%s",Inputs,20);
rewind(stdin);
if(Search(Inputs)!
=NULL)
{
Acc_Exist=true;
}
else
{
Acc_Exist=false;
}
if(Acc_Exist)
{
do
{
system("cls");
printf("\t输入的账号已经存在!
\n");
printf("\t是否重新输入?
\n");
printf("\t1.是\t2.否(退出注册系统)\n");
printf("\t请选择:
");
Reinput=getchar();
rewind(stdin);
}while(Reinput!
='1'&&Reinput!
='2');
}
if(Reinput=='2')
{
break;
}
}while(Acc_Exist);
if(!
Acc_Exist)
{
printf("\t账号:
%s可以使用\n",Inputs);
printf("\t请输入密码:
");
scanf_s("%s",Paswd_In,20);
rewind(stdin);
printf("\t请输入用户的姓名:
");
scanf_s("%s",Name_In,20);
rewind(stdin);
do
{
system("cls");
printf("\t账号:
%s\n",Inputs);
printf("\t密码:
%s\n",
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计应用基础 程序设计应用基础设计报告 银行管理系统 程序设计 应用 基础 设计 报告 银行 管理 系统