C++课程设计报告18561551Word下载.docx
《C++课程设计报告18561551Word下载.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告18561551Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
幸运52
1.基本功能描述
(1)首先点击运行程序,进入到程序主界面。
当用户在没有点击“开始”按钮之前,点击确定按钮时,系统将弹出对话框,提示“请先单击‘开始’按钮开始选择商品”;
当用户在点击“开始”按钮后,即启动计时器,系统将随机给出一件商品并在界面上显示商品的名称,用户即可根据这些信息对商品进行估价。
(2)游戏开始后,在规定时间内,用户在没有输入价格的情况下,单击确定按钮,系统将弹出对话框,提示“请先输入商品价格,再进行提交”;
当输入估计的价格并单击“确定”按钮,系统将会弹出一个消息框用来提示估价是猜对啦、高啦或是低啦,在弹出的消息框中单击“确定”按钮后,即可以再次进行估价。
用户对同一商品的估价的次数不得超过6次。
超过6次后系统将弹出对话框提示,“你的猜测次数已经大于6次,将自动进入到下一件商品的估价!
”,单击“确定”按钮后自动进入下一件商品的估价。
(3)游戏过程中,如果对当前的成绩不是很满意,可以点击重新开始,系统会重新启动定时器,并将随机给出一件商品并在界面上显示商品的名称,即可以重新对商品进行估价,上一局游戏的成绩将被清零。
当点击“查看最高纪录”按钮,系统将弹出对话框,显示“最多猜中次数”及“姓名”。
(4)当计时结束时,系统将弹出对话框,提示“时间到了,游戏结束”,此时,如果用户创造了最高纪录,系统将自动弹出对话框,用户可在弹出的对话框内输入姓名,点击确定,系统将保存最高纪录并退出。
2.设计思路
首先利用MFC应用程序向导制作基本对话框的界面,按照自己预先设计的样式进行界面的制作。
确定按钮的个数,位置;
编辑框的个数,位置,部分编辑框的属性需设置为只读;
静态文本框的提示文字、位置等等。
其次,给每一个控件修改ID以便于自己的识别。
做好界面以后,可以按照如下的程序流程图来编写程序:
主程序子程序2
图1幸运52游戏程序流程图
程序设计的思路是按照程序需要实现的功能来进行。
第一,要确定哪些控件需要关联消息响应函数,每一个函数该如何编写,实现该功能的函数是否为MFC类库中的函数;
第二,要分清楚各函数之间的调用关系,以及函数的带参数情况。
第三,要区分哪些是基本功能,需要优先实现,哪些是附加功能,在基本功能之后实现。
在对话框类头文件中设定三个数组,分别用来存储商品的图片(Bitmap[12])、名称(name[12])和价格(price[12]);
在构造函数中完成相应的初始化,在初始化函数中设定计时器初值与范围。
“开始”按钮关联的函数中,启动计时器,自动调用OnTimer(),并产生一个随机数num,作为商品名称数组与图片数组的下标,使界面上显示对应商品的名称与图片。
“确定”按钮对应的函数中,将用户的估价与商品的真实价格进行比较,高于、低于或等于均弹出对话框给出提示。
在OnTimer()中实现进度条的前进,当计时结束后,取存取最高纪录文本中的次数与本轮正确次数相比较,若本轮正确次数大于历史成绩,弹出一个对话框,要求用户输入自己的姓名,并将该次数存储在score.txt文件中,姓名则存储在name.txt文件中。
在“查看最高纪录”按钮关联的函数中,打开上述两个文档,按设定的格式输出文件里面的内容。
在“重新开始”按钮对应函数中,重新设置进度条初值为0,清零上一局游戏的成绩并调用“开始”按钮所关联的函数。
如果用户希望结束游戏则可以单击“取消”按钮,游戏结束。
3.软件设计
3.1设计步骤
(1)打开MicrosoftVisualC++6.0应用程序,在File菜单下选择NEW,创建MFCAppWizard(exe)工程,键入的工程名为tanglei,在应用程序类型中选择基本对话框,其他属性直接选用默认,单击“确定”完成对话框的创建。
最后弹出新建工程信息对话框,该对话框列出了关于新建的应用程序项目文件的相关信息。
单击确定,应用程序向导所有的工作就全部完成了,此时向导为用户生成了一个可执行的应用程序框架。
图2选择基于对话框,其他默认,单击“完成”
(2)初始化界面,在对话框中添加所需的控件,如按钮,文本,编辑框,菜单,Picture控件,进度条,将它们放置在相应的位置上。
根据需要对其属性进行修改,添加对应的控件变量,并建立类向导,在相应的地方添加响应函数。
图3添加控件并设定属性
(3)在实现文件.cpp中添加实现功能所需要的各种函数,并添加相应的代码,同时在头文件中添加对各种函数及变量的声明。
(4)对完成后的程序进行调试,修改其中的错误,直到程序运行不再报错,并能够实现所要求的各项功能。
当遇到不懂的报错可以用英语电子词典翻译错误以帮助分析。
3.2界面设计
(1)初始化界面如下所示:
图4主界面初始显示图
(2)主对话框控件设置如下:
表1主界面对话框控件表
控件名称
控件类型
属性(ID)
对应变量类型
对应变量名
开始
按钮
IDC_BEGIN
确定
IDC_YES
CButton
m_yes
取消
IDC_CANCEL
查看最高记录
IDC_CHECK
重新开始
IDC_AGAIN
文字标识
静态文本
IDC_STATIC
剩余时间
进度条
IDC_PROGRESS1
商品名称
只读编辑框
IDC_TITLE
Cstring
m_title
商品价格
编辑框
IDC_PRICE
int
m_price
本论正确次数显示
IDC_TRUE
m_true
当前错误次数显示
IDC_FALSE
m_false
图片显示
位图
IDC_PICTURE
(3)主界面按钮响应函数表如下:
表2主界面按钮响应函数表
响应函数名称
CTangleiDlg:
:
OnBegin()
OnYes()
OnCancel()
查看最该记录
OnCheck()
OnAgain()
(4)打破纪录对话框界面如下所示:
图5打破纪录对话框显示图
(5)打破纪录对话框控件设置如下:
表3输入姓名对话框控件表
IDOK
退出
IDCANCEL
IDSTATIC
姓名输入
IDNAME
m_name
3.3关键功能的实现
(1)输入焦点的控制:
当运行程序时或比较价格后应该设置焦点使得光标在在估价输入框上,在OnBegin()函数中采用GetDlgItem(IDC_PRICE)->
SetFocus()实现。
这样每一次按下“确定”按钮都会将焦点设定在估价输入编辑框内。
(2)设计初始界面:
首先生成一个基于对话框的基本框架,再添加控件例如按钮,编辑框,位图,进度条等,并设置属性,然后为相关控件关联变量,为具有操作功能的按钮添加必要的消息响应函数。
(3)随机显示某一种商品:
首先引入13张位图资源,ID号设置为IDB_BITMAP0到IDB_BITMAP12,其中图像控件的ID设为IDB_BITMAP12,这样在游戏未开始时即显示该宣传图片。
然后,在对话框类的声明文件中定义三个数组,分别存储商品的名称、价格和图片;
接着在对话框类的构造函数中为名称和价格数组初始化,并采用LoadBitmap()实现位图的加载来完成图片数组的初始化,并使同一商品在三个数组中对应的下标相同;
利用srand(time(NULL));
num=rad()%12产生一个0到11的随机数,将此随机数作为数组的下标,选择所要选择的商品的三种属性。
(4)计时:
游戏开始时在OnBegin()函数中调用SetTimer(NULL)函数启动计时器并主动调用OnTimer(UINTnIDEvent)函数对进度条进行设置。
其中SetTimer()函数第一个参数表示计时器的ID号,第二个参数表示时间步长,以毫秒为单位,本程序设定100ms为步长,每隔步长时间就发送一个WM_TIMER消息;
收到此消息,程序会自动执行OnTimer函数,每执行一次此函数就会让进度条前进一步;
设定进度条共有300步,则游戏设定的总时间为30s。
(5)对估价的判断与正确次数、错误次数的统计:
取用户输入估价与真实价格进行比较,若估价与真实价格不符,则弹出提示消息框提示“高啦”还是“低啦”并使错误次数i加1,再比较i与6的大小,i≥6即一件商品的估价次数已达到六次,此时将i清零,并使猜错次数的变量error加1,且前台更新显示;
若估价与真实价格相等,则使正确次数j加1同时使错误次数i为0,接着调用OnBegin()函数显示下一种商品。
(6)对历史最高纪录的处理:
历史最高纪录不仅仅只是程序本次运行的最高纪录,而应该是程序以往运行与本次运行共同的历史最高纪录,若在程序中设定两个变量用来存储最多猜中次数与姓名,在退出程序时,变量会被消毁,因此实现不了此功能。
为此,在工程文件夹中创建两个文本文档分别为score.txt与name.txt,分别用来存储最高纪录的次数和姓名。
每轮游戏计时结束时将读取score.txt中内容与本轮正确次数j比较,若j大于其中内容,便弹出一个对话框要求用户输入自己的名字,并将输入的姓名替代name.txt中的内容,同时将j代替score.txt中的内容。
(7)查看最高纪录:
当用户查看最高纪录时,分别从score.txt和name.txt中读取最高纪录次数与姓名,在对话框中予以显示。
(8)重新开始游戏:
当用户重新开始游戏时,将变量i、j和error清零,对进度条重新进行设置,使其初值为0,再调用“开始”按钮对应的CTangleiDlg:
OnBegin()函数。
4.结论与心得体会
这次课程设计总的来说对我起到了很大的锻炼作用,时间上来说还是比较紧张的,刚开始画出程序流程图还是比较轻松的。
之后的两天时间便是程序设计与调试了,虽然已经学习过VC++语言,MFC编程这块也讲到了一些,但是课程学习距现在的课程设计有一段时间了,有些东西只是有些印象,当真正用起来的时候,还是有些不熟练,其间,有查阅了一些资料和课件PPT,主要是对控件该关联什么类型的变量,以及这些变量该如何使用,对一些具有操作功能的按钮关联消息响应函数后,如何编写这些函数的实现代码以及各个函数之间的调用是难点。
系统提供的类的函数是相当多的,想要把它们全部弄懂然后在开始编写程序几乎是不可能的。
只能是用到哪个函数再去具体的了解它,这样上手比较快,学习积极性也较高。
这次的课程设计的题目是采用抽签的方式来选定的,当选到幸运52之后,自己对幸运52还是有一点的了解的,而且本次的课程设计的要求也只是要实现基本的功能。
刚开始做程序界面还是比较轻松的,在设置控件的ID号时,尽量用其英文名来设置,这样识别起来很方便。
之后,在对控件进行关联变量时,就有些犯难了,不知