欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    vc++幸运52Word文档格式.docx

    • 资源ID:6874292       资源大小:1.43MB        全文页数:41页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    vc++幸运52Word文档格式.docx

    1、3)“最高纪录”按钮,每一次按下都会弹出提示对话框,显示程序到目前为止,最高纪录的保持者的姓名和答对题目的个数。4)“确定”按钮,是功能较多的按钮,当估价框为空的时候,如果按“确定”按钮,此时会提示用户“请您输入估价”但是为空的提交,程序并不将其当作一次竞猜,所以空提交,不影响真实竞猜的次数。每一次“确定”程序都会将估价与商品的真实价格相比较,如果价格过高,则弹出对话框提示“您输入的价格太高了”,价格过低则提示“您输入的估价太低了”,如果估价正确则提示“恭喜您,答对了!”同时会进入下一件商品的竞猜,当前商品的竞猜次数会归零。同时每按一次“确定”按钮,程序会将当前用户的记录与历史记录的“最高记录

    2、”进行一次比较,如果超过了历史最好成绩则将当前成绩进行存档。每一次确定都会实时进行存档,始终保持存入最高纪录。即使时间没到用户就退出程序,也会将最高纪录进行刷新。2.设计思路程序设计的思路按照程序要实现的功能来进行。首先利用MFC类向导制作对话框的界面,按照自己预先规划的样式进行界面的设计。例如,按钮的个数,位置;编辑框的个数,位置,只读属性;静态提示的文字位置等等。其次,给每一个控件修改ID以便于自己的识别,控件的属性要按自己的思路修改。做好界面以后,开始按照程序流程图来编写程序。一是要,规划需要哪些功能的函数,每一个函数如何编写,实现该功能的函数是否为MFC类库中的函数;二是要,分清楚函数

    3、之间的调用关系,以及函数的带参数情况。三是要,区分哪些是基本功能要优先实现,哪些是附加功能,在基本功能之后实现。具体设计要根据自己所画的流程图来进行,流程图要尽可能的详细,这样在实施起来就会清晰而方便。由流程图先写出主干的代码,实现功能需要什么样的函数,变量。变量的类型以及函数具体如何实现要事先根据功能查阅资料,然后动手写代码。每一次只为程序添加一种功能进去,这样代码会少很多,出现错误更容易查找。实现一种功能以后在依法炮制,添加下一个功能。直至所有预先要求的功能都加完为止。图1程序总体结构流程图图2流程一的结构图3流程二的结构图4流程三的结构3.软件设计3.1设计步骤1)在File菜单下选择N

    4、EW,创建MFC AppWizard(exe)工程,键入的工程名汪少锋,在应用程序类型中选择基本对话框,其他属性直接选用默认,单击确定完成对话框的创建。最后弹出新建工程信息对话框,该对话框列出了关于新建的应用程序项目文件的相关信息。单击确定,应用程序向导所有的工作就全部完成了,此时向导为用户生成了一个可执行的应用程序框架。图5新建工程图6选择基于对话框,其他默认,按“完成”图7单击“确定”完成工程新建2)初始化界面,在对话框中添加所需的控件如按钮,文本,编辑框,菜单,Picture控件,进度条;放置在相应的位置上。根据需要对其属性进行修改,添加对应的控件变量,并建立类向导,在相应的地方添加响应

    5、函数。图8添加控件并设定属性图9利用类向导添加消息的响应函数图10利用类向导添加成员变量3)制作菜单并为相应的菜单项设定ID和变量以及响应函数,部分菜单具体功能与主界面相同,可以直接将ID设为与界面控件一致即可实现相同功能,不用另外添加代码。图11为菜单项设定ID图12为菜单项添加响应函数4)在实现文件.cpp中添加实现功能所需要的各种函数,并添加相应的代码,同时在头文件中添加对各种函数及变量的声明。5)对完成后的程序进行调试,一定会遇到错误,仔细查找,修改其中的错误,直到程序运行不再报错,并能够实现所要求的各项功能。遇到不懂的报错可以在网上搜索相应的知识,可以帮助分析。3.2界面设计1)初始

    6、化界面如下所示:图13主界面初始显示图2)主界面控件设置如下:表1 主界面对话框控件表控件名称控件类型属性(ID)对应变量类型对应函数名对应变量名提交按钮IDC_BUTTON_registerOnBUTTONregister()练习一下IDC_BUTTON_practiceOnBUTTONpractice()进入现场IDC_BUTTON_siteOnBUTTONsite()最高纪录IDC_BUTTON_toprecordOnBUTTONrecord()上一件商品IDC_BUTTON_previousOnBUTTONprevious()下一件商品IDC_BUTTON_nextOnBUTTONne

    7、xt()重新开始IDC_AGAINOnagain() 续表 表1开始竞猜IDC_BUTTON2_startOnstart()清除IDC_BUTTON_clearOnBUTTONclear()确定IDC_BUTTON3_sureOnBUTTON3sure()正确次数只读编辑框IDC_EDIT5_correctfloatm_correct错误次数IDC_EDIT6_errorm_error命中率IDC_EDIT2CStringm_rate_edit商品展台PICTUREIDC_STATIC_picture3位图耗时60秒显示进度条(平滑)IDC_PROGRESS1商品名称IDC_EDIT3m_na

    8、me_edit商品编号IDC_EDIT4_productintm_product_number商品估价编辑框IDC_EDIT1CEditm_item1_edit姓名IDC_EDIT_usernamem_username表2 主界面菜单项列表菜单名称菜单ID菜单函数名称报名帮助ID_ruleOnrule()退出ID_exitOnexit()3)程序的菜单制作图14菜单制作3.3关键功能的实现1)输入焦点的控制:当开始运行程序时,设置焦点使得光标在姓名编辑框内,在Onpaint()函数中利用语句GetDlgItem(IDC_EDIT_username)-SetFocus()实现此功能。按下“开始竞

    9、猜”按钮后,应该设置焦点使得光标停留在在商品估价输入框内,在Onstart()函数中采用 GetDlgItem(IDC_EDIT1)-SetFocus()实现。这样每一次按下“确定”按钮都会将焦点设定在估价输入编辑框内。2)设计初始界面:首先生成一个基于对话框的基本框架,再添加控件例如按钮,编辑框,位图,进度条等,并设置属性,然后为相关控件连接变量,为功能控件添加函数。3)随机显示某一种商品:首先引入12张位图资源;然后在对话框类的声明文件中定义2个数组,分别存储商品的名称、价格;接着在对话框类的构造函数中为名称与价格数组初始化,并采用LoadImage( )实现位图的加载来完成图片数组的初始

    10、化,并使同一商品在2个数组中对应的下标相同;程序初始时选中第一件商品,以后每一次猜中则更换为下一件商品,当猜完12件商品以后,会返回第一件商品,然后在进行猜测。 4)计时:游戏开始时调用SetTimer( ) 函数启动计时器并主动调用OnTimer(UINT nIDEvent) 函数对进度条进行设置,其中SetTime()函数第一个参数表示计时器的ID号,第二个参数表示时间步长,以毫秒为单位,本程序设定1000ms为步长,每隔步长时间就发送一个WM_TIME消息;收到此消息,程序会自动执行OnTime()函数,每执行一次此函数就会让进度条前进一步;设定进度条共有60步,则程序对每一件商品竞猜所

    11、规定的时间为60s;超过60s时,程序会自动结束。5)对估价的验算与正确次数、错误次数的统计:取用户输入估价与真实价格进行比较,若估价与真实价格不符弹出提示消息框“值过大”或“值过小”,并使总共所猜次数count加1,当前商品所猜次数pcount加1,总共猜错次数errocount加1;再比较pcount与6的大小,pcount6即估价次数已达到六次便自动退出程序;若估价与真实价格相等,则提示竞猜正确,并使总共所猜次数count加1,将商品信息更换为下一件商品的信息,同时把当前商品所猜次数pcount清零。6)对历史最高纪录的处理:历史最高纪录不单单只是程序本次运行的最高纪录,应该是程序以往运

    12、行与本次运行共同的最高纪录,若在程序中设定两个变量用来存储最多猜中次数与姓名是实现不了此功能的。为此,在工程文件夹中创建两个文本文档分别为username.txt与correct.txt,分别存储最高纪录的保持者的姓名和所猜对商品的个数。每轮游戏开始时读取username.txt与correct.txt中内容并且存入record(字串存储姓名)与cs(数值型存储次数)两个变量当中,与本次游戏者的记录Tempname与(count-pcount)做比较,其中count-pcount表示总共猜对的商品的个数。若(count-pcount)cs则表示当前记录超过以往的记录,那么此时就会将当前游戏者的

    13、名字Tempname和次数(count-pcount)记录进入文本文件当中,替换原有记录成为最高纪录的保持者。优点:每一次确定按钮被按下,都会将当前游戏者的记录与原始记录进行比较,决定是否替换,这样适时地保存记录是有好处的。如果发生突发状况,比如断电,人为退出,记录都会被记录下来而不会发生丢失。7)查看最高纪录:当用户查看最高纪录时,分别从username.txt和correct.txt中读取最高纪录与姓名,并在消息框中显示。8)重新开始游戏:当用户重新开始游戏时,此时OnAGAIN()函数内部会将商品下标i清零,同时调用Onstart()函数,会将当前商品换为第一张,进度条从零开始。可以重新

    14、进行游戏。4.结论与心得体会这次课程设计总体上对我来说并不那么简单,首先是距离学习C+实在是过的时间太久了,很多知识都忘记的差不多了,并且期间穿插有必修课的考试。一边准备考试,一边准备课设确实让课设在时间上打了折扣。考试结束后便全力投入到课设当中了,最终也做出了幸运52这个小游戏。但是整个过程中的实际操作确实是对我的一种考验。之前学习过C+语言,对MFC编程的印象还是比较深的,但是经过课设以后,无疑更加加深了印象。让我再一次体会到了VC+的强大与复杂,感觉到自己学习C+就好像在大海里挣扎,这门语言真的好复杂。系统提供的各种类,各种函数真是多如牛毛。尽管我只用了很少的一些函数,但是这几天在网上搜

    15、索资料,对C+有了进一步的了解。最强的感觉就是,自己真的好菜,好水。不得已,只得要用什么功能就在网上搜索对应的资料。这样才感觉有了一点眉目,要不然真的是只能望洋兴叹了。之所以选择幸运52来做,主要原因可能就是觉得比较这个题目比较新颖。最开始也不知道幸运52是干嘛的。于是到网上搜索,才对游戏有了了解。在动手做程序之前,首先就是看书了,花了一部分时间将以前学习C+的教材看了一下,主要是看MFC编程部分,将最基本的控件使用方法看完,比如编辑框,按钮,picture控件,菜单。其他的控件因为时间关系,并且用到的可能性不大,便忽略了。但是这些知识都是非常有用的,有机会的话还是要多学一学,毕竟在我看来VC

    16、+非常强大。做MFC程序,首先就是做界面了,主体是一个对话框。我是先在纸上画出了界面的布局,然后照着预先的布局做的界面,添加各种各样的控件,每添加一个控件我就会在布局的纸上相应控件的位置上标上自己更改以后控件的ID号,这样既便于认识出控件是代表哪个,又不至于以后弄混淆了无法差错,同样的方法,修改了控件的属性,对应的函数以及变量名,目的就是为了自己能更好地识别每一个控件,防止自己犯低级错误。当然,之所以这样做,也是由于以前犯过弄混淆ID和变量对应不好的低级错误。我先规划做出最基本的功能,然后再一步一步添加其他的功能。在我看来,难点一就是位图的动态加载,因为以前自己没有动手做过这个。于是到网上去找

    17、资料,发现了LoadImage()函数用来加载位图,于是仔细研究一番就用了这个函数。难点二在于最高纪录的存取,因为有C语言的基础,而VC6.0可以编译C于是文件的记录writedata()函数用C实现,由于用C写得读数据函数readdata()函数无效,于是读函数用C+实现。难点三是控制焦点,因为以前没听说过,但是经过学习,发现这个其实实现比较简单。 最后我实现了最基本的功能以后,又添加了几个按钮来实现其他一些功能,比方说设定两种游戏模式,将不需要输入值的编辑框设定为只读,将只需要输入一次的编辑框在输入之后让其变为只读。让只需要按下一次的按钮在按下后立即失效变为灰色,另外,为主面板添加了12个

    18、菜单项。如此一来,程序就更丰富了;其实之前是想把所有人的游戏记录都记录在一个文本文件中的,包括姓名和次数;也尝试着来编程实现,但是后来运行程序太复杂,并且错误难找,并且时间已经不够了。于是果断放弃尝试,改用更简单的方式,只记录一个人的数据,并且将姓名和次数分开存放。 不管怎样还是做出东西来了,尽管没什么含金量,但至少全是自己的心血。课设这几天感觉比上课累多了,也更有挑战一些。先不说别的,对C+的了解更多一些了,对MFC的控件添加流程也更了解了,对于用到的函数也更了解了。最最重要的是自己对于常见的一些调试错误能更好地找出问题了。总之,收获还是很多的。5.参考文献1揣锦华.面向对象程序设计与VC+

    19、实践M.西安:西安电子科技大学出版社,2006.2马德骏,等.C语言程序设计(第2版)M.北京:科学出版社,2009.3方可燕.Visual C+ 6.0实战与精通M.北京:清华大学出版社,2000.6.思考题1) 说明保存记录文件信息的方法,考虑是否还能用其他方法实现?答:在工程文件夹中创建两个文本文档分别为username.txt与correct.txt,分别存储最高纪录的姓名与猜对次数。每轮游戏计时开始时读取username.txt与correct.txt中内容与本轮正确次数(count-errocount)比较,若大于其中内容,便将当前游戏者的姓名与猜对次数替代原有的username.

    20、txt与correct.txt中的内容。这种比较与替换函数在“确定”按钮每按下一次就进行一次。可以适时地记录最高纪录,即使时间没到或者突然断电同样可以将当前的最高纪录保持下来,不论玩家是否自愿退出游戏都没有关系。2) 说明商品名称和商品图片、商品价格一一对应的关键部分?在对话框类的声明文件中定义2个数组,分别存储商品的名称和价格,接着在引入资源时候按照商品顺序引入位图资源,并且逐个命名位图ID号。利用switch-case结构调用LoadImage()函数来逐个调用位图,使得数组的下标与case语句中的位图一一对应即可。对话框类的构造函数中为商品名称与价格数组初始化,并采用LoadImage(

    21、)实现位图的加载来完成图片数组的初始化,并使同一商品在2个数组中对应的下标相同。这样,便将商品名称和商品图片、商品价格一一对应起来。3) 如何在游戏未开始时显示空白位图?在位图资源中插入一张空白位图,再将“图像”选为该空白位图的属性ID,初始化函数中使用LoadImage()函数调用该空白位图。7.附录7.1调试报告1)丢失分号的语法错误:例如error C2143: syntax error : missing ; before 在错误出现的地方查看分号丢失的位置并添加上。2)未定义变量的错误:例如:error C2065: h : undeclared identifier。在调试的过程中

    22、会出现某些变量未定义,导致这种错误有可能是在对控件建立类向导的时候没有添加变量,也有可能是在添加代码的时候变量名输错导致的;对变量建立类向导的时候添加变量或者改正错误的变量名就能改正这种错误。3)未添加消息响应函数的逻辑错误:在类的源文件中添加代码之后,运行的过程中代码并没有被应用,错误原因是没有添加相应的消息函数;在类向导中添加相应的消息函数之后,代码就是可用的了。4)头文件错误:fatal error C1010: unexpected end of file while looking for precompiled header directive添加了打开文件的相关代码后,编译显示相

    23、关语句没有定义不能识别:这是由于忘了加头文件;加上头文件后编译成功。5)开始下一个商品的猜价的时候“当前错误次数”没有清0:估价正确后没有给当前猜测次数赋值为0;在估价正确时添加pcount=0;语句后正确。6)点击“重新开始”按钮,不能重新游戏: “重新开始”按钮并没有对进度条的初值进行设置,时间结束后再点击“重新开始”计时仍为达到最大值,对此在它的响应函数里面对进度条设置初值为0,并且将当前商品更换为第一件商品,当前猜测次数pcount清零,再调用CLiudanDlg:OnBegin()函数,便可重新开始游戏。7)在第一次编译程序时要首先编译StdAfx.cpp文件,将头文件包含进去,否则

    24、第一次编译就会报错,例如:Cannot open precompiled header file:Debug/汪少锋.pch No such file or directory7.2测试结果1)游戏开始时必须输入游戏者的姓名并提交,否者无法进入游戏;若姓名为空则提示“请输入您的姓名”,直到姓名不为空方可进入游戏。游戏初始其他控件均被失效,仅有“提交”按钮和“最高纪录”按钮可用。提交姓名以后,报名处的控件失效。图15初始化主界面显示图 图16提交空姓名会提示2)提交姓名以后,用户可以选择“练习一下”或者“进入现场”两种游戏模式。点击会给以提示并激活相应的按钮与编辑框,同时输出第一张商品的图片。例

    25、如进入“练习一下”模式。图17未输入商品估价显示图3)进入练习模式可以更换当前的商品为“上一件”或“下一件”,也可以选择重新开始。按下“开始竞猜”按钮,光标聚焦在估价编辑框中,可以输入价格,若价格为空则给与提示,并不计数;不为空则对价格进行比较并给与提示。图18选择“开始竞猜”第一件商品 图19竞猜正确图20选择下一件商品 图21选择上一件商品4)输入估价,点击“确定”,如果估价偏大则提示“估计过大”,估价过小则提示估价过小。图22 估价过高显示图 图23提示估价过低5)当用户选择“现场模式”时,只有答对了题目才可以进入下一件商品的竞猜,并且不允许重新开始。图24 进入现场模式6)如果在60秒

    26、时间内没有猜对价格,则计时结束,自动弹出消息框,显示“时间到!竞猜结束!”。图25计时结束显示图7)当估价次数超过6次时,自动弹出消息框,显示“对不起,您没有机会了,超过了次数限制!”,点击“确定”后,自动退出本程序。图26次数超过设定上限即6次8)无论本次游戏是否打破历史纪录,都可以查看最高的历史记录,点击“最高纪录”即可看到最高纪录。图27打破纪录后点击“最高记录”弹出的对话框显示图7.3关键源代码1)定义全局变量/定义全局变量次数 float count=0;/总共猜测的次数 float pcount=0;/当前图片猜过的次数; float errocount=0;/总共猜错的次数 float rate=0;/命中率 int i=0;/作为信息数组的下标#define k 6/每一张图片可供估价的次数unsigned long guesstime=60000,guessstep=1000;/进度条60步,每一步为1秒,即设定time为60s/步长为1秒,60000为计时器的IDchar Tempname10;/用于保存当前用户名char record10;/记录中的用户名int cs;/记录中的次数2)初始化数组CMyDlg:CMyDlg(CWnd* pParent


    注意事项

    本文(vc++幸运52Word文档格式.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开