C自动取款机ATM课程设计报告解读

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

成绩:
洛阳师范学院
2013-2014 学期

C + +语言程序设计》
课程设计报告
设计名称:模拟自动取款机 ATM
姓 名黄双双 学 号: 131124001 专业班级: 网络工程 学 院: 信息技术学院
设计时间: 2014年6月
设计地点: 宿舍
指导教师评语:
指导教师签字: _______________
年 月 日
1•课程设计目的 ............................................................... 3 2•课程设计任务与要求 ......................................................... 3 3•课程设计说明书 . (4)
4•课程设计成果 (6)
5•程序调试过程 (18)
6•设计问题的不足和改进方案 (18)
7•课程设计心得 (19)
8•参考文献
20
1 .课程设计目的
《C++语言程序设计》课程设计是这门课程的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C++的知识点,又接近工程实际需要。

目的是通过课程设计的综合训练,培养学生实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握C++这
门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。

2. 课程设计任务与要求:
3. 课程设计说明书
⑴概要设计
本案例涉及一个银行卡和ATM机之间的“对话”。

需要处理两个对象,即:ATM和银行卡,因此可以考虑定义两个类来解决这个问题。

(1)ATM机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。

需要实现:“核对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。

可以将这些操作定义为ATM 机类的成员函数。

(2)银行卡类:具有“用户姓名”、“用户密码”、“存款额”等特征。

需要实现“身份验证” 、“查询余额”、“修改密码”、“交易成功更改余额”等操作。

将这些操作定义为银行卡类的成员函数。

模块说明:
在我设计的程序中一共包括了五个模块,分别是:核对密码、修改密码、取款、查询信息、退出系统模块。

这六个模块中新增、查找和修改都是独立分开作为子函数的,另外三个则是作为switch语句中的一部分,通
过switch语句,把五个大模块联系了起来,同时,为了实现多次使用这五大模块,就在switch语句外加了while
循环。

模块结构图:
⑵详细设计
总体流程图
各功能模块流程图
业劝能界面
燼改畫码1轉1
存款査询繍■就
---------------------------- ■r q
输人紹和糊
X J
厂1
觀一项
(多
页)
核对密码
4.
课程设计成果
程序源代码,运行结果(可用屏幕抓图的方法说明) (五号,宋体) #in clude<iostream.h> #in clude<stri ng.h > #in clude<stdio.h>
#in elude <stdlib.h> class con sumer;
class ATM { public:
ATM(c on sumer & cn ):c nsm(c n) { }
void welcome 。

; // 登陆界面
bool check_passwd(char n [],char pwd[]); //void cha nge_passwd(); void fetchm on ey(); // void in formatio n(); // void exitATM(); // void function show(); void lock(); //
// 修改密码 取款
查询信息 退出系统 II
功能界面
锁机
con sumer &cnsm; };
class con sumer II 用户
{ public:
friend class ATM;
con sumer(char Name[],char Num[], float Mon ey,char Password]]); protected: char* get_ name(); II 取得姓名 char* get_kahao(); II 取得卡号 char* get_passwd(); II
取得密码
private: int times; II
记录密码输入次数
构造函数,建立
float get_mo ney(); // 取得余额
void set_passwd(char pwd[]); // 设置密码 void set_m on ey(float m); //
取钱
private:
char passwd[10]; // 用户密码 char n ame[20]; // 用户姓名 char kahao[20]; // 用户卡号 float mo ney; // 用户余额
};
con sumer::c on sumer(char Name[],char Kahao[], float Mon ey,char Password]]) // 账户 {
strcpy (n ame,Name); strcpy(kahao,Kahao); mon ey=Mon ey;
strcpy(passwd,Password); }
float con sumer::get_ mon ey() // { return mon ey; }
取得余额
char*c on sumer::get_ name() // {
return n ame; }
取得姓名
char*c on sumer::get_kahao() // 取得卡号
{
return kahao; }
char*c on sumer::get_passwd() // 取得密码
{
"<<e ndl;
retur n passwd; }
void con sumer::set_passwd(char pwd[])〃 设置密码
{
strcpy(passwd,pwd); }
void ATM::welcome() // 登录界面 {
times=0;
cout<<"*欢迎使用银行ATM 自动取款机*"<<endl; char pwd[10], num[20],ch; int i=0; do {
i=0;
cout<<endl<<"请输入卡号:"; do {
cin. get(ch); nu m[i++]=ch; }while(ch!='\n'); n um[i-1]='\0: i=0;
cout<<"请输入密码:"; do {
cin. get(ch); pwd[i++]=ch; }while(ch!='\n'); pwd[i-1]='\0';
if(!check_passwd( nu m,pwd)) {
cout<<"你输入的卡号或密码有误,请从新输入 times++; } else
{
fun ctio nshow();
}
}while(times<3);
lock();
} bool ATM::check_passwd(char nu m[],char pwd[])
{
if(strcmp( nu m,c nsm.get_kahao())==0&&strcmp(pwd,c nsm.get_passwd())==O) return true;
else
return false;
}
void ATM::fu ncti on show()
{
int n;
do
{
cout <<e ndl<<" 请输入相应的操作序号进行操作:"<<e ndl;
cout<<"1)修改密码"<<endl
<<"2)取款"<<endl
<<"3)查询余额"<<endl
<<"4)退出系统"<<endl;
cout<<"$>\\";
cin»n;
while( n <1|| n>4)
{
cout<<"请输入正确的操作序号!"<<endl;
cout<<"$>\\";
cin»n;
}
switch( n)
{
case 1: cha nge_passwd();
break;
case 2: fetchm on ey();
break;
case 3: in formati on();
break;
case 4: exitATM();
break;
}
}while(true);
}
void ATM::cha nge_passwd()
{
char pwd[10],repwd[10];
times=0;
do
{
cout<<endl<<"请输入旧密码:";
cin> >pwd;
if(!check_passwd(c nsm.get_kahao(),pwd)) times++;
else
break;
}while(times<3);
if(times==3)
lock();
int k=0;
int t=0;
do
{
k=0;
cout<<"请输入新密码:";
cin> >pwd;
int g=0;
int v=0;
g=strle n( pwd);
if(g<6)
{
k=1;
cout<<"密码不能小于6位"<<endl;
}
for(i nt i=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;
if((t=strcmp(pwd,repwd))!=O)
{
cout<<"你输入的两次密码不一样,请重新输入!"<<endl;
}
}
}while(t!=0||k==1);
cn sm.set_passwd(pwd);
cout<<"密码修改成功,请牢记!"<<endl;
}
void ATM::fetchmo ney()
{
float m;
char ch;
do
{
cout<<endl<<"你要取多少钱:"<<"\n$>\\";
cin»m;
while(m<=0)
{
cout<<"请输入正确的数字!"<<endl;
cout<<"$>\\";
cin»m;
}
if(m>5000)
{
cout<<"对不起,每次最多取5000元"<<endl;
}
else
{
if((i nt)m%100!=0)
{
cout<<"对不起,取款金额为100的倍数"<<endl;
}
else
{
if(cn sm.get_ mon ey()-m<0)
{
cout<<"对不起,你的余额不足!"<<endl;
}
else
{
cout<< en dl<<" 操作成功,请收好钱!” <<e ndl;
cn sm.set_ mon ey( m );
}
}
}
cout<<"是否要继续该项操作:(Y/N)"<<endl;
cout<<"$>\\";
cin> >ch;
while(ch!=' n'&&ch!='Y'&&ch!='y')
{
cout<<"$>\\";
cin> >ch;
}
}while(ch=='y'||ch=='Y');
} .........................................................................................................................
cout<<"* cout<<
"* "<<e ndl; 先构造一个用户
void ATM::i nformati on()
{
cout<<"*"<<e ndl; 用户姓名:"<<cnsm.get_name()<<endl;
卡号: "<<cnsm.get_kahao()<<endl;
余额:"<<cnsm.get_money()<<endl;
void ATM::lock()
{
cout<<e ndl<<" 感谢你对本银行的支持,欢迎下次光临!
cout<<" 请取卡......."<<endl;
}
void ATM::exitATM()
{
cout<<"成功退出系统!谢谢惠顾! "<<endl;
exit(0);
} void con sumer::set_ money (float m)
{
mon ey=mon ey-m;
}
int mai n()
{
con sumer c1("Me","123456",10000.00F,"123456");〃
ATM atm(c1);
atm.welcome();
return 0;
} .........................................................................................cout<<" **************************
"<<e
ndl;
cout<<" ************************** "<<e
ndl;
运行结果1.输入密码
2•修改密码
谓|入相应的操作序号进行操作:
2薩改密码
e 退出索统
成功退出系统!谢谢惠吗!
Press antj cont inu^
4.查询余额 3.取款 庐要取多少钱I
S?M00 请iAtB 应的操作序号逬行採作: "修改密码 /退出系统
3>\2
钱作 i 收

请该 功继 成应弼额统一 帕密余系 入改香出 m 5退出系统
6.用户名密码输入错误三次,自动退出,锁机吞卡
6.设计问题的不足和改进方案
本课程设计是在汉化环境下操作的,对系统要求相对严格。

在输入信息时,每输入一条信息后用ENTER键结束,然后继续下一条信息的输入。

如果不能按照规定方法录入,将导致信息混乱不清,只有重新启动系统开始新的输入。

策略是:只有人为的去掌握输入方法,正确操作;还有是对程序改进,使程序对一些非法输入给予忽略,提示重新输入。

在本程序中使用了struct数据类型,所用最多的是WHILE循环结构和IF语句,然而这也正为了它的特色。

循环体的嵌套思路清晰,目的明确,格式规范,易于阅读和理解。

If语句的逐层运用,正形象化的描述了计算机工作流程,而且与人的一般习惯相吻合,简单明了,易于观察理解它的来龙去脉,思路清晰直观。

该程序是在汉化系统下编写完成的,所以它支持在汉化系统下运行,还支持在普通系统下运行,它允许完全用中文操作,包括对信息的添加浏
用方式;函数在编程中的具体应用;以及变量存储特征与标识符的作用域,通过实践,使我在这些方面有了认识和提高。

课程设计它是一项任务,更是一种挑战和历练。

在课程设计中,为了使用时方便,着重对不足方面的知识进行了分析与理解,在这一过程中对文件的操作有了很大的提高。

通过实际的演练,可以增强对知识的理解和运用能力。

8.参考文献:
[1] 吴乃陵,况迎辉.C++课程设计.北京:高等教育出版社,2006
[2] 谢昕,刘觉夫,王更生.C++程序设计.北京:北京邮电大学出版社,2008
[3] 王挺、周会平、贾丽丽、徐锡山.C++程序设计[M].北京:清华大学出版社,2005:138-221.
[4] 刘瑞新.Visual C++ 面向对象程序设计教程[M].北京:机械工业出版社,2005.
[5] 《Visual C++ 6 编程宝典》
⑹《C++Builder精彩编程实例集锦》
[7] 《C++ Primer (3RD)中文版》
[8] 《C++ STL (中文版)》
[9] 《C++多范型设计》。

相关文档
最新文档