《银行账户管理系统(34页).doc》由会员分享,可在线阅读,更多相关《银行账户管理系统(34页).doc(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-银行账户管理系统-第 29 页综合程序 课程设计说明书课程设计名称: 12级综合程序课程设计报告 课程设计题目: 银行账户管理系统 学 院 名 称: 信息工程学院 专业:电子信息工程 班级: 学号: 姓名: 评分: 教师: 20 15 年 03 月 20 日 综合程序 课程设计任务书题目银行账户管理系统内容及要求设计一个银行账户管理程序,账户的信息有账号(唯一)、姓名、余额、身份证号码、电话号码,允许用户进行如下操作:开户、销户、存款、取款、转账、查询,一个用户可以有多个户头,账户的数值没有上限。基本要求:程序运行时,可以由用户选择进行何种操作,开户操作要求输入用户信息后自动获取账号,用户销
2、户后账号被回收,并且该账号可以继续分配给其它账户,不允许用户透支,根据姓名或账号可以进行用户的信息查询,所有的账户信息应存放到一个文件中,可以随时的访问和更新。选作内容:在上述程序的基础上,添加联名账户(一个联名账户有两个拥有者)的管理 。进度安排3月 23日:查找资料3月 4日:系统框架搭建3 月 510日:对系统的各模块进行详细的设计。3月1112日:对系统进行测试、完善学生姓名:指导时间 第12周指导地点: 任务下达2015年3月1日任务完成2015 年 3 月13 日考核方式1.评阅 2.答辩 指导教师 系(部)主任20 14 20 15学年 第 2 学期 第 1 周 2周 注:1、此
3、表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。摘 要随着社会经济的发展,信息化程度的不断深入,计算机的广泛运用,为了满足新形势下银行客户的需求,使用计算机来进行银行账户的管理是社会发展的新常态。本文主要介绍一种以C+为系统描述语言,采用自顶向下的的设计方法,通过类来实现相应操作的一种银行账户系统。该系统具有开户、用户信息存储、查询、转账、取款等功能。较之其他系统,具有快速、易操作、安全性好等特点。关键词: 银行账户管理系统 C+ 类目 录第一章 设计要求1第二章 系统的组成及设计的原理223第三章 概要设
4、计555第四章 详细设计6681921第五章 调试及测试分析21212226第六章 结 论28第七章 参考文献29附 录30附录一:详细程序及注释30附录二:联名账户管理程序(节选)44第一章 设计要求设计一个银行账户管理程序,账户的信息有账号(唯一)、姓名、余额、身份证号码、电话号码,允许用户进行如下操作:开户、销户、存款、取款、转账、查询,一个用户可以有多个户头,账户的数值没有上限。基本要求:程序运行时,可以由用户选择进行何种操作,开户操作要求输入用户信息后自动获取账号,用户销户后账号被回收,并且该账号可以继续分配给其它账户,不允许用户透支,根据姓名或账号可以进行用户的信息查询,所有的账户
5、信息应存放到一个文件中,可以随时的访问和更新。选作内容:在上述程序的基础上,添加联名账户(一个联名账户有两个拥有者)的管理 。第二章 系统的组成及设计的原理通过对该银行账户管理系统的需求进行分析,从增强系统的可维护性以及保密性的角度入手,整体上计划采用两个类,即zhgl类和consumer类来实现。定义zhgl为基类,定义consumer类为zhgl的派生类、使其的访问属性为public。zhgl类用来完成功能显示、开户、销户和用户登录功能;consumer类用来存放账户基本信息,进行查询、存款、取款、密码修改和转账操作。除此之外还有如下子函数组成。 void kaihu(); /普通账户开户
6、 void shanchu(); /删除账号 void zhuanzhang(int ); /转账 void denglu(); /登陆账号 void addmoney(int,float); void exitzhgl(); / 退出系统 void functionshow(); void save(); /保存 void qishi(); / 功能界面 void load(); /载入 void display(); void qumoney(); /取钱 void change_passwd(); /改密码 void b_money(float); /被转账者 void a_money(
7、float); /转账者 void c_money(float); /联合被转账者 void d_money(float); /联合转账者 float get_money(); /卡卡转帐 void search();/查询 void cunmoney();/ 存钱信息表字段名字段类型允许空说 明IDintno卡 号namestringno用户姓名passwordstringno密 码identificationstringno身份证phonenumberstringno电 话moneyfloatno账户余额(不能为空)2. 联名账户信息表字段名字段类型允许空说 明IDintno卡1names
8、tringno卡1用户姓名passwordstringno卡1密码ID2intno卡2Name2stringno卡2用户姓名Password2stringno卡2密码moneyfloatno账户余额(不能为空)字段名字段类型允许空说 明IDintno卡 号cfloatno存/取金额chcharno判断是否继续该操作字段名字段类型允许空说 明IDintno转账的卡号idintno被转账的卡号bfloatno转账金额moneyfloatno账户余额字段名字段类型允许空说 明IDintno卡 号pwdstringno新密码repwdstringno再次输入的新密码passwdstringno账号密码
9、第三章 概要设计通过对该银行账户管理系统的需求进行分析,从增强系统的可维护性以及保密性的角度入手,整体上计划采用两个类,即zhgl类和consumer类来实现。定义zhgl为基类,定义consumer类为zhgl的派生类、使其的访问属性为public。zhgl类用来完成功能显示、开户、销户和用户登录功能;consumer类用来存放账户基本信息,进行查询、存款、取款、密码修改和转账操作。定义一个account指针,用来指向已开户的账户,并获得该账户的信息,用来执行存、取、转账等操作。并用fstream指令进行文件的读写操作,实现将账户所有者的信息存放到一个文件中,并可以随时的访问和更新。程序运行
10、后用户可根据界面提示自行操作。由于要实现界面的回复,在控制用户的循环操作时可以采用do while匹配的循环结构。第四章 详细设计 zhgl类的定义class zhgl public: void kaihu(); /普通账户开户 void shanchu(); /删除账号 void zhuanzhang(int ); /转账 void denglu(); /登陆账号 void addmoney(int,float); void exitzhgl(); / 退出系统 void functionshow(); void save(); /保存 void qishi(); / 功能界面 void l
11、oad(); /载入 protected: static int num; /账户数 consumer *account20;class consumer:public zhgl public: friend class zhgl; consumer(int id,string Name,string PassWord,float m,string Identification,string PhoneNumber) ID=id; name=Name; money=m; passwd=PassWord; identification=Identification; phonenumber= P
12、honeNumber; string get_passwd() / 取得密码 return passwd; string get_name() return name; int get_id() /返回账号 return ID; void display(); void qumoney(); /取钱 void change_passwd(); /改密码 void b_money(float); /被转账者 void a_money(float); /转账者 void c_money(float); /联合被转账者 void d_money(float); /联合转账者 float get_mo
13、ney(); /卡卡转帐 void search();/查询 void cunmoney();/ 存钱 private: int ID; /开户帐号 string passwd; / 用户密码 string name; / 用户姓名 string identification;/身份证 string phonenumber;/电话号码 float money; /初始资金账户开户使用cin接收键盘中输入的数据,并使用指向类对象的指针,将接收的值传回。void zhgl:kaihu() /开户的实现 int id; string nam; string passw; string identif
14、; string phonen; float m; coutendlid; coutendlnam; coutendlidentif; coutendlphonen; coutendlpassw; coutendlm; while(m=0) cout请输入正确的数字!m; consumer * acc = new consumer(id,nam,passw,m,identif,phonen); accountnum = acc; system(cls); cout开户成功!endlendl; num+; save(); return;注销账户时先要将输入的账户号与已开户的账户进行比对,匹配上后
15、,将账户号按位依次赋空,实现账户注销。void zhgl:shanchu() /注销账号的实现 int id; coutendlid; int flag = 1; int i = 0; while(iget_id() flag = 0; else i+; if(flag) cout帐号不存在!endl; return; for(int j=i;jnum;j+) accountj = accountj+1; accountnum-1=NULL; /按位依次赋空实现销户 num-; cout注销成功!endl; return; 程序框图如下: 账户登录首先读取bankdata.TXT保留的账户信息
16、,首先对银行账号进行匹配,匹配上后再对密码进行匹配,在登陆后,会有2级菜单供用户选择自己想要的操作,能够查询,取款,存款,转账,修改密码和返回主菜单。void zhgl:denglu() /登陆账号的实现 int id; coutid; int flag = 1; int i = 0; while(iget_id() flag = 0; else i+; if(flag) cout帐号不存在!endl; return; coutpassw; if(passw!=accounti-get_passwd() return;int n; do cout请选择你要进行的操作:endl0)查询其他用户信
17、息endl1)查看信息endl2)取款endl3)存款endl4)修改密码endl5)转账endl6)返回n; switch(n) case 0: accounti-search();break; case 1: accounti-display();break; case 2: accounti-qumoney();save();break; case 3:accounti-cunmoney();save();break; case 4:accounti-change_passwd();save();break; case 5:zhuanzhang(i);save();break; case
18、 6:return; while(1);void zhgl:exitzhgl() coutendl感谢你对本银行储蓄管理系统的支持,欢迎下次光临!endl; exit(0); void consumer:search() string ch; int ID; int flag=1; int Q=0; coutendlID; while(Qget_id() flag = 0; else Q+; if(flag) cout帐号不存在!get_name();cout对应的用户名为:chendl;用cout输出本用户的基本信息void consumer:display() system(cls); c
19、out*endl; cout*endl; cout* 用户姓名:nameendl; cout* 身份证号码: identificationendl; cout* 电话号码: phonenumberendl; cout* 帐号: IDendl; cout* 余额: moneyendl; cout*endl;用户选择取款功能后,先提示用户输入取款金额,取款金额应大于0元,所以要先对输入的金额进行判断,当其大于0后再账户余额进行比较。若输入金额大于账户余额,提示用户账户余额不足;若输入金额小于等于账户余额,执行取款操作,并相应的减去取款金额。执行完操作后询问用户是否继续当前操作。void consu
20、mer:qumoney() /取钱的实现 float m; char ch; do coutendl你要取多少钱:m; while(m=0) cout请输入正确的数字!endl; cout; cinm; if(moneym) cout对不起,你的余额不足!endl; else money=money-m; coutendl操作成功,请收好钱!endl; cout是否要继续该项操作:(Y/N) endl; cout; cinch; while(ch!=n&ch!=N&ch!=Y&ch!=y) cout; cinch;while(ch=y|ch=Y);存款功能和取款功能类似,用户选择存款功能后,先
21、提示用户输入存款金额,存款金额应大于0元,当存款金额大于0后执行存款操作,并相应的账户余额应为之前的金额加上存款金额。执行完操作后询问用户是否继续当前操作。void consumer:cunmoney() /存钱的实现 float c; char ch; do coutendl你要存多少钱:c; while(c=0) cout请输入正确的数字!endl; cout; cinc; money=money+c; cout操作已成功!endl; cout是否要继续该项操作:(Y/N) endl; cout; cinch; while(ch!=n&ch!=N&ch!=Y&ch!=y) cout; ci
22、nch;while(ch=y|ch=Y); 选存钱输入金额将余额表中的最终余额加上你输入的金额,得到新的余额将输入的金额添加到文件夹中。将新的最终余额显出来示出来密码修改时,新密码需要输两次,且两次输入的密码都相等才能完成密码修改。因此在密码修改程序中需要定义两个变量,分别存放这两次输入的密码。在这个程序中pwd表示第一次输入的密码,repwd表示第二次输入的密码,完成新密码输入后,当pwd和repwd时将新密码赋给passwd,否则提醒用户重新输入新密码。 void consumer:change_passwd() /变更密码的实现 string pwd,repwd; coutpwd; co
23、utrepwd; if(pwd!=repwd) cout你输入的两次密码不一样,请重新输入!endl; passwd=pwd; cout密码修改成功,请牢记!endl; 转账时,应先获得被转账者的账户,确认该账户存在后,还需对转账金额进行判断,规定转账金额必须大于0元。完成转账功能还需借用两个子函数来对转账者和被转账者的账户金额进行操作。这里用a_money、b_money分别对转账者和被转账者的账户余额进行操作。 void consumer:b_money(float x) money=x+money; void consumer:a_money(float x) money=money-x
24、;void zhgl:zhuanzhang(int x) /转账的实现 int id; int flag = 1; int i = 0; coutid; while(iget_id() flag = 0; else i+; if(flag) cout帐号不存在!endl; return ; float b; cout请输入你要转帐的金额:b; while(b=0) cout请输入正确的数字!endl; cout; cinb; if(accountx-get_money()b) cout对不起,金额不够!a_money(b); /转出 accounti-b_money(b); /转入 cout转
25、帐成功!; return;根据系统的功能中有一个要求:可以随时的访问和更新。考虑到这一点,在程序中计划用fstream指令来完成,因此在系统运行前,应先进行文件的读取,读取之前已开户的账户信息,并在执行操作之后保存更改,实现随时的访问和更新。 void zhgl:load()ifstream infile(bankdate.txt,ios:in); /打开bankdate,txt文件if(!infile)cerr读取错误,无资料中!AC;num=AC;for(n=0;nid;infilem;infilenam;infilepassw;infileidentifi;infilephonen;co
26、nsumer * acc = new consumer(id,nam,passw,m,identifi,phonen); accountn = acc; infile.close();cout读取资料正常!endl;void zhgl:save() /账号的保存int n=0;int ac=num;fstream ftxt(bankdate.txt, ios:out); /打开文件ftxtacendl;for(;nac;n+) /写入账户信息ftxtIDendl;ftxtnameendl;ftxtmoneyendl; ftxtpasswdendl;ftxtidentificationendl;
27、ftxtphonenumber属性-配置属性-清单工具-输入和输出-嵌入清单,将嵌入清单后的是改成否就可以正常完成编译了。故障2:现象:程序发生中断,单步调试之后,指向get_id()函数,显示系统无法读取id原因:*account指针是zhgl类中定义的私有成员,而get_id是在派生类consumer中定义的,由于其访问属性是public,无法访问基类的私有成员函数故无法获取到*account指向的账户的id值。解决方法:解决方法有很多种,第一将*account从zhgl类中调出来,作为一个普通变量;第二将*account定义为zhgl类的保护成员,consumer即可进行访问;第三可以将
28、派生类consumer定义为基类的友元,使其能访问私有对象。在此程序中采用的是解决方法一。故障3:现象:在清空中的内容后程序报错原因:在程序运行后,一开始就会调用一个Load函数,读取中已开户的账户情况。打开文件后检测到文件为空又没有对文件为空的情况进行处理,导致程序无法进行。解决方法:在打开文件检测到文件为空时,输出提示语,并返回之前操作。并且不要人为的清空记录的信息,如不慎清空应在其中输入相应的字符,使其处于非空状态。故障4:现象:编写load时,发现infile无法读取到保存在上的数据。原因:在之前的save函数中输出内容有中文,导致infile读取不到数字,且因为不知道文件中到底保存了
29、多少个账户,无法返回到主函数中。解决方法:把save函数中的中文给注释掉,并在编写save函数时,添加一个num变量,用来记录已完成开户的账户个数,并在load中增加一个变量AC,用来存储bankdata.txt中的保存的num,并在循环中作为循环变量,控制读取次数。第六章 结 论经过验证,本银行账户管理系统可以实现账户信息记录、开户、销户、存款、取款、转账、查询等基本功能,联名账户的管理大体上也已完成。从设计思路上来说,系统模块的划分,组成部分的设计是正确的。从方案选用来说,并不算完美,因为对链表的相关知识并不太了解,因此在存储账户信息时并未选用链表来实现,这也为之后的提高要求设计带来了一定
30、困难;且受开发时间影响,只能在doss系统下进行调试操作,虽然运行速度快,但人机交互界面不友好。通过这次综合课程设计,我切身的体会到了面向对象程序和面向过程程序语言的区别。区别不仅仅存在于两种程序语言中,也存在与编程思想中。面向对象的程序编程思想主要是把需求模块化,根据每个模块特定的属性,需要实现的功能来编写模块,创建对象。通过这次课设,我对类的定义、数据类型,派生类等有了更深刻的认识;对之前没了解到的细节有了更深的了解;对文件操作有了更深了理解。最重要的是,在这次课程设计中,掌握了自顶向下的设计方法,学会了从系统的角度去分析问题,还积累了一定的工程经验。虽然系统设计的并不完美,但这次课程设计
31、成为我们的人生旅途上一个美好的历练!第七章 参考文献1 申时凯.数据库应用技术(SQL Server 2005).中国铁路出版社2 .C程序设计语言.北京:清华大学出版社,第2版3 黄维通.Visual C+面向对象与可视化程序设计.北京:清华大学出版社,第3版附 录 附录一:详细程序及注释#include stdafx.h#include#include #include using namespace std;int i=0; int j=0; class consumer; class zhgl public: void kaihu(); /普通账户开户 void shanchu();
32、/删除账号 void zhuanzhang(int ); /转账 void denglu(); /登陆账号 void addmoney(int,float); void exitzhgl(); / 退出系统 void functionshow(); void save(); /保存 void qishi(); / 功能界面 void load();/载入 protected: static int num; /账户数 consumer *account20; int zhgl:num=0; class consumer:public zhgl public: friend class zhgl; consumer(int i