C++课程设计银行账户管理系统.docx
- 文档编号:11170401
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:38
- 大小:24.21KB
C++课程设计银行账户管理系统.docx
《C++课程设计银行账户管理系统.docx》由会员分享,可在线阅读,更多相关《C++课程设计银行账户管理系统.docx(38页珍藏版)》请在冰豆网上搜索。
C++课程设计银行账户管理系统
青岛理工大学
C++面向对象课程设计报告
院(系):
计算机工程学院
专业:
软件工程
学生姓名:
_华逸帆
班级:
_软件121班_学号:
201207185
题目:
__银行账户管理系统
起迄日期:
_2014.6.23~2013.7.5
设计地点:
计算机学院机房
指导教师:
李兰
完成日期:
2014年7月5日
1.概要设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
.1
1.1
设计思想⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
.1
1.2
设计方法⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
.1
1.3
系统中主要模块和其他模块间的关系描述
⋯⋯⋯....1
2.需求分析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
..2
3.总体设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
..2
4.模块设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
..3
4.1
开户功能模块⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
.3
4.1.1
功能模块分析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
...⋯⋯..3
4.1.2
代码设计及分析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
.4
4.1.3
运行结果⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
.5
4.2
销户功能模块⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
.5
4.2.2
功能模块分析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
5
4.2.3
代码设计及分析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
5
4.2.3
运行结果⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
.7
5.系统使用说明⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
.7
6.附录⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
.7
6.1
设计体会⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
.7
6.2
源程序⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
.8
1.概要设计
1.1设计思想
银行账户管理系统,通过设计一个控制台应用程序来实现工作人员遍历管理所有银
行用户的银行账户功能。
通过C++面向对象的程序设计语言,利用面向对象的设计思想,将程序运用面向对象的方法逐块划分,对每个对象的性质进行分析设计。
1.2实现方法
总体设计方法,是构建一个链表,来存储用户的资料,数据存储方面,用存储文件技术代替存储数据库技术。
构建一个银行账户类,封装链表的头结点,创建用户银行账户各个属性的函数及其变量。
构建一个程序操作类,用于封装实现打印操作菜单,实现主程序的操作选择等方法。
1.3系统中主要模块及各模块间的关系的描述
系统中的主要模块:
结构体节点:
用于存放用户所用的账户信息(姓名,单位,电话,账户号,余额,地址,是否为联名账户等)
银行账户类:
用于封装链表的头结点,记录删除所回收的账户号,和删除回收的账户数目;构造函数在创建对象时,完成从文件中读出用户账户所有信息的操作,析构函数在对象即将消亡时,完成将整个链表中的所有信息逐个节点的存入文件中的操作。
程序操作类:
用于实现程序中,菜单打印操作,菜单选择等操作。
其他各个模块:
节点构建函数构(开户函数):
链表构建函数为银行账户类的私有函数成员,银行账户类的大三功能函数之一,即是链表构建的方法,也是用户开户的方法,当构造函数运行时从文件中读入数据存入链表时调用,在用户选择开户操作时调用,实现添加一个节点的功能,进而实现链表一个节点逐个构造的功能。
节点删除函数(销户函数):
节点删除函数为银行账户类的私有成员,银行账户类的三大功能函数之一,即是链表删除的方法,也是用户销户的方法,当用户选择销户操作时,调用节点删除函数,删除并释放节点。
资金操作函数(存款,取款,转账函数):
资金操作函数为银行账户类的私有成员,银行账户的三大功能函数之一,是用户所有对资金操作的方法的集合。
在用户选择任何
一种资金操作时调用资金操作函数,完成对用户账户资金的操作,同时对节点中相对应的变量进行修改,并且返回操作结果。
操作选择函数:
选择操作函数为银行类的公有成员,根据打印菜单函数,用户输入任意一个选项选择操作,相对应的银行账户的操作。
并且判断用户是否按照规定输入,将用户输入的选择传入操作函数。
操作函数:
操作函数为银行操作类的私有成员,根据传来的参数选择是否调用,三大功能函数,并且返回操作结果。
其他功能函数:
基本均为银行账户类的私有成员函数,节点信息输入函数:
实现节点信息逐个输入,和账号生成的功能,主要是在开户函数中调用。
节点遍历函数:
根据
传入的字符串,遍历查链表,返回符合规定的节点指针。
文件读写操作函数():
实现节点信息文件中的读写功能,同时实现类中私有变量链表长度,回收账号,回收账号数
目的读写操作,主要实在对象的构造函数和析构函数中调用。
2.需求分析
银行账户管理系统,是由银行工作人员对银行用户的账户进行操作管理的系统。
是
一款使用者为银行工作人员,但服务对象是银行用户的管理系统。
不考虑银行工作人员
账号注册用户名密码的情况下,只需要对银行用户账户的信息进行操作和管理就能完成
要求。
银行用户账户的属性中含有,用户的用户真实姓名,身份证号码,公司,地址,电
话号码,账户号码,账户余额等属性。
除账户余额外,其余变量类型均应该为string类
型,账户余额的类型应该为,double类型。
身份证号码,长度应为18位,电话号码的
长度应为11位。
账户余额不能超值,最小值为零。
账户号码应由系统自动生成,一个
用户名额下可以有多个账户,每个账户由账户号来区别开来。
另外应该设立一种联名账
户,这种账户有两个人共同管理,及一个账户由两个用户名,有两个身份证号码。
此外,系统中的每个变量的输入都应该有判断正误的判断,对错误无效的变量输入
应该反馈结构不接受。
系统中所有的用户信息应该在程序开始时从文件中读出,再程序结束时写入文件,这样实现用户信息的存储代替存入数据库的方法。
3.总体设计
管理系统总体结构由构建的链表存储信息,程序结束后所有的用户信息都存入文件
中,程序开始时再从文件中读取相关的信息。
声明一个结构体变量Node,包含string类型的变量:
用户名,身份证号码,电话号
码,公司,地址,账户号,联名用户用户名,联名用户身份证号码,double类型的变量
余额,Node*类型的变量next。
定义一个Link类,封装链表的头指针
Node*head,链表的长度length,回收的账号
lack【】,回收的账号数目
number。
构造函数,在建立对象时构建链表,通过存入链表
的length值判断链表的长度及已存在的银行账户个数,从而调用构造链表的
add()函
数,在add()函数中调用
file_read()函数读出存在文件中银行账户的信息。
程序开
始打印出菜单供用户选择。
开户,对应
add()函数,add函数调用out_node()函数,
根据提示输入用户银行账户所有信息,并根据
length长度和用户的身份证号码后
12位
生成账户账号。
销户操作,对应
delcte()函数,根据传递的参数用户账号字符串,查
找对应的银行账户,然后对节点进行删除释放。
存款,取款,转账操作对应
money()
函数,根据传递的参数,用户的账户号码,及选择的选项,执行相对的操作,通过账户
号码找到相对应的节点,在对节点的money变量进行简单的加减操作。
析构函数,在对
象消亡时进行调用,本程序也就是在程序即将结束时进行调用,将链表中的每个节点所
有信息,按照一定的顺序存入指定的文件中,再将银行类中的链表的长度
length,回收
的账号数组lack【】,回收的账号数目按照一定的顺序存入文件中。
4.程序模块设计
4.1开户功能模块:
4.1.1模块功能分析:
开户功能膜块在面向用户方面应该实现应该具有如下功能,
银行账户所有信息输入的功
能,提示用户是否申请为联名账户,并且防止用户随意输入错误无效的信息。
在面向系统结构方面,应该具有构建链表节点功能,创建链表节点,并且根据所处的位置加入链
表,尾节点的
next
指针应该指向
NULL
。
最后返回操作结果,执行成功返回
true,失败
返回false。
4.1.2代码的设计及分析:
booladd(boolt,ifstream&input)//是否是从文件中读出银行账户信息
{
Node*pel,*tail;
if(head==NULL)//构建链表头结点
{
head=newNode();
if(!
t)//是否第一次使用系统
{
out_node(head,length);
length++;
}
else//不是第一次使用系统,从文件中读取信息
read_file(head,input);
head->next=NULL;
returntrue;
}
else
{
pel=head;
while(pel->next)//在链表的末端添加节点
{
pel=pel->next;
}
tail=newNode();
tail->next=NULL;
if(!
t)//是否第一次使用系统
{
out_node(tail,length);
length++;
}
else//不是第一次使用系统,从文件中读取信息
read_file(tail,input);
pel->next=tail;
pel=tail;
returntrue;
}
}
4.1.3运行结果:
4.2销户模块:
4.2.1模块功能分析
模块功能分析:
销户函数模块,面像用户来说需要实现以下功能:
用户通过输入一个银行账户号码,查找相对应的银行账户,如果银行账户不存在,返回给用户银行账户不存在的信息,如果存在,提示用户是否删除,用户确认删除,将对应的银行账户信息删除,反馈给用户删
除成功的信息。
面对系统内部来说,应该实现以下功能:
通过所输入的string类型变量查找
符合要求的节点,用户确认删除,用delete函数释放节点内存,重新接好链表。
此外应该防
止用户随意输入的无效和错误信息。
最后返回操作结果,执行成功返回true,失败返回false。
4.2.2代码的设计及分析:
booldelect(stringnum)
{
Node*pel,*q;
intc,i;
if(head->num==num)//如果删除的是头结点
{
cout<<"请问您确定要销户吗?
1.yes2.no"< while(true) { cin>>c; if(c==1) { for(i=0;i<=50;i++)//回收删除的银行账号到一个数组里,并 记录数组中,值得个数 { if(lack[i]! =NULL) { lack[i]=((int)head->num[0]-'0'); number++; break; } } pel=head; head=head->next; length--; delete(pel); returntrue; } elseif(c==2) returnfalse; elsecout<<"输入有误! 请重新输入! "< } } pel=head; while(pel->next! =NULL) { if(num==pel->next->num)//查找要删除的节点 { cout<<"请问您确定要销户吗? 1.yes2.no"< while(true) { cin>>c; if(c==1) { for(i=0;i<=50;i++)//回收删除的银行账号到一个 数组里,并记录数组中,值得个数 { if(lack[i] 收的账号 { lack[i]=((int)head->num[0]-'0'); number++; break; } } q=pel->next; pel->next=q->next; delete(q); length--; returntrue; } elseif(c==2) //如果要销户 returnfalse; elsecout<<"输入有误! 重新输入! "< } } pel=pel->next; } if(pel->next==NULL) { cout<<"没有找到所查找的账户"< returnfalse; } } 4.2.3运行结果: 5.系统使用说明 系统开始运行,屏幕上回打印出功能菜单,根据功能菜单提示的来选择功能操作,在退 出系统时,一定要通过系统提供正确的结束进程方式,才能自动的保存所有的操作。 银行账户的所有信息会在下次系统启动时自动加载到系统中。 6.附录 6.1设计体会: 通过此次C++程序设计,我切身的体会到了面向对象程序和面向过程程序语言的区别,区别不仅仅存在于两种程序语言中,也存在与编程思想中。 面向对象的程序编程思想主要是把需 求模块化,根据每个模块特定的属性,需要实现的功能来编写模块,创建对象。 纸上得来终 觉浅,细节方便我也学习到了很, 例如析构函数的调用实在对象的生存周期结束时, 而对象 的生存周期也有很明确的规定, 比如说一次循环中创建的对象, 在这次循环结束时, 这个对 象的生存周期就已经结束了;早期的 C++编译器不支持string类型的数组,因为数组的长 度应该是一定不便的,而string类型的数组违反了早期 C++开发环境这一规定;对文件对象 iftream作为参数传给函数时,形参的形式只能为引用,因为其对象的拷贝构造函数默认为 私有变量。 等等很多细节问题使我学到了很多, 又熟练运用了 C++程序设计的技巧。 本次设 计我将银行账户几乎所有成员都封装到了私有变量中, 增强了程序的密封性。 将保存于读取 数据悄无声息的在构造函数和析构函数中完成了,降低了用户的操作次数是本程序的亮点。 但本系统代码还不够精简,有待改进。 6.2源程序: //银行账户.cpp: Definestheentrypointfortheconsoleapplication. // #include"stdafx.h" #include #include #include #include #include #include usingnamespacestd; structNode //定义一个结构体变量 包含所有银行账户信息。 { doublemoney; stringnum; stringname,name1;//字符串数组为联名账户做准备 stringIDnum,IDnum1; stringcompany; stringphonenum; stringaddress; Node*next; }; classLink { //链表类 private: Node*head;//封装头指针和链表长度 intlength; intlack[50],number;//用于记录回收的账号,和回收的账号数目 /**********节点信息输入函数**************/ voidout_node(Node*dot,inti) { stringnum1;//用于生成账号 charnum2[10];//用于生成账号 intj=0;//循环变量j cout<<"请输入相关数据: "< cout<<"请输入公司"< while(true)//电话号码长度判断 { cout<<"请输入电话号码"< if(dot->phonenum.length()==11)break; elsecout<<"输入有误! 请重新输入! "< } cout<<"请输入地址"< dot->money=0;//用户的初始余额为零 cout<<"请输入姓名1"< while(true)//身份号长度判断 { cout<<"请输入身份证号1"< if(dot->IDnum.length()==18)break; elsecout<<"身份证号码长度有误,请重新输入"< } num1=dot->IDnum.substr(6,12);//用于生成账号 if(number==0)//如果有回收的账号,先用被回收的账号itoa(i,num2,10); else { while(true) { if(lack[j]>=0) { i=lack[j]; lack[j]=-1; number--; itoa(i,num2,10); break; } j++; } } if(! question())//是否设置为联名账户 { cout<<"请输入姓名2"< while(true)//身份号长度判断 { cout<<"请输入身份证号2"< break; elsecout<<"身份证号码长度有误,请重新输入"< } dot->num=num2+dot->IDnum1.substr(6,12)+num1;// 名账户由两个身份证号,后12为组成 生成账户号 联 } else { dot->num= num2+num1;// 生成账户号,一般账户由身份证号后 12位 加总账户数组成 } cout<<"您的银行账户卡号为"< } /***************************节点信息写入文件函数******************************/ voidwrite_file()//程序结束时统一将所有信息写入文件 { ofstreamoutput("bank.txt"); Node*pel; for(pel=head;pel! =NULL;pel=pel->next) { output< output< output< if(pel->IDnum1! =""||pel->name1! ="")//如果是联名账户 { output< output< } output< output< output< output< } } /**********************节点信息读出文件函数***********************************/ voidread_file(Node*dot,ifstream&input)//程序开始时将所有信息读入 到文件中 { input>>dot->num; input>>dot->IDnum; input>>dot->name; if(dot->num.length()>20) //如果是联名账户 联名账户的账号长度应为 24 { input>>dot->IDnum1; input>>dot->name1; } input>>dot->address; input>>dot->company; input>>dot->money; input>>dot->phonenum; } /******************************节点查询函数**********************************/ Node*iterates(stringnum)//根据传入的账号查找账户 { Node*pel; pel=head; do { if(num==pel->num) { returnpel; } pel=pel->next; }while(pel! =NULL); returnNULL; } /****************************************************************/ /**************三大功能(开户,销户,金额操作)****************/ /****************************************************************/ /************************添加节点函数(开户)******************************/ booladd(boolt,ifstream&input)//是否是从文件中读出银行账户信息 { Node*pel,*tail; if(head==NULL)//构建链表头结点 { head=newNode(); if(! t)//是否第一次使用系统 { out_node(head,length); length++; } else//不是第一次使用系统,从文件中读取信息 read_file(head,input); head->next=NULL; returntrue;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 银行 账户 管理 系统