一、实验名称:ATM机仿真程序设计二、实验目的:实验目的使学生掌握类的简单设计及实现三、实验仪器:PC机,人手一机四、实验原理及内容4.1实验设计:运用C++语言描述ATM机类和银行卡类,每个类均包含数据成员和成员函数,并运用对象的引用和友元类的知识。注重面向对象程序设计理论知识的理解与实际的动手编程能力。运用面向对象的理念实现模拟自动取款机使用过程中的界面和用户交互过程。实验预定要求:1)正确性和健壮性:即此程序对一切合法的的操作都得能满足规格说明要求的结果,对不合法的操作也要有正确的处理措施,使程序严谨,保证用户的信息和财产安全;2)可读性:程序要尽量简明扼要,便与相关人员调试和修改;3)效率性:要求本程序执行时间尽可能短,占用的内存空间尽可能的少。4.2ATM系统实现:1)核对用户卡号、密码:核对用户输入的密码与卡号是否对应正确;2)修改密码:修改银行卡密码;3)取款功能4)存款功能5)查询账户信息:显示用户名、卡号、余额信息;6)退出终端系统:操作完成,退出;7)锁机吞卡:操作不当,密码输入错误超过三次,退出系统。4.3系统分工:功能方法或函数相关描述登录界面voidwelcome()登录终端界面核对所输卡号,密码是否正确boolcheck_passwd(charn[],charpwd[]);用户信息核对修改密码voidchange_passwd();修改银行卡密码取款功能voidfetchmoney();取款存款功能voiddeposit();存款查询信息voidinformation();显示用户名、卡号、余额信息退出系统voidexitATM();退出ATM终端系统功能选项界面voidfunctionshow();显示操作功能锁卡,退出ATM终端voidlock();退出终端定义用户char*get_passwd();获取用户名char*get_kahao();获取银行卡号floatget_money();获取用户余额voidset_passwd(charpwd[]);设置银行卡密码voidset_money(floatm);取款--更新银行卡余额voidset_money2(floata);存款--更新银行卡余额4.4函数流程图:登录终端界面(主程序)流程图输入卡号、密码开始判断卡号密码是否正确进入账号操作菜单卡号密码输入是否超过3次关闭终端退出1.修改密码2.取款功能3.存款功能4.查询余额0.退出系统NYNY修改密码(核心算法)流程图:开始输入原密码密码是否输入正确输入新密码新密码是否与原密码相同新密码是否为6位数再次输入新密码新密码两次输入是否一致密码修改成功结束密码输入是否超过三次关闭终端取款功能(核心算法)流程图:开始输入取款金额是否为负数是否5000是否为100的倍数账户中余额是否足够更新账户信息存款操作成功结束NYYYY实验源代码清单:#includeiostream#includeiomanip#includestring#includecstring#includestdio.h#includestdlib.husingnamespacestd;classconsumer//用户定义{public:friendclassATM;consumer(charName[],charNum[],floatMoney,charPassword[]);protected:char*get_name();char*get_kahao();char*get_passwd();floatget_money();voidset_passwd(charpwd[]);voidset_money(floatm);voidset_money2(floata);private:charpasswd[10];//用户密码charname[20];//用户姓名charkahao[20];//用户卡号floatmoney;//用户余额};classATM//ATM终端定义{public:ATM(consumer&cn):cnsm(cn){}voidwelcome();//登陆终端界面boolcheck_passwd(charn[],charpwd[]);//核对用户密码voidchange_passwd();//修改用户密码voidfetchmoney();//取款功能voiddeposit();//存款功能voidinformation();//查询信息voidexitATM();//退出终端系统voidfunctionshow();//功能界面voidlock();//输入错误,退出终端private:inttimes;//记录密码输入次数consumer&cnsm;};intmain(){consumerone(wangrunke,22889350248,10000.00F,666666);//构造一位用户,信息包//括:用户姓名、用户卡号、用户账户余额、用户密码ATMatm(one);atm.welcome();return0;}consumer::consumer(charName[],charKahao[],floatMoney,charPassword[])//构造函数,建立账户{strcpy(name,Name);strcpy(kahao,Kahao);money=Money;strcpy(passwd,Password);}floatconsumer::get_money()//获取余额{returnmoney;}char*consumer::get_name()//获取用户名{returnname;}char*consumer::get_kahao()//获取用户卡号{returnkahao;}char*consumer::get_passwd()//获取用户密码{returnpasswd;}voidconsumer::set_passwd(charpwd[])//设置用户密码{strcpy(passwd,pwd);}voidATM::welcome()//登录用户界面{times=0;cout\n\n\n\t\t*欢迎使用银行ATM自动取款机*\n\nendl;charpwd[6],num[20],ch;inti=0;do{i=0;coutendl\t\t请输入卡号:;do{cin.get(ch);num[i++]=ch;}while(ch!='\n');num[i-1]='\0';i=0;cout\t\t请输入密码:;do{cin.get(ch);pwd[i++]=ch;}while(ch!='\n');pwd[i-1]='\0';if(!check_passwd(num,pwd)){cout\n\t\t你输入的卡号或密码有误,请重新输入!endl;times++;}elsefunctionshow();}while(times3);lock();}boolATM::check_passwd(charnum[],charpwd[]){if(strcmp(num,cnsm.get_kahao())==0&&strcmp(pwd,cnsm.get_passwd())==0)returntrue;elsereturnfalse;}voidATM::functionshow(){system(cls);//每次执行一次操作进行清屏intn;do{coutendl\n\n\n\t\t******欢迎进入用户界面******\t\tendl;cout\n\n\t\t*1.修改密码*endl\t\t*2.取款功能*endl\t\t*3.存款功能*endl\t\t*4.查询余额*endl\t\t*0.退出系统*endl;cout\t\t功能选项(0-3):;cinn;while(n0||n4){cout\t\t请在范围内输入功能选项!endl;cout\t\t功能选项(0-4):;cinn;}switch(n){case0:exitATM();break;case1:change_passwd();break;case2:fetchmoney();break;case3:deposit();break;case4:information();break;}}while(true);}voidATM::change_passwd(){system(cls);charpwd[6],repwd[6];times=0;do{cout\n\n\n\t\t******修改密码******\n\t\t请输入原密码:;cinpwd;if(!check_passwd(cnsm.get_kahao(),pwd))times++;elsebreak;}while(times3);if(times==3)lock();intk=0;intt=0;do{k=0;cout\n\t\t请输入新密码:;cinpwd;intg=0;intv=0;g=strlen(pwd);if(g!=6){k=1;cout\n\t\t密码为6位数字!endl;}for(inti=0;ig-1;i++){if(pwd[i]==pwd[i+1])v=v+1;}if(v==g){k=1;cout\t\t原密码与新密码不能一致!endl;}if(g==6&&v!=g){cout\n\t\t请再次输入新密码(两次保持一致):;cinrepwd;if((t=strcmp(pwd,repwd))!=0)cout\t\t你输入的两次密码不一样,请重新输入!endl;}}while(t!=0||k==1);cnsm.set_passwd(pwd);cout\n\n\t\t温馨提示:密码修改成功endl;cout\n\n\t\t;system(pause);system(cls);}voidATM::fetchmoney(){system(cls);floatm;charch;do{cout\n\n\n\t\t******取款功能******\n\t\t本ATM终端机只能取出面值为100元的人民币endl\t\t温馨提示:取款金额为100的倍数endl\t\t每次最多取款5000元\n\n\t\t请输入取款金额:;cinm;while(m=0){cout\n\t\t请不要输入负数或0!endl;cout\t\t;system(pause);cout\n\t\t请重新输入取款金额:;cinm;}if(m5000){cout\n\t\t对不起,本ATM终端机一次最多取5000元endl;cout\t\t若金额超过1万元请在柜台取款endl;cout\t\t如果给您带来不便,还请谅解;}else{if((int)m%100!=0){cout\n\t\t对不起,取款金额为100的倍数endl;}else{if(cnsm.get_money()-m0){cout\t\t对不起,你的账户余额不足!endl;}else{coutendl\t\t*操作成功,请取回款endl;cnsm.set_money(m);}}}cout\n\t\t***账户现有余额:cnsm.get_money()endl;cout\n\t\t是否要继续该项操作(Y/N):;cinch;while(ch!='n'&&ch!='Y'&&ch!='y'){cout(Y/N):;cinch;}}while(ch=='y'||ch=='Y');system(cls);}voidATM::deposit(){system(cls);floata;charb;do{cout\n\n\n\t\