模拟时钟程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1目录1.设计目的和内容2.基本功能描述3.设计思路4.软件设计:设计步骤、界面设计、关键功能的实现5.结论与心得体会6.参考文献7.附录:调试报告、测试结果、关键源代码21.设计目的和实验内容1.1设计目的:1学习VisualC++的MFC开发程序的步骤。2综合运用所学的类、继承和多态的知识。3进一步掌握程序的调试方法。1.2实验内容1基于MFC的WINDOWS应用程序设计方法,编写一个模拟时钟程序;2在屏幕中间有一个指针式时钟;3这个时钟的下方或者上方以数字方式显示时间,该时间应与指针显示的时间一致;4用菜单选项打开的对话框,或者主界面里的控件设置时间。时间不必与机器系统时间相同,可任意设置。2.基本功能描述编辑运行代码时,窗口界面会出现一个色调为绿色,背景为黑色的指针时钟;一个精确到秒的数字时钟;一个退出按钮;一个设置按钮;三个设置自定义时间的编辑框。运行时调用的为系统的时间,在编辑框中分别输入自定义时分秒点击设置,指针时钟和数字时钟会跳转为自定义时间。按退出键关闭窗口。3.设计思路首先,指针时钟的背景,指针形状长度,正点格子和秒数格子的设计代码过于繁琐和复杂,稍做了解便可从网上抄录,然后再把参数及变量改成自己设计部分所需的名称即可。其次,本程序的基础及核心思路为用一个计数器器SetTime(1,1000,NULL)调用WM_TIMER的OnTimer()函数,达到更新时间,重绘窗口的效果。而在程序初步完成后,导师初查指出用SetTime()计数与系统时间的进度存在误差,所以不可以用SetTime()函数计时。于是本人将算法改成用系统时间和编辑框输入的时间作差,得到一个定值,再用系统时间减去这个定值就为设置的时间了,此时SetTime()函3数仅仅起到一个重绘作用,时间进度是有系统时间进度决定的。以上便是本次实验的设计思路。4.软件设计:设计步骤、界面设计、关键功能的实现4.1设计步骤1.决定用基本对话框来完成本次实验并设计好实验的对话框样式,添加所需的按钮、编辑框等控件。2.数字时钟难度不大,而指针时钟比较困难,上网查阅指针时钟的制作的教程,并寻找所需的函数。定义好需要的类和成员函数。3.设计算法并成员函数。4.2界面设计根据课设题目的要求,我决定设计两个个静态文本分别输出指针时钟的图像和数字时钟的数字显示;设置三个编辑框输入自定义的时分秒;设置两个按钮接收设置的时间和退出程序。4.3关键功能的实现用CTime::GetCurrentTime()调用系统的时间;定义一个CTime的对象t,用t.GetHour(),4t.GetMinute(),t.GetSecond()抽出时间的时分秒,并同意化成距0:00:00时刻的秒数;用该秒数减去自定义时间的秒数然后化成十分秒的形式,分别在指针时钟和数字时钟的静态文本上输出,并用SetTime()函数每一秒输出一次(即重绘)。便可实现显示时间功能。5.心得与体会完成本次课程设计是我大学生涯做过最困难的事情,没有之一。由于过度自信和选择的随意,在没有了解MFC之前变随意选择了一个题目。动手起来处处是难点,每完成一个部分都要花费大量时间,效率十分低。于是花费一天时间查阅文字资料,终于会MFC程序设计有了一定的了解,着手起来顺利许多。元旦前一天整个下午都在机房向老师请教问题,感觉之前从网上生搬硬套的东西也通透了很多。最后在跨年钟声敲响前一刻完成了试验,感觉整个人一下轻松下来,细想收获颇丰。6.参考文献百度文库“指针时钟制作教程”7.调试报告、测试结果、关键源代码7.1调试报告调试成功,无错误报告7.2测试结果如图所示5系统时间自定义时间16自定义时间27.3关键源代码7.31设置按钮和编辑框的关联voidCClock2Dlg::OnButton1(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData();CTimet=CTime::GetCurrentTime();ssecond=(t.GetHour()-atoi(m_s1))*3600+(t.GetMinute()-atoi(m_s2))*60+t.GetSecond()-atoi(m_s3);}7.32退出按钮的实现}voidCClock2Dlg::Onexitbt(){//TODO:AddyourcontrolnotificationhandlercodehereCDialog::OnCancel();KillTimer(1);}7.33实现系统时间与自定义时间同步的函数voidCClock2Dlg::OnTimer(UINTnIDEvent){7//TODO:Addyourmessagehandlercodehereand/orcalldefaultCTimet=CTime::GetCurrentTime();CStringstr;str.Format(%02d:%02d:%02d,t.GetHour(),t.GetMinute(),t.GetSecond());intnowtime=t.GetHour()*3600+t.GetMinute()*60+t.GetSecond()-ssecond;inta=nowtime%(24*3600)/3600;intb=nowtime%(24*3600)%3600/60;intc=nowtime%(24*3600)%3600%60;str.Format(%02d:%02d:%02d,a,b,c);SetDlgItemText(IDC_curtime,str);//m_s1.Format(%02d,a);//m_s2.Format(%02d,b);//m_s3.Format(%02d,c);CDialog::OnTimer(nIDEvent);}//数字时钟的OnTimer函数voidCClockEx::OnTimer(UINTnIDEvent){//TODO:Addyourmessagehandlercodehereand/orcalldefaultInvalidate(FALSE);CTimet=CTime::GetCurrentTime();intnowtime=t.GetHour()*3600+t.GetMinute()*60+t.GetSecond()-ssecond;j=nowtime%(24*3600)/3600;k=nowtime%(24*3600)%3600/60;l=nowtime%(24*3600)%3600%60;CStatic::OnTimer(nIDEvent);}指针时钟的OnTimer函数以上关键源代码主要为算法,全为本人设计,无参考文献。7.34指针时钟时针分秒针的绘制CClockHourHand::CClockHourHand(){//定义默认颜色m_crMain=RGB(0,255,100);m_crOther=RGB(128,128,0);}8CClockHourHand::~CClockHourHand(){}voidCClockHourHand::Draw(CDC*pDC){//初始化设备环境CPenpenMain(PS_SOLID,1,m_crMain),penOther(PS_SOLID,1,m_crOther);CBrushbrMain(m_crMain),brOther(m_crOther);CPen*pOldPen=pDC-SelectObject(&penOther);CBrush*pOldBrush=pDC-SelectObject(&brMain);//确定当前指针的弧度//intnTime=(m_tmCur.GetHour()%12)*3600;intnTime=(j%12)*3600;nTime+=k*60;nTime+=l;doublefRadian=2*PI*nTime/3600/12;//确定绘制菱形指针所需的四个角的坐标CPointptDiamond[4];for(inti=0;i4;i++){ptDiamond[i]=m_rcRegion.CenterPoint();}intnRadus=m_nRadius/2;ptDiamond[0].Offset((int)(nRadus*sin(fRadian)),(int)(-nRadus*cos(fRadian)));fRadian+=0.5*PI;nRadus=m_nRadius/20;ptDiamond[1].Offset((int)(nRadus*sin(fRadian)),(int)(-nRadus*cos(fRadian)));fRadian+=0.5*PI;nRadus=m_nRadius/10;ptDiamond[2].Offset((int)(nRadus*sin(fRadian)),(int)(-nRadus*cos(fRadian)));fRadian+=0.5*PI;nRadus=m_nRadius/20;ptDiamond[3].Offset((int)(nRadus*sin(fRadian)),(int)(-nRadus*cos(fRadian)));//绘制菱形时针pDC-Polygon(ptDiamond,4);//恢复设备环境pDC-SelectObject(pOldPen);pDC-SelectObject(pOldBrush);}//时针9CClockMinHand::CClockMinHand(){//定义默认颜色m_crMain=RGB(0,255,100);m_crOther=RGB(128,128,0);}CClockMinHand::~CClockMinHand(){}voidCClockMinHand::Draw(CDC*pDC){//初始化设备环境CPenpenMain(PS_SOLID,1,m_crMain),penOther(PS_SOLID,1,m_crOther);CBrushbrMain(m_crMain),brOther(m_crOther);CPen*pOldPen=pDC-SelectObject(&penOther);CBrush*pOldBrush=pDC-SelectObject(&brMain);//确定分针所在位置的弧度intnTime=k*60;nTime+=l;doublefRadian=2*PI*nTime/3600;//确定绘制菱形指针所需的四个角的坐标CPointptDiamond[4];for(inti=0;i4;i++){ptDiamond[i]=m_rcRegion.CenterPoint();}intnRadus=m_nRadius/2;ptDiamond[0].Offset((int)(nRadus*sin(fRadian)),(int)(-nRadus*cos(fRadian)));fRadian+=0.5*PI;nRadus=m_nRadius/20;ptDiamond[1].Offset((int)(nRadus*sin(fRadian)),(int)(-nRadus*cos(fRadian)));fRadian+=0.5*PI;nRadus=m_nRadius/10;ptDiamond[2].Offset((int)(nRadus*sin(fRadian)),(int)(-nRadus*cos(fRadian)));fRadian+=0.5*PI;nRadus=m_nRadius/20;ptDiamond[3].Offset((int)(nRadus*sin(fRadian)),(int)(-nRadus*cos(fRadian)));//绘制菱形分针pDC-Polygon(ptDiamond,4);10//恢复设备环境pDC-SelectObject(pOldPen);pDC-SelectObject(pOldBrush);}//分针CClockSecHand:

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功