1、滨江学院面向对象程序设计课程设计题 目 模拟 ATM 机存取款管理系统院 系 计算机系 专 业 计算机科学与技术 学生姓名 学 号 指导教师 二一六 年 十二 月 二十日目 录1前言1.1选题目的及意义2系统分析2.1需求分析2.2功能要求2.3软硬件环境3系统概要设计3.1系统总体架构设计4系统详细设计4.1管理模块4.2类的定义5系统实现5.1类的实现5.2主要程序实现6系统测试7.收获及体会8.参考文献9.附录1前言1.1 选题目的及意义总结及运用一学期来所学的知识,训练我们灵活应用所学 C+知识,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出。能够巩固、深化理论知识,提高编
2、程水平、分析问题、解决问题的能力。1.2 研究内容模拟银行的自动取款机使用过程中的界面和用户交互过程。实现查询银行卡余额、取款、修改密码、退出系统等功能2.系统分析2.1 需求分析人们的金融意识、科技意识己经有了很大的提高,在紧张忙碌的生活中,己越来越来不习惯每月奔忙于各银行营业柜台之问去排队缴各种各样的费用了;同时,各种经营单位如电信、移动、供电、煤气、自来水、证券等等一是为了提高服务质量、方便客户,二是为了减轻自己日趋繁重的工作量,纷纷委托银行为其开展代收代付业务。银行每天要处理大量的存取款事件,做好存取款是银行工作重要的环节,然而要有效处理必须要有良好的程序和数据管理系统来建立一个良好的
3、软件系统来实现快速、有效、准确、安全的处理银行事物。2.2 功能要求(1)卡号、密码输入最多三次,否则直接退出系统。(2)取款功能:取款金额受卡余额、机单笔最大取款金额及机当前剩余金额的限制。(3)查询功能:实现查询余额功能。(4)更改密码:实现密码更改功能,对于密码要有 2 次验证。(5)锁卡功能:实现卡被锁的功能。(6)退卡功能:实现退出系统功能。2.3 软硬件环境环境:Visual c+ 6.0硬件:lenovo idea-pad3 系统概要设计3.1 系统整体架构设计系统总体框架4系统详细设计4.1 管理模块(1)登录页面输入卡号和密码,根据用户输入的卡号和密码,到后台文件查询,若正确
4、则登录成功,并保存卡好信息已备后用。若卡号存在和密码不匹配或无该卡号已经注销,提示该卡号已存在或已注销,保持界面三次不变等待用户的重新输入。(2)主界面页面主要导航栏有:欢迎使用储蓄卡管理(存款、取款、修改密码、转账功能、注销退出)(3)储蓄卡开户页面提供开户界面,由用户输入新储蓄卡的所有信息,将该信息保存到文件中,并将开户金额作为该卡的第一次存款记录存人文件。(4)存钱页面从登录界面得到卡号,并提供数据输入界面,等待用户的输入存款金额。从后台数据库中找到该用户余额记录,修改余额,并将该存款事件的相应信息写人数据库,同时将存钱的金额显示在页面上。银行管理系统存钱页面取款页面余额页面修改密码注销
5、页面登录界面注册开户 主界页面 注销退出(5)取款页面从登录界面得到卡号,并提供数据输入界面,等待用户输入取款金额,如果取款金额大于该用户卡上的余额则不能取款,或者将新的余额写人文件,并将本次取款事件写入文件同时将取钱的金额显示在页面上,。(6)注销页面从关闭文件,状态为注销,最后关闭整个系统。4.2 类的定义(1)comsumer 类class comsumer 主要制定用户的成员数据,并进行登录与保存功能:comsumer 类说明表名称 属性 说明ID 数据成员 用户账户数据name 数据成员 用户姓名money 数据成员 用户首次金额in 数据成员 用户身份证号address 数据成员
6、用户地址number 数据成员 用户电话Passwd 数据成员 用户密码savemoney() 成员方法 存钱fetchmoney () 成员方法 取钱change_passwd() 成员方法 修改密码get_money() 成员方法 卡卡转账(2)YH 类YH 类 主要实现用户的各种功能:YH 类说明表名称 属性 说明acnum 数据成员 账户数set_account () 成员方法 开户功能del_account () 成员方法 注销账户功能transfer () 成员方法 转账功能functionshow() 成员方法 主界面显示功能addmoney() 成员方法 存钱功能exitYH(
7、) 成员方法 退出系统功能5.系统实现5.1 类的实现(1)consumer 类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;consu
8、mer()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 I
9、D; /开户帐号string passwd; / 用户密码string name; / 用户姓名 float money; /开户金额int number;string company;string address;double in;(2)银行类:class YH /银行类public:void set_account();/银行开户功能void del_account(); /注销账户功能void transfer(int); /转账功能void enter_account(); /进入用户个人信息功能void addmoney(int,float);/存款功能void exitYH();
10、/ 退出系统void functionshow();void save();void load();/ 功能界面protected:consumer *account20;static int acnum;/账户数5.2 主要程序实现(1)读入用户信息功能实现:void YH:load()ifstream infile(“bankdat.dat“,ios:in);/以输入方式打开文件if(!infile)cerracnum;for(n=0;nid;/从磁盘文件 bankdat.dat 读入信息infilem;infilenam;infilepassw;infilecompany;infilen
11、umber;infileaddress;infilein;accountn-passwd;consumer * acc = new consumer(id,nam,number,in,company,address,passw,m); /每读入一个 n开辟一段内存accountn = acc; /赋值首地址infile.close();coutid; int flag = 1; int i = 0; while(iget_id() flag = 0; else i+; if(flag) coutb;while(bb;if(accountx-get_money()dec_money(b);acc
12、ounti-add_money(b);coutmoney=accountx-money-y;float consumer:get_money()return money;void main()YH yh;yh.functionshow();(4)主界面显示void YH:functionshow()int n;dosystem(“cls“); load();coutn;while(n4) coutn;switch(n)case 1: set_account();/开户break;case 2:enter_account();/登录break;case 3: del_account();/注销b
13、reak;case 4: exitYH();/退出break;cin.get();/输入流类 istream 的成员函数while(true);void YH:enter_account()int id; coutid; int flag = 1; int i = 0; /_page_break_while(iget_id() flag = 0; else i+; if(flag) coutpassw;if(passw!=accounti-get_passwd() return;/返回到登录界面accounti-display();cin.get();cin.get();int n;dosys
14、tem(“cls“); coutn;(5)添加/删除账户功能实现: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.ge
15、t();while(1);void YH:set_account()int id;string nam;string passw;float m;string company;string address;int number;double in;coutid;coutnam;coutpassw;coutm;coutnumber;coutcompany;coutaddress;coutin;while(mm;consumer * acc = new consumer(id,nam,number,in,company,address,passw,m); accountacnum = acc; c
16、outid;int flag = 1; int i = 0; while(iget_id() flag = 0; else i+; if(flag) coutpwd;coutrepwd;if(pwd!=repwd)cout“m;while(mm;if(moneych;while(ch!=nwhile(ch=y|ch=Y);void consumer:savemoney()/存钱函数功能实现float c;char ch;docout“c;while(cc;money=money+c;coutch;while(ch!=nwhile(ch=y|ch=Y);int YH:acnum=0;(8)用户信
17、息显示:void consumer:display()/用户信息界面system(“cls“); cout#include #includeusing 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 functions
18、how();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=Compa
19、ny;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(
20、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 接收从内存输出的
21、数据int n=0;outfileIDmoneynamepasswdnumbercompanyaddressinacnum;for(n=0;nid;/从磁盘文件 bankdat.dat 读入信息infilem;infilenam;infilepassw;infilecompany;infilenumber;infileaddress;infilein;accountn-passwd;consumer * acc = new consumer(id,nam,number,in,company,address,passw,m); /每读入一个 n开辟一段内存accountn = acc; /赋值首
22、地址infile.close();coutid; int flag = 1; int i = 0; while(iget_id() flag = 0; else i+; if(flag) coutb;while(bb;if(accountx-get_money()dec_money(b);accounti-add_money(b);coutmoney=accountx-money-y;float consumer:get_money()return money;void main()YH yh;yh.functionshow();/*主界面显示*/void YH:functionshow()i
23、nt n;dosystem(“cls“); load();coutn;while(n4) coutn;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; coutid; int flag = 1; int i = 0; /_page_break_wh
24、ile(iget_id() flag = 0; else i+; if(flag) coutpassw;if(passw!=accounti-get_passwd() return;/返回到登录界面accounti-display();cin.get();cin.get();int n;dosystem(“cls“); coutn;switch(n)case 1: accounti-display();break;case 2: accounti-fetchmoney();save();break;/从 2-5 功能,每执行一次调用一次 save 函数,重新写入数据case 3:account
25、i-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;coutid;coutnam;coutpassw;coutm;coutnumber;
26、coutcompany;coutaddress;coutin;while(mm;consumer * acc = new consumer(id,nam,number,in,company,address,passw,m); accountacnum = acc; coutid;int flag = 1; int i = 0; while(iget_id() flag = 0; else i+; if(flag) coutpwd;coutrepwd;if(pwd!=repwd)cout“m;while(mm;if(moneych;while(ch!=nwhile(ch=y|ch=Y);void consumer:savemoney()/存钱函数功能实现float c;char ch;docout“c;while(cc;money=money+c;coutch;while(ch!=n