基于某面向对象思想地ATM系统设计与实现.docx
《基于某面向对象思想地ATM系统设计与实现.docx》由会员分享,可在线阅读,更多相关《基于某面向对象思想地ATM系统设计与实现.docx(18页珍藏版)》请在冰豆网上搜索。
基于某面向对象思想地ATM系统设计与实现
基于面向对象思想的ATM系统设计与实现
课程名称:
VC++面向对象思想程序设计
班级:
电子信息工程2班指导教师:
刘帅
日期:
2016年10月
小组编号:
电二一组
成员:
)
摘要:
在控制台编程中共设置了3个类,ATM类和card类和bankcard类,设计的程序完美的实现了设计要求,具有登陆、查询、取款、转账、修改密码、回到登录系统、退出系统等功能。
程序实现分为两个部分,其一是mfc部分,其二是控制台部分。
在要求的基础之上,改程序还增添了部分新功能,并对原有功能做了许多个性化修改,例如在登陆界面输入错误三次就会冻结账号退出系统,在mfc对话框中加入图片更加仿真系统。
在可视化控件编程中,通过建立多个对话框,并实现信息交流,完整的实现了要求的内容。
程序编辑较为复杂。
前言:
随着市场经济的繁荣发展,人们的物质生活得到极大的提高,手中的剩余资金也日益增多。
受传统观念影响,绝大多数人喜欢把资金投进银行,而在需要使用现金的时候再到银行提取现金。
这就导致银行业务的急剧增加。
虽然银行网点越来越多,银行的工作效率也随着信息化有较明显的增长,但是依旧不能满足广大用户的需要。
而一味的增加营业网点,从理论上虽然能稍微的缓解银行的压力,但是治标不治本,而且每增加一个网点,不仅要付出昂贵的资金成本,还需要长期投入人力资本,成本非常之昂贵。
这时候就迫切的需要一种自动的,易于普及的,低成本的设备来解决这一问题。
于是ATM机系统应运而生了。
银行提款机已经发展成各大银行金融服务战略中的重要一环,为广大用户提供了更加快捷和人性化的服务,银行提款机成为我们日常生活中不可缺少的一部分。
该项目正是通过设计一个ATM模拟模拟程序来实现ATM机系统的基本功能,充分运用自己所学的c++知识进行设计编程。
研究报告:
一、项目需求:
总体思路
模拟自助取款机,通过两种编程实现
1、C++控制台编程实现ATM,至少实现提款机登陆、取款、修改密码、查询余额。
2、MFC控件编程实现ATM,至少实现提款机登陆、查询余额、取款和退出系统功能。
项目实际达成效果:
1、实现提款机登陆、修改密码、查询信息、汇款转账、回到登陆界面、取款、退卡等功能;
2、提款机登陆自动验证密码,密码错误无法登陆;
3、在登陆、修改密码等操作过程中,连续输入三次密码错误则无法完成相关操作,自动退出程序。
4、在任何情况下输入错误的序号均有提示。
特色:
控制台程序部分:
1、在基础要求的基础上在程序中添加了延迟函数Sleep,使整个界面更加仿真ATM机。
2、加入清屏函数与暂停函数,等待用户进行响应后再进行下一个进程,更加人性化。
3、在欢迎界面会输出用户的姓名,如“欢迎您,李四”。
4、在原本单用户系统的基础上进行修改,使其增加了多个用户,多个用户之间可以通过汇款实现金额的增减。
5、汇款的实现,即当用户选择汇款账号以后,被汇款的一方金钱真的会增加。
6、程序本身并没有将帐号和密码导入文件,实际上,我们组经过讨论后一致认为,这样做其实很有风险,如果有黑客修改了文件中的数据,那么系统将会无法正确读取数据,系统将会崩溃。
为了弥补这一不足,我们将用户的数据直接写入程序,同时增加了回到登录界面的选项。
MFC部分:
1、MFC主界面中增加了图片,更加仿真银行ATM.
2、修改了TAB键顺序,使用户可以不再用鼠标操作。
二、项目实施
由于代码太过冗长影响阅读,已将代码和mfc的展示调至本文结尾。
通过程序要求,我们可以清楚的知道本次设计的ATM柜员模拟程序需要实现四大功能,即查询余额、取款、汇款、修改密码。
除此之外,作为ATM系统,还需要最基本的两大功能,即登陆和退出(还应包括回到登陆界面)。
在程序的大体框架确定之后,我们需要了解各个模块所要实现和需要具有的功能。
根据现有的银行ATM系统,我们可以很快就可以了解本次设计的ATM系统应该具有的操作。
Ⅰ控制台部分
(1)登陆界面
总共设定了三个用户,帐号密码分别为“001”“111111”“002”“222222”“003”“333333”,
帐号密码均正确方可进入。
(2)主界面
主界面包括查询、取款、汇款、修改密码、回到登陆界面、退出的功能选项,输入正确序号可进行相关操作。
(3)查询界面
在主界面中按下查询按钮可以进行查询操作。
通过查询功能我们可以查询账户的余额,在查询过程中我们可以选择取款的业务,除此之外,查询界面之中还有返回的操作。
返回的操作会使用户回到主界面。
(4)取款界面
取款界面可以通过主界面进入。
取款功能在控制台中输入你想要取出的金额。
在控制台编程中,为了实现在不取钱的情况下返回主菜单,添加了一个设定,即输入取款0元即可返回主菜单。
(5)转账界面
转账界面需要通过主界面进入。
可以根据提示输入汇款账号和汇款金额,汇款金额超出当前用户最高金额时会提示汇款失败。
(6)修改密码
选择修改密码按钮可以进行修改密码操作,但是要先输入就密码正确并且两次输入新密码一致才可以修改密码。
修改完成后,会返回登陆界面重新登录,此时,若输入修改之前的密码,将会导致无法进入系统。
(7)回到登陆界面
回到可以再次输入帐号和密码的界面。
(8)退出系统
直接退出系统,程序控制台关闭。
ⅡMFC部分
(1)登陆界面
单用户系统,账号为001,密码为123456。
错误三次直接退出系统。
(2)主界面
主界面包括查询、取款、修改密码、退出的功能选项,可通过鼠标点击,也可通过TAB键控制(TAB键顺序已经被设定好了)进行相关操作。
(3)查询界面
在主界面中按下查询按钮可以进行查询操作。
通过查询功能我们可以查询账户的余额,除此之外,查询界面之中还有返回的操作。
返回的操作会使用户回到主界面。
(4)取款界面
取款界面可以通过主界面进入。
取款功能在控制台中输入你想要取出的金额。
在控制台编程中,为了实现在不取钱的情况下返回主菜单,添加了一个按钮,点击即可返回主菜单。
(5)修改密码
选择修改密码按钮可以进行修改密码操作,但是要先输入就密码正确并且两次输入新密码一致才可以修改密码。
修改完成后,会返回登陆界面重新登录,此时,若输入修改之前的密码,将会导致无法进入系统。
(
(6)退出系统
弹出提示,确认是否要退出系统,点击取消返回主界面,点击确认退出系统。
三、体会与参考文献
在这次的项目中,我们主要运用了mfc与控制台编程方面的知识,加深了对C++语言中各个基础知识点的了解和应用,将自己所学的知识运用到实际操作当中,而不再是纸上谈兵。
通过这次设计,我们深刻感受到了面向对象语言中类库的强大功能,掌握了运用C++中的类实现某些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础。
由于时间仓促,脑中有许多想法仍然没有实现,比如加入定时器,实现将账号与密码导入到文件并将文件隐藏,在MFC中实现语音提示等等,也还有一些不足,比如:
在控制台程序中实现了将输入的密码输出为“******”,但还没有解决按退格键无法删除字符的问题;当在登陆界面校验账号与密码时,如果添加一条语句实现不存在账户的提醒,exe文件就会停止运行的问题等等,尽管我们的项目还有很多不足,它仍然帮助我们加深了对课堂上知识的理解。
参考文献
CSDN论坛,XX文库,豆丁网,C++面向对象程序设计教程第三版(陈维兴林小茶编著)
控制台代码展示:
#include
#include
#include
#include
#include
usingnamespacestd;
classcard{//基类:
卡类
protected:
stringname;
stringaccount;
stringpassword;
public:
card(stringn,stringa,stringp);
voidmodifypsw();//修改密码功能
};
classATM;
classbankcard:
publiccard{//共有派生类:
银行卡类
intmoney;//比卡类多出了一个金钱属性
friendATM;//友元类ATM,使ATM类能够访问银行卡类的私有成员
public:
bankcard(stringn="0",stringa="0",stringp="0",intm=0);
};
classATM{//ATM类,模拟自助取款机主系统·
public:
voidtakemoney(bankcard&);//取款函数
voidmodifypsw(bankcard&);//修改密码函数
voidrestmoney(bankcard);//查询余额函数
voidwelcome();//欢迎界面函数
voidbye();//再见函数
voidtest(bankcard*);//用来检验账号与密码是否匹配
voidprintname(bankcardx)
{
Sleep(1000);
cout<<"--------------------------------"<cout<<"欢迎您,"<cout<<"--------------------------------"<Sleep(500);
}
voidtransport(bankcard&,bankcard*);
};
card:
:
card(stringn,stringa,stringp)
{
name=n;
account=a;
password=p;
}
voidATM:
:
modifypsw(bankcard&x)//修改密码
{
inta=0;
stringpsw1,psw2,password;
do{
cout<<"请输入原密码:
"<charch;
while((ch=_getch())!
=13){password+=ch;cout<<"*";}
cout<if((x.password==password))a=1;
else{password="";cout<<"密码错误,请重新输入!
"<}while(!
a);
cout<<"请输入新密码:
"<charch1;
while((ch1=_getch())!
=13){psw1+=ch1;cout<<"*";}
cout<cout<<"请再次输入新密码:
"<charch2;
while((ch2=_getch())!
=13){psw2+=ch2;cout<<"*";}
cout<if(psw1==psw2)
{
x.password=psw1;
cout<<"修改密码成功!
请重新登录系统!
\n";
Sleep(1000);
system("pause");
system("cls");
welcome();
test(&x);
}
else{
cout<<"密码修改失败,两次密码输入不一致!
"<Sleep(1000);
}
}
bankcard:
:
bankcard(stringn,stringa,stringp,intm):
card(n,a,p)
{
money=m;
}
voidATM:
:
takemoney(bankcard&x)//取款
{
intm;
cout<<"请输入想要取款的金额:
"<cin>>m;
if((x.money-m)<0){
Sleep(1000);
cout<<"余额不足,取款失败!
"<}
else{
Sleep(1000);
x.money-=m;cout<<"取款成功!
"<}
}
voidATM:
:
restmoney(bankcardx)//查询余额
{
Sleep(1000);
cout<<"余额为"<Sleep(1000);
}
voidATM:
:
transport(bankcard&y,bankcard*x)
{
intk;
bankcard*t;
stringaccount1;
intmoney1;
cout<<"请输入汇款账户号:
"<cin>>account1;
for(k=0;k<10;k++)
{
t=&x[k];
if(t->account==account1)break;
}
//if(t->account=="0")cout<<"查无此人,无法转账!
"<//else{
Sleep(1000);
cout<<"请输入汇款金额:
"<cin>>money1;
if((x[k].money-money1)<0){
Sleep(1000);
cout<<"余额不足,转账失败!
"<}
else{
x[k].money+=money1;
y.money-=money1;
Sleep(1000);
cout<<"汇款中,请稍后。
。
。
"<Sleep(1000);
cout<<"汇款成功!
"<}
//}
}
staticinti=0;
voidATM:
:
test(bankcard*x)//检验账号与密码是否匹配
{
bankcard*p;
stringaccount1,password1;
staticinta=0;
intt=0;
do{
{
cout<<"请输入账号:
"<cin>>account1;
for(i=0;i<10;i++)
{
p=&x[i];
if(p->account==account1)break;
}
{
cout<<"请输入密码:
"<//cin>>password1;
charch;
while((ch=_getch())!
=13){password1+=ch;cout<<"*";}
cout<if((p->password==password1))t=1;
else{
{if(a>1){cout<<"您的账号已被冻结!
"<password1="";
cout<<"账号或密码错误,您还有"<<2-a<<"次机会重新输入!
"<}
}
}
}while(!
t);
}
voidATM:
:
welcome(){
cout<<"--------------------------------"<cout<<"|欢迎使用中国银行自助取款系统!
|"<cout<<"--------------------------------"<Sleep(1000);
}
voidATM:
:
bye(){
Sleep(200);
cout<<"----------------------"<cout<<"|感谢您的使用,再见!
|"<cout<<"----------------------"<Sleep(500);
}
intmain()//主函数
{
bankcardb[3]{bankcard("张三","001","111111",10000),bankcard("李四","002","222222",20000),bankcard("王五","003","333333",30000)};
ATMa;
intt=1;
a.welcome();
a.test(b);
do{
a.printname(b[i]);
cout<<"--------------------------------"<cout<<"|请输入对应数字以选择服务项目|"<cout<<"|<1>取款|"<cout<<"|<2>查询余额|"<cout<<"|<3>转账|"<cout<<"|<4>修改密码|"<cout<<"|<5>回到登陆界面|"<cout<<"|<6>退出系统|"<cout<<"--------------------------------"<intc;
cin>>c;
switch(c)
{
case1:
a.takemoney(b[i]);break;
case2:
a.restmoney(b[i]);break;
case3:
a.transport(b[i],b);break;
case4:
a.modifypsw(b[i]);break;
case5:
a.bye();a.test(b);break;
case6:
a.bye();t=0;break;
default:
cout<<"输入无效!
"<}
}while(t);
return0;
}
MFC部分界面展示
1.登陆界面
2.主界面
3.取款界面
.
4.查询余额界面
5.修改密码界面