《面向对象程序设计》课程设计实验指导书武汉理工大学理学院物理科学与技术系2013年2月1日目录设计一简单计算器 (1)设计二模拟时钟程序 (4)设计三 24点游戏 (8)设计四多媒体视频播放器 (11)设计五幸运52 (14)设计六简单画图程序 (17)课程设计说明书要求 (20)设计一简单计算器一、概述在运算过程中,通过使用计算器能减少运算量。
既可以用“计算器”的标准视图执行简单的计算,也可以用其科学型视图执行高级的科学计算。
用户使用“计算器”执行所有通常用手持计算器完成的标准操作。
简单计算器包括双目运算和单目运算功能。
双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,阶乘,对数,开方,倒数等运算。
简单计算器可对输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算,同时包含清除,退格,退出功能。
简单计算器出现错误会给出相应错误提示。
而且可以操作与运算按钮相对应的菜单项。
通过对简单计算器的设计,可以熟悉MFC编程,包括Visual C++在数学计算方面的知识、算法设计、对话框和控件的使用及应用程序的调试,同时对面向对象与可视化程序设计有一定的认识,并提高动手编程的能力。
二、设计任务1、提出总体方案的设计思想和原理,绘制程序流程图和描述程序的功能,并说明程序的特点和难点。
具体如下:执行简单计算:(1) 键入计算的第一个数字。
(2) 单击“+”执行加、“-”执行减、“*”执行乘或“/”执行除。
(3) 键入计算的下一个数字。
(4) 输入所有剩余的运算符和数字。
(5)单击“=”。
执行科学计算:能够执行阶乘、正弦、余弦和指数运算。
2、添加相关控件,制作与用户交互性较好的应用程序界面。
3、进行按钮事件处理,编写代码,完成整体设计。
4、调试程序,达到所要求的功能。
三、设计步骤1、初始界面设计要求应用程序中包含菜单操作和帮助,合理排列各个控件的位置,具体可参照Windows中的标准型计算器:或如下图所示的简单型计算器:3 具体设计(1) 创建应用程序框架。
(2) 创建对话框资源,添加成员处理函数和成员变量。
(3) 添加消息处理函数。
(4) 添加完成各个功能的代码。
包括处理输入、处理计算和处理显示。
4 程序的完善(1) 添加处理科学计算的功能。
(2) 加入键盘处理。
5 重点和难点在设计过程中,要注意考虑运算的优先级问题、数制的转换算法和界面的布局显示、使用菜单进行相关控制。
四、思考题1、程序中如何实现小数的显示与运算?2、描述等号对应的消息处理函数中需要处理的问题及相应的实现代码?3、(选做)若实现了科学型和标准型,说明科学型和标准型实现的关键算法?设计二模拟时钟程序一、概述计时器是程序中最常用的后台任务机制之一,其时间间隔最低约55毫秒,被广泛用于时钟、磁盘备份程序或需要在某一时刻运行的程序等。
而模拟时钟是一种集计时器和时钟显示于一体的程序。
以实例为背景学习基于MFC的WINDOWS应用程序设计,编写一个指针式时钟程序,此程序在屏幕正中有一个指针式钟面,屏幕下方或右方以数字方式显示日期和时间。
指针式的时钟表盘为椭圆形或圆形,并且圆周上有分布均匀的12个刻度,刻度要求显示清晰,钟面上有长度和颜色及粗细各不相同的指针,即时针、分针、秒针,以便各个指针重合时亦可以轻易辨认,指针的运动要求具有规律性,且为顺时针。
数字钟的钟面为一个规则的矩形,其显示时间的格式是时:分:秒,小时为24进制,分钟和秒是60进制,指针式的时钟和数字式的时钟显示的时间同步,且两个时钟所显示的时间与计算机的系统时间一致。
通过对指针式时钟的设计,可以掌握API或MFC编程,其中包括各种视图类的作用、绘图函数的使用、计时器的操作、对话框的使用及应用程序的调试,同时对面向对象与可视化程序设计有一定的认识,并提高动手编程的能力。
二、设计任务1、提出总体方案的设计思想和原理,绘制程序流程图和描述程序的功能,并说明程序的特点和难点。
2、编程要求(1)为该程序设计一个美观大方的图标。
(2)程序界面设计合理,色彩得体大方,显示正确。
(3)用绘图函数绘制钟的界面图。
时针、分针和秒针形象美观,即使各指针重合也可辨认。
(4)各指针运动规律正确。
(5)客户区中显示数字时钟,数字式时钟的时间显示与指针式时钟显示一致。
(6)提供对话框由用户设置当前新的时间。
3、调试程序,达到所要求的功能。
三、设计步骤1、钟面功能设计根据自己的考虑绘制钟的界面图,具体也可参照下图:或另一种方案图:总体显示效果如下:2、具体设计本题主要涉及到的知识点有:时钟指针运动算法、屏幕重绘方法、定时器消息、菜单命令、对话框、画笔/画刷、显示文字等。
指针运动算法和屏幕重绘方法是本程序主要难点所在。
不论何种指针,每次转动均以π/30弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。
计算指针端点(x, y)的公式如下:x =圆心x坐标 + 指针长度* cos (指针方向角)y =圆心y坐标 + 指针长度* sin (指针方向角)注意,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端点。
三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此应该使用一个定时器消息来处理指针的运动。
(1) OnDraw()函数实现对系统时间的获取和绘制椭圆表面和时钟指针。
(2) 设置计时器,创建窗口时启动一个计时器不断发出WM_TIMER消息,调用SetTimer()函数。
(3) 用TextOut()函数显示数字钟。
(4) 添加菜单,用菜单项控制弹出对话框设置显示的时间。
3、重点和难点(1) 使用计时器需要了解两个函数:SetTimer()函数用来设置一个计时器以指定的时间间隔触发,KillTimer()函数用来使一个正在运行的计时器停止。
(2) 时钟指针的显示和移动是一个需要注意的方面。
(3) 注意屏幕重绘方法。
(4) 掌握如何显示文本,将用户设置的时间更新时钟的显示。
四、思考题1.程序中如何实现时钟时间与计算机系统时间保持一致?2.SetTimer()函数和KillTimer()函数的调用位置与程序运行的关系?3.说明SetTimer()函数、WM_TIMER消息和OnTimer()函数的调用关系?4.实现数字钟时,涉及到的编程有哪些?设计三 24点游戏一、概述24点游戏是一种常见的数学运算游戏,玩游戏者只需根据系统给出的四张1~10的纸牌算出24即可,而程序主要负责实现随机发牌、结果验算、计算得分、难度设置等功能。
通过对24点游戏的设计,可以熟悉MFC编程,加深对对话框编程的认识和理解,并训练Visual C++在数学计算方面的知识,以及在按钮上设置位图、设置定时器的方法和应用程序的调试,同时对面向对象与可视化程序设计有一定的认识,并提高动手编程的能力。
二、设计任务1、提出总体方案的设计思想和原理,绘制程序流程图和描述程序的功能,并说明程序的特点和难点。
要求具有如下功能:(1) 按下“发牌”按钮时开始游戏,桌面上显示4张翻开的扑克牌,并且游戏开始计时,进度条开始前进。
(2) 当用户能够将4张牌计算出24时,可以按下“输入算式”按钮,此时游戏计时停止,用户可在编辑框中输入。
(3) 输入结束,用户按下“验算”按钮,计算输入的多项式。
验算通过,显示“正确”;验算出错,显示“错误”。
(4) 如果用户希望继续游戏,则可按下“发牌按钮;否则按下“结束游戏”按钮。
2、制作与用户交互性较好的应用程序界面,在对话框中动态显示位图。
3、为各个控件编程代码,完成整体设计。
4、调试程序,达到所要求的功能。
三、设计步骤1、设计初始界面设计一个交互性较好的界面,要求有菜单和帮助。
具体为:(1) 用应用程序向导生成一个基于对话框的简单框架。
(2) 生成管理对话框的类,定义成员变量。
(3) 定义消息处理函数。
(4) 引入图片资源。
可参照下图:2、添加完成各个功能的代码(1) 扑克牌在对话框中的动态随机显示。
使用LoadBitmap()和SetBitmap()方法,使用rand()函数实现随机功能。
(2) 增加计时功能。
使用OnTimer(),SetTimer()和KillTimer()方法,利用进度条或时间显示完成计时控制。
(3) 验证算式的算法实现。
该算法属于经典算法,可在网上或资料中查找,但需要应用到自己的程序中。
3、重点和难点(1) 在对话框窗口中显示扑克牌位图;(2) 随机产生扑克牌的点数;(3) 根据牌的点数验证算式的正确性;(4) 计时器正确控制进度条;(5) 使用时间限制的不同来控制难度级别;(6) 自己实现或上网查找算式验证算法;四、思考题1、改变难度可以变化游戏的限时和游戏加分的规则,如何实现?2、如何使用随机函数控制扑克牌的显示?3、考虑如何保证程序是根据给出的牌来书写算式的?4、(选做)分析算式验证算法,给出流程图?设计四多媒体视频播放器一、概述视频播放工具是目前计算机必备的一个软件,如大家熟悉的Media player、Realplay、金山影霸等。
VC提供了多种ActiveX控件来完成视频文件的操作,如RealPlayer控件,Windows Media Player控件,ActiveMovieControl Object控件,ActiveMovie控件等,这些控件对应的播放软件能够播放RM、RMVB、MP3、MPEG、DAT等多种格式的多媒体文件。
通过对多媒体视频播放的设计,可以熟悉多媒体编程和控件编程,加深控件的认识和理解,同时对面向对象与可视化程序设计有一定的认识,并提高动手编程的能力。
二、设计任务1、提出总体方案的设计思想和原理,绘制程序流程图和描述程序的功能,并说明程序的特点和难点。
要求系统能实现单独播放音频文件和单独播放视频文件。
2、创建工程,如需要,制作与用户交互性较好的应用程序界面。
3、为各个控件编程代码,完成整体设计。
要求能用菜单和播放条或按钮控制媒体的播放。
4、调试程序,达到所要求的功能。
三、设计步骤本设计根据不同的编程方法不同,设计步骤也有所区别。
1.熟悉控件的作用。
2.根据选择的控件,将控件加入建立的工程。
3.查看控件包括的类和函数,了解他们的作用和相互关系。
4.使用控件中提供的类和函数完成媒体播放器的制作。
运行界面可参照下图:或2、重点和难点(1) 若采用MCIWnd类,则需熟悉MCIWnd类的功能;查找资料了解MCIWnd中各种宏的含义和使用方法;如何使用提供的播放条实现播放功能。
(2) 若使用控件,则需熟悉各种控件的功能和使用的类、成员函数。
四、思考题1、控件自带的类和本程序中的类是如何共同作用的?2、说明程序中调用的控件函数的作用?3、(选做)除了你所使用的方法外,考虑使用下列方法之一完成视频播放器的制作:RealPlayer控件,VC6.0自带的一个ActiveX控件----ActiveMovieControl Object,可视动画控件ActiveMovie等。