C++指针型闹钟课程设计.docx
- 文档编号:22779522
- 上传时间:2023-04-27
- 格式:DOCX
- 页数:16
- 大小:96.48KB
C++指针型闹钟课程设计.docx
《C++指针型闹钟课程设计.docx》由会员分享,可在线阅读,更多相关《C++指针型闹钟课程设计.docx(16页珍藏版)》请在冰豆网上搜索。
C++指针型闹钟课程设计
C++指针型闹钟课程设计(总16页)
课程设计说明书
题 目:
指针型闹钟
学院名称:
专业班级:
姓名学号:
指导教师:
2013年07月
课程设计任务书
专业班级:
学生姓名:
指导教师:
一、课程设计题目:
设计一个如图所示的指针式闹钟
二、目的与要求:
1、目的:
(1)要求学生熟练掌握C++语言的基本知识和C++调试技能;
(2)掌握用C++开发应用程序的一般步骤和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象的程序设计问题。
(4)培养学生综合利用C++语言进行程序设计的能力,主要是培养学生利用系统提供的标准图形函数进行创新设计。
2、基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2)要求在设计的过程中,对Windows环境下的编程有一个基本的认识;
(3)学会Windows环境下绘图的基本方法;
(4)能够完成基本的钟表的走时功能、对表功能、定时功能;
(5)界面美观大方。
3、创新要求:
在基本要求达到后,可进行创新设计,如定时提醒功能、声音提醒功能、定时运行别的程序的功能等。
4、写出设计说明书
按照设计过程写出设计说明书。
三、设计方法和基本原理:
1、问题描述(功能要求):
要求所编写的闹钟能够完成基本的走时、对时、定时功能。
2、问题的解决方案(参考):
根据题目的要求,可以将问题解决分为以下步骤:
(1)分析问题,画出要解决问题的流程图(类及其层次结构图);
(2)利用对话框编辑器完成界面的设计,要求界面要美观实用;
(3)添加成员变量和成员函数(消息映射函数);
(4)利用结构化程序的设计思路完成秒针、分针、时针的走动及闹铃指针的设置。
(5)程序功能调试;
(6)完成系统总结报告以及系统使用说明书。
四、设计中涉及到的重要内容及关键技术:
1、对话框应用程序的编写方法及其相关函数;
2、绘图工具的使用方法;
3、一些常用系统API函数的使用方法。
五、程序设计和调试:
编写程序代码、完成程序调试。
六、编写课程设计说明书:
按照课程设计说明书的规范格式要求以及说明书中的内容要求编写课程设计说明书。
七、答辩与评分标准:
1、完成基本功能:
40分;
2、设计报告及使用说明书:
30分;
3、设置错误或者按照要求改变结果:
15分;
4、回答问题:
15分。
摘要
此课程设计的目的是为了达到熟练掌握C++语言的基本知识和C++调试技能;基本掌握面向对象程序设计的基本思路和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题;培养综合利用C++语言进行程序设计的能力。
需要设计的模拟时钟程序是基于MFC的WINDOWS应用程序设计,程序运行成功后,页面出现了一个指针式的时钟和数字式的时钟,指针式的时钟表盘为圆形,并且圆周上有分布均匀的12个刻度,刻度要求显示清晰,圆形的钟面上有长度和颜色及粗细各不相同的指针,即时针、分针、秒针,以便各个指针重合时亦可以轻易辨认,指针的运动要求具有规律性,且为顺时针,指针式的时钟表盘下面则是一个以数字形式显示时间的数字钟,数字钟的钟面为一个规则的矩形,其显示时间的格式是时:
分:
秒,小时为12进制,分钟和秒是60进制,指针式的时钟和数字式的时钟显示的时间同步,且两个时钟所显示的时间与计算机的系统时间相一致,页面的菜单项设有时间设置的栏目,可以对所显示的时间进行调整,能进行调整的具体内容是年、月、日、时、分、秒。
此模拟时钟外观简洁,功能和实际运用到的时钟基本一样,用起来非常方便。
关键词:
指针式;闹钟;系统时间
Abstract
ThiscourseisdesignedforthepurposetoachieveproficiencyinC++languagebasicsandC++debuggingskills;basicgraspofobject-orientedprogrammingofthebasicideasandmethods;abletousewhattheyhavelearnedthebasicknowledgeandskillstosolvesimpleobject-orientedprogramdesignissues;developcomprehensiveutilizationC++languageprogrammingcapabilities.NeedtodesignanalogclockprogramisbasedontheMFCWINDOWSapplicationdesign,theprogramrunssuccessfully,thepagethereisapointerclockanddigitalclockAnalogclockdialiscircularandisdistributeduniformlyonthecircumference12scale,thescalerequiredtodisplayclear,roundclockfacehaslengthandcolorandthicknessofeacharenotthesamepointer,instantneedle,minute,secondhand,inordertocoincideeachpointercanalsobeeasilyrecognizable,thelawrequiresthemovementofthepointerresistance,andisclockwise,Analogclockdialthefollowingisadigitalformofdisplaytimedigitalclock,digitalclock,clockfaceisaregularrectangular,itsdisplaytimeformatishours:
minutes:
seconds,hoursof12hex,minutes,andsecondsis60hex,Analogclockanddigitalclockdisplaysthetimesynchronization,andthetwoclocksshowthetimeandthecomputer'ssystemtimeisconsistentwiththemenuitempagetimesettingcolumns,youcanadjustthedisplayedtimecanbeadjustedbythespecificcontentistheyear,month,day,hour,minute,second.Thisanalogclocklookssimple,functionalandpracticalapplicationtotheclockbasicallythesame,anditisveryconvenient.
Keywords:
Analog;Alarm;SystemTime
第一章引言
1.1课题背景及意义
随着社会的发展,进入21世纪,个人电脑已经进入千家万户,人们已习惯于以互联网的方式交流,学习和娱乐。
网上跨国交流也越见频繁,由于时差的关系,人们在浏览国外新闻时经常需要进行时间的换算。
不同地区作息时间的不同也影响到人们的交流。
一种指针式闹钟的时钟程序,将给人们的生活与交流带来极大地方便。
1.2课题的研究方法
通过对VC++可视化编程的学习以及各地区时间差的查询,本文主要采用MFC控件和多线程编程技术,以及三个与时间有关的函数SetTimer()、OnTimer()和KillTimer(),设计实现一个包含计时器功能和闹钟功能的多时区时钟程序。
第二章课程设计目的与要求
2.1课程设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象程序设计的方法。
(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。
2.2课程设计的实验环境
硬件要求能运行Windows操作系统的微机系统。
C++语言应用程序开发软件使用:
VC++系统,或其他C++语言应用程序开发软件。
2.3课程设计的预备知识
熟悉C++语言程序设计的基本知识及VC++编辑器的使用方法。
2.4课程设计要求
利用所学的面向对象及C++编程知识和技巧,通过布置具有一定难度的程序设计题目,并且要求学生独立完成所布置题目,在分析设计过程中,要求学生养成良好的编程习惯,学会分析简单的实际问题,并能利用所学的知识建立系统的逻辑结构,学会简单的调试技巧和方法。
根据系统的功能要求,要求学生逐步完成应用程序的设计,具体要求为:
1、按规定的时间及要求上机。
2、设计方案正确,正确划分所选课题的系统功能模块。
3、系统设计要尽量实用,数据与功能分析详细。
4、要求C++编码简洁、稳定、高效。
5、独立查阅资料,认真书写课程设计说明书。
第三章课程设计内容
3.1.功能分析
(1)正确显示系统时钟;
(2)能准确定位时钟刻度和时分秒针的位置;
(3)能够完成基本的钟表的走时功能、对表功能、定时功能;
3.2程序流程相应说明
(1)程序运行后,出现了以时针、分针和秒针的指针式的时钟和以数字方式显示时间的数字时钟,所显示的时间与电脑同步,程序运行正确。
(2)绘制指针式的时钟和插入背景时钟图片时,可以运用CView类,CView类提供了视图类所需要的最基本的功能实现,其提供的虚拟方法使应用程序可以重写它们提供CView派生类中的方法,其中OnDraw()函数是重绘视图窗口时被调用,调用MoveTo和LineTo绘制表盘指针。
(3)模拟时钟处理消息的过程:
首先调用SetTimer函数定义时钟消息,包括参数指定计时器的ID,消息产生的时间间隔等;然后在相应的WM_TIMER消息处理里添加时钟消息响应代码。
在该模拟时钟设计的程序中,调用消息处理函数OnTimer()刷新窗口显示。
(4)要实现时钟的动态效果,即时间窗显示的时间每隔一秒钟更新一次,需要在时间窗格的正文调用CStatusBar:
:
SetPaneText()函数。
要定时更新,则应利用WM_TIMER消息。
在Window中,用户可以安装一个或多个计时器,计时器每隔一定的时间间隔就会发出一个WM_TIMER消息,而这个时间间隔可由用户指定。
MFC的Windows类提供了WM_TIMER消息处理函数OnTimer(),应在该函数内进行更新时间窗格的工作。
先利用ClassWazard给CMainFrame类加入WM_TIMER消息处理函数OnTimer(),CMainFrame:
:
OnTimer()函数是在系统发给框架窗口消息WM_TIMER时调用的,在CMainFrame:
:
OnCreate()函数内调用CWnd:
:
SetTimer()以安装一个计时器,使OnTimer()在设定的时间间隔被调用。
(5)通过调用GetCurrentTime()函数来实现时钟时间与计算机系统时间保持一致,使时间与计算机同步后。
(6)在程序设计过程之中添加菜单,用菜单项控制弹出对话框设置显示的时间,这样可以使时钟达到可调的效果。
(7)程序运行正常,界面设置合理,指针式的时钟和数字式的时钟的运动达到任务书的要求,并且能用菜单项控制对话框以实现对当前时间的调整,程序达到各项功能之后,退出界面,程序结束。
第四章软件设计
4.1设计步骤
使用AppWizard创建一个基于对话框的MFC工程,将之命名为abao。
所有步骤均使用AppWizard给出的默认设置,完成对话框的创建。
在CmainFrame类中加入消息处理函数OnTimer(),在OnCreate()中添加代码,在CmainFrame:
:
OnDraw(CDC*pDC)中显示背景图片以及调整,添加指针代码,在CMainFrame:
:
OnTimer(UINTnIDEvent)中添加输出数字时钟的代码。
(3)在ResourceView选项卡中打开Menu资源组,双击IDR_MAINFRAME,在菜单项中添加一个“设置”的控件,再在“设置”的目录下添加一个“时间”的控件,设ID为IDC_EDIT_SET,通过ClassWizard为菜单连接对话框类CInputDlg,使菜单便能在程序运行后显示在应用程序主对话框上,菜单效果图如图2所示。
图2菜单效果图
(4)在ResourceView选项卡中打开Dialog资源组,新建并双击IDD_DIALOG1,
在出现的对话框中添加所需的控件,根据需要对其属性进行修改,并建立类向导,编辑框效果图如图3所示。
图3编辑框效果图
(5)在头文件中添加对各种函数及变量的声明,同时在类的原文件中添加实现功能所需要的各种函数,并添加相应的代码。
(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_c
4.3时间显示
4.3.1模拟时钟显示
模拟时钟的显示主要在于插入和绘图这两方面,也是本次模拟时钟课程设计的重中之重。
这一部分所要添加的代码在FileView选项卡中的SourceFile资源组里CCK52View.cpp中:
(1)首先要调用SetTimer()函数设置时间间隔,语句是SetTimer(1,1000,NULL),SetTimer()的第一个参数指定计时器ID为1,第二个参数规定了计时器的时间间隔为1000ms,即1s,这样,每隔1s就调用一次OnTimer()函数。
(2)定义画笔hourPen、minutePen1、secondPen2分别为时针、分针、秒针的画笔。
通过插入图片的位置以及图片长宽确定时针、分针和秒针的位置,并根据所取系统时间GetHour()、GetMinute()、GetSecond()来决定时针、分针和秒针的转向。
4.3.2状态栏显示时间
先在在StringTable中添加NewString,在此定义为ID_INDICATOR_CLOCK,将其Caption设为00:
00:
00,对应的Value值加1(可在resource.h中修改)。
在MainFrm.cpp中indicators声明处添加ID_INDICATOR_CLOCK,代码如下:
staticUINTindicators[]={ID_SEPARATOR,ID_INDICATOR_CLOCK,//这里排列影响显示顺序ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,};
然后在CMainFrame:
:
OnTimer(UINTnIDEvent)中添加如下代码使得状态栏时间随系统时间变化而变化:
CTimetime;
time=CTime:
:
GetCurrentTime();//得到当前时间
CStrings=time.Format("%H:
%M:
%S");//转换时间格式
m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(ID_INDICATOR_CLOCK),s);//显示时钟
要实现定时功能,需要在CMainFrame:
:
OnTimer(UINTnIDEvent)中添加如下代码:
//获取当前系统时间显示到静态文本框time上
CStringstr;
CTimet=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,"TIMEsUP!
",MB_OK);
}
4.4测试结果
经分析程序错误原因并加以改正之后进行调试、程序编译、连接无错误后,程序能正确运行,图4显示了程序运行后模拟时钟以及打开菜单项的界面。
图4程序运行图
经测试,程序运行成功后,出现了指针式的时钟和数字式的时钟,二者时间与计算机同步,时针、分针和秒针形象美观,即使各指针重合也可辨认,各项功能正常。
4.5关键源代码
模拟时钟的源代码关键在对于时钟的绘制和设置计时器上,添加的代码在FileView选项卡中的SourceFile资源组里面的CCK52View.cpp中,以下代码是关于模拟时钟的绘制:
voidCCk52View:
:
OnDraw(CDC*pDC)
{
CBitmapbmp;//bmp位图对象
bmp.LoadBitmap(IDB_BITMAP1);//IDB_BITMAP3为图像对象的ID
BITMAPbmpInfo;//位图信息对象
bmp.GetBitmap(&bmpInfo);//获取位图信息
CDCdcMemory,*dc;//在内存中创建一个位图兼容设备
dc=GetDC();//获取设备上下文对象的类dc
dcMemory.CreateCompatibleDC(dc);//创建内存位图兼容设备
CBitmap*pOldBmp=dcMemory.SelectObject(&bmp);//将图片选入兼容设备
//将兼容设备的内容copy到屏幕设备中,实现真正的Paint
dc->BitBlt(300,0,bmpInfo.bmWidth,bmpInfo.bmHeight,
&dcMemory,0,0,SRCCOPY);
//将设备还原
dcMemory.SelectObject(pOldBmp);
CPenpen(PS_SOLID,2,RGB(255,255,0));
CPen*pOldPen=(CPen*)pDC->SelectObject(&pen);
doublerate=(double)(2.0*pi/60.0);
doublehalfPi=pi/2;
intzoomR=160;
CTimetime=CTime:
:
GetCurrentTime();
inthour=time.GetHour();
intminute=time.GetMinute();
intsecond=time.GetSecond();
intx0=bmpInfo.bmWidth/2+300;
inty0=bmpInfo.bmHeight/2;
//绘制秒数指针
CPensecondPen(PS_SOLID,3,RGB(200,0,0));
pDC->SelectObject(secondPen);
pDC->MoveTo(CPoint(x0,y0));
intsecondX=(int)((zoomR-22)*sin(rate*second)+x0);
intsecondY=(int)(-(zoomR-22)*sin(rate*second+halfPi)+y0);
pDC->LineTo(CPoint(secondX,secondY));
//绘制分钟数指针
CPenminutePen(PS_SOLID,8,RGB(0,255,0));
pDC->SelectObject(minutePen);
pDC->MoveTo(CPoint(x0,y0));
intminuteX=(int)((zoomR-60)*sin(rate*minute)+x0);
intminuteY=(int)(-(zoomR-60)*sin(rate*minute+halfPi)+y0);
pDC->LineTo(CPoint(minuteX,minuteY));
//绘制小时数指针*/
doublehourRate=(double)(2.0*pi/12.0);
if(hour>12)
{
hour-=12;
}
CPenhourPen(PS_SOLID,12,RGB(0,0,255));
pDC->SelectObject(hourPen);
pDC->MoveTo(CPoint(x0,y0));
inthourX=(int)((zoomR-100)*sin(hourRate*hour)+x0);
inthourY=(int)(-(zoomR-100)*sin(hourRate*hour+halfPi)+y0);
pDC->LineTo(CPoint(hourX,hourY));
CCk52Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
}
设定闹钟时间代码如下:
voidCabao:
:
OnOK()
{
//TODO:
Add
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 指针 闹钟 课程设计