C++指针型闹钟课程设计_第1页
C++指针型闹钟课程设计_第2页
C++指针型闹钟课程设计_第3页
C++指针型闹钟课程设计_第4页
C++指针型闹钟课程设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课 程 设 计 说 明 书题 目:指针型闹钟学院名称: 专业班级:姓名学号: 指导教师:2013 年 07 月课程设计任务书专业班级: 学生姓名: 指导教师:一、 课程设计题目:设计一个如图所示的指针式闹钟二、目的与要求:1、目的:(1)要求学生熟练掌握C+语言的基本知识和C+调试技能;(2)掌握用C+开发应用程序的一般步骤和方法;(3)能够利用所学的基本知识和技能,解决简单的面向对象的程序设计问题。(4)培养学生综合利用C语言进行程序设计的能力,主要是培养学生利用系统提供的标准图形函数进行创新设计。2、基本要求:(1)要求利用面向对象的方法以及C+的编程思想来完成系统的设计;(2)要求在设计

2、的过程中,对Windows环境下的编程有一个基本的认识;(3)学会Windows环境下绘图的基本方法;(4)能够完成基本的钟表的走时功能、对表功能、定时功能;(5)界面美观大方。3、创新要求:在基本要求达到后,可进行创新设计,如定时提醒功能、声音提醒功能、定时运行别的程序的功能等。4、写出设计说明书按照设计过程写出设计说明书。三、设计方法和基本原理:1、问题描述(功能要求):要求所编写的闹钟能够完成基本的走时、对时、定时功能。2、问题的解决方案(参考):根据题目的要求,可以将问题解决分为以下步骤:(1)分析问题,画出要解决问题的流程图(类及其层次结构图);(2)利用对话框编辑器完成界面的设计,

3、要求界面要美观实用;(3)添加成员变量和成员函数(消息映射函数);(4)利用结构化程序的设计思路完成秒针、分针、时针的走动及闹铃指针的设置。(5)程序功能调试;(6)完成系统总结报告以及系统使用说明书。四、设计中涉及到的重要内容及关键技术:1、对话框应用程序的编写方法及其相关函数;2、绘图工具的使用方法;3、一些常用系统API函数的使用方法。五、程序设计和调试:编写程序代码、完成程序调试。六、编写课程设计说明书:按照课程设计说明书的规范格式要求以及说明书中的内容要求编写课程设计说明书。七、答辩与评分标准:1、完成基本功能:40分;2、设计报告及使用说明书:30分;3、设置错误或者按照要求改变结

4、果:15分;4、回答问题:15分。摘要 此课程设计的目的是为了达到熟练掌握C+语言的基本知识和C+调试技能;基本掌握面向对象程序设计的基本思路和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题;培养综合利用C语言进行程序设计的能力。需要设计的模拟时钟程序是基于MFC的WINDOWS应用程序设计,程序运行成功后,页面出现了一个指针式的时钟和数字式的时钟,指针式的时钟表盘为圆形,并且圆周上有分布均匀的12个刻度,刻度要求显示清晰,圆形的钟面上有长度和颜色及粗细各不相同的指针,即时针、分针、秒针,以便各个指针重合时亦可以轻易辨认,指针的运动要求具有规律性,且为顺时针,指针式的时钟表

5、盘下面则是一个以数字形式显示时间的数字钟,数字钟的钟面为一个规则的矩形,其显示时间的格式是时:分:秒,小时为12进制,分钟和秒是60进制,指针式的时钟和数字式的时钟显示的时间同步,且两个时钟所显示的时间与计算机的系统时间相一致,页面的菜单项设有时间设置的栏目,可以对所显示的时间进行调整,能进行调整的具体内容是年、月、日、时、分、秒。此模拟时钟外观简洁,功能和实际运用到的时钟基本一样,用起来非常方便。关键词:指针式;闹钟;系统时间 AbstractThis course is designed for the purpose to achieve proficiency in C + + lan

6、guage basics and C + + debugging skills; basic grasp of object-oriented programming of the basic ideas and methods; able to use what they have learned the basic knowledge and skills to solve simple object-oriented program design issues ; develop comprehensive utilization C + + language programming c

7、apabilities. Need to design analog clock program is based on the MFC WINDOWS application design, the program runs successfully, the page there is a pointer clock and digital clock Analog clock dial is circular and is distributed uniformly on the circumference 12 scale, the scale required to display

8、clear, round clock face has length and color and thickness of each are not the same pointer, instant needle, minute, second hand, in order to coincide each pointer can also be easily recognizable, the law requires the movement of the pointer resistance, and is clockwise, Analog clock dial the follow

9、ing is a digital form of display time digital clock, digital clock, clock face is a regular rectangular, its display time format is hours: minutes: seconds, hours of 12 hex, minutes, and seconds is 60 hex, Analog clock and digital clock displays the time synchronization, and the two clocks show the

10、time and the computer's system time is consistent with the menu item page time setting columns, you can adjust the displayed time can be adjusted by the specific content is the year, month, day, hour, minute, second. This analog clock looks simple, functional and practical application to the clo

11、ck basically the same, and it is very convenient.Keywords: Analog; Alarm; System Time目录第一章 引言61.1课题背景及意义61.2课题的研究方法6第二章 课程设计目的与要求72.1 课程设计目的72.2 课程设计的实验环境82.3 课程设计的预备知识82.4 课程设计要求8第三章 课程设计内容93.1.功能分析93.2程序流程相应说明9第四章 软件设计114.1 设计步骤114.2 界面设计134.3时间显示134.3.1 模拟时钟显示134.3.2 状态栏显示时间144.3.3定时功能144.4 测试结果1

12、54.5 关键源代码15第五章 课程设计总结19致 谢20参考文献21第一章 引言1.1课题背景及意义随着社会的发展,进入21世纪,个人电脑已经进入千家万户,人们已习惯于以互联网的方式交流,学习和娱乐。网上跨国交流也越见频繁,由于时差的关系,人们在浏览国外新闻时经常需要进行时间的换算。不同地区作息时间的不同也影响到人们的交流。一种指针式闹钟的时钟程序,将给人们的生活与交流带来极大地方便。1.2课题的研究方法通过对VC+可视化编程的学习以及各地区时间差的查询,本文主要采用MFC控件和多线程编程技术,以及三个与时间有关的函数SetTimer()、OnTimer()和KillTimer(),设计实现

13、一个包含计时器功能和闹钟功能的多时区时钟程序。第2章 课程设计目的与要求2.1 课程设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程C+语言教程的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。(3)利用所学知识,开发小型应用系统,掌握运用C+语言编写调试应用系统程序,训练独立开发应用系统

14、,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 (5)掌握面向对象程序设计的方法。(6)熟练掌握C+语言的基本语法,灵活运用各种数据类型。(7)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。2.2 课程设计的实验环境硬件要求能运行Windows 操作系统的微机系统。C+语言应用程序开发软件使用:VC+ 系统,或其他C+语言应用程序开发软件。2.3 课程设计的预备知识熟悉C+语言程序设计的基本知识及VC+编辑器的使用方法。2.4 课程设计要求利用所学的面向对象及C+编程知识和技巧,通过布置具有一定难度

15、的程序设计题目,并且要求学生独立完成所布置题目,在分析设计过程中,要求学生养成良好的编程习惯,学会分析简单的实际问题,并能利用所学的知识建立系统的逻辑结构,学会简单的调试技巧和方法。根据系统的功能要求,要求学生逐步完成应用程序的设计,具体要求为:1、按规定的时间及要求上机。2、设计方案正确,正确划分所选课题的系统功能模块。3、系统设计要尽量实用,数据与功能分析详细。4、要求C+编码简洁、稳定、高效。5、独立查阅资料,认真书写课程设计说明书。第三章 课程设计内容3.1.功能分析(1)正确显示系统时钟;(2)能准确定位时钟刻度和时分秒针的位置;(3)能够完成基本的钟表的走时功能、对表功能、定时功能

16、;3.2程序流程相应说明(1) 程序运行后,出现了以时针、分针和秒针的指针式的时钟和以数字方式显示时间的数字时钟,所显示的时间与电脑同步,程序运行正确。(2) 绘制指针式的时钟和插入背景时钟图片时,可以运用CView类,CView类提供了视图类所需要的最基本的功能实现,其提供的虚拟方法使应用程序可以重写它们提供CView派生类中的方法,其中OnDraw()函数是重绘视图窗口时被调用, 调用MoveTo和LineTo绘制表盘指针。(3) 模拟时钟处理消息的过程:首先调用SetTimer函数定义时钟消息,包括参数指定计时器的ID,消息产生的时间间隔等;然后在相应的WM_TIMER消息处理里添加时钟

17、消息响应代码。在该模拟时钟设计的程序中,调用消息处理函数OnTimer()刷新窗口显示。(4) 要实现时钟的动态效果,即时间窗显示的时间每隔一秒钟更新一次,需要在时间窗格的正文调用CStatusBar:SetPaneText()函数。要定时更新,则应利用WM_TIMER消息。在Window中,用户可以安装一个或多个计时器,计时器每隔一定的时间间隔就会发出一个WM_TIMER消息,而这个时间间隔可由用户指定。MFC的Windows类提供了WM_TIMER消息处理函数OnTimer(),应在该函数内进行更新时间窗格的工作。先利用ClassWazard给CMainFrame类加入WM_TIMER消息

18、处理函数OnTimer(),CMainFrame: OnTimer()函数是在系统发给框架窗口消息WM_TIMER时调用的,在CMainFrame:OnCreate()函数内调用CWnd:SetTimer()以安装一个计时器,使OnTimer()在设定的时间间隔被调用。(5) 通过调用GetCurrentTime()函数来实现时钟时间与计算机系统时间保持一致,使时间与计算机同步后。(6) 在程序设计过程之中添加菜单,用菜单项控制弹出对话框设置显示的时间,这样可以使时钟达到可调的效果。(7) 程序运行正常,界面设置合理,指针式的时钟和数字式的时钟的运动达到任务书的要求,并且能用菜单项控制对话框以

19、实现对当前时间的调整,程序达到各项功能之后,退出界面,程序结束。第四章 软件设计4.1 设计步骤使用AppWizard创建一个基于对话框的MFC工程,将之命名为abao。所有步骤均使用AppWizard给出的默认设置, 完成对话框的创建。在CmainFrame类中加入消息处理函数OnTimer(),在OnCreate()中添加代码,在CmainFrame:OnDraw(CDC* pDC)中显示背景图片以及调整,添加指针代码,在CMainFrame:OnTimer(UINT nIDEvent)中添加输出数字时钟的代码。(3) 在Resource View选项卡中打开Menu资源组,双击IDR_M

20、AINFRAME,在菜单项中添加一个“设置”的控件,再在“设置”的目录下添加一个“时间”的控件,设ID为IDC_EDIT_SET,通过ClassWizard为菜单连接对话框类CInputDlg,使菜单便能在程序运行后显示在应用程序主对话框上,菜单效果图如图2所示。图2 菜单效果图(4) 在Resource View选项卡中打开Dialog资源组,新建并双击IDD_DIALOG1,在出现的对话框中添加所需的控件,根据需要对其属性进行修改,并建立类向导,编辑框效果图如图3所示。图3 编辑框效果图(5) 在头文件中添加对各种函数及变量的声明,同时在类的原文件中添加实现功能所需要的各种函数,并添加相应

21、的代码。(6) 对完成后的程序不断进行调试,分析并修改其中的错误,直到程序运行不再报错,并能够实现所要求的各项功能。4.2 界面设计模拟时钟的界面设计比较简单,如图3所示,只需6个编辑框和相应的6个静态文本框,由于显示的时间都是整数,所以控件的类型都选为int型,因而所需要设计的控件也比较简单,界面设计的控件表如表1所示。表1 界面控件表 控件序号 控件名称 控件类型控件ID 相应变量 1 时 编辑框(CString) IDC_hour m_a 2 分 编辑框(CString) IDC_minute m_b 3 秒 编辑框(CString) IDC_second m_c4.3时间显示4.3.1

22、 模拟时钟显示模拟时钟的显示主要在于插入和绘图这两方面,也是本次模拟时钟课程设计的重中之重。这一部分所要添加的代码在File View选项卡中的Source File资源组里CCK52View.cpp中:(1) 首先要调用SetTimer()函数设置时间间隔,语句是SetTimer(1,1000,NULL),SetTimer()的第一个参数指定计时器ID为1,第二个参数规定了计时器的时间间隔为1000ms,即1s,这样,每隔1s就调用一次OnTimer()函数。(2)定义画笔hourPen、minutePen1、secondPen2分别为时针、分针、秒针的画笔。通过插入图片的位置以及图片长宽确

23、定时针、分针和秒针的位置,并根据所取系统时间GetHour()、GetMinute()、GetSecond()来决定时针、分针和秒针的转向。4.3.2 状态栏显示时间先在在String Table中添加New String,在此定义为ID_INDICATOR_CLOCK,将其Caption设为00:00:00,对应的Value值加1(可在resource.h中修改)。在MainFrm.cpp中indicators声明处添加ID_INDICATOR_CLOCK,代码如下:static UINT indicators =ID_SEPARATOR, ID_INDICATOR_CLOCK, /这里排列

24、影响显示顺序ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;然后在CMainFrame:OnTimer(UINT nIDEvent) 中添加如下代码使得状态栏时间随系统时间变化而变化:CTime time;time=CTime:GetCurrentTime();/得到当前时间CString s=time.Format("%H:%M:%S");/转换时间格式m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(ID_INDICATOR_CLOCK),s);

25、/显示时钟4.3.3定时功能要实现定时功能,需要在CMainFrame:OnTimer(UINT nIDEvent) 中添加如下代码:/获取当前系统时间显示到静态文本框time上CString str;CTime t = CTime:GetCurrentTime(); str.Format("%d时%d分%d秒",t.GetHour(),t.GetMinute(),t.GetSecond();/判断当前时间与设定时间是否一致if (s=str)PlaySound("1.wav",NULL,SND_FILENAME|SND_ASYNC);MessageBo

26、x(str,"TIMEs UP!",MB_OK);4.4 测试结果经分析程序错误原因并加以改正之后进行调试、程序编译、连接无错误后,程序能正确运行,图4显示了程序运行后模拟时钟以及打开菜单项的界面。图4 程序运行图经测试,程序运行成功后,出现了指针式的时钟和数字式的时钟,二者时间与计算机同步,时针、分针和秒针形象美观,即使各指针重合也可辨认,各项功能正常。4.5 关键源代码模拟时钟的源代码关键在对于时钟的绘制和设置计时器上,添加的代码在File View选项卡中的Source File资源组里面的CCK52View.cpp中,以下代码是关于模拟时钟的绘制:void CCk5

27、2View:OnDraw(CDC* pDC)CBitmap bmp;/bmp位图对象bmp.LoadBitmap(IDB_BITMAP1);/IDB_BITMAP3为图像对象的IDBITMAP bmpInfo;/位图信息对象bmp.GetBitmap(&bmpInfo);/获取位图信息CDC dcMemory,*dc;/在内存中创建一个位图兼容设备dc=GetDC();/获取设备上下文对象的类dcdcMemory.CreateCompatibleDC(dc);/创建内存位图兼容设备CBitmap *pOldBmp=dcMemory.SelectObject(&bmp);/将图片

28、选入兼容设备/将兼容设备的内容copy到屏幕设备中,实现真正的Paintdc->BitBlt(300, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory, 0, 0, SRCCOPY);/将设备还原dcMemory.SelectObject(pOldBmp);CPen pen(PS_SOLID,2,RGB(255,255,0);CPen *pOldPen=(CPen*)pDC -> SelectObject(&pen);static const double pi=3.1415926535;double rate = (

29、double)(2.0 * pi / 60.0);double halfPi=pi/2;int zoomR=160;CTime time = CTime:GetCurrentTime();int hour = time.GetHour();int minute = time.GetMinute();int second = time.GetSecond();int x0=bmpInfo.bmWidth/2+300;int y0=bmpInfo.bmHeight/2;/绘制秒数指针CPen secondPen(PS_SOLID,3,RGB(200,0,0);pDC -> SelectObj

30、ect(secondPen);pDC -> MoveTo(CPoint(x0,y0);int secondX = (int)(zoomR-22) * sin(rate * second)+ x0);int secondY = (int)(-(zoomR-22) * sin(rate * second +halfPi)+ y0);pDC -> LineTo(CPoint(secondX,secondY);/绘制分钟数指针CPen minutePen(PS_SOLID,8,RGB(0,255,0);pDC -> SelectObject(minutePen);pDC ->

31、MoveTo(CPoint(x0,y0);int minuteX = (int)(zoomR-60) * sin(rate * minute)+ x0);int minuteY = (int)(-(zoomR-60) * sin(rate * minute +halfPi)+ y0);pDC -> LineTo(CPoint(minuteX,minuteY);/绘制小时数指针*/double hourRate=(double)(2.0*pi/12.0);if(hour > 12)hour -= 12;CPen hourPen(PS_SOLID,12,RGB(0,0,255);pDC

32、 -> SelectObject(hourPen);pDC -> MoveTo(CPoint(x0,y0);int hourX = (int)(zoomR-100) * sin(hourRate * hour )+ x0);int hourY = (int)(-(zoomR-100) * sin(hourRate * hour +halfPi)+ y0);pDC -> LineTo(CPoint(hourX,hourY);CCk52Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for na

33、tive data here设定闹钟时间代码如下:void Cabao:OnOK() / TODO: Add extra validation hereUpdateData(TRUE);s=m_a+"时"+m_b+"分"+m_c+"秒"MessageBox(s,"设定成功",MB_OK);SetTimer(2,1000,NULL);CDialog:OnOK();定时器状态栏显示系统时间以及判断闹钟是否时间到代码如下:void CMainFrame:OnTimer(UINT nIDEvent) / TODO: Add

34、 your message handler code here and/or call default/获取当前系统时间显示到静态文本框time上CString str;CTime t = CTime:GetCurrentTime(); str.Format("%d时%d分%d秒",t.GetHour(),t.GetMinute(),t.GetSecond();/判断当前时间与设定时间是否一致if (s=str)PlaySound("1.wav",NULL,SND_FILENAME|SND_ASYNC);MessageBox(str,"TIME

35、s UP!",MB_OK);Invalidate();CTime time;time=CTime:GetCurrentTime();/得到当前时间CString s=time.Format("%H:%M:%S");/转换时间格式m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(ID_INDICATOR_CLOCK),s); /显示时钟CFrameWnd:OnTimer(nIDEvent);第五章 课程设计总结经过以上步骤,课程设计所要求设计的模拟时钟便成功完成了,它能显示指针式和数字式的时钟,并且与计算机系统时间保持一致,也可以打开菜单项进行闹钟设置。整个页面简洁清晰,方便用户读取,且操作简捷,符合课程设计中的各项要求

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论