银行储蓄管理系统实验报告.doc
目 录一、课设目的.3二、需求分析3三、程序的主要功能3四、系统总体框架3五、模块设计与分析4六、类的设计与分析5七、存在的不足与解决方法.7八、功能测试.7九、源代码13十、课设总结23一、课设目的课程设计的目的是总结及运用一学期来所学的知识,训练我们灵活应用所学C+知识,独立完成问题分析、总结设计、详细设计和编程实现等软件开发全过程的综合实践能力。巩固、深化理论知识,提高编程水平,并在此过程中培养我们严谨的科学态度和良好的工作作风。二、需求分析:随着社会经济的发展,信息化程度的不断深入,银行的传统业务已不能满足客户的需求。现今,人们的科技意识已经有了很大的提高,在紧忙碌的生活中已越来不习惯每天奔波于银行营业柜台去办理各种业务,利用电子化的手段构建一个高效统一的、通用灵活的系统来管理各种各样的业务,是当前每个商业银行都要研究的课题。因此如何应用计算机技术加强银行账户管理是当前迫切需要解决的一个问题。所以本次课程设计是模拟银行账户的管理,开发一个银行个人账户管理系统。设计思想是一切为使用者着想,操作尽量简单明了,努力做到每一个用户都可以使用这个系统来办理自己的业务。并且通过该银行账户管理系统地运行,可以使办公人员轻松快捷的完成对账户管理的任务,提高招募管理效率,是银行的账目管理工作系统化、规化、自动化。三、程序的主要功能:主要用于银行的储蓄卡管理系统,它可以帮组我们有效、准确、并且高效实现的完成存取事件。系统操作方便效率、安全性高、只要开户并设定好密码就可以轻松的实现存取款。系统实现的主要有储蓄卡开户管理、存取款管理、用户查询历史数据显示、注销等功能。储蓄卡开户管理模块:卡号、开户金额、号、地址、密码、确认密码和保存组成。开户金额必须是数字,密码和确认密码必须一样是六位数字 银行管理系统存钱页面取款页面余额页面修改密码注销页面登录界面注册开户主界页面注销退出注销模块:一旦注销卡号就不存在且余额提醒你取出。四、 系统总体框架:五、模块设计与分析:储蓄卡开户管理模块登录页面:输入卡号和密码,根据用户输入的卡号和密码,到后台文件查询,若正确则登录成功,并保存卡好信息已备后用。若卡号存在和密码不匹配或无该卡号已经注销,提示该卡号已存在或已注销,保持界面三次不变等待用户的重新输入。主界面页面:主要导航栏有欢迎使用储蓄卡管理存款、取款、修改密码、转账功能、注销退出储蓄卡开户页面:提供开户界面,由用户输入新储蓄卡的所有信息,将该信息保存到文件中,并将开户金额作为该卡的第一次存款记录存人文件。存钱页面:从登录界面得到卡号,并提供数据输入界面,等待用户的输入存款金额。从后台数据库中找到该用户余额记录,修改余额,并将该存款事件的相应信息写人数据库,同时将存钱的金额显示在页面上。取款页面:从登录界面得到卡号,并提供数据输入界面,等待用户输入取款金额,如果取款金额大于该用户卡上的余额则不能取款,或者将新的余额写人文件,并将本次取款事件写入文件同时将取钱的金额显示在页面上,。注销页面:从关闭文件,状态为注销,最后关闭整个系统。列举取款模块进行分析:void consumer:fetchmoney<>float m;char ch;docout<<endl<<"输入取款金额:"<<"¥>"<<endl ; cin>>m; while<m<=0> cout<<"请输入正确的数字!"<<endl;cout<<""cin>>m; if<money<m>cout<<"对不起,你的余额不足!"<<endl; else money=money-m; cout<<endl<<"操作成功,请收好钱!"<<endl; cout<<"是否要继续该项操作:<Y/N> "<<endl;cout<<""cin>>ch;while<ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y'>/选择错误时判定cout<<""cin>>ch;while<ch='y'|ch='Y'>在取款页面中,输入取款金额并对取款金额与存款余额进行比较,如果取款金额小于零,请输入正确的数字;如果取款金额大于存款金额,对不起,您的余额不足;如果取款金额小于存款余额的话就执行,并保存记录。六、 类的设计与分析1comsumer 类class comsumer 主要制定用户的成员数据,并进行登录与保存功能:相关代码: class consumer:public YH/用户类,继承银行类的属性public: friend class YH; consumer<int id,string Name,int Number,double IN,string Company,string Address,string PassWord,float m> ID=id;name=Name;number=Number;in=IN;company=Company;address=Address;money=m;passwd=PassWord; consumer<>ID=0;name='0'number=0;in=0;company='0'address='0'money=0;passwd='0' int get_id<>return ID; void savemoney<>/ 取钱 string get_passwd<>return passwd;/ 取得密码 void display<> void fetchmoney<> /取钱 void change_passwd<> void add_money<float>/计算余额 void dec_money<float>/计算余额 float get_money<>/卡卡转帐private: int ID; /开户 string passwd; / 用户密码 string name; / 用户 float money; /开户金额int number;string company;string address;double in;名称属性说明ID数据成员用户账户数据name数据成员用户money数据成员用户首次金额in数据成员用户号address数据成员用户地址number数据成员用户Passwd数据成员用户密码savemoney<>成员方法存钱fetchmoney <>成员方法取钱change_passwd<>成员方法修改密码get_money<>成员方法卡卡转账comsumer 类说明表2YH 类YH类 主要实现用户的各种功能:class YH /银行类public:void set_account<>/银行开户功能void del_account<> /注销账户功能void transfer<int> /转账功能void enter_account<> /进入用户个人信息功能void addmoney<int,float>/存款功能void exitYH<>/ 退出系统void functionshow<>void save<>void load<>/ 功能界面protected: consumer *account20; static int acnum;/账户数;名称属性说明acnum数据成员账户数set_account <>成员方法开户功能del_account <>成员方法注销账户功能transfer <>成员方法转账功能functionshow<>成员方法主界面显示功能addmoney<>成员方法存钱功能exitYH<>成员方法退出系统功能YH 类说明表七、 存在的不足与解决方法在这设计的过程里,我们遇到了大大小小各个问题,例如:1问题:规划设计做的不够好,没有把类和类的数据成员、成员函数给搞清楚,就急着下手编程,结果把程序搞的乱七八糟的。解决:重新认真细心规划设计好所需要的类,弄清楚各个类的作用,在进行编程。2问题:由于不够细心,程序总是出些较低级的错误,例如漏写分号,忘括号等。解决:做任何事,都需认真细心,注意好每一步骤3问题:当我们的程序的框架基本搭好,准备填写容时,却迟迟未能下手,不知道从何写起。解决:重温课本,请教同学和老师。这才知道自己的不足之处,以后定要好好学习,要有坚持不懈和锲而不舍的精神。八、 功能测试1首页:2储蓄卡开户页面3主界面页面主要导航栏有:欢迎使用储蓄卡管理查看信息、存款、取款、修改密码、转账、返回上一菜单4存钱页面5取款页面从登录界面得到卡号,并提供数据输入界面,等待用户输入取款金额,如果取款金额大于该用户卡上的余额则不能取款,或者将新的余额写人文件,并将本次取款事件写入文件同时将取钱的金额显示在页面上。当输入取款金额大于现有金额当输入取款金额小于或等于现有金额:6修改密码页面当两次输入密码相同时:当两次输入密码不同时:7销户页面(8) 退出系统页面九、 源代码:#include<iostream>#include <string>#include<fstream>using namespace std;class consumer;class YH /银行类public:void set_account<>/银行开户功能void del_account<> /注销账户功能void transfer<int> /转账功能void enter_account<> /进入用户个人信息功能void addmoney<int,float>/存款功能void exitYH<>/ 退出系统void functionshow<>void save<>void load<>/ 功能界面protected: consumer *account20; static int acnum;/账户数;class consumer:public YH/用户类,继承银行类的属性public: friend class YH; consumer<int id,string Name,int Number,double IN,string Company,string Address,string PassWord,float m> ID=id;name=Name;number=Number;in=IN;company=Company;address=Address;money=m;passwd=PassWord; consumer<>ID=0;name='0'number=0;in=0;company='0'address='0'money=0;passwd='0' int get_id<>return ID; void savemoney<>/ 取钱 string get_passwd<>return passwd;/ 取得密码 void display<> void fetchmoney<> /取钱 void change_passwd<> void add_money<float>/计算余额 void dec_money<float>/计算余额 float get_money<>/卡卡转帐private: int ID; /开户 string passwd; / 用户密码 string name; / 用户 float money; /开户金额int number;string company;string address;double in;void YH:save<>ofstream ofile<"bankdat.dat",ios:out>/以输出方式打开文件 ofstream outfile<"bankdat.dat",ios:out>/以输出方式打开文件 bankdat.dat接收从存输出的数据int n=0;outfile<<acnum<<" "for<n=0;n<acnum;n+>outfile<<accountn->ID<<" "/把信息写入磁盘文件bankdat.datoutfile<<accountn->money<<" "outfile<<accountn->name<<" "outfile<<accountn->passwd<<" "outfile<<accountn->number<<" "outfile<<accountn->company<<" "outfile<<accountn->address<<" "outfile<<accountn->in<<" "outfile.close<> /*读入用户信息功能实现*/void YH:load<>ifstream infile<"bankdat.dat",ios:in>/以输入方式打开文件if<!infile>cerr<<"读取错误,无资料中!"<<endl;return;int n=0;int id,m;string nam,passw;int number;string company;string address;double in;infile>>acnum;for<n=0;n<acnum;n+>/全部读入infile>>id;/从磁盘文件bankdat.dat读入信息infile>>m;infile>>nam;infile>>passw;infile>>company;infile>>number;infile>>address;infile>>in;accountn->passwd;consumer * acc = new consumer<id,nam,number,in,company,address,passw,m> /每读入一个n开辟一段存accountn = acc; /赋值首地址infile.close<>cout<<"读取资料正常!"<<endl;/*转账功能实现*/void YH:transfer<int x>int id; cout<<"请输入:" cin>>id; int flag = 1; int i = 0; while<<i<acnum>&&<flag>> /查找要转入的账号 if<id=accounti->get_id<>> flag = 0; else i+; if<flag> cout<<"不存在!"<<endl<<endl; return ; float b; cout<<endl<<"请输入你要转帐的金额:" cin>>b; while<b<=0> cout<<"请输入正确的数字!"<<endl;cout<<""cin>>b; if<accountx->get_money<><b> /调用友元类consumer的公有成员函数cout<<"对不起,金额不够!"<<endl; else accountx->dec_money<b>accounti->add_money<b>cout<<"转账成功!"<<endl;return;/*账户金额计算*/void consumer:add_money<float x>money=x+money;void consumer:dec_money<float x>money=money-x;void YH:addmoney<int x,float y>accountx->money=accountx->money-y;float consumer:get_money<>return money;void main<>YH yh;yh.functionshow<>/*主界面显示*/void YH:functionshow<> int n;dosystem<"cls"> load<>cout<<endl<<"请输入相应的操作序号进行操作:"<<endl;cout<<""<<endl;cout<<" "<<endl;cout<<" 1. 开户 "<<endl;cout<<" "<<endl;cout<<" 2.账户登录 "<<endl;cout<<" "<<endl;cout<<" 3.账户注销 "<<endl;cout<<" "<<endl;cout<<" 4.退出系统 "<<endl;cout<<" "<<endl;cout<<""<<endl;cout<<""cin>>n; while<n<1|n>4> cout<<"操作错误,请输入正确的操作序号!"<<endl; cout<<"" cin>>n; switch<n> case 1: set_account<>/开户 break; case 2:enter_account<>/登录break; case 3: del_account<>/注销 break; case 4: exitYH<>/退出 break; cin.get<>/输入流类istream的成员函数while<true>void YH:enter_account<>int id; cout<<"请输入:" cin>>id; int flag = 1; int i = 0; /_page_break_while<<i<acnum>&&<flag>> /循环查找 if<id=accounti->get_id<>> flag = 0; else i+; if<flag> cout<<"不存在!"<<endl; return; cout<<"请输入密码:"string passw;cin>>passw;if<passw!=accounti->get_passwd<>> return;/返回到登录界面accounti->display<>cin.get<>cin.get<>int n;dosystem<"cls"> cout<<"请选择下列操作:"<<endl;cout<<""<<endl;cout<<""<<endl;cout<<" 1.查看账户信息 "<<endl;cout<<""<<endl;cout<<" 2.取款 "<<endl;cout<<""<<endl;cout<<" 3.存款 "<<endl;cout<<""<<endl;cout<<" 4.修改密码 "<<endl;cout<<""<<endl;cout<<" 5.转账 "<<endl;cout<<""<<endl;cout<<" 6.返回上一菜单 "<<endl;cout<<""<<endl;cout<<""<<endl;cout<<""cin>>n;switch<n>case 1: accounti->display<>break;case 2: accounti->fetchmoney<>save<>break;/从2-5功能,每执行一次调用一次save函数,重新写入数据case 3:accounti->savemoney<>save<>break;case 4:accounti->change_passwd<>save<>break;case 5:transfer<i>save<>break;case 6:return;cin.get<>cin.get<>while<1>void YH:set_account<> int id; string nam; string passw; float m;string company;string address;int number;double in; cout<<"请输入开户号:"<<endl; cin>>id; cout<<"请输入开户人:"<<endl; cin>>nam; cout<<"请输入开户密码:"<<endl; cin>>passw; cout<<"请输入存入金额:"<<endl; cin>>m;cout<<"请输入开户人:"<<endl;cin>>number;cout<<"请输入开户人公司:"<<endl;cin>>company;cout<<"请输入开户人地址:"<<endl;cin>>address;cout<<"请输入开户人:"<<endl;cin>>in; while<m<=0> cout<<"请输入正确的数字!"<<endl;cin>>m; consumer * acc = new consumer<id,nam,number,in,company,address,passw,m> accountacnum = acc; cout<<"开户成功!"<<endl<<endl; acnum+;save<>cin.get<>return;void YH:del_account<> int id; cout<<endl<<"请输入你要注销的号:" cin>>id;int flag = 1; int i = 0; while<<i<acnum>&&<flag>> /循环查找 if<id = accounti->get_id<>> flag = 0; else i+; if<flag> cout<<"该不存在,请重新输入!"<<endl; return; /返回到登陆界面 for<int j=i;j<acnum;j+> /所有被删号后的数据重新存储 accountj = accountj+1; accountacnum-1=NULL; acnum-; /账号总数自减一次cout<<"你的账号已注销!"<<endl<<endl; save<>cin.get<>return; void consumer:change_passwd<>string pwd,repwd;cout<<"请输入新密码:"cin>>pwd;cout<<"请再输入一次新密码:"cin>>repwd;if<pwd!=repwd>cout<<"你输入的两次密码不一样,按输入键返回上一层菜单!"<<endl;elsecout<<"密码修改成功,请牢记!"<<endl;cin.get<> void consumer:fetchmoney<>float m;char ch;docout<<endl<<"输入取款金额:"<<"¥>"<<endl ; cin>>m; while<m<=0> cout<<"请输入正确的数字!"<<endl;cout<<""cin>>m; if<money<m>cout<<"对不起,你的余额不足!"<<endl; else money=money-m; cout<<endl<<"操作成功,请收好钱!"<<endl; cout<<"是否要继续该项操作:<Y/N> "<<endl;cout<<""cin>>ch;while<ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y'>/选择错误时判定cout<<""cin>>ch;while<ch='y'|ch='Y'>void consumer:savemoney<>/存钱函数功能实现 float c; char ch;docout<<endl<<"请输入要存入的金额:"<<"¥>"<<endl ; cin>>c; while<c<=0> cout<<"输入错误,请重新输入!"<<endl;cout<<""cin>>c; money=money+c; cout<<"操作已成功!"<<endl;cout<<"是否要继续该项操作:<Y/N> "<<endl;cout<<""cin>>ch;while<ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y'>cout<<""cin>>ch;while<ch='y'|ch='Y'>int YH:acnum=0;void consumer:display<>/用户信息界面system<"cls"> cout<<"#"<<endl;cout<<"#"<<endl;cout<<"# 用户:"<<name<<endl;cout<<"#"<<endl;cout<<"# :"<<ID<<endl;cout<<"#"<<endl;cout<<"# 余额: "<<money<<endl;cout<<"#"<<endl;cout<<"# 按输入键回到上一菜单"<<endl;cout<<"#"<<endl;cout<<"#"<<endl;cout<<""void YH:exitYH<>/退出系统cout<<endl<<"感您对本银行的支持,欢迎下次光临!"<<endl;exit<0>十、总结通过这次C+课程设计实训,让我们学到面向对象的程序设计思想用到具体的工作和学习中,加深对类与对象的理解。通过这次,能够提高自己的分析题与解决问题的能力,从而运用所学知识解决实际问题的能力,并培养基本的程序设计能力。这次的课程设计,让我们能够自己去练习我们的编程,特别是自己的动手能力。经过了这次的实训,让我们找到自己学习上的不足,以前在课上没有弄的知识,都在这次实训上有所提高,虽然还是不太懂。在这次设计中遇到了很多问题。例如,在定义类调用方面。在老师与同学的帮助下,我们一点一点的解决。总体上来说,这次实训将上学期所学的重要知识点进行了一次系统性的巩固和复习,获益匪浅!是我们懂得一切问题必须要靠自己一点一滴的解决,在解决的过程当中你会发现自己在飞速的提升。