




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上青岛理工大学C+面向对象课程设计报告院(系): 计算机工程学院 专业: 软件工程 学生姓名: 华逸帆 班级:软件121班学号: 题目: 银行账户管理系统 起迄日期: 2014.6.232013.7.5 设计地点: 计算机学院机房 指 导 教 师: 李兰 完成日期: 2014 年7月 5 日 目录1.概要设计.11.1设计思想.11.2设计方法.1 1.3系统中主要模块和其他模块间的关系描述.12.需求分析.23.总体设计.24.模块设计.34.1开户功能模块.34.1.1功能模块分析.34.1.2代码设计及分析.44.1.3运行结果.54.2销户功能模块.54.2.2
2、功能模块分析54.2.3代码设计及分析54.2.3运行结果.75.系统使用说明.76.附录.76.1设计体会.76.2源程序.81. 概要设计1.1设计思想 银行账户管理系统,通过设计一个控制台应用程序来实现工作人员遍历管理所有银行用户的银行账户功能。通过C+面向对象的程序设计语言,利用面向对象的设计思想,将程序运用面向对象的方法逐块划分,对每个对象的性质进行分析设计。1.2实现方法 总体设计方法,是构建一个链表,来存储用户的资料,数据存储方面,用存储文件技术代替存储数据库技术。构建一个银行账户类,封装链表的头结点,创建用户银行账户各个属性的函数及其变量。构建一个程序操作类,用于封装实现打印操
3、作菜单,实现主程序的操作选择等方法。1.3系统中主要模块及各模块间的关系的描述系统中的主要模块:结构体节点:用于存放用户所用的账户信息(姓名,单位,电话,账户号,余额,地址,是否为联名账户等)银行账户类:用于封装链表的头结点,记录删除所回收的账户号,和删除回收的账户数目;构造函数在创建对象时,完成从文件中读出用户账户所有信息的操作,析构函数在对象即将消亡时,完成将整个链表中的所有信息逐个节点的存入文件中的操作。程序操作类:用于实现程序中,菜单打印操作,菜单选择等操作。其他各个模块:节点构建函数构(开户函数):链表构建函数为银行账户类的私有函数成员,银行账户类的大三功能函数之一,即是链表构建的方
4、法,也是用户开户的方法,当构造函数运行时从文件中读入数据存入链表时调用,在用户选择开户操作时调用,实现添加一个节点的功能,进而实现链表一个节点逐个构造的功能。节点删除函数(销户函数):节点删除函数为银行账户类的私有成员,银行账户类的三大功能函数之一,即是链表删除的方法,也是用户销户的方法,当用户选择销户操作时,调用节点删除函数,删除并释放节点。资金操作函数(存款,取款,转账函数):资金操作函数为银行账户类的私有成员,银行账户的三大功能函数之一,是用户所有对资金操作的方法的集合。在用户选择任何一种资金操作时调用资金操作函数,完成对用户账户资金的操作,同时对节点中相对应的变量进行修改,并且返回操作
5、结果。操作选择函数:选择操作函数为银行类的公有成员,根据打印菜单函数,用户输入任意一个选项选择操作,相对应的银行账户的操作。并且判断用户是否按照规定输入,将用户输入的选择传入操作函数。操作函数:操作函数为银行操作类的私有成员,根据传来的参数选择是否调用,三大功能函数,并且返回操作结果。其他功能函数:基本均为银行账户类的私有成员函数,节点信息输入函数:实现节点信息逐个输入,和账号生成的功能,主要是在开户函数中调用。节点遍历函数:根据传入的字符串,遍历查链表,返回符合规定的节点指针。文件读写操作函数():实现节点信息文件中的读写功能,同时实现类中私有变量链表长度,回收账号,回收账号数目的读写操作,
6、主要实在对象的构造函数和析构函数中调用。2. 需求分析银行账户管理系统,是由银行工作人员对银行用户的账户进行操作管理的系统。是一款使用者为银行工作人员,但服务对象是银行用户的管理系统。不考虑银行工作人员账号注册用户名密码的情况下,只需要对银行用户账户的信息进行操作和管理就能完成要求。银行用户账户的属性中含有,用户的用户真实姓名,身份证号码,公司,地址,电话号码,账户号码,账户余额等属性。除账户余额外,其余变量类型均应该为string类型,账户余额的类型应该为,double类型。身份证号码,长度应为18位,电话号码的长度应为11位。账户余额不能超值,最小值为零。账户号码应由系统自动生成,一个用户
7、名额下可以有多个账户,每个账户由账户号来区别开来。另外应该设立一种联名账户,这种账户有两个人共同管理,及一个账户由两个用户名,有两个身份证号码。此外,系统中的每个变量的输入都应该有判断正误的判断,对错误无效的变量输入应该反馈结构不接受。系统中所有的用户信息应该在程序开始时从文件中读出,再程序结束时写入文件,这样实现用户信息的存储代替存入数据库的方法。3. 总体设计管理系统总体结构由构建的链表存储信息,程序结束后所有的用户信息都存入文件中,程序开始时再从文件中读取相关的信息。声明一个结构体变量Node,包含string类型的变量:用户名,身份证号码,电话号码,公司,地址,账户号,联名用户用户名,
8、联名用户身份证号码,double类型的变量余额,Node*类型的变量next。定义一个Link类,封装链表的头指针Node *head,链表的长度length,回收的账号lack【】,回收的账号数目number。构造函数,在建立对象时构建链表,通过存入链表的length值判断链表的长度及已存在的银行账户个数,从而调用构造链表的add()函数,在add()函数中调用file_read()函数读出存在文件中银行账户的信息。程序开始打印出菜单供用户选择。开户,对应add()函数,add函数调用out_node()函数,根据提示输入用户银行账户所有信息,并根据length长度和用户的身份证号码后12位
9、生成账户账号。销户操作,对应delcte()函数,根据传递的参数用户账号字符串,查找对应的银行账户,然后对节点进行删除释放。存款,取款,转账操作对应money()函数,根据传递的参数,用户的账户号码,及选择的选项,执行相对的操作,通过账户号码找到相对应的节点,在对节点的money变量进行简单的加减操作。析构函数,在对象消亡时进行调用,本程序也就是在程序即将结束时进行调用,将链表中的每个节点所有信息,按照一定的顺序存入指定的文件中,再将银行类中的链表的长度length,回收的账号数组lack【】,回收的账号数目按照一定的顺序存入文件中。4. 程序模块设计4.1开户功能模块:4.1.1模块功能分析
10、:开户功能膜块在面向用户方面应该实现应该具有如下功能,银行账户所有信息输入的功能,提示用户是否申请为联名账户,并且防止用户随意输入错误无效的信息。在面向系统结构方面,应该具有构建链表节点功能,创建链表节点,并且根据所处的位置加入链表,尾节点的next指针应该指向NULL。最后返回操作结果,执行成功返回true,失败返回false。4.1.2代码的设计及分析:bool add(bool t,ifstream &input)/是否是从文件中读出银行账户信息Node* pel,*tail;if(head=NULL)/构建链表头结点head=new Node();if(!t) /是否第一次使用
11、系统out_node(head,length);length+;else/不是第一次使用系统,从文件中读取信息read_file(head,input);head->next=NULL;return true;elsepel=head;while(pel->next)/在链表的末端添加节点pel=pel->next;tail=new Node();tail->next = NULL;if(!t) /是否第一次使用系统out_node(tail,length);length+;else/不是第一次使用系统,从文件中读取信息read_file(tail,input);pel
12、->next = tail;pel=tail;return true;4.1.3运行结果:4.2销户模块:4.2.1模块功能分析模块功能分析:销户函数模块,面像用户来说需要实现以下功能:用户通过输入一个银行账户号码,查找相对应的银行账户,如果银行账户不存在,返回给用户银行账户不存在的信息,如果存在,提示用户是否删除,用户确认删除,将对应的银行账户信息删除,反馈给用户删除成功的信息。面对系统内部来说,应该实现以下功能:通过所输入的string 类型变量查找符合要求的节点,用户确认删除,用delete函数释放节点内存,重新接好链表。此外应该防止用户随意输入的无效和错误信息。最后返回操作结果,
13、执行成功返回true,失败返回false。4.2.2代码的设计及分析:bool delect(string num)Node* pel,*q;int c,i;if(head->num=num)/如果删除的是头结点cout<<"请问您确定要销户吗? 1.yes 2.no"<<endl;while(true)cin>>c;if(c=1)for(i=0;i<=50;i+)/回收删除的银行账号到一个数组里,并记录数组中,值得个数if(lacki!=NULL)lacki=(int)head->num0-'0');n
14、umber+;break;pel=head;head=head->next;length-;delete(pel);return true;else if(c=2)return false;else cout<<"输入有误!请重新输入!"<<endl;pel = head; while(pel->next!=NULL)if(num=pel->next->num)/查找要删除的节点cout<<"请问您确定要销户吗? 1.yes 2.no"<<endl;while(true)cin>
15、;>c;if(c=1)for(i=0;i<=50;i+)/回收删除的银行账号到一个数组里,并记录数组中,值得个数if(lacki<NULL)/找到数组中空的位置,存放回收的账号lacki=(int)head->num0-'0');number+;break;q = pel->next;pel->next = q->next;delete(q);length-;return true;else if(c=2)/如果要销户return false;elsecout<<"输入有误!重新输入!"<<e
16、ndl;pel=pel->next;if(pel->next=NULL)cout<<"没有找到所查找的账户"<<endl;return false;4.2.3运行结果:5. 系统使用说明系统开始运行,屏幕上回打印出功能菜单,根据功能菜单提示的来选择功能操作,在退出系统时,一定要通过系统提供正确的结束进程方式,才能自动的保存所有的操作。银行账户的所有信息会在下次系统启动时自动加载到系统中。6.附录6.1设计体会:通过此次C+程序设计,我切身的体会到了面向对象程序和面向过程程序语言的区别,区别不仅仅存在于两种程序语言中,也存在与编程思想中。面
17、向对象的程序编程思想主要是把需求模块化,根据每个模块特定的属性,需要实现的功能来编写模块,创建对象。纸上得来终觉浅,细节方便我也学习到了很,例如析构函数的调用实在对象的生存周期结束时,而对象的生存周期也有很明确的规定,比如说一次循环中创建的对象,在这次循环结束时,这个对象的生存周期就已经结束了;早期的C+ 编译器不支持string类型的数组,因为数组的长度应该是一定不便的,而string类型的数组违反了早期C+开发环境这一规定;对文件对象iftream作为参数传给函数时,形参的形式只能为引用,因为其对象的拷贝构造函数默认为私有变量。等等很多细节问题使我学到了很多,又熟练运用了C+程序设计的技巧
18、。本次设计我将银行账户几乎所有成员都封装到了私有变量中,增强了程序的密封性。将保存于读取数据悄无声息的在构造函数和析构函数中完成了,降低了用户的操作次数是本程序的亮点。但本系统代码还不够精简,有待改进。6.2源程序:/ 银行账户.cpp : Defines the entry point for the console application./#include "stdafx.h"#include <iostream>#include <string>#include <stdlib.h>#include <time.h>#
19、include <fstream>#include <windows.h>using namespace std;struct Node/定义一个结构体变量,包含所有银行账户信息。double money;string num;string name,name1;/字符串数组为联名账户做准备string IDnum,IDnum1;string company;string phonenum;string address;Node *next;class Link/链表类private:Node *head;/封装头指针和链表长度int length;int lack50
20、,number;/用于记录回收的账号,和回收的账号数目/*节点信息输入函数*/void out_node(Node *dot,int i)string num1;/用于生成账号char num210;/用于生成账号int j=0;/循环变量jcout<<"请输入相关数据:"<<endl;cout<<"请输入公司"<<endl; cin>>dot->company;while(true) /电话号码长度判断cout<<"请输入电话号码"<<endl
21、; cin>>dot->phonenum;if(dot->phonenum.length()=11) break;else cout<<"输入有误!请重新输入!"<<endl;cout<<"请输入地址"<<endl; cin>>dot->address;dot->money = 0;/用户的初始余额为零cout<<"请输入姓名1"<<endl; cin>>dot->name;while(true)/
22、身份号长度判断cout<<"请输入身份证号1"<<endl; cin>>dot->IDnum;if(dot->IDnum.length()=18) break;else cout<<"身份证号码长度有误,请重新输入"<<endl;num1 = dot->IDnum.substr(6,12); /用于生成账号if(number=0)/如果有回收的账号,先用被回收的账号itoa(i,num2,10);elsewhile(true)if(lackj>=0)i=lackj;lac
23、kj=-1;number-;itoa(i,num2,10);break;j+;if(!question() /是否设置为联名账户cout<<"请输入姓名2"<<endl; cin>>dot->name1;while(true)/身份号长度判断cout<<"请输入身份证号2"<<endl;cin>>dot->IDnum1;if(dot->IDnum.length()=18)break;else cout<<"身份证号码长度有误,请重新输入&quo
24、t;<<endl;dot->num = num2+ dot->IDnum1.substr(6,12) + num1; /生成账户号,联名账户由两个身份证号,后12为组成elsedot->num = num2 + num1 ;/生成账户号,一般账户由身份证号后12位加总账户数组成cout<<"您的银行账户卡号为"<<dot->num<<endl;/*节点信息写入文件函数*/void write_file() / 程序结束时 统一将所有信息写入文件ofstream output("bank.txt
25、");Node *pel;for(pel=head;pel!=NULL;pel=pel->next)output<<pel->num<<" "output<<pel->IDnum<<" "output<<pel->name<<" "if(pel->IDnum1!=""|pel->name1!="")/如果是联名账户output<<pel->IDnum1<&
26、lt;" "output<<pel->name1<<" "output<<pel->address<<" "output<<pel->company<<" "output<<pel->money<<" "output<<pel->phonenum<<endl;/*节点信息读出文件函数*/void read_file(Node *dot,ifstre
27、am &input)/程序开始时将所有信息读入到文件中input>>dot->num;input>>dot->IDnum;input>>dot->name;if(dot->num.length()>20)/如果是联名账户,联名账户的账号长度应为24input>>dot->IDnum1;input>>dot->name1;input>>dot->address;input>>dot->company;input>>dot->money
28、;input>>dot->phonenum;/*节点查询函数*/Node* iterates(string num)/根据传入的账号查找账户Node* pel;pel=head;doif(num=pel->num)return pel;pel=pel->next;while(pel!=NULL);return NULL;/*/* 三大功能(开户,销户,金额操作) */*/*添加节点函数(开户)*/bool add(bool t,ifstream &input)/是否是从文件中读出银行账户信息Node* pel,*tail;if(head=NULL)/构建链
29、表头结点head=new Node();if(!t) /是否第一次使用系统out_node(head,length);length+;else/不是第一次使用系统,从文件中读取信息read_file(head,input);head->next=NULL;return true;elsepel=head;while(pel->next)/在链表的末端添加节点pel=pel->next;tail=new Node();tail->next = NULL;if(!t) /是否第一次使用系统out_node(tail,length);length+;else/不是第一次使用系
30、统,从文件中读取信息read_file(tail,input);pel->next = tail;pel=tail;return true;/*节点删除操作(销户)*/bool delect(string num)Node* pel,*q;int c,i;if(head->num=num)/如果删除的是头结点cout<<"请问您确定要销户吗? 1.yes 2.no"<<endl;while(true)cin>>c;if(c=1)for(i=0;i<=50;i+)/回收删除的银行账号到一个数组里,并记录数组中,值得个数if
31、(lacki!=NULL)lacki=(int)head->num0-'0');number+;break;pel=head;head=head->next;length-;delete(pel);return true;else if(c=2)return false;else cout<<"输入有误!请重新输入!"<<endl;pel = head; while(pel->next!=NULL)if(num=pel->next->num)/查找要删除的节点cout<<"请问您确定
32、要销户吗? 1.yes 2.no"<<endl;while(true)cin>>c;if(c=1)for(i=0;i<=50;i+)/回收删除的银行账号到一个数组里,并记录数组中,值得个数if(lacki<NULL)/找到数组中空的位置,存放回收的账号lacki=(int)head->num0-'0');number+;break;q = pel->next;pel->next = q->next;delete(q);length-;return true;else if(c=2)/如果要销户return f
33、alse;elsecout<<"输入有误!重新输入!"<<endl;pel=pel->next;if(pel->next=NULL)cout<<"没有找到所查找的账户"<<endl;return false;/*存,取,转账函数*/bool money(string num,int choice,double optmoney=0)/要操作的账户,要选择的操作变编号,操作的资金数目Node* pel;string num2;double money1;pel = iterates(num);/查
34、找节点if(choice=5)/如果选择转账cout<<"请输入转账金额"<<endl;while(true)cin>>money1;if(money1>pel->money|money1<=0)cout<<"输入有误(超支,或无效)!请重新输入!"<<endl;elsebreak;pel->money-=money1;/转出金额cout<<"请输入对方账户号码"<<endl;cin>>num2;money(num2
35、,1,money1);return true;elseswitch(choice)case 1:pel->money+=optmoney;return true;case 3:cout<<"请输入存款金额"<<endl;while(true)/输入存款金额cin>>money1;if(money1<=0)cout<<"输入无效!请重新输入!"<<endl;elsebreak;pel->money+=money1;return true;case 4:while(true)/输入
36、取款金额并操作cout<<"请输入取款金额"<<endl;while(true)cin>>money1;if(money1>pel->money|money1<=0)cout<<"输入有误(超支,或无效)!请重新输入!"<<endl;elsebreak;pel->money-=money1;return true;/*账户操作函数*/bool operation(int choice)Node* pel;ifstream input("bank.txt"
37、;);string num;switch(choice)case 1:if(add(false,input)cout<<"开户成功!"<<endl;return false;case 2:cout<<"请输入账户号码"<<endl;cin>>num;if(delect(num)cout<<"销户成功!"<<endl;else cout<<"销户失败!"<<endl;return false;case 3:co
38、ut<<"请输入账户号码"<<endl;cin>>num;if(money(num,3)cout<<"存款成功"<<endl;return false;case 4:cout<<"请输入账户号码"<<endl;cin>>num;if(money(num,4)cout<<"取款成功"<<endl;return false;case 5:cout<<"请输入账户号码"&
39、lt;<endl;cin>>num;if(money(num,5)cout<<"转账成功"<<endl;return false;case 6:cout<<"请输入账户号码"<<endl;cin>>num;pel=iterates(num);if(!pel)cout<<"您所查找的账户不存在"<<endl;elsecout<<"您所查找的账户余额为"<<pel->money<&l
40、t;endl;return false;case 7:return true;case 8:system("cls");return false;/*写入链表长度函数*/void write_num()/从文件中写入账户的数目ofstream output;int i=0;output.open("length.txt");output<<length<<" "if(number>=0)output<<number<<" "while(number!=0)if(lacki>=0)output<<lacki<<" "number-;i+;output.close();/*读出链表长度函数*/void read_l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025上海二手车买卖合同样本
- 套细胞淋巴瘤的临床护理
- 2025年企业设备借款抵押合同专业版范本
- 2025年人教版小学数学一年级下册期末考试卷(带答案)
- 白头粉刺的临床护理
- 缩鼻翼的临床护理
- 新质生产力绿色转型
- 浙江国企招聘2025浙江省安全生产科学研究有限公司招聘19人笔试参考题库附带答案详解
- 2025【合同范本】简易劳务合作协议模板
- 《2025项目工程物资采购合同》
- 国家卫生部《综合医院分级管理标准》
- DB64++1996-2024+燃煤电厂大气污染物排放标准
- 初中八年级数学课件-最短路径-将军饮马问题
- 信息论与编码期末考试题(全套)
- 医院医学伦理审查委员会章程
- 废弃物管理制度范本
- 房地产销售价格优惠申请表-
- 绿化自动滴灌系统施工方案
- 处理突发事件流程图
- 2023年梅毒诊疗指南
- 医疗卫生系统招聘《医学基础知识》备考题库资料宝典(核心题版)
评论
0/150
提交评论