C自动取款机ATM课程设计报告.doc_第1页
C自动取款机ATM课程设计报告.doc_第2页
C自动取款机ATM课程设计报告.doc_第3页
C自动取款机ATM课程设计报告.doc_第4页
C自动取款机ATM课程设计报告.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

第 1 页 共 20 页c+语言程序设计课程设计报告洛阳师范学院2013-2014学期 c+语言程序设计课程设计报告设计名称:模拟自动取款机ATM 姓 名:黄双双 学 号:131124001 专业班级:网络工程 学 院:信息技术学院设计时间:2014年6月设计地点:宿舍成绩:指导教师评语: 指导教师签字: 年 月 日第 20 页 共 20 页c+语言程序设计课程设计报告目 录1.课程设计目的32.课程设计任务与要求33.课程设计说明书44.课程设计成果65.程序调试过程186.设计问题的不足和改进方案187.课程设计心得198.参考文献201课程设计目的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机当前剩余金额的限制。3课程设计说明书概要设计本案例涉及一个银行卡和ATM机之间的“对话”。需要处理两个对象,即:ATM和银行卡,因此可以考虑定义两个类来解决这个问题。(1)ATM机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。需要实现:“核对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。可以将这些操作定义为ATM机类的成员函数。(2)银行卡类:具有“用户姓名”、“用户密码”、“存款额”等特征。需要实现“身份验证”、“查询余额”、“修改密码”、“交易成功更改余额”等操作。将这些操作定义为银行卡类的成员函数。模块说明: 在我设计的程序中一共包括了五个模块,分别是: 核对密码、修改密码、取款、查询信息、退出系统模块。这六个模块中新增、查找和修改都是独立分开作为子函数的,另外三个则是作为switch语句中的一部分,通过switch语句,把五个大模块联系了起来,同时,为了实现多次使用这五大模块,就在switch语句外加了while循环。 模块结构图: 详细设计 总体流程图:各功能模块流程图:4.课程设计成果程序源代码,运行结果(可用屏幕抓图的方法说明)(五号,宋体)(多页)#include#include#include#include class consumer;class ATMpublic: ATM(consumer & cn):cnsm(cn) void welcome(); /登陆界面bool check_passwd(char n,char pwd); /核对密码void change_passwd(); /修改密码void fetchmoney(); /取款void information(); /查询信息void exitATM(); /退出系统void functionshow(); /功能界面void lock(); /锁机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_kahao(); /取得卡号char* get_passwd(); /取得密码float get_money(); /取得余额void set_passwd(char pwd); /设置密码void set_money(float m); /取钱private:char passwd10; /用户密码char name20; /用户姓名char kahao20; /用户卡号float money; /用户余额 ;consumer:consumer(char Name,char Kahao, float Money,char Password) /构造函数,建立账户 strcpy(name,Name); strcpy(kahao,Kahao); money=Money; strcpy(passwd,Password);float consumer:get_money() /取得余额 return money;char*consumer:get_name() /取得姓名return name;char*consumer:get_kahao() /取得卡号return kahao;char*consumer:get_passwd() /取得密码return passwd;void consumer:set_passwd(char pwd)/设置密码strcpy(passwd,pwd);void ATM:welcome() /登录界面times=0;cout*欢迎使用银行ATM自动取款机*endl;char pwd10,num20,ch;int i=0;doi=0;coutendl请输入卡号:;docin.get(ch);numi+=ch;while(ch!=n);numi-1=0;i=0;cout请输入密码:;docin.get(ch);pwdi+=ch;while(ch!=n);pwdi-1=0;if(!check_passwd(num,pwd)cout你输入的卡号或密码有误,请从新输入endl;times+;elsefunctionshow();while(times3);lock();bool ATM:check_passwd(char num,char pwd)if(strcmp(num,cnsm.get_kahao()=0&strcmp(pwd,cnsm.get_passwd()=0)return true;elsereturn false;void ATM:functionshow()int n;docout endl请输入相应的操作序号进行操作: endl;cout1)修改密码 endl2)取款 endl3)查询余额 endl4)退出系统 endl;cout;cinn;while(n4)cout请输入正确的操作序号!endl;cout;cinn;switch(n)case 1: change_passwd();break;case 2: fetchmoney();break;case 3: information();break;case 4: exitATM();break;while(true);void ATM:change_passwd() char pwd10,repwd10; times=0;docoutendlpwd;if(!check_passwd(cnsm.get_kahao(),pwd)times+;elsebreak;while(times3);if(times=3)lock();int k=0;int t=0;dok=0;coutpwd;int g=0;int v=0;g=strlen(pwd);if(g6)k=1;cout密码不能小于6位endl;for(int i=0;ig-1;i+)if(pwdi=pwdi+1)v=v+1;if(v=g)k=1;cout对不起,不允许出现完全相同的情况6&v!=g)coutrepwd;if(t=strcmp(pwd,repwd)!=0)cout你输入的两次密码不一样,请重新输入!endl;while(t!=0|k=1);cnsm.set_passwd(pwd);cout密码修改成功,请牢记!endl;void ATM:fetchmoney( )float m;char ch;docoutendl你要取多少钱:;cinm;while(m=0)cout请输入正确的数字!endl;cout;cinm;if(m5000)cout对不起,每次最多取5000元endl;elseif(int)m%100!=0)cout对不起,取款金额为100的倍数endl;elseif(cnsm.get_money()-m0)cout对不起,你的余额不足!endl;elsecout endl操作成功,请收好钱! endl;cnsm.set_money( m );cout是否要继续该项操作:(Y/N)endl;cout;cinch;while(ch!=n&ch!=Y&ch!=y)cout;cinch;while(ch=y|ch=Y);void ATM:information()cout*endl;cout*endl;cout* 用户姓名:cnsm.get_name()endl;cout* 卡号: cnsm.get_kahao()endl;cout* 余额: cnsm.get_money()endl;cout*endl;void ATM:lock() coutendl感谢你对本银行的支持,欢迎下次光临!endl; cout请取卡.endl; void ATM:exitATM()cout成功退出系统!谢谢惠顾!endl;exit(0);void consumer:set_money (float m)money=money-m;int main()consumer c1(Me,123456,10000.00F,123456);/先构造一个用户ATM atm(c1);atm.welcome();return 0;运行结果1.输入密码2.修改密码3.取款4.查询余额5退出系统6.用户名密码输入错误三次,自动退出,锁机吞卡5.程序调试过程写出程序调试步骤(4) 模拟自动取款机(ATM)的流程,实现查询银行卡余额、取款、修改密码、退出系统等功能;(5) 卡号、密码错误时最多输入3次,否则直接退出系统。(6) 取款金额受信用卡余额、ATM机单笔最大取款金额及ATM机当前剩余金额的限制。1.根据程序设定好的用户名密码输入,用户名为123456,密码为123456.2.根据题目要求修改密码,原密码为123456,新密码为1234567,重复新密码12345673.取出现金1004.查询余额,剩余99005退出系统6.次密码错误自动退出系统,锁机吞卡遇到的问题开始不会输入用户名用户密码,得提前设定,其次输入密码三次错误,没有自动锁机,需要再设定,while函数用不熟,各模块联系不上,最高取款限额,还有查询余额都得用分支模块处理。ATM机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。需要实现:“核对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。将这些操作定义为ATM机类的成员函数没有紧密联系。行卡类:具有“用户姓名”、“用户密码”、“存款额”等特征。需要实现“身份验证”、“查询余额”、“修改密码”、“交易成功更改余额”等操作。将这些操作定义为银行卡类的成员函数不能很好运行。在本程序中使用了struct 数据类型,所用最多的是WHILE循环结构和IF语句,然而这也正为了它的特色。循环体的嵌套思路清晰,目的明确,格式规范,易于阅读和理解。If语句的逐层运用,正形象化的描述了计算机工作流程,而且与人的一般习惯相吻合,简单明了,易于观察理解它的来龙去脉,思路清晰直观。该程序是在汉化系统下编写完成的,所以它支持在汉化系统下运行,还支持在普通系统下运行,它允许完全用中文操作,包括对信息的添加浏览和查询等功能,它使用的指针是动态分配内存的,允许用户大量的信息录入,对它的长短不加限制,这样就方便了很多。而且中文环境更加方便使用,一目了然。6.设计问题的不足和改进方案本课程设计是在汉化环境下操作的,对系统要求相对严格。在输入信息时,每输入一条信息后用ENTER键结束,然后继续下一条信息的输入。如果不能按照规定方法录入,将导致信息混乱不清,只有重新启动系统开始新的输入。策略是:只有人为的去掌握输入方法,正确操作;还有是对程序改进,使程序对一些非法输入给予忽略,提示重新输入。在本程序中使用了struct 数据类型,所用最多的是WHILE循环结构和IF语句,然而这也正为了它的特色。循环体的嵌套思路清晰,目的明确,格式规范,易于阅读和理解。If语句的逐层运用,正形象化的描述了计算机工作流程,而且与人的一般习惯相吻合,简单明了,易于观察理解它的来龙去脉,思路清晰直观。该程序是在汉化系统下编写完成的,所以它支持在汉化系统下运行,还支持在普通系统下运行,它允许完全用中文操作,包括对信息的添加浏览和查询等功能,它使用的指针是动态分配内存的,允许用户大量的信息录入,对它的长短不加限制,这样就方便了很多。而且中文环境更加方便使用,一目了然。因为系统只是要求模拟并不牵涉到真实的一些处理,所以很多真实的应用并不没有加在里面,一些与真实的自动化机器的接口连接并没有做到。在程序运行时有时会因为输入的数字过大而出现内存溢出,程序崩溃现象,经过调试改正已经有了很大改观,但仍然存在不可知的错误。首先遇到的问题就是系统分析不足的问题在大致考虑了一些功能后就开始动手做,想到哪里做到哪里,一度陷入了困境,其后从新开始理清了思绪,画好了流程图在做,随即顺畅了许多。其次就是与数据库连接上的问题,由于对VB与SQL连接的不熟走了很多弯路,使程序设计需要用到数据库时复杂化,过后通过老师同学指点,采用了ADO控件的动态连接,才解决一个头疼的问题。其后的问题都是程序中逻辑性的一些小问题,大多数都是一些遗漏,导致程序死循环,或者是数据库写入不去作用等等,都是通过仔细重新分析检查一一解决。在所有代码编写完成后,再一一验证其功能,修正了很多不足,也使得程序慢慢完善起来。7.课程设计心得通过用面向推想的编程概念作为主导思想,我们体会不少,不过由于时间非常的紧迫,我们也只能说说我们的一些主要体会:在程序中我们设计了一个抽象基类和由这个基类派生出去的这使我们体会到了真正思想,也感觉到对面向对象程序设计确实抽象,这需要我们在编程实践去慢慢体会,慢慢总结。 面向对象的编程概念的最主要的特性是:继承和多态。关于多态,在面向对象的程序设计中它的含义是“相似”,两个对象如果具有一定的相似性但又有些区别的话,那么它们具有多态性;在C+中,我们通过基类的和references,借助虚拟机制对派生类进行动态操作。用关键字可使函数有了晚捆绑的灵活性(即动态绑定)函数表示允许在相同家族中的类有不同的行为,这也正是多态形成的原因。virtual函数允许它与基类那个函数不同(即允许改写基类定义的函数)。会使我们的程序的修改和增删极为方便。当然基类中函数无实质实现内容的话,也可将virtual函数赋值为0,则变为虚拟函数了,那么基类也就成了抽象基类,不能用来产生任何对象,只提供接口给派生类用,仅作为派生类的子对象来用。 关于继承,基类用以描述系统中一些对象的思想核心,派生出其他类型(派生类)用来表达了认识该核心的不同途

温馨提示

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

评论

0/150

提交评论