c++银行账户管理课程设计.docx
JINGCHU UNIVERSITY OF TECHNOLOGYC+银行账户管理课程设计报告 学 院:计算机工程学院 班 级:09级计算机科学与技术1班学生姓名: 学 号: 2009404010125 设计地点(单位): A5-101 设 计 题 目: 银行账户管理程序 完成日期:2011年 12月 25日 指导教师评语: _ _ _ 成绩(五级记分制):_ _ _ 教 师 签 名:_ _目 录一、设计思想03二、模块设计与分析03 三、程序设计介绍04四、框架结构图04五、程序代码05六、测试数据14七、数据调试14八、课程设计总结16九、课程设计教材及主要参考资料16一、设计思想定义一个用户类customer和一个银行类YH,程序运行时,可以由用户选择进行开户、登录、取款、存款、修改密码、转账、销户操作,用户销户后账号被回收,并且该账号可以继续分配给其它账户,不允许用户透支,根据姓名或账号可以进行用户的信息查询,所有的账户信息应存放到一个文件中,可以随时的访问和更新。二、模块设计与分析1 登录页面:输入帐号和密码,根据用户输入的帐号和密码,到后台文件查询,若正确则登录成功,并保存卡好信息已备后用。若帐号存在和密码不匹配或无该帐号已经注销,提示该帐号已存在或已注销。2 主界面页面:主要导航栏有存款、取款、账户信息、注销、注销、返回上一步。3. 开户页面:提供开户界面,由用户输入新账户的信息,将该信息保存到文件中,并将开户金额作为该卡的第一次存款记录存人文件。4 存钱页面:从登录界面得到帐号,并提供数据输入界面,等待用户的输入存款金额,同时将存钱的金额显示在页面上。5 取款页面:从登录界面得到帐号,并提供数据输入界面,等待用户输入取款金额,如果取款金额大于该用户卡上的余额则不能取款,或者将新的余额写人文件,并将本次取款事件写入文件同时将取钱的金额显示在页面上。6 账户信息页面:从登录界面得到帐号,把本人显示到界面中。7 转账页面:从登录界面得到帐号,输入要转入的帐号,在输入金额,显示在页面上,如果金额超过余额将操作失败。8 注销页面:从关闭文件,状态为注销,最后关闭整个系统。三、程序设计介绍系统由2个类构成,YH(银行类)和Consumer(客户类),Consumer(客户类)是YH(银行类)的公有继承类。YH(银行类)中有实现登陆系统,开户,销户,转账,退出系统等功能函数,Consumer(客户类)中有实现存钱,取钱,修改个人账号密码,显示个人账号信息等功能函数。因为Consumer(客户类)是YH(银行类)的公有继承类,所以,一个用户只需创建一个Consumer(客户类)对象,当用户进行开户,销户等操作时,可以直接调用YH(银行类)的成员函数。银行类中的函数:void set_account(); /银行开户功能void del_account(); /注销账户功能void transfer(int); /转账功能void enter_account(); /进入用户个人信息功能void addmoney(int,float);/存款功能void exitYH();/ 退出系统银行管理系统存钱页面取款页面转账页面页面修改密码查看信息登录界面注册开户主界页面注销退出四、框架结构图五、程序代码#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,string PassWord,float m) ID=id;name=Name;money=m;passwd=PassWord; consumer()ID=0;name='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; /开户金额;void YH:save()ofstream ofile("bankdat.dat",ios:out);ofstream outfile("bankdat.dat",ios:out);int n=0;outfile<<acnum<<" "for(n=0;n<acnum;n+)outfile<<accountn->ID<<" "outfile<<accountn->money<<" "outfile<<accountn->name<<" "outfile<<accountn->passwd<<" "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;infile>>acnum;for(n=0;n<acnum;n+)infile>>id;infile>>m;infile>>nam;infile>>passw;accountn->passwd;consumer * acc = new consumer(id,nam,passw,m); 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) cout<<"对不起,金额不够!"<<endl; else accountx->dec_money(b);accounti->add_money(b);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();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<<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;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; cout<<endl<<"请输入开户号:" cin>>id; cout<<endl<<"请输入开户人姓名:" cin>>nam; cout<<endl<<"请输入开户密码:" cin>>passw; cout<<endl<<"请输入存入金额:" cin>>m; while(m<=0) cout<<"请输入正确的数字!"<<endl;cin>>m; consumer * acc = new consumer(id,nam,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);六、测试数据:帐号户名密码开户金额余额123456789阮伟1231000010100987654321阮伟1231000七、数据调试:1.登陆界面2.开户界面3.账户操作八 、课程设计总结通过这次C+课程设计,使我学到面向对象的程序设计思想用到具体的工作和学习中,加深对类与对象的理解,是将计算机课程与实际问题相联接的关键步骤。通过课程设计,能够提高自己的分析问题、解决问题的能力,从而运用所学知识解决实际问题的能力,并培养基本的、良好的程序设计技能。这次的课程设计,让我用了一个相对比较集中的时间去练习我的编程,特别是自己的动手能力,因为这次的课程设计覆盖面比较广泛。经过了这次的设计,让我找到自己学习上的漏洞,一些课程设计上的以前没有弄懂的知识,都在这次的课程设计上有所提高。九、课程设计教材及主要参考资料教学参考书1李素若.C+面向对象程序设计.北京:化学工业出版社,2008.参考资料:1郑莉,傅仕星编,C+面向对象程序设计,清华大学出版社,2003年9月出2谭浩强编,C+面向对象程序设计,清华大学出版社,2005年7月出版3李师贤等译,C+精髓,机械工业出版社,2002年8月出版4Davis Chapman,学用Visual c+ 6.0,清华大学出版社,2001年7月出版5郑莉,傅仕星编,C+语言面向对象程序设计习题与实验指导,清华大学出版社,2003年9月出版16