




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象程序设计课程报告学号: S151301006 姓名: 花远洪 学院: 先进制造学院题目指法练习软件选 题 勻匕冃 景科技的飞速发展,将人类带入了信息时代,计算机越来 越贴近人的生活,速度成为人们成功的前提条件,以致于人们 必须不断尝试着使用各种手段来提高自身的工作效率,其手段之一就是对键盘的充分利用和相应软件的开发。至今为止,人们对计算机键盘的熟悉在很大程度上还必 须依靠一些指法练习软件,软件质量的高低直接影响到对熟悉 键盘过程的长短。由北京元易达科技发展责任有限公司指法练 习设计开发小组自主开发的指法练习软件, 完全使用汉语程序 设计语言进行开发,纟口构糸凑,高度安全,资源占用少,速
2、度 快,能帮助使用者更加方便,快捷的熟悉对键盘的操作,从而 节省操作时间,达到提高工作效率的目的。2.1设计思路软 件 说 明在设计指法练习软件时,先在对话框上绘制软件的背景位图, 然后动态创建10个静态控件,在调用rand函数取出126的 随机数,根据随机获得的数据判断每个控件显示的字母图片, 在定时器中设置控件向下移动,当控件到达下落区域的底部或 者用户按下了正在下落的字母时,重新取随机数,再设置一个 定时器,在该定时器中根据用户的操作计算正确率、错误数、 漏打数等消息,当到达用户设置练习时间后自动停止控件的下 落,这样指法练习软件就完成了。2.2 技术要点本程序实现字母下落功能时,主要用
3、 CStatic类的Create方 法、srand函数、rand函数ShowWindow函数,下面对本程 序中用到的关键技术进行详细讲解。2.2.1 CStatic 类的 Create 方法Create方法用于创建静态控件,该函数的语法格式如下:BOOICreate(LPCTSTRIpszText,DWORDdwStyle,co nstRECT&rect,CWnd*pPare ntWnd,UINT nID= =0xffff);参数说明如下:sxText:用于设置控件文本。dwStyle:用于设置控件风格。rect:用于确定控件的显示区域。pPare ntWnd:用于确定控件父窗口指针。nID:
4、用于设置控件ID。本程序中用于创建静态控件的代码如下:For(i nt i=0;i10;i+)m_Statici.Create( “”,WS_CHILD|WS_CLIPSIBLINGS,|WS_EX_TOOLWINDOW|SS_BITMAP,CRect(0,0,50,50),this,1230+i);2.2.2 srand 函数srand函数用于为rand函数设置一个种子,其语法格式 如下:Void srand(un sig ned int seed);参数说明如下:Seed:设置的种子。223rand 函数rand函数用于获取随机数,其语法格式如下:Int ran d(void);本程序中用
5、于获得随机数的代码如下:CTimetime二CTime:GetCurre ntTime();/获得系统时间Sran d(time.GetHour()+Time.GetMi nu te()+time.GetSecon d(); /根据时间设置种子For(i nt i=0;i10;i+)m_Numi=ra nd()%26+1;/获得 126 之间的随机数2.2.4、ShowWindow函数ShowWi ndoWi数用于设置窗口的显示状态,其语法格式如下:BOOLShowWindoWint nCmdShow);参数说明如下:n CmdShow表示窗口的显示状态,可选值如表 1所示。表1 nCmdSh
6、ow参数值表参数值描述SW_HIDE隐藏窗口SW_MINIMIZE最小化窗口SW_RESTORE还原并激活窗口SW_SHOW显示并激活窗口SW_SHOWMAXIMIZED最大化显示窗口SW_SHOWMINIMIZED最小化显示并激活窗口SW_SHOWMINNOACTVE小化显示窗口,保持原来的活动窗口SW_SHOWNA显示窗口,保持原来的活动窗口SW_SHOWNOACTIVA按窗口最近的大小和位置 显示,保持原来的活动窗 口SW_SHOWNORMAL还原窗口,保持原来的活动窗口软 件 设 计3.1设计步骤(1)、新建一个基于对话框的应用程序,将其窗体标题改为“指 法练习软件”,勾选Minmiz
7、e box属性,使对话框具有最小化按钮。(2)、向对话框中添加4个静态文本控件、8个编辑框控件和3个按钮控件。对话框主要用到的控件及说明如表2所示,根据需要对其属性进行修改,并建立类向导,在相应的地方添加代码。软 件 实 现控件ID属性设置关联变量IDC_TIME无CEdit m_uTimeIDC_SUMMUM无CEdit m_sNumIDC_ERRORNUM无CEdit m_eNumIDC_LOSENUM无CEdit mNumIDC_VERACITY无CEdit m_VeracityIDC_RATE无CEdit m_RateIDC_TIMING无CEdit m_Timi ngIDC_ALTE
8、RNATIC无CEditNm_Alternatio nIDC_STATICSimple无IDC_BUTSTART勾选CButt onBitmap 和Flat属性IDC_BUTCANCEL勾选Bitmap 和Flat属性CButt onIDC_BUTEXIT勾选Bitmap 和Flat属性CButt on表2 对话框主要用到的控件及说明3)、向工程中导入30个BMF位图资源(4)在类的原文件中添加实现功能所需要的各种函数,并添 加相应的代码,同时在头文件中添加对各种函数及变量的声 明。(5)调试程序,纠正发生的错误,直到这个程序能够运行为 止。3.2 主要程序代码3.2.1在主窗体的头文件中声明
9、变量代码如下:UIN m_Num10;/显示字母CStatic m_Static10; /静态控件int m_Error; /错误数intm_Sum;/打字数int m_Lose;/漏打数int m_Time;/用时BOOL msStart;/开始intmTime;/定时intm_aTime;/间隔时间3.2.2 添加自定义函数Initialization该函数用于初始化控件显示数据,代码如下:void CFin gerExerciseDlg:l nitializati on()m_IsStart = FALSE;m_uTime.SetWindowText(” 时间:0 分 0 秒); m_s
10、Num.SetWindowText(打字数:0 个); m_eNum.SetWindowText(错误数:0 个);mNum.SetWindowText(” 漏打数:0 个);m Veracity.SetWindowText(” 正确率:0.0%); m_Rate.SetWindowText(” 速度:0 个/ 分);m_Timi ng.SetWi ndowText(3);m_Alternatio n.SetWi ndowText(500);323初始化控件显示数据在主窗体初始化,创建静态控件,并设置按钮的显示图片, 代码如下:In itializatio n();for(i nt i=0;i
11、SelectObject(&m_Brush);/选中画刷pDC-FillRect(rect,&m_Brush);/ 填充客户区域return m_Brush;/返回画刷elsehbr = CDialog:O nCtlColor(pDC, pWnd, nCtIColor);if(n CtIColor = CTLCOLOR_STATIC)/如果是静态文本控件pDC-SetBkMode(TRANSPARENT); / 设置控件背景透明return hbr;3.2.5 添加自定义函数 RandLetter该函数用于设置随机数,其实现代码如下:void CFi ngerExerciseDlg:Ra nd
12、Letter()CTime time=CTime:GetCurre ntTime();/获得系统时间sran d(time.GetHour()+time.GetM inu te()+time.GetSec ond();/根据时间设置种子for(i nt i=0;i10;i+)m_Numi = ran d()%26+1;/获得126之间的随机数326 添加自定义函数 SetBitmap该函数用于设置静态控件的显示图片,其实现代码如下:void CFi ngerExerciseDlg:SetBitmap(i nt num)HBITMAP m_hBitmap;/加载位图资源m_hBitmap=Loa
13、dBitmap(AfxGet In sta nceHa ndle(),MAKEINTRESOURCE(IDB_BITMAPA+m_Num num 卜1);m_Static nu m.SetBitmap(m_hBitmap);/设置显示图片m_Static num.MoveWi ndow(45+58* num,21,24,24); / 移动控件m_Static num.ShowWi ndow(SW_SHOW);/ 显示控件3.2.7处理“开始”按钮的单击事件在该事件的处理函数中清空控件中的数据,并设置定时器,开始练习,其实现代码如下:void CFi ngerExerciseDlg:O nBut
14、start()m_Error = 0;/m_Sum = 0;/m_Lose = 0;/m_Time = 0;/CStri ng time;m_Timi ng.GetWi ndowText(time);/mTime = atoi(time)*60;/m_Alternatio n.GetWi ndowText(time); / m_aTime = atoi(time);/Ran dLetter();/for(i nt i=0;i10;i+)SetBitmap(i);/片m_IsStart = TRUE;/SetTimer(1,m_aTime,NULL); /器SetTimer(2,1000,NUL
15、L);/错误数为0打字数为0漏打数为0用时为0获得练习时间计算练习时间获得下降间隔转换下降间隔设置随机数设置控件显示图开始练习设置下降间隔定时设置练习时间定时器328处理主窗体的定时器事件在该事件的处理函数中设置控件的下落记录漏打数,并设 置漏打控件的图片,在练习时间定时器中,判断是否结束练习, 如果结束练习则显示用户练习成绩单,并将信息保存到INT文件中,其实现代码如下:void CFi ngerExerciseDlg:O nTimer(UINT nIDEve nt)if(n IDEve nt = 1)for(i nt i=0;i10;i+)CRect rect;m_Statici.GetC
16、lie ntRect(rect);m_Statici.MapWi ndowPoi nts(this,rect);if(rect.bottom = 495)m_Lose+;sran d(m_Numi*i+m_Numi+i);m_Numi = ran d()%26+1;SetBitmap(i);rect.top = 21;rect.bottom = 45;elserect.top += 30;rect.bottom += 30;m_Statici.MoveWi ndow(rect);else if(n IDEve nt = 2)if(m_Time = m_iTime)m_IsStart = FAL
17、SE;KillTimer(1);KillTimer(2);CStri ng str;str.Format( i1rn I 时间:02d分%02d秒 | 打字数:03d 个丨 rnI错误数:%03d个|漏打数:%03d个| rn |正确率:0.0f%| 速度:%03d个/ 分 | rn 1m_Time/60,m_Time%60,m_Sum,m_Error,m_Lose,(m_Sum-m_ror)*1.0/m_Sum*100,m_Sum*60/m_Time);MessageBox(str);for(i nt i=0;imessage = WM_KE YDOWN)BOOL IsNum二FALSE;f
18、or(i nt i=0;iwParam = 0x0041+i)for(i nt j=0;j10;j+)if(m_Numj = i+1)CRect rect;m_Staticj.GetClie ntRect(rect); m_Staticj.MapWi ndowPoi nts(this,rect); sran d(m_Numj*j*i+m_Numj+j+i); m_Numj = ran d()%26+1;SetBitmap(j);rect.top = 21;rect.bottom = 45;m_Staticj.MoveWi ndow(rect);IsNum = TRUE;if(!lsNum)m_
19、Err o叶+;m_Sum+;return CDialog:PreTra nslateMessage(pMsg);3.2.10处理“取消”按钮的单击事件在该事件的处理函数中关闭定时器并隐藏控件,其实现代码如下:void CFi ngerExerciseDlg:O nButca ncel()KillTimer(1);KillTimer(2);for(i nt i=0;i10;i+)m_Statici.ShowWi ndow(SW_HIDE);In itializatio n();3.3、调试程序331调试中的错误与解决方式由于各种各样的原因,在开发过程中,我遇到了许多技术 上的问题,但是通过与指
20、导老师的沟通,再加上自己的努力终 于把问题一一解决了,(1)、由于以前没有深入研究 MFC的设计,所以它对于我有点陌生,特别是插入位图时,对菜单还不是很熟悉,所以使 用起来有些困难。最终在书上找到了解决办法:插入一一资源 Bitmap,然后导入自己一开始准备好的图片。(2)、加入函数时,搞不清楚它属于自定义函数还是作为 消息处理函数导入,要自己进行摸索。解决办法:自定义函数 是直接往类加入就可以了,而消息处理函数却是要利用 ClassWizard中寻找自己所需要的导入函数。(3)、对类中进行添加函数时总是会出现字母多打或漏 打,或字母大小写没有区分清楚等待。解决方法:在打入代码 时要做到边打边检查是否打错,或者在程序运行时根据出错提 示来纠正错误。332测试结果1、开始界面2、练习界面通过本次课程设计,使我对面向对象设计、 C+和MFC有 了更深入的理解。面向对象设计是一门实践性很强的课程, 为了学好这门课程,必须在掌握理论知识
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 热敷与低频电刺激协同作用-洞察及研究
- 手指画树叶课件
- 公司管理者遵守公司既定制度
- 视听行为分析-洞察及研究
- 公司复印机买卖合同5篇
- 2025-2026学年九年级上册期中模拟试卷(一)(含答案)
- 2024-2025学年四川省成都市龙泉驿区八年级(下)期中数学试卷(含部分答案)
- 橡胶厂考勤管理规范制度
- 自然冷却技术优化-洞察及研究
- 采购成本管理技术与谈判技巧培训(采购培训)
- 清廉企业建设课件内容
- 2025年全国“质量月”质量知识竞赛题库及答案
- 化妆打底教学课件图片
- 蹲踞式跳远教案设计及教案
- 2025年北京市高考卷语文(纯答案版)
- 幼儿园食堂法律法规培训
- 化解矛盾纠纷课件
- 2025秋部编版(2024)八年级上册历史 【教学课件】第3课《太平天国运动》
- QGDW11451-2015架空输电线路标识及安装规范
- 规培年度个人汇报
- 带下病中医教学课件
评论
0/150
提交评论