收藏 分销(赏)

c++模拟ATM取款机的设计.pdf

上传人:鼓*** 文档编号:10416911 上传时间:2025-05-27 格式:PDF 页数:32 大小:838.01KB
下载 相关 举报
c++模拟ATM取款机的设计.pdf_第1页
第1页 / 共32页
c++模拟ATM取款机的设计.pdf_第2页
第2页 / 共32页
点击查看更多>>
资源描述
本科生课程设计论文 题 目:C+课程设计 模拟 ATM 取款机的设计 学生姓名:学 号:专 业:通信工程 班 级:指导教师:1/32 目录 目录.1 前言.2 第一章 C+简介.3 1、C+语言的简介及发展.3 2、C+语言的特点.3 3、C+的优点与缺点.4 第二章 需求分析.5 第三章 设计分析.7 3.1、ATM系统管理.7 3.1.1 统基本功能.7 3.1.2 相关数据结构的说明.8 3.1.3 类的设计.8 3.2系统流程图.9 3.3参数说明.12 第四章 运行及测试结果.13 4.1、登录主界面.13 4.2、挂失功能.14 4.3、修改密码.15 4.4、取款功能.16 4.5、转账功能.17 4.6、查询功能.18 4.7、退出系统.18 第五章 课程设计总结.19 附录.20 参考文献.31 2/32 前言 现今的社会发展迅速,ATM成为了人们在银行方面不可缺少的使用工具,使用 ATM的人越来越多,所以 ATM的数量也在迅速的增长着。电信运营公司已向社会提供ATM的商用业务,ATM技术正在走向成熟。一些传统电信公司在核心网络技术的选择上首选 ATM,例如 AT T。但是,近来高比特路由器的问世,使一些数据业务的运营公司眼前一亮,并正在开展有关 IP直接在 SONET或 SDH上传送的业务。Sprint公司使用 Cisco12000 路由器与SONETOC12 链路一起提供 IPoverSONET业务。MCI 亦有计划提供类似的业务。但是,这种方式与 ATM相比,不足之处是尚不适于多业务平台,网络流量和拥塞控制能力差,也不能保证具有优先级的 QOS,而 ATM的可拓性及提供新业务的能力使得多数运营公司仍在积极地扩大 ATM的服务范围。本文将主要介绍 ATM的特点。ATM的发展情况及主要技术进展。IATM 的技术特点 ATM的主要技术特点如下:1 ATM是一种统计时分复用的技术。ATM将一个物理通路划分为多个具有不同传输特性的虚通路提供给用户,实现网络资源的按需分配。2ATM利用硬件实现固定长度包的快速交换,具有时延小,实时性好的特点,能够满足多媒体数据传输的要求。3ATM是支持多种业务的传送平台,并提供服务质量的保。3/32 第一章 C+简介 1、C+语言的简介及发展 C+语言发展大概可以分为三个阶段:第一阶段从 80 年代到 1995 年。这一阶段 C+语言基本上是传统类型上的面向对象语言,并且凭借着接近 C 语言的效率,在工业界使用的开发语言中占据了相当大份额;第二阶段从 1995 年到2000 年,这一阶段由于标准模板库(STL)和后来的 Boost等程序库的出现,泛型程序设计在 C+中占据了越来越多的比重性。当然,同时由于 Java、C#等语言的出现和硬件价格的大规模下降,C+受到了一定的冲击;第三阶段从 2000 年至今,由于以 Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C+出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使 C+已经成为当今主流程序设计语言中最复杂的一员。2、C+语言的特点 20 世纪 80 年代初期,美国AT&T贝尔实验室的本贾尼斯特劳斯特卢普(Bjarne Stroustrup)博士发明并实现了 C+(最初这种语言被称作“C with Classes”)。一开始 C+是作为 C 语言的增强版出现的,从给 C 语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、命名空间(name space)逐渐被加入标准。1998 年国际标准组织(ISO)颁布了 C+程序设计语言的国际标准 ISO/IEC 1988-1998。C+是具有国际标准的编程语言,通常称作 ANSI/ISOC+。1998 年是 C+标准委员会成立的第一年,以后每 5 年视实际需要更新一次标准。C+0 x最终国际投票已于 2011 年 8 月 10 日结束,并且所有国家都投出了赞成票,C+0 x已经毫无疑义地成为正式国际标准。先前被临时命名为 C+0 x 的新标准将被称 4/32 为 C+2011。C+2011 将取代现行的 C+标准 ISO/IEC 14882,它公开于 1998年并于 2003 年更新,通称 C+98 以及 C+03。国际标准化组织于 2011 年 9 月 1日出版发布 ISO/IEC 14882:2011,名称是:Information technology-Programming languages-C+Edition:3。C+设计成静态类型、和 C 同样高效且可移植的多用途程序设计语言。C+设计成直接的和广泛的支持多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。C+设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。C+设计成尽可能与 C 兼容,籍此提供一个从C 到 C+的平滑过渡。C+避免平台限定或没有普遍用途的特性。C+不使用会带来额外开销的特性。C+设计成无需复杂的程序设计环境。出于保证语言的简洁和运行高效等方面的考虑,C+的很多特性都是以库(如 STL)或其他的形式提供的,而没有直接添加到语言本身里。关于此类话题,Bjarne Stroustrup的 C+语言的设计和演化(1994)里做了详尽的陈述。3、C+的优点与缺点 C+在一定程度上可以和 C 语言很好的结合,甚至目前大多数 C 语言程序是在 C+的集成开发环境中完成的。C+相对众多的面向对象的语言,具有相当高的性能。C+引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。很多优秀的程序框架包括 MFC、QT、wxWidgets 就是使用的 C+。尽管 C+语言有很强大的功能,但是在一些方面也存在争议。C+由于语言本身过度复杂,这甚至使人类难于理解其语义。更为糟糕的是 C+的编译系统受到 C+的复杂性的影响,非常难于编写,即使能够使用的编译器也存在了大量的问题,这些问题大多难于被发现。由于本身的复杂性,复杂的 C+程序的正确性相当难于保证。也有人提出不支持多线程的原语等缺陷。不过有如此多的知名人士提出了如此多的缺陷,正说明 C+被广泛使用和成功。C+语言由于过度的复杂性,以及与 unix的文化相抵触,在 unix/linux 领域受到很多著名人士(比如Linux之父 linus torvalds与著名黑客 Eric S.Raymond)的强烈批评与抵制。5/32 第二章 需求分析 软件设计的一个重要的环节就是需求分析。本章在对ATM取款机管理系统的应用情况作了全面调查的基础上,确定系统目标,并对系统所需要的基础功能进行分析,从而确定用户的需求。以下是ATM取款机管理系统所需要的需求分析。ATM管理系统包括六个模块:登录,挂失功能,修改密码,取款功能,转账功能,查询功能。登录:输入银行卡的账号,密码,验证银行卡的卡号,密码是否正确,之后进入主界面 挂失功能:确认是否对银行卡进行挂失,挂失后账户无法操作 修改密码:用户可自由对其银行卡密码进行修改,修改之后的新密码将会覆盖其原密码 取款功能:用户可自由取得所持银行卡内的存款,所取款数必须在其原有账户余额之内 转账功能:用户可将本账户中的存款转入其他账户,转账过程中,需要转入账户的账号 查询功能:用户可查询用户信息,其中包括用户姓名、用户身份证号码、银行卡号以及存款余额 6/32 模拟 ATM取款机的操作:首先录入账户信息,格式如下 帐号 姓名 身份证 密码 余额 323401020056078 李四 150201198808080088 123456 450.8 、登录功能:输入帐号和密码进行登录,如密码错误提示重新输入密码,如帐号错误提示无此帐户。、查询功能:查询账户余额。、取款功能:取款,更新余额。、挂失功能:挂失后,该账户不能进行任何操作。、修改密码:输入原密码和新设置密码。、转账功能:输入转账的转出账户以及转账金额,进行转账。7/32 第三章 设计分析 3.1、ATM系统管理 3.1.1 统基本功能 首先,确定系统中存在两种用户,一种是 ATM,可以进行信息录入和后台管理。另外一种是取款人,取款人主要是进行信息的查询,不能进行信息录入。所以在创建类的时候,先创建一个 ATM类,然后创建取款人类,并与 ATM 类形成有元,进而继承 ATM的所有功能,并添加录入信息的功能。基本功能:登录功能-输入帐号和密码进行登录,如密码错误提示重新输入密码,如帐号错误提示无此帐户。查询功能-查询账户余额。取款功能-取款,更新余额。挂失功能-挂失后,该账户不能进行任何操作。修改密码-输入原密码和新设置密码。转账功能-输入转账的转出账户以及转账金额,进行转账。系统功能如图:图 3-1-1 上图中所示为 ATM系统的基本功能分类 取款 挂失 查询 ATM管理系统 修改密码 退出系统 登陆 转账 8/32 3.1.2 相关数据结构的说明 信息的载体用对象数组。系统录入信息的操作非常枯燥,所以创建一个文件,把每次录入的信息保存入文件,在下一次进入系统是,它会默认读取文件原有的信息,当然也可以随时添加录入ATM信息。然后系统的各个功能仅仅是通过查询找到具体对象的具体数据进行操作。用户姓名:Name 字符型。用户账号:Num 字符型。用户密码:Password 字符型。身份证号:Id 字符型。存款数额:Money 实型。3.1.3 类的设计 1)、定义了一个ATM取款机类,类中包括以下几部分:公有段:依次为登陆界面,核对密码,挂失,修改密码,取款,转账,查询信息,退出系统,功能界面,锁机。私有段:记录密码输入次数以及变量 j。友元函数:取款,转账,查询信息,账号,密码。2、)定义了一个 consumer 类,类中包括以下几部分:公有继承了 consumer类 私有段:用户密码,用户姓名,用户身份证号,卡号,存款钱数 保护段:取得姓名,取得卡号,取得身份证号,取得密码,取得余额,设置密码,取钱 9/32 3.2系统流程图 利用流程图来说明系统各个部分之间如何协调来完成任务。1)登录流程 图 3-2-1 图中显示的是登陆的基本流程:2)查询功能 图 3-2-2 图中显示的是查询的基本流程:输入账号 输入密码 主界面 开始 结束 图 3-2-1 开始 主界面 结束 图 3-2-2 选择查询的操作序 10/32 3)挂失功能 图 3-2-3 图中显示的是挂失的基本流程:4)修改密码 图 3-2-4 图中显示的是修改密码的基本流程:开始 主界面 选择查询的操作序号 请输入新密码 请输入旧密码 请再次输入新密码 结束 图 3-2-4 开始 主界面 挂失成功 图 3-2-3 选择查询的操作序号 是否挂失 11/32 5)取款功能 图 3-2-5 图中显示的是取款的基本流程:6)转账功能 图 3-2-6 图中显示的是转账的基本流程:开始 主界面 请输入所转账号 余额不足 转账成功,余额 选择查询的操作序号 请输入所转金额 图 3-2-6 开始 主界面 选择需要的操作序号 是否继续 取款额数 结束 图 3-2-5 12/32 3.3参数说明 全局变量,重要形式参数、全局变量局部变量等等,它们的命名及用途解释 bool j:全局变量。char m,t,ch:全局变量。int times:重要形式参数。13/32 第四章 运行及测试结果 对运行及测试结果进行说明,并添加运行界面的截图。4.1、登录主界面 上图 1:为主界面登录窗口 上图 2:图为登录主界面时,账号或密码出错时系统自动锁机 14/32 上图 3:图为成功登录后,主界面所显示的窗口 4.2、挂失功能 上图 4:根据所选代码进行挂失,挂失后系统将退出主界面 15/32 4.3、修改密码 上图 5:图为更改密码功能界面,更改后的密码为新密码 16/32 4.4、取款功能 上图 6:为图为取款功能界面,图中显示为成功取款 上图 7:图为取款失败后的功能界面 17/32 4.5、转账功能 上图 8:图为转账功能界面,图中显示为转账成功后的界面 上图 9:图为转账失败后的功能界面 18/32 4.6、查询功能 上图 10:图中所示为用户个人信息,包括用户姓名、身份证号、银行卡号以及存款余额 4.7、退出系统 上图 11:图为选择序号后系统退出的页面 19/32 第五章 课程设计总结 课程设计旨在锻炼学生的实际动手能力和解决真实问题的能力。并在其中掌握和熟练所学的知识,并能够运用所学知识解决比较简单的现实模拟问题。本次课程设计在老师的帮助和自己的努力下终于能够成功运行,使我感到非常高兴以及提高了自己的编程信心,虽然这次课程设计的题目实现比较简单和不实用但毕竟是自己将近两个星期的努力地结果。在期间我对编程的理念理解又加深了一点,课程设计使我明白好的算法或者是好的逻辑思维对编程的重要性,在调试期间我自卑过、高兴过、平静过。可以说是我经历了比较大的情感波动。当费很大劲才把程序调运行的时候那种感觉实在是太好了。在本次课程设计活动中,我明显的感觉到自己知识的欠缺和实际动手能的差劲。尤其是在传值传参的函数调用时更体现的非常明显,感觉自己的书本学的不透、学的不扎实。有些地方更本就不会,不如说文件的操作,比如说系统时间的获取等以前在上课或作习题时更本就不会考虑的问题在课程设计当中完全暴露出来。通过本次试验,主要加深了对于友元函数,友元类使用的熟练程度。程序功能相对比较简单,没有设计复杂的继承和重载函数,完成的比较轻松!20/32 附录 以下是程序的源代码,并且加上了详细的注释:#includeiostream using namespace std;class consumer;class ATM/ATM取款机类 public:ATM(consumer&cn):cnsm(cn)j=true;void welcome();/登陆界面 bool check_passwd(char n,char pwd);/核对密码 bool check_zhang(char num);/核对转入账号 bool gua();/挂失 void change_passwd();/修改密码 void fetchmoney();/取款 void zhuan();/转账 void information();/查询信息 void exitATM();/退出系统 void functionshow();/功能界面 void lock();/锁机 private:bool j;int times;/记录密码输入次数 21/32 consumer&cnsm;class consumer/用户类 public:friend class ATM;consumer(char Name,char Num,char Id20,float Money,char Password);protected:char*get_name();/取得姓名 char*get_num();/取得卡号 char*get_id();/取得身份证号 char*get_passwd();/取得密码 float get_money();/取得余额 void set_passwd(char pwd);/设置密码 void set_money(float m);/取钱 private:char passwd8;/用户密码 char name20;/用户姓名 char id20;/用户身份证号 char num20;/float money;/;consumer:consumer(char Name,char Num,char Id20,float Money,char Password)22/32 strcpy(name,Name);strcpy(num,Num);strcpy(id,Id);money=Money;strcpy(passwd,Password);float consumer:get_money()return money;char*consumer:get_name()/对于数组的返回操作 返回指针 return name;char*consumer:get_num()return num;char*consumer:get_id()return id;char*consumer:get_passwd()return passwd;void consumer:set_money(float m)23/32 money-=m;void consumer:set_passwd(char pwd)strcpy(passwd,pwd);void ATM:welcome()times=0;cout欢迎使用银行 ATM自动取款机 endl;char pwd8,num120,ch;int i=0;do i=0;coutendl 请输入卡号:;do cin.get(ch);/对于键盘字符串的接收!num1i+=ch;while(ch!=n);num1i-1=0;i=0;cout 请输入密码:;24/32 do cin.get(ch);pwdi+=ch;while(ch!=n);pwdi-1=0;if(!check_passwd(num1,pwd)cout 你输入的卡号或密码有误,请重新输入endl;times+;else functionshow();while(times3);lock();bool ATM:check_passwd(char num,char pwd)if(strcmp(num,cnsm.get_num()=0&strcmp(pwd,cnsm.get_passwd()=0)return true;else 25/32 return false;void ATM:functionshow()int n;do cout 本机可办理以下业务:endl;cout*endl;cout endl;cout挂 失 修改密码endl;cout endl;cout 取 款 转 账endl;cout endl;cout查询余额 退出系统endl;cout endl;cout*endl;coutendl 请您输入相应的操作序号进行操作:n;while(n6)cout 请输入正确的操作序号!n;switch(n)case 1:gua();break;26/32 case 2:change_passwd();break;case 3:fetchmoney();break;case 4:zhuan();break;case 5:information();break;case 6:exitATM();break;while(true);bool ATM:gua()char a;do cout是否确认挂失:(y/n)继续请按 y 退出请按 n a;if(a=y)cout您已挂失成功!endl;exit(2);else cout 您已选择退出!endl;27/32 while(a=y);return j=true;void ATM:change_passwd()char pwd8,repwd8;times=0;do coutendlpwd;if(!check_passwd(cnsm.get_num(),pwd)times+;else break;while(times3);if(times=3)lock();int t=1;do coutpwd;coutrepwd;t=strcmp(pwd,repwd);/相同返回 0;28/32 if(t!=0)cout 你输入的两次密码不一样,请重新输入!endl;while(t!=0);cnsm.set_passwd(pwd);cout 密码修改成功,请牢记!endl;void ATM:fetchmoney()float m;char ch;do coutendl 你要取多少钱:m;while(m=0)cout 请输入正确的数字!m;if(cnsm.get_money()-m0)cout 对不起,你的余额不足!endl;else coutendl 取款成功,请收好钱!endl;29/32 cnsm.set_money(m);cout 是否要继续取款:(y/n)ch;while(ch=y|ch=Y);void ATM:zhuan()char z20;float num;cout请输入所转账号:z;cout 请输入所转钱数:num;cnsm.money-=num;if(cnsm.money0)cout 转账成功!您的余额:cnsm.moneyendl;else cout 余额不足!endl;void ATM:information()cout*endl;cout*用户姓名:cnsm.get_name()endl;cout*身份证号:cnsm.get_id()endl;30/32 cout*银行卡号:cnsm.get_num()endl;/必须声明友元才能用 cnsm 调用其成员函数 cout*存款余额:cnsm.get_money()endl;cout*endl;void ATM:lock()coutendl 对不起,由于你的操作有误,你的卡已经被没收!endl;exit(1);/系统非正常退出 void ATM:exitATM()coutendl 感谢你对本银行的支持,欢迎下次光临!endl;cout 请取卡endl;exit(0);void main()consumer c1(李四,323401020056078,150201198808080088,450.8,123456);/先构造一个用户 ATM atm(c1);atm.welcome();31/32 参考文献 1 吴敏,杨国林.C+面向对象程序设计 内蒙古大学出版社.2 康晓林,汪涛.标准 C+使用教程 电子工业出版社
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服