搜档网
当前位置:搜档网 › C++自动取款机ATM课程设计报告

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

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

《c++语言程序设计》课程设计报告
洛阳师范学院
第 1 页 共 19 页
2013-2014 学期
《 c++语 言 程 序 设 计 》
课程设计报告
设计名称:模拟自动取款机 ATM 姓 名:黄双双 学 号:131124001 专业班级:网络工程 学 院:信息技术学院 设计时间:2014 年 6 月 设计地点:宿舍
指导教师评语:
成绩:
指导教师签字:
年月日

《c++语言程序设计》课程设计报告
第 2 页 共 19 页
目录
1.课程设计目的 ··············································································3 2.课程设计任务与要求 ·····································································3 3.课程设计说明书 ···········································································4 4.课程设计成果 ··············································································6 5.程序调试过程 ············································································18 6.设计问题的不足和改进方案 ··························································18 7.课程设计心得 ············································································19 8.参考文献 ··················································································20

《c++语言程序设计》课程设计报告
第 3 页 共 19 页
1.课程设计目的
《c++语言程序设计》课程设计是这门课程的实践性教学环节之一,本次设计结合实际应用的要求,使课 程设计既覆盖 C++的知识点,又接近工程实际需要。目的是通过课程设计的综合训练,培养学生实际分析问 题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握 C++这 门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。
2.课程设计任务与要求:
要求:
本次课程设计利用《c++语言程序设计》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作
量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。
要求:
1、对系统进行功能需求分析
2、设计合理的数据结构和系统框架
3、编程简练,程序功能齐全,能正确运行
4、说明书、流程图要清楚 5、课题完成后必须按要求提交课程设计报告 (1)分析系统中的各个实体之间的关系及其属性和行为; (2)根据问题描述,设计系统的类层次; (3)完成类层次中各个类的描述(包括属性和方法); (4)完成类中各个成员函数的定义; (5)完成系统的模块组装、调试;
任务:
(1)ATM 机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。需要实现:
“核对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。可以将这些操作定义为
ATM 机类的成员函数。(2)银行卡类:具有“用户姓名”、“用户密码”、“存款额”等特征。需要实现“身份
验证”、“查询余额”、“修改密码”、“交易成功更改余额”等操作。将这些操作定义为银行卡类的成员函数。
(1) (2) (3)
模拟自动取款机(ATM)的流程,实现查询银行卡余额、取款、修改密码、退出系统等功能; 卡号、密码错误时最多输入 3 次,否则直接退出系统。 取款金额受信用卡余额、ATM 机单笔最大取款金额及 ATM 机当前剩余金额的限制。

《c++语言程序设计》课程设计报告
第 4 页 共 19 页
3.课程设计说明书
⑴概要设计
本案例涉及一个银行卡和 ATM 机之间的“对话”。需要处理两个对象,即:ATM 和银行卡,因此可以考虑 定义两个类来解决这个问题。
(1)ATM 机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。需要实现:“核 对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。可以将这些操作定义为 ATM 机类的成员函数。
(2)银行卡类:具有“用户姓名”、“用户密码”、“存款额”等特征。需要实现“身份验证”、“查询余 额”、“修改密码”、“交易成功更改余额”等操作。将这些操作定义为银行卡类的成员函数。 模块说明:
在我设计的程序中一共包括了五个模块,分别是: 核对密码、修改密码、取款、查询信息、退出系统模块。 这六个模块中新增、查找和修改都是独立分开作为子函数的,另外三个则是作为 switch 语句中的一部分,通 过 switch 语句,把五个大模块联系了起来,同时,为了实现多次使用这五大模块,就在 switch 语句外加了 while 循环。
模块结构图:

《c++语言程序设计》课程设计报告
⑵详细设计 总体流程图: 各功能模块流程图:
第 5 页 共 19 页

《c++语言程序设计》课程设计报告
4.课程设计成果
程序源代码,运行结果(可用屏幕抓图的方法说明)(五号,宋体)(多页) #include #include #include #include
class consumer;
class ATM
{
public:
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(); //取得密码
第 6 页 共 19 页

《c++语言程序设计》课程设计报告 float get_money(); //取得余额 void set_passwd(char pwd[]); //设置密码 void set_money(float m); //取钱
第 7 页 共 19 页
private:
char passwd[10]; //用户密码
char name[20]; //用户姓名
char kahao[20]; //用户卡号
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; }
//取得卡号
//构造函数,建立

《c++语言程序设计》课程设计报告 char*consumer::get_passwd() //取得密码 {
return passwd; }
void consumer::set_passwd(char pwd[])//设置密码 {
strcpy(passwd,pwd); }
void ATM::welcome() //登录界面 {
times=0; cout<<"*欢迎使用银行 ATM 自动取款机*"<i=0; cout<cin.get(ch); num[i++]=ch; }while(ch!='\n'); num[i-1]='\0'; i=0; cout<<"请输入密码:"; do { cin.get(ch); pwd[i++]=ch; }while(ch!='\n'); pwd[i-1]='\0'; if(!check_passwd(num,pwd)) { cout<<"你输入的卡号或密码有误,请从新输入"<第 8 页 共 19 页

《c++语言程序设计》课程设计报告 } else { functionshow(); }
}while(times<3); lock(); }
bool ATM::check_passwd(char num[],char pwd[]) {
if(strcmp(num,cnsm.get_kahao())==0&&strcmp(pwd,cnsm.get_passwd())==0) return true;
else return false;
}
void ATM::functionshow()
{
int n;
do
{
cout <cout<<"1)修改密码 "<<<"2)取款
"<<<"3)查询余额 "<<<"4)退出系统 "<cout<<"$>\\";
cin>>n;
while(n<1||n>4)
{
cout<<"请输入正确的操作序号!"<cout<<"$>\\";
cin>>n;
}
switch(n)
{
case 1: change_passwd();
第 9 页 共 19 页

《c++语言程序设计》课程设计报告 break;
case 2: fetchmoney(); break;
case 3: information(); break;
case 4: exitATM(); break;
} }while(true); }
void ATM::change_passwd() {
char pwd[10],repwd[10]; times=0; do {
cout<>pwd; if(!check_passwd(cnsm.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=strlen(pwd); if(g<6)
第 10 页 共 19 页

《c++语言程序设计》课程设计报告 { k=1; cout<<"密码不能小于 6 位"<6&&v!=g) { cout<<"请再输入一次新密码:"; cin>>repwd; if((t=strcmp(pwd,repwd))!=0) { cout<<"你输入的两次密码不一样,请重新输入!"<}while(t!=0||k==1); cnsm.set_passwd(pwd); cout<<"密码修改成功,请牢记!"<void ATM::fetchmoney( ) {
float m; char ch; do {
cout<\\"; cin>>m; while(m<=0)
第 11 页 共 19 页

《c++语言程序设计》课程设计报告 { cout<<"请输入正确的数字!"<\\"; cin>>m; } if(m>5000) { cout<<"对不起,每次最多取 5000 元"<\\"; cin>>ch; while(ch!='n'&&ch!='Y'&&ch!='y') { cout<<"$>\\"; cin>>ch; }
}while(ch=='y'||ch=='Y'); }
第 12 页 共 19 页

《c++语言程序设计》课程设计报告
void ATM::information() {
cout<<"**************************"<void ATM::lock() {
cout<}
void ATM::exitATM() {
cout<<"成功退出系统!谢谢惠顾!"<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; }
第 13 页 共 19 页

《c++语言程序设计》课程设计报告 运行结果 1.输入密码
2.修改密码
第 14 页 共 19 页

《c++语言程序设计》课程设计报告
3.取款
4.查询余额
5 退出系统
第 15 页 共 19 页

《c++语言程序设计》课程设计报告
6.用户名密码输入错误三次,自动退出,锁机吞卡
第 16 页 共 19 页

《c++语言程序设计》课程设计报告
5.程序调试过程
第 17 页 共 19 页
写出程序调试步骤 (4) 模拟自动取款机(ATM)的流程,实现查询银行卡余额、取款、修改密码、退出系统等功能; (5) 卡号、密码错误时最多输入 3 次,否则直接退出系统。 (6) 取款金额受信用卡余额、ATM 机单笔最大取款金额及 ATM 机当前剩余金额的限制。 1.根据程序设定好的用户名密码输入,用户名为 123456,密码为 123456. 2.根据题目要求修改密码,原密码为 123456,新密码为 1234567,重复新密码 1234567 3.取出现金 100 4.查询余额,剩余 9900 5 退出系统 6.次密码错误自动退出系统,锁机吞卡 遇到的问题 开始不会输入用户名用户密码,得提前设定,其次输入密码三次错误,没有自动锁机,需要再设定,while 函 数用不熟,各模块联系不上,最高取款限额,还有查询余额都得用分支模块处理。 ATM 机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。需要实现:“核对密码”、 “修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。将这些操作定义为 ATM 机类的成员 函数没有紧密联系。 行卡类:具有“用户姓名”、“用户密码”、“存款额”等特征。需要实现“身份验证”、“查询余额”、“修改密码”、 “交易成功更改余额”等操作。将这些操作定义为银行卡类的成员函数不能很好运行。在本程序中使用了 struct 数据类型,所用最多的是 WHILE 循环结构和 IF 语句,然而这也正为了它的特色。循环体的嵌套思路清晰, 目的明确,格式规范,易于阅读和理解。 If 语句的逐层运用,正形象化的描述了计算机工作流程,而且与人的一般习惯相吻合,简单明了,易于观察理 解它的来龙去脉,思路清晰直观。该程序是在汉化系统下编写完成的,所以它支持在汉化系统下运行,还支持 在普通系统下运行,它允许完全用中文操作,包括对信息的添加浏览和查询等功能,它使用的指针是动态分配 内存的,允许用户大量的信息录入,对它的长短不加限制,这样就方便了很多。而且中文环境更加方便使用, 一目了然。
6.设计问题的不足和改进方案
本课程设计是在汉化环境下操作的,对系统要求相对严格。在输入信息时,每输入一条信息 后用 ENTER 键结束,然后继续下一条信息的输入。如果不能按照规定方法录入,将导致信息混乱 不清,只有重新启动系统开始新的输入。策略是:只有人为的去掌握输入方法,正确操作;还有 是对程序改进,使程序对一些非法输入给予忽略,提示重新输入。
在本程序中使用了 struct 数据类型,所用最多的是 WHILE 循环结构和 IF 语句,然而这也正 为了它的特色。循环体的嵌套思路清晰,目的明确,格式规范,易于阅读和理解。 If 语句的逐层运用,正形象化的描述了计算机工作流程,而且与人的一般习惯相吻合,简单明 了,易于观察理解它的来龙去脉,思路清晰直观。该程序是在汉化系统下编写完成的,所以它支 持在汉化系统下运行,还支持在普通系统下运行,它允许完全用中文操作,包括对信息的添加浏

《c++语言程序设计》课程设计报告
第 18 页 共 19 页
览和查询等功能,它使用的指针是动态分配内存的,允许用户大量的信息录入,对它的长短不加
限制,这样就方便了很多。而且中文环境更加方便使用,一目了然。
因为系统只是要求模拟并不牵涉到真实的一些处理,所以很多真实的应用并不没有加在里面,一
些与真实的自动化机器的接口连接并没有做到。在程序运行时有时会因为输入的数字过大而出现
内存溢出,程序崩溃现象,经过调试改正已经有了很大改观,但仍然存在不可知的错误。
首先遇到的问题就是系统分析不足的问题在大致考虑了一些功能后就开始动手做,想到哪里做到
哪里,一度陷入了困境,其后从新开始理清了思绪,画好了流程图在做,随即顺畅了许多。其次
就是与数据库连接上的问题,由于对 VB 与 SQL 连接的不熟走了很多弯路,使程序设计需要用到
数据库时复杂化,过后通过老师同学指点,采用了 ADO 控件的动态连接,才解决一个头疼的问题。
其后的问题都是程序中逻辑性的一些小问题,大多数都是一些遗漏,导致程序死循环,或者是数
据库写入不去作用等等,都是通过仔细重新分析检查一一解决。在所有代码编写完成后,再一一
验证其功能,修正了很多不足,也使得程序慢慢完善起来。
7.课程设计心得
通过用面向推想的编程概念作为主导思想,我们体会不少,不过由于时间非常的紧迫,我 们也只能说说我们的一些主要体会: 在程序中我们设计了一个抽象基类和由这个基类派生出去的这使我们体会到了真正思想,也感觉 到对面向对象程序设计确实抽象,这需要我们在编程实践去慢慢体会,慢慢总结。
面向对象的编程概念的最主要的特性是:继承和多态。 关于多态,在面向对象的程序设计中它的含义是“相似”,两个对象如果具有一定的相似性但又 有些区别的话,那么它们具有多态性;在 C++中,我们通过基类的和 references,借助虚拟机制 对派生类进行动态操作。用关键字可使函数有了晚捆绑的灵活性(即动态绑定)函数表示允许在 相同家族中的类有不同的行为,这也正是多态形成的原因。virtual 函数允许它与基类那个函数 不同(即允许改写基类定义的函数)。会使我们的程序的修改和增删极为方便。
当然基类中函数无实质实现内容的话,也可将 virtual 函数赋值为 0,则变为虚拟函数了, 那么基类也就成了抽象基类,不能用来产生任何对象,只提供接口给派生类用,仅作为派生类的 子对象来用。
关于继承,基类用以描述系统中一些对象的思想核心,派生出其他类型(派生类)用来表 达了认识该核心的不同途径。在编程的过程中由于对基类的继承机制,使得一些共通的数据和操 作只需写一份代码,而无须重复写多份代码,从而大大方便了编程,减少大量的工作量;还有, 如果你以后想增加程序的功能,需要再加一个派生类,呵呵~这下基类就派上用场了,直接增加 一个对基类继承的派生类,你就可以直接给老板打电话说我已经把新功能加进去了,我们发现: 其实继承就是一个积累和发展的过程,就像文化的积累和发展一样,整个面向对象的编程过程是 在向后兼容。
设计中我们采用循序渐近、逐步完善的策略,让继承与多态有充分的体现 经过一个学期的学习和上机实践,使我对 C++语言有了更认识和和了解,要想学好它要重在 实践,要通过不断的上机操作才能更好的学习它,通过实践,我也发现我的好多不足之处,对各 种控制结构及语句、数组的基本与高级应用、指针数组、字符数组、动态数组、函数的定义、调

《c++语言程序设计》课程设计报告
第 19 页 共 19 页
用方式;函数在编程中的具体应用;以及变量存储特征与标识符的作用域,通过实践,使我在这
些方面有了认识和提高。课程设计它是一项任务,更是一种挑战和历练。在课程设计中,为了使
用时方便,着重对不足方面的知识进行了分析与理解,在这一过程中对文件的操作有了很大的提
高。通过实际的演练,可以增强对知识的理解和运用能力。
8. 参考文献:
[1]吴乃陵, 况迎辉.C++课程设计. 北京:高等教育出版社,2006 [2]谢昕,刘觉夫,王更生.C++程序设计.北京:北京邮电大学出版社,2008 [3] 王挺、周会平、贾丽丽、徐锡山. C++程序设计[M]. 北京:清华大学出版社,2005:138-221. [4] 刘瑞新. Visual C++面向对象程序设计教程[M]. 北京:机械工业出版社,2005. [5]《Visual C++ 6 编程宝典》 [6]《C++Builder 精彩编程实例集锦》 [7]《C++ Primer (3RD)中文版》 [8]《C++ STL(中文版)》 [9]《C++多范型设计》

相关主题