上海电力学院课程设计报告面向对象程序设计(2012 /2013学年第一学期)课题名称模仿ATM机存取款管理系统设计院(系)电子与信息工程学院专业通信工程学号姓名时间2013年1月12日至1月18日地点奋进楼4楼5机房指导教师王剑云目录一、设计目的与任务 (2)1、本课程设计的目的 (2)2、本课程设计的任务 (2)二、设计方案 (2)1.总体设计 (2)2.系统功能 (2)3.系统截图 (4)4.核心代码设计 (7)三.心得体会 (11)一、设计目的与任务1、本课程设计的目的(1)课程设计是实践教学环节。
设置课程设计的目的是加强学生对本课程及相关课程知识的理解,培养学生综合运用理论知识分析和解决实际问题的方法与能力。
有助于提高学生的创新能力和创新意识。
搞好课程设计教学工作,对实现专业培养目标,提高学生全面素质有重要作用。
(2)通过课程设计更进一步理解C++的基础知识。
(3)训练用系统的观点及软件开发的一般规范进行软件开发,并在此过程中培养严谨的科学态度和良好的工作作风。
初步掌握软件开发过程中的问题分析、系统设计、程序编码、调试、测试等方面的基本方法和技能。
(4)熟练掌握C++知识在程序中的应用,了解书本知识在解决实际问题中的用途。
2、本课程设计的任务模拟银行的自动取款机使用过程中的界面和用户交互过程。
实现查询银行卡余额、取款、修改密码、退出系统等功能。
功能要求:(1)卡号、密码输入最多三次,否则直接退出系统。
(2)取款功能:取款金额受卡余额、机单笔最大取款金额及机当前剩余金额的限制。
(3)查询功能:实现查询余额功能。
(4)更改密码:实现密码更改功能,对于密码要有2次验证。
(5)锁卡功能:实现卡被锁的功能。
(6)退卡功能:实现退出系统功能。
二、设计方案1.总体设计设计的这个程序是模拟A TM取款机的使用过程,该程序功能包括:1)卡号、密码输入最多三次,否则直接退出系统。
2)取款功能:取款金额受卡余额、机单笔最大取款金额及机当前剩余金额的限制。
3)查询功能:实现查询余额功能。
4)更改密码:实现密码更改功能,对于密码要有2次验证。
5)锁卡功能:实现卡被锁的功能。
6)退卡功能:实现退出系统功能。
2.系统功能首先编写一个class consumer(用户类)、class ATM(ATM取款机类)和一个main()函数,程序开始运行时调用main函数里设置好的用户信息,通过main函数来调用class A TM(ATM取款机类)和class consumer(用户类)中的相关函数和数据来达到程序的要求。
class ATM(ATM 取款机类)内主要有void welcome(); // 登陆界面bool check_passwd(char n[],char pwd[]); // 核对密码void fetchmoney(); // 取款功能void functionshow(); // 功能界面void information(); // 查询功能void change_passwd(); // 更改密码void lock(); // 锁卡功能void exitATM(); // 退卡功能class consumer(用户类)内主要有char* get_name(); // 获取姓名char* get_num(); // 获取卡号char* get_passwd(); // 获取密码float get_money(); // 获取余额void set_passwd(char pwd[]); // 设置密码void set_money(float m); // 取款通过在主界面的输入指令来实现各个函数的调用,以达到模仿A TM取款机的功能。
系统功能图与流程图3.系统截图(1)主界面(2)卡号、密码输入最多三次,否则直接退出系统。
(3)取款功能:取款金额受卡余额、机单笔最大取款金额及机当前剩余金额的限制。
(4)查询功能:实现查询余额功能。
(5)更改密码:实现密码更改功能,对于密码要有2次验证。
(6)锁卡功能:实现卡被锁的功能(7)退卡功能:实现退出系统功能。
4.核心代码设计(1)类编写通过定义两个类,class consumer(用户类)和class ATM(A TM取款机类),对于class ATM,public有登陆界面,核对密码,取款功能,功能界面,查询功能,更改密码,锁卡功能,退卡功能。
Private有记录密码输入次数。
对于class consumer,public有获取姓名,获取卡号,获取密码,获取余额,设置密码,取款。
Private有用户密码,用户姓名。
(2)类的成员函数class ATM // ATM取款机类{public:A TM(consumer& cn):cnsm(cn){}void welcome(); // 登陆界面bool check_passwd(char n[],char pwd[]); // 核对密码void fetchmoney(); // 取款功能void functionshow(); // 功能界面void information(); // 查询功能void change_passwd(); // 更改密码void lock(); // 锁卡功能void exitATM(); // 退卡功能private:int times; // 记录密码输入次数consumer& cnsm;};class consumer// 用户类{public:friend class ATM;consumer(char Name[],char Num[],float Money,char Password[]);protected:char* get_name(); // 获取姓名char* get_num(); // 获取卡号char* get_passwd(); // 获取密码float get_money(); // 获取余额void set_passwd(char pwd[]); // 设置密码void set_money(float m); // 取款private:char passwd[8];// 用户密码char name[20]; // 用户姓名char num[20];float money;};(3)各个功能的实现(1)卡号、密码输入最多三次,否则直接退出系统。
void ATM::exitATM() //退卡{cout<<endl<<" 感谢您支持,欢迎下次光临! "<<endl;cout<<" 请取回你的卡片"<<endl;exit(0);}//后面的退卡需要调用此函数void ATM::welcome(){times=0;cout<<"★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★"<<endl;cout<<"=================================================="<<endl;cout<<" *中国农业银行* "<<endl;cout<<" 欢迎使用ATM自动柜员机"<<endl;cout<<"=================================================="<<endl;cout<<"★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★"<<endl;char pwd[8],num[20],ch;int i=0;do{i=0;cout<<endl<<"请输入卡号:";do{cin.get(ch); //对于键盘字符串的接收!num[i++]=ch;}while(ch!='\n');num[i-1]='\0';i=0;cout<<"请输入密码:";do{cin.get(ch);pwd[i++]=ch;}while(ch!='\n');pwd[i-1]='\0';if(!check_passwd(num,pwd)){cout<<"你输入的卡号或密码有误,请重新输入"<<endl;times++;}else{functionshow();}}while(times<3);exitATM();}(2)取款功能:取款金额受卡余额、机单笔最大取款金额及机当前剩余金额的限制。
void ATM::fetchmoney() //取款{float m;char ch;do{cout<<endl<<"您要取多少钱:"<<endl; // 两种情况cin>>m;while(m<=0){cout<<"请输入您的取款金额!"<<endl;cin>>m;}if(cnsm.get_money()-m<0){cout<<"对不起,你的余额不足!"<<endl;}else{cout<<endl<<"操作成功!请于30秒内取走您的钞票!"<<endl;cnsm.set_money(m);}cout<<"是否要继续该项操作:(y/n) "<<endl;cin>>ch;}while(ch=='y'||ch=='Y');}(3)查询功能:实现查询余额功能。
void ATM::information() //查询{cout<<"=================================================="<<endl;cout<<"您当前所剩余额为: "<<cnsm.get_money()<<endl; //必须声明友元才能用cnsm 调用其成员函数cout<<"=================================================="<<endl;}(4)更改密码:实现密码更改功能,对于密码要有2次验证。