《c++语言程序设计》课程设计报告第1页共19页洛阳师范学院2013-2014学期《c++语言程序设计》课程设计报告设计名称:模拟自动取款机ATM姓名:黄双双学号:131124001专业班级:网络工程学院:信息技术学院设计时间:2014年6月设计地点:宿舍指导教师评语:指导教师签字:年月日成绩:《c++语言程序设计》课程设计报告第2页共19页目录1.课程设计目的··············································································32.课程设计任务与要求·····································································33.课程设计说明书···········································································44.课程设计成果··············································································65.程序调试过程············································································186.设计问题的不足和改进方案··························································187.课程设计心得············································································198.参考文献··················································································20《c++语言程序设计》课程设计报告第3页共19页1.课程设计目的《c++语言程序设计》课程设计是这门课程的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C++的知识点,又接近工程实际需要。目的是通过课程设计的综合训练,培养学生实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握C++这门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。2.课程设计任务与要求:要求:本次课程设计利用《c++语言程序设计》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。要求:1、对系统进行功能需求分析2、设计合理的数据结构和系统框架3、编程简练,程序功能齐全,能正确运行4、说明书、流程图要清楚5、课题完成后必须按要求提交课程设计报告(1)分析系统中的各个实体之间的关系及其属性和行为;(2)根据问题描述,设计系统的类层次;(3)完成类层次中各个类的描述(包括属性和方法);(4)完成类中各个成员函数的定义;(5)完成系统的模块组装、调试;任务:(1)ATM机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。需要实现:“核对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。可以将这些操作定义为ATM机类的成员函数。(2)银行卡类:具有“用户姓名”、“用户密码”、“存款额”等特征。需要实现“身份验证”、“查询余额”、“修改密码”、“交易成功更改余额”等操作。将这些操作定义为银行卡类的成员函数。(1)模拟自动取款机(ATM)的流程,实现查询银行卡余额、取款、修改密码、退出系统等功能;(2)卡号、密码错误时最多输入3次,否则直接退出系统。(3)取款金额受信用卡余额、ATM机单笔最大取款金额及ATM机当前剩余金额的限制。《c++语言程序设计》课程设计报告第4页共19页3.课程设计说明书⑴概要设计本案例涉及一个银行卡和ATM机之间的“对话”。需要处理两个对象,即:ATM和银行卡,因此可以考虑定义两个类来解决这个问题。(1)ATM机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。需要实现:“核对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。可以将这些操作定义为ATM机类的成员函数。(2)银行卡类:具有“用户姓名”、“用户密码”、“存款额”等特征。需要实现“身份验证”、“查询余额”、“修改密码”、“交易成功更改余额”等操作。将这些操作定义为银行卡类的成员函数。模块说明:在我设计的程序中一共包括了五个模块,分别是:核对密码、修改密码、取款、查询信息、退出系统模块。这六个模块中新增、查找和修改都是独立分开作为子函数的,另外三个则是作为switch语句中的一部分,通过switch语句,把五个大模块联系了起来,同时,为了实现多次使用这五大模块,就在switch语句外加了while循环。模块结构图:《c++语言程序设计》课程设计报告第5页共19页⑵详细设计总体流程图:各功能模块流程图:《c++语言程序设计》课程设计报告第6页共19页4.课程设计成果程序源代码,运行结果(可用屏幕抓图的方法说明)(五号,宋体)(多页)#includeiostream.h#includestring.h#includestdio.h#includestdlib.hclassconsumer;classATM{public:ATM(consumer&cn):cnsm(cn){}voidwelcome();//登陆界面boolcheck_passwd(charn[],charpwd[]);//核对密码voidchange_passwd();//修改密码voidfetchmoney();//取款voidinformation();//查询信息voidexitATM();//退出系统voidfunctionshow();//功能界面voidlock();//锁机private:inttimes;//记录密码输入次数consumer&cnsm;};classconsumer//用户{public:friendclassATM;consumer(charName[],charNum[],floatMoney,charPassword[]);protected:char*get_name();//取得姓名char*get_kahao();//取得卡号char*get_passwd();//取得密码《c++语言程序设计》课程设计报告第7页共19页floatget_money();//取得余额voidset_passwd(charpwd[]);//设置密码voidset_money(floatm);//取钱private:charpasswd[10];//用户密码charname[20];//用户姓名charkahao[20];//用户卡号floatmoney;//用户余额};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;}《c++语言程序设计》课程设计报告第8页共19页char*consumer::get_passwd()//取得密码{returnpasswd;}voidconsumer::set_passwd(charpwd[])//设置密码{strcpy(passwd,pwd);}voidATM::welcome()//登录界面{times=0;cout*欢迎使用银行ATM自动取款机*endl;charpwd[10],num[20],ch;inti=0;do{i=0;coutendl请输入卡号:;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++;《c++语言程序设计》课程设计报告第9页共19页}else{functionshow();}}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(){intn;do{coutendl请输入相应的操作序号进行操作:endl;cout1)修改密码endl2)取款endl3)查询余额endl4)退出系统endl;cout$\\;cinn;while(n1||n4){cout请输入正确的操作序号!endl;cout$\\;cinn;}switch(n){case1:change_passwd();《c++语言程序设计》课程设计报告第10页共19页break;case2:fetchmoney();break;case3:information();break;case4:exitATM();break;}}while(true);}voidATM::change_passwd(){charpwd[10],repwd[10];times=0;do{coutendl请输入旧密码:;cinpwd;if(!check_passwd(cnsm.get_kahao(),pwd))times++;elsebreak;}while(times3);if(times==3)lock();intk=0;intt=0;do{k=0;cout请输入新密码:;cinpwd;intg=0;intv=0;g=strlen(pwd);if(g6)《c++语言程序设计》课程设计报告第11页共19页{k=1;cout密码不能小于6位endl;}for(inti=0;ig-1;i++){if(pwd[i]==pwd[i+1])v=v+1;}if(v==g){k=1;cout对不起,不允许出现完全相同的情况endl;}if(g6&&v!=g){cout请再输入一次新密码:;cinrepwd;if((t=strcmp(pwd,repwd))!=0){cout你输入的两次密码不一样,请重新输入!endl;}}}while(t!=0||k==1);cnsm.set_passwd(pwd);cout密码修改成功,请牢记!endl;}voidATM::fetchmoney(){floatm;charch;do{coutendl你要取多少钱:\n$\\;cinm;while(m=0)《c++语言程序设计》课程设计报告第12页共19页{cout请输入正确的数字!endl;cout$\\;cinm;}if(