C++模拟ATM机存取款管理系统设计Word下载.docx
《C++模拟ATM机存取款管理系统设计Word下载.docx》由会员分享,可在线阅读,更多相关《C++模拟ATM机存取款管理系统设计Word下载.docx(26页珍藏版)》请在冰豆网上搜索。
姓
名:
同
组
人
员:
时
间:
2017.12.
课程设计任务书
题目
模拟ATM机存取款管理系统设计
一、设计内容及要求
(1)卡号、密码输入最多三次,否则直接退出系统。
(2)取款功能:
取款金额受卡余额、机单笔最大取款金额及机当前剩余金额的限制。
(3)查询功能:
实现查询余额功能。
(4)更改密码:
实现密码更改功能,对于密码要有2次验证。
(5)锁卡功能:
实现卡被锁的功能。
(6)退卡功能:
实现退出系统功能。
二、设计原始资料
三、设计完成后提交的成果及其相关资料。
四、主要参考资料
《c++程序设计(第二版)》
五、进程安排
12.25:
类的设计
12.26:
模块4.2、4.3的设计
12.27:
模块4.4、4.5的设计
12.28:
完成课程设计报告
第一章概述
使用ATM柜员机可以节约人力资源,方便用户进行简单常用的操作,并且为用户全天候的服务,提高银行效率,给人们提供了非常大的便利。
本文就以C++语言设计一项简单的模拟ATM柜员机程序。
运行程序时,当输入给定的卡号和密码(初始卡号和密码都为123456)后,系统就能登录ATM柜员机系统,用户可以进入功能实现界面,有查询余额,取款,存款,修改密码等功能。
设计要点:
使用文本命令行界面。
当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:
●查询余额:
初始余额为10000元
●ATM取款:
每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
●ATM存款:
不能出现负存款。
修改密码:
新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
第二章设计内容
2.1功能:
设计一个模拟ATM柜员机的程序,输入你需要的操作(选择相对的括号里的阿拉伯数字)程序具体功能有:
(1)查询余额
(2)ATM取款
(3)ATM存款
(4)修改密码
(5)退出系统
2.2操作:
本程序通过键盘操作。
在运行过程中,当用户输入正确的账号和密码时,会出现一个功能界面,按照功能界面操作。
只需输入所需操作的序号,便可执行其中相应的功能。
但是需要小心的是如果输错密码三次,便会锁卡,这时将无法操作。
第三章总体设计
3.1模块化设计
为实现系统功能,本程序主要分为六个模块。
它们分别为:
主界面、查询余额、ATM取款、ATM存款、修改密码、退出系统。
这六个函数再通过主函数调用分别得以实现。
主函数,首先提供了程序运行时的友好界面,提供客户选择的菜单。
然后,通过执行多分支选择语句——switch语句,分别实现其它各个函数的调用功能。
其它各个函数的功能分别如下:
ATM()构造函数
face()构造函数
checkout()检验卡号密码
lock()锁卡
checkmoney()查询余额
getmoney()ATM取款
savemoney()ATM存款
change()修改密码
exitsystem()退出系统
show()打印界面
3.2程序运行示意图
第四章详细设计
4.1类的设计
设计了两个类,ATM类和face类。
ATM类完成ATM柜员机的模拟,包括:
验证卡号密码,查询余额,修改密码,取款,存款,退出系统等功能。
face类完成显示登陆界面的功能,显示查询余额,修改密码,取款,存款,退出系统的选项。
ATM类的设计:
classATM
{
protected:
stringcard;
stringpassword;
floatmoney;
staticinttimes;
public:
ATM(stringc,stringp,floatm)//构造函数
{
card=c;
password=p;
money=m;
}
intcheckout();
//验证卡号密码
voidlock();
//锁卡
voidcheckmoney();
//查询余额
voidgetmoney();
//取款
voidsavemoney();
//存款
voidchange();
//修改密码
voidexitsystem();
//退出系统
};
face类的设计
classface:
publicATM
intx;
face(stringc,stringp,floatm):
ATM(c,p,m)//构造函数
voidshow();
//显示界面
4.2ATM柜员机的登陆
在main主函数中实例化一个face类的对象,卡号密码都为123456,默认余额为10000.在程序运行中输入卡号密码,若都正确即可进入主界面,选择ATM柜员机的功能。
程序运行首先要求用户输入卡号和密码,卡号和密码首先由main主函数构造默认,然后用checkout()函数判断卡号密码是否一致,一致则登陆,如果连续3次输入错误,则用lock()函数锁定卡号密码。
相关代码:
voidATM:
:
lock()
if(times==3)
cout<
<
"
输入密码3次错误,该卡已被锁"
endl;
exitsystem();
}
intATM:
checkout()
stringa;
stringb;
while
(1)
{
请输入您的卡号:
;
cin>
>
a;
请输入您的密码:
b;
if(card!
=a||password!
=b)
{
times++;
lock();
cout<
卡号或密码有误,请重新输入"
}
else
break;
return1;
4.3ATM柜员机修改密码功能
新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才能成功修改密码。
输入正确卡号密码后,或者实现其他功能退回主界面后都可以选择柜员机的修改密码功能,在运行过程中先要求用户输入旧密码,判断用户输入的旧密码是否与默认密码相同,若相同则继续运行,若不同则需要重新输入。
验证旧密码正确后系统会要求用户定义新密码,新密码要重复输入两次,要求两次必须重复正确且新密码符合要求才能修改成功。
change()
intcount=0,i,j,flag=1;
stringsecondpassword;
stringnewpassword;
stringoldpassword;
cout<
请输入旧密码:
cin>
oldpassword;
if(password==oldpassword)
请输入新密码:
newpassword;
if(newpassword.size()>
=6)
for(i=0;
i<
newpassword.size();
i++)
{
for(j=i+1;
j<
j++)
{
if(newpassword[i]==newpassword[j])
{
count++;
}
}
}
if(count<
6)
while(flag)
cout<
请再次输入新密码:
cin>
secondpassword;
if(newpassword==secondpassword)
cout<
密码修改成功!
flag=0;
else
两次密码输入不一样,请重新输入"
flag=1;
else
cout<
修改密码失败,请重新修改"
else
4.4ATM柜员机存款取款功能
输入正确卡号密码后,即可登录柜员机主界面,其中可以选择取款,存款功能。
取款功能要求用户输入取钱金额,取钱功能用if语句判断金额是否是100的倍数且金额是否大于5000或小于0,若符合要求,则顺利运行。
用getmoney()函数实现更新用户余额,余额为账户余额减去取钱金额,当取钱成功时,系统会提示用户是否继续取钱,若输入“Y”则继续,若输入“N”则退回主界面,若输入其他字符则要重新输入。
存款功能要求用户不能输入负值的金额,用if语句判断,若符合条件,则成功取款,并且用savemoney()函数更新余额,余额为账户余额加上存款金额,当成功存款时,系统会提示是否继续存款,若输入“Y”则继续,若输入“N”则退回主界面,若输入其他字符则要重新输入。
存款功能代码:
savemoney()//存款
charch;
floatsave;
//存入金额
do
请输入存款金额:
save;
if(save<
0)
存款金额有误,请重新输入"
正在存款中,请稍候......"
money=money+save;
交易成功!
请问是否继续存款?
(Y/N)"
ch;
while(ch!
='
Y'
&
ch!
N'
)
该操作无效,请重新输入:
cin>
}while(ch=='
);
取款功能代码:
getmoney()//取款
intget;
//取款金额
请输入取款金额:
get;
if(get>
5000||get<
0||get%100!
=0)
支取金额有误,请重新输入"
elseif((money-get)<
对不起,您的余额不足,请重新输入"
正在取款中,请稍候......"
money=money-get;
取款成功!
请问是否继续取款?
4.5ATM柜员机查询余额功能
输入正确卡号密码后,即可登录柜员机主界面,其中可以选择查询余额功能。
余额主要调用checkmoney()函数。
代码如下:
checkmoney()//查询余额
余额:
money<
查询余额成功!
第五章调试与测试
5.1调试过程中的主要问题
由于本程序的运行是当输入卡号密码成功后登陆主界面,在主界面中执行完一个功能后再次回到主界面进行操作,而程序大体上是没问题的,但是还是有一些小问题:
当执行完存款或取款后,没有提示是否继续执行此操作,而是直接退回主界面,这是一处不善人意的地方,但是经过修改,已将此功能加入程序。
5.2具体测试过程
(1)检验卡号密码(如下图)
(2)卡号密码输入成功(如下图)
(3)卡号密码输入有误(如下图)
(4)查询余额(如下图)
(5)ATM取款成功(如下图)
(6)ATM取款不成功(如下图)
(7)ATM存款成功(如下图)
(8)ATM存款不成功(如下图)
(9)修改密码成功(如下图)
(10)修改密码失败(如下图)
(11)退出系统(如下图)
第六章心得体会
经过一个学期对《C++程序设计》的学习,我学习到了基本的理论知识,了解到了C++语言程序设计的思想,这些知识都为我的课程实践和进一步的学习打下了坚实的基础。
在为期近两周的C++课程设计中,我体会颇多,学到了很多东西。
我加强了对C++程序设计这门课程的认识,并且复习了自己以前学习到的知识。
这些都使得我对计算机语言的学习有了更深入的认识!
总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带来很大的好处。
像职工信息表这样的程序设计,经历了平时在课堂和考试中不会出现的问题和考验。
而这些问题,这并不是我们平时只靠课本,就可以轻易解决的。
所以,锻炼了我们挑战难题,学会用已掌握的知识去解决具体问题的能力,进一步培养了独立思考问题和解决问题的能力。
特别是学会了在Visual
C++中如何调试程序的方法。
当然,老师的指导和同学的帮助也是不可忽视的,他们给了我许多提示和帮助,教会了我编译复杂程序的方法。
在老师和同学的帮助下,通过自己的努力,终于完成了这次职工信息表的简单课程设计。
我经过这段时间的编程,对其中的艰辛,我是深有体会。
从刚开始的选择程序、理解程序到后来的调试程序以及改进程序这个过程中,我遇到了各种各样的困难和挫折。
但是我坚定信念,对自己充满了信心,想尽一切办法克服重重困难。
通过课程设计的训练,我进一步学习和掌握了对程序的设计和编写,从中体会到了面向对象程序设计的方便和巧妙。
懂得了在进行编写一个程序之前,要有明确的目标和整体的设计思想。
另外某些具体的细节内容也是相当的重要。
这些宝贵的编程思想和从中摸索到的经验都是在编程的过程中获得的宝贵财富。
这些经验对我以后的编程会有很大的帮助的,我要好好利用。
虽然这次课程设计是在参考程序的基础之上进行的,但是我觉得对自己是一个挑战和锻炼。
我很欣慰自己能在程序中加入自己的想法和有关程序内容,也就是对它的程序改进了一番改进,并有创新。
但是我感觉自己的创新还不够典型,总之还不是很满意。
另外由于时间的紧迫和对知识的了解不够广泛,造成了系统中还存在许多不足,功能上还不够完善。
以后我会继续努力,大胆创新,争取能编写出透射着自己思想的程序。
这次课程设计让我充分认识到了自己的不足,认识到了动手能力的重要性。
我会在以后的学习中更加努力锻炼自己,提高自己,让自己写出更好更完善的程序,为以后的编程打好基础!
附录
用户使用手册
1、卡号:
123456密码:
123456
2、根据提示,输入指定内容即可。
程序源代码
//#include"
stdafx.h"
#include<
iostream>
string>
vector>
conio.h>
iomanip>
Windows.h>
#pragmawarning(disable:
4996)
usingnamespacestd;
/***************************类******************************/
ATM(stringc,stringp,floatm):
card(c),password(p),money(m){}//构造函数
times=0;
classface:
face(stringc,stringp,floatm):
ATM(c,p,m){}//构造函数
voidface:
show()
cout<
endl<
"
**********************"
<
endl;
1.查询余额"
2.ATM取款"
3.ATM存款"
4.修改密码"
5.退出"
请输入您需要查询的信息:
if(times==3)
cout<
while
(1)
cin>
a;
b;
if(card!
=a||password!
=b)
cout<
intcount=0,i,j,flag=1;
cin>
oldpassword;
if(password==oldpassword)
newpassword;
if(newpassword.size()>
=6)
for(i=0;
i<
i++)
for(j=i+1;
j<
j++)
if(newpassword[i]==newpassword[j])
if(count<
while(flag)
cout<
cin>
secondpassword;
if(newpassword==secondpassword)
cout<
flag=0;
flag=1;
cout<
exitsystem()
exit(0);