C++课程设计报告模板.docx
《C++课程设计报告模板.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告模板.docx(6页珍藏版)》请在冰豆网上搜索。
C++课程设计报告模板
C++课程设计报告
设计题目:
填写本人的课程设计题目
专业:
应用数学班级:
学生姓名:
本人姓名学号:
本人学号
指导教师:
杨宇晶、郭天娇
一、目的意义
内容:
宋体小四
设计的目的、要求……
二、总体设计
总体设计思路、总框图
三、详细设计
主要的数据类型的定义;完成各个功能模块的算法……
四、调试与测试
各个功能模块的抓屏以及功能说明,使用说明。
五、总结与心得
以上内容5页。
另起一页
附录:
附上设计的源代码,不能带注释。
例如:
一、需求分析:
本次课程设计主要是做一个猜数字游戏,要求随机提供序列类型,并且可以按要求提供该序列的前n项,要求猜测第n+1项。
这样的n可以作为游戏的难度,n越小,则难度越大;n越小,难度越小。
本猜字游戏的难度分为3个级别:
1、简单2、中等3、困难
当玩游戏者打开本游戏时会有一个对话框弹出,要求输入的你的姓名和年龄,还要从简单、中等、困难三个中选者你准备挑战的难度,然后点提交按纽进入了本猜字游戏的主程序框。
本游戏会根据你选的难度,告诉你前n个数(难度越小,n越大;难度越的,n越小),然后你就可以在输入框填入你所猜的第n+1个数,在本游戏主界面的右面同时会显示你刚才登陆是输入的名字和年龄,还有你剩余的猜字和得分,游戏者每猜对一次加10分;猜错不扣分,但是你剩余的猜字次数将会减掉一次。
如果你猜对第一关所有数字,恭喜你,你可以顺利进入下一关(本游戏一共关);如果你在限定的次数内没有猜对所给数字,对不起,本游戏结束,如果你还想玩此游戏,请重新登陆!
二、设计思想与过程:
关于本猜字游戏的设计,我们的设计思想是建立在对问题总体把握的基础上,按照课程设计的要求设计一个面向对象的程序。
本游戏的总体构思是:
先设计一个抽象基类;然后在这个基类的基础上,我们又设计一系列继承该基类的派生类;最后我们又根据用户的要求设计了猜字游戏界面(包括登陆界面和主程序界面)。
在该猜字游戏程序中我们利用随机函数来实现对不同派生类的访问,即每次玩该游戏的时候都会随机选择一个数列,通过控制程序提示玩家前n个数的多少,从而产生不同难度的数列让玩家猜,根据玩家猜的情况,我们设计了一个程序用于显示玩家猜对的次数、积分、剩余的次数。
具体设计过程如下:
1.首先我们对该游戏应该实现什么样的功能做了全面的分析,加上我们日常对其他一些游戏的了解,我们的游戏规则设计如下:
A.运行本游戏应用程序(即caishu.exe),首先会弹出一个对话框,要求玩家填入姓名、年龄,还要求玩家选择他准备挑战的难易程度(有简单、中等、困难三中选择),这些内容都填好以后,玩家便可点“OK”按纽登陆游戏,如果玩家不想玩本游戏可以点“Cancel”按纽退出。
游戏登陆界面如下:
B.登陆后,便进入了本游戏的主界面,如果你选择的难易程度是“易”,题目会显示数列的前六个数,让你猜第七个数字;如果选择的是“中”,题目会显示数列前四个数字,让你猜第五个数字;如果选择的是“难”,题目会显示数列前三个数字,让你猜第四个数字。
游戏主界面的右面会显示玩家的相关信息,包括姓名、年龄、得分(初始分值为100,答对一题加10分,答错一题减10分)、难度、剩余机会(初始值为3,答对一题机会数不变,答错一题减1)。
在下面输入框中输入你所猜测的下一个数,然后点“确定”,如果想退出游戏点“退出”。
游戏主界面如下:
2.该游戏程序的主要设计特点是面向对象的程序设计,也就是对类的设计。
我们得首先设计出一个共享的抽象基类,因为开始时我们还不知道由该基类派生出去的派生类会有哪些共通的操作行为,所以我开始定义的基类只能算是一个抽象的概念,它不提供任何操作行为,只是为所有的派生类的提供一个共通接口,提供给以后需要增加的派生类所使用。
3.我们开始定义的基类好象只是定义了一个共通接口,其实不然,我们可以把所有派生类的共通操作定义在基类里面,这样就不用在每个派生类中定义,可以省掉很多麻烦,也可以增加程序的透明性。
通过对类的继承和多态,可以省去我们很多操作。
最重要的是当我们要写一个派生类程序时,我们可以不用去动以前写过的程序,让人感觉有着“一种(is-a-kind-of)”的关系。
只要在定义的派生类中包含基类程序(NumSquence.cpp)这个文件即可。
这样我们就可以随时加入新的程序,而不用去更改先前的程序。
4.在基类的基础上我又加入了一些派生类,用于产生可供用户猜测的数列,然后我们又写了产生随即数的随即函数(rand()),用于“中”,“难”这两种情况下的前N提示数的随机产生,这样就更增加了用户的猜测难度。
还有因为用户输入的数据并不一定都是正确的,用户输入的数据有可能是不合法数据:
比如输入数过大,数据为负等,在该输数字的地方输入字符串等,所以我们不能完全相信用户,我们得想办法解决这个问题,可以在用户输入错误的时候,给用户错误信息的提示,让用户再次输入,于是我们定义了函数(如check_string(char*p)等)来对它们进行检测,并作出相应的处理
5.玩家在开始玩本游戏时,有可能不输入名字、年龄和选择难易程度而直接点“OK”进入游戏,这很难让人想象会出现什么样的后果。
于这种异常情况,我们想出了几个解决的办法,就是当玩家进入游戏主界面时,如果名字、年龄和选择难易程度这些信息为空,我们会强制为用户加入相关信息(名字设为:
匿名;年龄设为:
保密;难易程度设为:
易),即在玩家不输入任何信息的情况下的默认处理。
6.在编写游戏的主程序时,为了完成对前面相关函数的调用和对类的访问,我们声明一个CNumSquence指针类型的数组,用来对所有派生类访问,使程序真正做到面向对象。
7.为了让玩家能够更直观的玩游戏,我们打算让程序在WINGDOWN界面下运行,于是我们就用MFC设计了登陆窗口、游戏主窗口、提示玩家是否继续玩的窗口三个界面,这样就使本游戏更加人性化,让玩家更容易玩本游戏,再加上一些规则说明,简直是太棒了。
8.到此,我们的游戏程序已经基本完成,最后我们对程序做了一下润色,对游戏界面做了一下美工,呵呵~~~!
我们的游戏开发也算完成了,虽然有点累,不过还是满有成就感的!
呵呵,不写了,不是因为时间紧迫,马上就有一连串的考试,我们还会把我们的游戏做得更好,好,就这样了。
三、程序概貌(实际上就是对类的描述):
本游戏的核心类如下
3.1游戏界面控制类
3.1.1CGuss(Guss.cpp)
CGuss主要是控制这个游戏的加载,相当于Console程序中的main函数。
3.1.2CGussDlg(GussGlg.cpp)
CGussDlg负责控制与玩家交互游戏的界面。
提示各种游戏间的信息。
3.1.3CUserInfoDlg(UserInfoDlg.cpp)
CUserInfoDlg是输入玩家信息的对话框
3.1.4IsMoreDlg是询问玩家是否继续的对话框
3.2玩家信息类
CUserInfo(UserInfo.cpp)
CUserInfo记录玩家基本信息的类,包括玩家姓名、年龄、得分、难度等信息。
3.3数列生成类
i.CNumSquence(NumSquence.cpp)
CNumSquence是数列生成类的抽象基类,它提供数列生成类的基本操作借口。
3.3.2一般数列生成类的派生类
这些类包括:
CFibonacci(Fibonacci.cpp)
CPell(Pell.cpp)
CSquare(Square.cpp)
CTriangular(Triangular.cpp)
CPentagonal(Pentagonal.cpp)
CLucas(Lucas.cpp)
这些数列都是通过固定的通式生成
3.3.2随机生成的类
Chard(Hard.cpp)
Chard类是通过随机参数的生成类,用于游戏难度大的模式。
3.3.3通过模板函数来生成的类
CTempSeq(TempSeq.cpp)
CTempSeq是通过一个数列生成函数的为模板参数的模板类。
通过传入模板函数我们可以任意生成数列。
3.4异常处理类
3.4.1 CEx(Ex.cpp)
CEx是异常的抽象基类,提供异常的一般接口。
3.4.2异常的派生类
CExInput(ExInput.cpp)(输入异常类)
CExOverflow(ExOverflow)(数组溢出异常类)
四、本程序的亮点及亮点所带来的优越性:
4.1面向对象的设计方法
在游戏数列生成类和异常处理类中,充分运用了面向对象的继承和虚拟多态的技术,
大大简化的程序设计的难度,使得程序简明易懂,易与维护和扩展。
4.2范型程序的设计
在游戏中有一种数列示通过一个模板类来生成的,这样就可以通过此类来任意生成数列,极大地提高了程序的弹性。
4.3异常处理机制
在程序中,我们定义了一个异常类的体系,然后通过抽象的异常基类捕
获各种异常,记录下错误的操作,使程序更加的健壮。
4.4可视化的界面
本游戏采用MicroSoft的MFC框架,运用多种控件来设计界面,使得游
戏易与操作。
五、对面向对象程序设计的体会:
通过用面向推想的编程概念作为我们的设计游戏的主导思想,我们体会不少,不过由于时间非常的紧迫,我们也只能说说我们的一些主要体会:
在程序中我们设计了一个抽象基类CNumSquence和由这个基类派生出去的CFibonacci、CPell、CSquare、CTriangular、CPentagonal、CLucas,这使我们体会到了“is-a-kind-of”真正思想,也感觉到对面向对象程序设计确实抽象,这需要我们在编程实践去慢慢体会,慢慢总结。
面向对象的编程概念的最主要的特性是:
继承和多态。
关于多态,在面向对象的程序设计中它的含义是“相似”,两个对象如果具有一定的相似性但又有些区别的话,那么它们具有多态性;在C++中,我们通过基类的pointers和references,借助虚拟机制对派生类进行动态操作。
用关键字virtual可使函数有了晚捆绑的灵活性(即动态绑定),virtual函数表示允许在相同家族中的类有不同的行为,这也正是多态形成的原因。
virtual函数允许它与基类那个函数不同(即允许改写基类定义的函数)。
会使我们的程序的修改和增删极为方便。
当然基类中函数无实质实现内容的话,也可将virtual函数赋值为0,则变为虚拟函数了,那么基类也就成了抽象基类,不能用来产生任何对象,只提供接口给派生类用,仅作为派生类的子对象来用。
关于继承,基类用以描述系统中一些对象的思想核心,派生出其他类型(派生类)用来表达了认识该核心的不同途径。
在编程的过程中由于对基类的继承机制,使得一些共通的数据和操作只需写一份代码,而无须重复写多份代码,从而大大方便了编程,减少大量的工作量;还有,如果你以后想增加程序的功能,需要再加一个派生类,呵呵~这下基类就派上用场了,直接增加一个对基类继承的派生类,呵呵~,你就可以直接给老板打电话说我已经把新功能加进去了,哇~真的是很爽,太兴奋了!
在使用中,我们发现:
其实继承就是一个积累和发展的过程,就像文化的积累和发展一样,整个面向对象的编程过程是在向后兼容。
设计中我们采用循序渐近、逐步完善的策略,让继承与多态有充分的体现,而且融入了书中所学到的知识,算得上是理论与实践相结合吧!
六、本游戏主要程序如下:
程序源码保存在Guss文件夹中