还剩7页未读,继续阅读
文本内容:
中南大学本科生课程设计实践任务书、设计报告C++程序设计题目时钟控件学生姓名指导教师学院交通运输工程学院专业班级学生学号计算机基础教学实验中心2012年9月7日《C++程序设计基础》课程设计任务书对象粉冶、信息、能源、交通工程实验2101学生时间
2012.62周(18~19周)指导教师王小玲
1.课程设计的任务、性质与目的本课程设计是在学完《C++程序设计基础》课程后,进行的一项综合程序设计在设计当中学生综合“面向对象程序设计与结构化程序设计”的思想方法和知识点,编制一个小型的应用程序系统通过此设计进一步提高学生的动手能力并能使学生清楚的知道__一个管理应用程序的思想、方法和流程
2.课程设计的配套教材及参考书《C++程序设计》,铁道出版社,主编杨长兴刘卫国《C++程序设计实践教程》,铁道出版社,主编刘卫国杨长兴《VisualC++课程设计案例精编》,中国水力电力出版社,严华峰等编著
3.课程设计的内容及要求
(1)自己任选一个题目进行__(如画笔、游戏程序、练习打字软件等),要求利用MFC工具操作实现
(2)也可选一个应用程序管理系统课题(如通讯录管理系统;产品入库查询系统;学生成绩管理;图书管理等);设计所需数据库及数据库中的数据表,建立表之间的关系设计所选课题的系统主封面(系统__题目、__、指导教师、日期)设计进入系统的各级口令(如系统___口令,用户级口令)设计系统的主菜单要求具备下列基本功能数据的浏览和查询数据的统计数据的各种报表打印输出帮助系统多种形式的窗体设计(至少有查询窗体、输入窗体)注意__的应用程序工作量应保证在2周时间完成,工作量不能太少或太多可以2人合作,但必须将各自的分工明确
4.写出设计论文论文基本内容及撰写顺序要求内容摘要系统__设计思想系统功能及系统设计介绍系统__的体会论文基本格式要求封面,见附件1正文,见附件2考核方式与评分办法出勤考核成绩占总成绩20%设计成果评价总总成绩的60%实践论文评价占总成绩的20%2012年6月6日时钟控件摘要使用vc++
6.0编写一个模拟时钟程序,此程序在屏幕左方有一个指针式钟面,右方有两个矩形框,上面以数字方式显示日期和时间,该时间应与指针显示的时间一致,__的矩形框作为秒表用菜单选项或按钮设置时间和秒表时间不必与机器系统时间相同,可任意设置关键词c++程序设计、mfc[.exe]、面向对象、时钟、秒表
1、时钟程序__设计思想该程序设计主要涉及到的知识点有时钟指针运动算法、屏幕重绘方法、定时器消息、鼠标消息、菜单命令、对话框、画笔/画刷、显示文字、修改程序图标等其中最关键的是指针运动算法和屏幕重绘方法的应用其中,在设计表盘指针的时候,由于不论何种指针,每次转动均以π/30弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心计算指针端点(xy)的公式如下x=圆心x坐标+指针长度*cos指针方向角y=圆心y坐标+指针长度*sin指针方向角而指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端点另一方面,三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此需要使用一个定时器消息来处理指针的运动若用三个定时器消息分别处理时针、分针和秒针的运动,就会使问题复杂化且不易实现三个指针联动的正确规律采用一个定时器消息可以很容易实现指针联动算法代码的编写当中可以使用我们所学过的if语句来实现指针的联动由于屏幕的重绘速度很快(50ms一次),如果采用全屏删除式重绘则闪烁十分明显,显示效果不佳本程序采用非删除式重绘,假定指针将要__一格,则先采用背景色(这里是白色)重绘原来指针以删除原来位置的指针,再采用指针的颜色在当前位置绘制指针;如果指针没有动,则直接绘制指针另外,秒表采用的是单独的定时器消息控制
2、时钟功能及程序设计介绍
1、系统功能介绍
(1)左边部分是一个圆形表盘,右边部分上面是一个数字式时钟,右边下面是一个秒表
(2)圆形表盘时针、分针而后秒针运动规律正确且即使重合在一起也能清楚的进行辨认;数字式时钟可以显示年、月、日、时、分、秒等数据时间显示与指针式时钟显示一致;秒表显示窗中显示从0开始的时间,单位为百分之一秒再次按下秒表控制按钮后计时停止,该窗口显示累计时间
(3)按下设置时间菜单项可弹出一对话框,用于设置当前的时间和日期
(4)具有一个美观大方的图标和个性的帮助信息
2、程序设计介绍
(1)首先在mfcAppWizard中生成一个名为Clock的单文档程序框架然后在classview中修改cclockapp中lnitlnstan__[]中的代码,去掉单文档窗口中上面和下面部分的工具栏,使得界面更加美观然后修改resour__view中dialog和version下面的信息,添加、修改程序的图标与定制个性化的帮助信息
(2)编辑项目的菜单资源,在主框架窗口的主菜单(IDR___INFRAME)中添加一个名为“时钟控制”的下拉菜单在“时钟控制”菜单中添加三个菜单选项“启动时钟”、“停止时钟”和“时间设置”并在菜单属性项中设定“启动时钟”菜单的ID标号为ID_START,“停止时钟”菜单的ID标号为ID_STOP,“时间设置”菜单的ID标号为ID_SETTIME
(3)利用ClassWizard为视图类添加菜单命令处理函数进入ClassWizard的Message__ps选项卡,选择ClassName项为CClockView类,在O__ectIDs列表框中分别选择新添加的菜单选项的ID,在Messages列表框中选择COM__ND,按下AddFunction按钮添加成员函数ClassWizard会为“启动时钟”、“停止时钟”和“时间设置”菜单选项添加相应的消息响应函数OnStart、OnStop和OnSettime
(4)利用ClassWizard为视图类添加定时器和鼠标消息处理函数进入ClassWizard的Message__ps选项卡,选择ClassName项为CClockView类,在Messages列表框中分别选择定时器消息WM_TIMER和鼠标消息WM_LBUTIONDOWN,按下AddFunction按钮添加成员函数ClassWizard会添加相应的定时器和鼠标消息响应函数OnTimer和OnLButtonDown
(5)使用DeveloperStudio菜单的Insert/Resour__…选项调出InsertSour__对话框,为项目添加新的对话框资源在对话框属性中,修改对话框名为“时间设定”在对话框中增加用来输入年、月、日、时、分、秒的编辑框控件并通过控件属性,将年、月、日、时、分、秒等编辑控件的ID改为IDC_YEAR、IDC_MONTH、IDC_DAY、IDC_HOUR、IDC_MINUTE和IDC_SECOND
(6)设计好这个对话框模板后,利用ClassWizard自动建立对话框类进入ClassWizard后,它会发现已建立的对话框模板资源,并弹出一个对话框询问是否要为该对话框模板建立类按下“OK”按钮,会弹出NewClass对话框,在Name栏填写对话框类的名称CSetTimeDlg后按“OK”按钮,即可为对话框创建一个对应的类
(7)利用ClassWizard为对话框类添加与各控件对应的数据成员选择MemberVariables选项卡,确保ClassName项为对话框CSetTimeDlg类,然后在选项卡__的窗口中选择各控件的ID并按下“AddVariable…”按钮,为其添加对应成员变量,如下表所示编辑控件属性ControlIDsVariableTypeMembervariablenameVariableRangeIDC_YEARintm_Year0~3000IDC_MONTHintm_Mouth1~12IDC_DAYimtm_Day1~31IDC_HOURimtm_Hour0~23IDC_MINUTEintm_Minute0~59IDC_SECONDintm_Second0~59 最后一列为变量取值范围
(8)完成以上工作后,即可修改程序框架,在关键部分添加必要的代码来实现表盘的绘制、计时器的设置、指针的计算和屏幕的重绘等要求
(9)组建、运行、调试最终效果图
3、程序设计过程中遇到的问题以及解决方法
(1)漏打字母比如在前面clockView中添加的引用头文件的语句中csettimedlg打成了csetimedlg,而头文件是#include“SetTimeDlg.H”,导致在组建调试的时候总是提示引用不到头文件、没有这个文件,后来是一行行仔细检查代码的时候发现的
(2)错打符号在clockview.cpp中添加代码的时候,有个//{{AFX_DATA_INITCSetTimeDlg……//}}AFX_DATA_INIT当中的{{和}}打成了||,结果导致后面设定初始时间的代码无法找到对应的头文件这是我通过对比其他没有修改过的原来就存在的函数的格式发现并改正的这件事也让我纠正了原来一直有的一个误区,//符号后面的不一定只有对代码无任何影响的注释
(3)窗口大小设置的问题我通过movewindow函数来设置窗口大小,但是总是没有成功,后来考虑到窗口大小对程序的正常使用没有多大影响,而且设置了窗口大小的话,就不好确定表盘右边秒表方框的位置了,所以这件事就不了了之了,这也是本次程序设计过程当中的一大遗憾
(4)屏幕的重绘问题存在两个问题,第一个是本程序由于完全在OnDraw函数中实现,因此屏幕重绘较为麻烦如果在OnDarw函数中采用“异或”屏幕重绘方式,在程序窗口最大、最小化及移出屏幕时,会显示异常通过查阅资料得知,解决这一问题较理想的方式是在定时器处理函数OnTimer中采用“异或”方式直接重绘屏幕,而不采用调用Invalidate函数的方式;同时在OnDraw函数中显示指针的最后状态,以便处理程序窗口最大、最小化及移出屏幕的情况第二个是采用全屏删除式重绘则屏幕闪烁明显,显示效果不佳可以通过采用非删除式重绘的方式来缓解这一现象
3、时钟__的体会这是我第一次使用mfc__小程序,由于只是对vc++和mfc相关的知识的掌握程度不是很高,所以我在图书馆和网络当中查找了很多相关的资料,但是甚至照着书本制作的过程当中还是出现了很多问题,使得我调试了很长时间,才发现这是一件很费精力的事情,这件事使得我觉得程序__是很不容易的,尤其是大型的程序另外,这次计算机课程设计不仅让我巩固了以前所学的编程方面的知识、学到了很多课堂上所学不到知识,而且让我明白了一个道理,“千里之堤毁于蚁穴”,无论是编程的时候,还是平时生活学习、进行科学研究的时候,都要养成严谨、仔细的作风,否则就算再努力,最后得到的可能还是零最后,我要对所有在我完成课程设计的过程当中提供过帮助的老师和同学表示衷心的感谢,尤其要感谢裘老师、李老师,是你们对我耐心的讲解和帮助,才让我顺利的完成了本次课程设计;是你们,给我提供了这样一个补充自我、提升自我的机会和平台,谢谢你们!。