C++自动取款机ATM源代码_第1页
C++自动取款机ATM源代码_第2页
C++自动取款机ATM源代码_第3页
C++自动取款机ATM源代码_第4页
C++自动取款机ATM源代码_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河lb联合大学2011-2012第2学期《软件设计基础-C++》课程设计报告设计名称:—模拟自动取款机姓名:薛岩学号:专业班级:11水1学院:建筑工程学院设计时间:2012,5—6设计地点:计算中心机房

TOC\o"1-5"\h\z\o"CurrentDocument"课程设计目的3\o"CurrentDocument"课程设计任务与要求3\o"CurrentDocument"课程设计说明书4\o"CurrentDocument"课程设计成果6程序调试过程18设计问题的不足和改进方案18课程设计心得19参考文献20课程设计目的《软件设计基础-C++》课程设计是这门课程的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C++的知识点,又接近工程实际需要。目的是通过课程设计的综合训练,培养学生实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握C++这门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。课程设计任务与要求:要求:本次课程设计利用《软件设计基础-C++》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。要求:1、对系统进行功能需求分析2、设计合理的数据结构和系统框架3、编程简练,程序功能齐全,能正确运行4、说明书、流程图要清楚5、课题完成后必须按要求提交课程设计报告分析系统中的各个实体之间的关系及其属性和行为;根据问题描述,设计系统的类层次;完成类层次中各个类的描述(包括属性和方法);完成类中各个成员函数的定义;完成系统的模块组装、调试;任务:ATM机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。需要实现:“核对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。可以将这些操作定义为ATM机类的成员函数。(2)银行卡类:具有“用户姓名”、“用户密码”、“存款额”等特征。需要实现“身份验证”、“查询余额”、“修改密码”、“交易成功更改余额”等操作。将这些操作定义为银行卡类的成员函数。模拟自动取款机(ATM)的流程,实现查询银行卡余额、取款、修改密码、退出系统等功能;卡号、密码错误时最多输入3次,否则直接退出系统。取款金额受信用卡余额、ATM机单笔最大取款金额及ATM机当前剩余金额的限制。课程设计说明书⑴概要设计本案例涉及一个银行卡和ATM机之间的“对话”。需要处理两个对象,即:ATM和银行卡,因此可以考虑定义两个类来解决这个问题。ATM机类:有“单笔取款最高限制'、“每日取款总金额限制”、“金额”等基本属性。需要实现:“核对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。可以将这些操作定义为ATM机类的成员函数。银行卡类:具有“用户姓名”、“用户密码”、“存款额”等特征。需要实现“身份验证”、“查询余额”、“修改密码”、“交易成功更改余额”等操作。将这些操作定义为银行卡类的成员函数。模块说明:在我设计的程序中一共包括了五个模块,分别是:核对密码、修改密码、取款、查询信息、退出系统模块。这六个模块中新增、查找和修改都是独立分开作为子函数的,另外三个则是作为switch语句中的一部分,通过switch语句,把五个大模块联系了起来,同时,为了实现多次使用这五大模块,就在switch语句外加了while循环。模块结构图:⑵详细设计总体流程图:各功能模块流程图:《软件设计基础-C++》课程设计报告第7页,共20页课程设计成果程序源代码,运行结果(可用屏幕抓图的方法说明)(五号,宋体)(多页)#include<iostream.h>#include<string.h>#include<stdio.h>#include<stdlib.h>classconsumer;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();//取得密码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;}:har*consumer::get-passwd()涵得密码returnpasswd;voidconsumer::set_passwd(charpwd[])//设置密码strcpy(passwd,pwd);Void…一界面{times=0;cout<<〃*欢迎使用银行ATM自动取款机*〃<<endl;charpwd[10],num[20],ch;inti=0;doi=0;cout<<endl<<"请输入卡号:〃;docin.get(ch);num[i++]=ch;}while(ch!='\n');num[i-1]='\0';i=0;cout<<"请输入密码:〃;docin.get(ch);pwd[i++]=ch;}while(ch!='\n');pwd[i-1]=,\0,;if(!check_passwd(num,pwd))cout<<"你输入的卡号或密码有误,请从新输入"<<endl;times++;else}while(times<3);lock();蝴质贴『EgnM’gPWd-if(strcmp(num,cnsm.get_kahao())==0&&strcmp(pwd,cnsm.get_passwd())==0)returntrue;elsereturnfalse;……()intn;docout<<endl<<"请输入相应的操作序号进行操作:"<<endl;cout<<"1)修改密码〃<<endl<<"2)取款〃<<endl<<"3)查询余额〃<<endl<<"4)退出系统"<<endl;cout<<〃$>\\〃;cin>>n;while(n<1||n>4)cout<<"请输入正确的操作序号!〃<<endl;cout<<〃$>\\〃;}cin>>n;switch(n)case1:change_passwd();

cout<<"密码不能小于6位〃<<endl;for(inti=0;i<g-1;i++)if(pwd[i]==pwd[i+1])v=v+1;if(v==g){k=1;cout<<"对不起,不允许出现完全相同的情况"<<endl;if(g>6&&v!=g)cout<<"请再输入一次新密码:〃;cin>>repwd;1_))!=0)cout<<"你输入的两次密码不一样,请重新输入!"<<endl;}while(t!=0||k==1);cnsm.set_passwd(pwd);cout<<"密码修改成功,请牢记!"<<endl;voidATM::fetchmoney(){floatm;charch;do{cout<<endl<<"你要取多少钱:〃<<〃\n$>\\〃cin>>m;while(m<=0)cout<<"请输入正确的数字!〃<<endl;cout<<〃$>\\〃;,cin>>m;if(m>5000)cout<<"对不起,每次最多取5000元〃<<endl;elseif((int)m%100!=0)cout<<"对不起,取款金额为100的倍数〃<<endl;else'if(cnsm.—m<0)cout<<"对不起,你的余额不足!"<<endl;elsecout<<endl<<"操作成功,请收好钱!〃<<endl;}}cnsm'set_money(m);cout<<"是否要继续该项操作:(Y/N)〃<<endl;cout<<〃$>\\〃;cin>>ch;while(ch!='n'&&ch!='Y'&&ch!='y')cout<<〃$>\\〃;}cin>>ch;}while(ch==,y,||ch==,Y,);」voidATM::information(){cout<<〃**************************〃<<endl;cout<<〃*〃<<endl;cout<<〃*用户姓名:〃<<cnsm.get_name()<<endl;cout<<〃*卡号:〃<<cnsm.get_kahao()<<endl;cout<<〃*余额:〃<<cnsm.get_money()<<endl;cout<<〃**************************〃<<endl;}voidATM::lock(){cout<<endl<<"感谢你对本银行的支持,欢迎下次光临!"<<endl;cout<<"请取卡"<<endl;}voidATM::exitATM(){cout<<"成功退出系统!谢谢惠顾!"<<endl;exit(0);}voidconsumer::set_money(floatm){money=money-m;}intmain(){consumerc1("Me","123456",10000.00F,"123456");//先构造一个用户ATMatm(c1);atm.welcome();return0;}2.修改密码运行结果1.输入密码orEzVd-+1^DebugVS建立本文若-w:/T入相应的操作序号进行操作,蚤改密硼外国第额砂旧密^:123456的入新密弱也3翦康马鞭入一次新密弱=^234567诵像改成功,请牢记I荆入相应的操作序号进行操作:峻改密肥5〉、取款请建入相应的操作序号进行操作:Q修改密码3〉古询余颔4〉退出京统$>\2你要甲多少钱「操作成功,请收拙钱I是否要继续该项琛作「罚心查询余额请翅入相应的操作序号进行操作:A修改密甜©退出系统沦S3原尸姓名卡打;123456余额:99S0KICNICNICNIC黄矢黄X黄矢黄xxxxxxxxxxx5退出系统请冠入相应的操作序号进行操作,心惨改密玛Q退出系统$>\4成功退出系瑜谢谢惠呼Pressanykeytocontinue

程序调试过程写出程序调试步骤(4)模拟自动取款机(ATM)的流程,实现查询银行卡余额、取款、修改密码、退出系统等功能;(5)卡号、密码错误时最多输入3次,否则直接退出系统。(6)取款金额受信用卡余额、ATM机单笔最大取款金额及ATM机当前剩余金额的限制。根据程序设定好的用户名密码输入,用户名为123456,密码为123456.根据题目要求修改密码,原密码为123456,新密码为1234567,重复新密码1234567取出现金100查询余额,剩余99005退出系统次密码错误自动退出系统,锁机吞卡遇到的问题开始不会输入用户名用户密码,得提前设定,其次输入密码三次错误,没有自动锁机,需要再设定,while函数用不熟,各模块联系不上,最高取款限额,还有查询余额都得用分支模块处理。ATM机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。需要实现:“核对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。将这些操作定义为ATM机类的成员函数没有紧密联系。行卡类:具有“用户姓名”、“用户密码”、“存款额”等特征。需要实现“身份验证”、“查询余额”、“修改密码”、“交易成功更改余额”等操作。将这些操作定义为银行卡类的成员函数不能很好运行。在本程序中使用了struct数据类型,所用最多的是WHILE循环结构和IF语句,然而这也正为了它的特色。循环体的嵌套思路清晰,目的明确,格式规范,易于阅读和理解。If语句的逐层运用,正形象化的描述了计算机工作流程,而且与人的一般习惯相吻合,简单明了,易于观察理解它的来龙去脉,思路清晰直观。该程序是在汉化系统下编写完成的,所以它支持在汉化系统下运行,还支持在普通系统下运行,它允许完全用中文操作,包括对信息的添加浏览和查询等功能,它使用的指针是动态分配内存的,允许用户大量的信息录入,对它的长短不加限制,这样就方便了很多。而且中文环境更加方便使用,一目了然。设计问题的不足和改进方案本课程设计是在汉化环境下操作布「对系统要求相对严格「在输入信息时,每输入一条信息「后用ENTER键结束,然后继续下一条信息的输入。如果不能按照规定方法录入,将导致信息混乱不清,只有重新启动系统开始新的输入。策略是:只有人为的去掌握输入方法,正确操作;还有是对程序改进,使程序对一些非法输入给予忽略,提示重新输入。在本程序中使用了struct数据类型,所用最多的是WHILE循环结构和IF语句,然而这也正为了它的特色。循环体的嵌套思路清晰,目的明确,格式规范,易于阅读和理解。If语句的逐层运用,正形象化的描述了计算机工作流程,而且与人的一般习惯相吻合,简单明了,易于观察理解它的来龙去脉,思路清晰直观。该程序是在汉化系统下编写完成的,所以它支持在汉化系统下运行,还支持在普通系统下运行,它允许完全用中文操作,包括对信息的添加浏览和查询等功能「它使用的指针是动态分配内存的「允许用户大量的信息录入,对它的长短不加限制,这样就方便了很多。而且中文环境更加方便使用,一目了然。因为系统只是要求模拟并不牵涉到真实的一些处理,所以很多真实的应用并不没有加在里面,一些与真实的自动化机器的接口连接并没有做到。在程序运行时有时会因为输入的数字过大而出现内存溢出,程序崩溃现象,经过调试改正已经有了很大改观,但仍然存在不可知的错误。首先遇到的问题就是系统分析不足的问题在大致考虑了一些功能后就开始动手做,想到哪里做到哪里,一度陷入了困境,其后从新开始理清了思绪,画好了流程图在做,随即顺畅了许多。其次就是与数据库连接上的问题,由于对VB与SQL连接的不熟走了很多弯路,使程序设计需要用到数据库时复杂化,过后通过老师同学指点,采用了ADO控件的动态连接,才解决一个头疼的问题。其后的问题都是程序中逻辑性的一些小问题,大多数都是一些遗漏,导致程序死循环,或者是数据库写入不去作用等等,都是通过仔细重新分析检查一一解决。在所有代码编写完成后,再一一验证其功能,修正了很多不足,也使得程序慢慢完善起来。课程设计心得“通过而面向推想的编程概念作为主导思想,我们体会不少,不过由于时间非常的紧迫「我们也只能说说我们的一些主要体会:在程序中我们设计了一个抽象基类和由这个基类派生出去的这使我们体会到了真正思想,也感觉到对面向对象程序设计确实抽象,这需要我们在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论