1.课程设计目的 3
2.课程设计任务与要求 3
3.课程设计说明书 4
4.课程设计成果 6
5.程序调试过程 18
6.设计问题的不足和改进方案 18
7.课程设计心得 19
8.参考文献 20
1.课程设计目的 |
《c++语言程序设计》课程设计是这门课程的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C++的知识点,又接近工程实际需要。目的是通过课程设计的综合训练,培养学生实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握C++这门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。 |
2.课程设计任务与要求: |
要求: 本次课程设计利用《c++语言程序设计》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。 要求: 1、对系统进行功能需求分析 2、设计合理的数据结构和系统框架 3、编程简练,程序功能齐全,能正确运行 4、说明书、流程图要清楚 5、课题完成后必须按要求提交课程设计报告 (1)分析系统中的各个实体之间的关系及其属性和行为; (2)根据问题描述,设计系统的类层次; (3)完成类层次中各个类的描述(包括属性和方法); (4)完成类中各个成员函数的定义; (5)完成系统的模块组装、调试; 任务: (1)ATM机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。需要实现:“核对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。可以将这些操作定义为ATM机类的成员函数。(2)银行卡类:具有“用户姓名”、“用户密码”、“存款额”等特征。需要实现“身份验证”、“查询余额”、“修改密码”、“交易成功更改余额”等操作。将这些操作定义为银行卡类的成员函数。 (1) 模拟自动取款机(ATM)的流程,实现查询银行卡余额、取款、修改密码、退出系统等功能; (2) 卡号、密码错误时最多输入3次,否则直接退出系统。 (3) 取款金额受信用卡余额、ATM机单笔最大取款金额及ATM机当前剩余金额的限制。 |
3.课程设计说明书 |
概要设计 本案例涉及一个银行卡和ATM机之间的“对话”。需要处理两个对象,即:ATM和银行卡,因此可以考虑定义两个类来解决这个问题。 (1)ATM机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。需要实现:“核对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。可以将这些操作定义为ATM机类的成员函数。 (2)银行卡类:具有“用户姓名”、“用户密码”、“存款额”等特征。需要实现“身份验证”、“查询余额”、“修改密码”、“交易成功更改余额”等操作。将这些操作定义为银行卡类的成员函数。 模块说明: 在我设计的程序中一共包括了五个模块,分别是: 核对密码、修改密码、取款、查询信息、退出系统模块。这六个模块中新增、查和修改都是独立分开作为子函数的,另外三个则是作为switch语句中的一部分,通过switch语句,把五个大模块联系了起来,同时,为了实现多次使用这五大模块,就在switch语句外加了while循环。 模块结构图: 详细设计 总体流程图: 各功能模块流程图: |
4.课程设计成果 程序源代码,运行结果(可用屏幕抓图的方法说明)(五号,宋体)(多页) #include<iostream.h> #include<string.h > #include<stdio.h> #include <stdlib.h> 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(); //取得密码 float get_money(); //取得余额 void set_passwd(char pwd[]); //设置密码 void set_money(float m); //取钱 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; } char*consumer::get_passwd() //取得密码 { return passwd; } void consumer::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 { (ch); num[i++]=ch; }while(ch!='\n'); num[i-1]='\0'; i=0; cout<<"请输入密码:"; do { (ch); pwd[i++]=ch; }while(ch!='\n'); pwd[i-1]='\0'; if(!check_passwd(num,pwd)) { cout<<"你输入的卡号或密码有误,请从新输入"<<endl; times++; } else { functionshow(); } }while(times<3); lock(); } bool ATM::check_passwd(char num[],char pwd[]) { if(strcmp(_kahao())==0&&strcmp(_passwd())==0) return true; else return false; } void ATM::functionshow() { int n; do { cout <<endl<<"请输入相应的操作序号进行操作: "<<endl; 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: change_passwd(); 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<<endl<<"请输入旧密码:"; cin>>pwd; if(!check__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) { k=1; cout<<"密码不能小于6位"<<endl; } for(int 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))!=0) { cout<<"你输入的两次密码不一样,请重新输入!"<<endl; } } }while(t!=0||k==1); cnsm.set_passwd(pwd); cout<<"密码修改成功,请牢记!"<<endl; } void ATM::fetchmoney( ) { 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((int)m%100!=0) { cout<<"对不起,取款金额为100的倍数"<<endl; } else { _money()-m<0) { cout<<"对不起,你的余额不足!"<<endl; } else { cout<< endl<<"操作成功,请收好钱!" <<endl; cnsm.set_money( m ); } } } cout<<"是否要继续该项操作:(Y/N)"<<endl; cout<<"$>\\"; cin>>ch; while(ch!='n'&&ch!='Y'&&ch!='y') { cout<<"$>\\"; cin>>ch; } }while(ch=='y'||ch=='Y'); } void ATM::information() { cout<<"**************************"<<endl; cout<<"*"<<endl; cout<<"* 用户姓名:"<&_name()<<endl; cout<<"* 卡号: "<&_kahao()<<endl; cout<<"* 余额: "<&_money()<<endl; cout<<"**************************"<<endl; } void ATM::lock() { cout<<endl<<"感谢你对本银行的支持,欢迎下次光临!"<<endl; cout<<"请取卡......."<<endl; } void ATM::exitATM() { cout<<"成功退出系统!谢谢惠顾!"<<endl; exit(0); } 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; } 运行结果 1.输入密码 2.修改密码 3.取款 4.查询余额 5退出系统 6.用户名密码输入错误三次,自动退出,锁机吞卡 |
5.程序调试过程 |
写出程序调试步骤 (4) 模拟自动取款机(ATM)的流程,实现查询银行卡余额、取款、修改密码、退出系统等功能; (5) 卡号、密码错误时最多输入3次,否则直接退出系统。 (6) 取款金额受信用卡余额、ATM机单笔最大取款金额及ATM机当前剩余金额的限制。 1.根据程序设定好的用户名密码输入,用户名为123456,密码为123456. 2.根据题目要求修改密码,原密码为123456,新密码为1234567,重复新密码1234567 3.取出现金100 4.查询余额,剩余9900 5退出系统 6.次密码错误自动退出系统,锁机吞卡c++课程设计报告 遇到的问题 开始不会输入用户名用户密码,得提前设定,其次输入密码三次错误,没有自动锁机,需要再设定,while函数用不熟,各模块联系不上,最高取款限额,还有查询余额都得用分支模块处理。 ATM机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。需要实现:“核对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。将这些操作定义为ATM机类的成员函数没有紧密联系。 行卡类:具有“用户姓名”、“用户密码”、“存款额”等特征。需要实现“身份验证”、“查询余额”、“修改密码”、“交易成功更改余额”等操作。将这些操作定义为银行卡类的成员函数不能很好运行。在本程序中使用了struct 数据类型,所用最多的是WHILE循环结构和IF语句,然而这也正为了它的特。循环体的嵌套思路清晰,目的明确,格式规范,易于阅读和理解。 If语句的逐层运用,正形象化的描述了计算机工作流程,而且与人的一般习惯相吻合,简单明了,易于观察理解它的来龙去脉,思路清晰直观。该程序是在系统下编写完成的,所以它支持在系统下运行,还支持在普通系统下运行,它允许完全用中文操作,包括对信息的添加浏览和查询等功能,它使用的指针是动态分配内存的,允许用户大量的信息录入,对它的长短不加限制,这样就方便了很多。而且中文环境更加方便使用,一目了然。 |
6.设计问题的不足和改进方案 |
本课程设计是在环境下操作的,对系统要求相对严格。在输入信息时,每输入一条信息后用ENTER键结束,然后继续下一条信息的输入。如果不能按照规定方法录入,将导致信息混乱不清,只有重新启动系统开始新的输入。策略是:只有人为的去掌握输入方法,正确操作;还有是对程序改进,使程序对一些非法输入给予忽略,提示重新输入。 在本程序中使用了struct 数据类型,所用最多的是WHILE循环结构和IF语句,然而这也正为了它的特。循环体的嵌套思路清晰,目的明确,格式规范,易于阅读和理解。 If语句的逐层运用,正形象化的描述了计算机工作流程,而且与人的一般习惯相吻合,简单明了,易于观察理解它的来龙去脉,思路清晰直观。该程序是在系统下编写完成的,所以它支持在系统下运行,还支持在普通系统下运行,它允许完全用中文操作,包括对信息的添加浏览和查询等功能,它使用的指针是动态分配内存的,允许用户大量的信息录入,对它的长短不加限制,这样就方便了很多。而且中文环境更加方便使用,一目了然。 因为系统只是要求模拟并不牵涉到真实的一些处理,所以很多真实的应用并不没有加在里面,一些与真实的自动化机器的接口连接并没有做到。在程序运行时有时会因为输入的数字过大而出现内存溢出,程序崩溃现象,经过调试改正已经有了很大改观,但仍然存在不可知的错误。 首先遇到的问题就是系统分析不足的问题在大致考虑了一些功能后就开始动手做,想到哪里做到哪里,一度陷入了困境,其后从新开始理清了思绪,画好了流程图在做,随即顺畅了许多。其次就是与数据库连接上的问题,由于对VB与SQL连接的不熟走了很多弯路,使程序设计需要用到数据库时复杂化,过后通过老师同学指点,采用了ADO控件的动态连接,才解决一个头疼的问题。其后的问题都是程序中逻辑性的一些小问题,大多数都是一些遗漏,导致程序死循环,或者是数据库写入不去作用等等,都是通过仔细重新分析检查一一解决。在所有代码编写完成后,再一一验证其功能,修正了很多不足,也使得程序慢慢完善起来。 |
7.课程设计心得 |
通过用面向推想的编程概念作为主导思想,我们体会不少,不过由于时间非常的紧迫,我们也只能说说我们的一些主要体会: 在程序中我们设计了一个抽象基类和由这个基类派生出去的这使我们体会到了真正思想,也感觉到对面向对象程序设计确实抽象,这需要我们在编程实践去慢慢体会,慢慢总结。 面向对象的编程概念的最主要的特性是:继承和多态。 关于多态,在面向对象的程序设计中它的含义是“相似”,两个对象如果具有一定的相似性但又有些区别的话,那么它们具有多态性;在C++中,我们通过基类的和references,借助虚拟机制对派生类进行动态操作。用关键字可使函数有了晚捆绑的灵活性(即动态绑定)函数表示允许在相同家族中的类有不同的行为,这也正是多态形成的原因。virtual函数允许它与基类那个函数不同(即允许改写基类定义的函数)。会使我们的程序的修改和增删极为方便。 当然基类中函数无实质实现内容的话,也可将virtual函数赋值为0,则变为虚拟函数了,那么基类也就成了抽象基类,不能用来产生任何对象,只提供接口给派生类用,仅作为派生类的子对象来用。 关于继承,基类用以描述系统中一些对象的思想核心,派生出其他类型(派生类)用来表达了认识该核心的不同途径。在编程的过程中由于对基类的继承机制,使得一些共通的数据和操作只需写一份代码,而无须重复写多份代码,从而大大方便了编程,减少大量的工作量;还有,如果你以后想增加程序的功能,需要再加一个派生类,呵呵~这下基类就派上用场了,直接增加一个对基类继承的派生类,你就可以直接给老板打电话说我已经把新功能加进去了,我们发现:其实继承就是一个积累和发展的过程,就像文化的积累和发展一样,整个面向对象的编程过程是在向后兼容。 设计中我们采用循序渐近、逐步完善的策略,让继承与多态有充分的体现 经过一个学期的学习和上机实践,使我对C++语言有了更认识和和了解,要想学好它要重在实践,要通过不断的上机操作才能更好的学习它,通过实践,我也发现我的好多不足之处,对各种控制结构及语句、数组的基本与高级应用、指针数组、字符数组、动态数组、函数的定义、调用方式;函数在编程中的具体应用;以及变量存储特征与标识符的作用域,通过实践,使我在这些方面有了认识和提高。课程设计它是一项任务,更是一种挑战和历练。在课程设计中,为了使用时方便,着重对不足方面的知识进行了分析与理解,在这一过程中对文件的操作有了很大的提高。通过实际的演练,可以增强对知识的理解和运用能力。 |
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++多范型设计》 |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论