面向对象程序设计报告.doc_第1页
面向对象程序设计报告.doc_第2页
面向对象程序设计报告.doc_第3页
面向对象程序设计报告.doc_第4页
面向对象程序设计报告.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

VS 2010课程设计报告学生姓名 张雨荷 _ _学 号 1304120309_ _专业班级 数学科学1201_ _指导老师 刘圣军_ _数学与统计学院2014.9一、课程设计目的时钟几乎是每个人必备的生活用品,虽小却非常重要。一款精美的时钟可以给人们带来极大的便利。现在关于时钟的各种应用程序层出不穷,我的目的是设计一款界面简单、方便易用、功能相对丰富的指针式时钟程序。为了达到上述目标,满足课程设计的要求,我结合自身情况,选择了PC平台、Windows操作系统、Visual Studio开发平台、MFC框架来实现自己的程序。希望能通过自己这款小应用程序的设计,来掌握面向对象的程序设计方法,了解面向对象的设计技巧,有效地、深刻地理解课程内容,体会理论、方法和设计原则;培养分析实际问题和解决问题的能力,具备使用面向对象程序设计开发工具设计实际系统的能力。二、课程设计内容及要求程序所实现的功能:运行界面是一款指针式时钟,包括时、分、秒三个指针,有12个钟点的显示,并通过指针的转动来实时更新时间,同时可以显示相应时间的数字时钟形式。通过菜单可以实现闹铃功能、表盘及指针颜色设置、倒计时等功能。同时为程序窗口添加了一张精美图片作为背景。三、系统设计时钟程序时间查看功能工作状态设置颜色设置功能开始工作暂停工作倒计时功能表盘颜色设置时针颜色设置分钟颜色设置闹铃功能秒针颜色设置各模块关系图绘制时钟指针制作数字时钟绘制表盘刻度关闭时钟功能选择结束同步时间填充背景开始主程序及其主要模块的流程图四、用户手册1、windows系统visual studio 2010设计2、本程序不需要安装使用,直接运行即可弹出时钟对话框3、程序示意图图1 时钟主界面图2 程序功能界面 图3 倒计时时间设置界面 图4 闹铃时间设置界面打开功能列表可以选择各个功能,图3为选择倒计时功能弹出的对话框,图4为选择闹铃功能弹出的对话框。图5 表盘及指针颜色设置界面选择设置表盘或者指针颜色时都会弹出图5,选择喜欢的颜色点击确定后即可改变颜色。五、程序清单(1)视图类的构造函数CShejiView:CShejiView()/ TODO: add construction code hereCBitmap bmp;/定义一个位图类型的变量。bmp.LoadBitmap(IDB_BITMAP1); /加载位图m_brushBackground.CreatePatternBrush(&bmp);/创建位图画刷CTime curtime = CTime:GetCurrentTime();/同步系统时间m_hour = curtime.GetHour();m_minute = curtime.GetMinute();m_second = curtime.GetSecond();flag=0;/时钟正常工作状态flag2=1;/倒计时无效;hour=-1;minute=-1;set=0;(2)ondraw()函数进行绘制void CShejiView:OnDraw(CDC* pDC)CShejiDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereCRect rect;GetClientRect(rect);/取得客户区域pDC-FillRect(rect,&m_brushBackground); /用背景画刷填充区域,而我们在mbrushbackground里加载了位图,所以理所当然就变成了我们设置的图片/画表盘,标注刻度GetClientRect(&client);int centerX = client.Width()/2;int centerY = client.Height()/2;int clockRadius = centerXcenterY ? centerY : centerX;/用较小的一个作为钟表的半径,避免半径太大矩形放不开clockRadius = clockRadius * 0.9;int keduDRadius = clockRadius * 0.85;int keduXRadius = clockRadius * 0.95;int hourRadius = clockRadius * 0.3;/时针半径int minuteRadius = clockRadius * 0.5;/分针半径int secondRadius = clockRadius * 0.7;/秒针半径/CPenclockPen(PS_SOLID, 2, RGB(0,0,255);CPen clockPen(PS_SOLID, 2, bpcolor);/配合下面的执行代码,使用自己定义的画笔来设置表盘的颜色CPen * oldPen = pDC-SelectObject(&clockPen);/恢复到原来的画笔/标注刻度for(int i = 0; iMoveTo(centerX + keduDRadius * cos(i * 30 * PI / 180),centerY + keduDRadius * sin(i * 30 * PI / 180);pDC-LineTo(centerX + clockRadius * cos(i * 30 * PI / 180),centerY + clockRadius * sin(i * 30 * PI / 180);for(int j = 0; jMoveTo(centerX + keduXRadius * cos(j * 6 * PI / 180),/keduxradius是0.95,更加接近圆周,所以比起时针当然理所当然的更短centerY + keduXRadius * sin(j * 6 * PI / 180);pDC-LineTo(centerX + clockRadius * cos(j * 6 * PI / 180),centerY + clockRadius * sin(j * 6 * PI / 180);pDC-SelectObject(oldPen);/调节时,分,秒针角度显示的关系double secondRadians = m_second * 2 * PI / 60;/一个圆周是2pi,共有60秒,所以一秒是左边这个表达式,用的是弧度值double minuteRadians = m_minute * 2 * PI / 60 + secondRadians / 60;/秒针每动一格,其效果等同于分针动1/60格double hourRadians = m_hour * 2 * PI / 12 + minuteRadians*5 / 60; /依照所计算的角度画出时,分,秒针/CPensecondPen(PS_SOLID, 2, RGB(0,255,0);CPen secondPen(PS_SOLID,2,secondcolor);oldPen = pDC-SelectObject(&secondPen);pDC-MoveTo(centerX , centerY);/时针的起点在中心pDC-LineTo(centerX + double(secondRadius) * sin(secondRadians),centerY - double(secondRadius) * cos(secondRadians);pDC-SelectObject(oldPen);/CPenminutePen(PS_SOLID, 4, RGB(255,255,0);CPen minutePen(PS_SOLID, 4, minutecolor);oldPen = pDC-SelectObject(&minutePen);pDC-MoveTo(centerX , centerY);pDC-LineTo(centerX + double(minuteRadius) * sin(minuteRadians),centerY - double(minuteRadius) * cos(minuteRadians);pDC-SelectObject(oldPen);/CPenhourPen(PS_SOLID, 8, RGB(255,0,255);CPen hourPen(PS_SOLID,8,hourcolor);oldPen = pDC-SelectObject(&hourPen);pDC-MoveTo(centerX , centerY);pDC-LineTo(centerX + double(hourRadius) * sin(hourRadians),centerY - double(hourRadius) * cos(hourRadians);pDC-SelectObject(oldPen);/画表盘中心CBrush abrush(RGB(255,0,0);CBrush * oldbrush = pDC-SelectObject(&abrush);pDC-Ellipse(centerX - 8, centerY - 8 , centerX +8, centerY +8);/最左是圆心减8,最右是圆心加8pDC-SelectObject(oldbrush);/定义数字时钟的位置,显示当前时间CRect dianzibiao(centerX-52,centerY*6/15, centerX+52,centerY);CString shijian;char temp13, temp23, temp33;_itoa_s(m_hour, temp1, 10);_itoa_s(m_minute, temp2, 10);/ITOA功能,把一整书转换为字符串,10进制_itoa_s(m_second, temp3, 10);shijian.Insert(0, temp1);/temp1用来保存小时,temp2用来保存分钟,temp3用来保存秒shijian += :;/时和分之间的帽号if(m_minute 10)shijian += 0;/如果分钟小于10,则在前面加上字符“0”,以用来显示 “07”、“08”之类的形式shijian += temp2;shijian += :;if(m_secondSetBkMode (TRANSPARENT);pDC-SetTextColor(RGB(255,0,0); pDC-DrawText(shijian,&dianzibiao,DT_CENTER);/dianzibiao是一个矩形,shijian是我们转换后的cstring类型/设置文本的字体大小,颜色CString b(千与千寻);CFont abc;abc.CreateFont(15, / nHeight0, / nWidth0, / nEscapement0, / nOrientationFW_ULTRABOLD, / nWeightFALSE, / bItalicFALSE, / bUnderline0, / cStrikeOutANSI_CHARSET, / nCharSetOUT_DEFAULT_PRECIS, / nOutPrecisionCLIP_DEFAULT_PRECIS, / nClipPrecisionDEFAULT_QUALITY, / nQualityDEFAULT_PITCH | FF_SWISS, / nPitchAndFamilyb); / lpszFacenameCFont * oldFont = pDC-SelectObject(&abc);pDC-SetTextColor(RGB(255,0,0);CRect rectText1(centerX-52,centerY*3/2, centerX+52,centerY*2);pDC-DrawText(b, &rectText1, DT_CENTER);CString c(12);CRect rectText2(centerX-8,centerY-keduDRadius*10/9+10, centerX+8,centerY-(keduDRadius*10/9-14)+10);pDC-SetTextColor(RGB(255,0,0); pDC-DrawText(c, &rectText2, DT_CENTER);CString d(6);CRect rectText3(centerX-5,centerY+(keduDRadius*10/9-14-10), centerX+5,centerY+keduDRadius*10/9-10);pDC-DrawText(d, &rectText3, DT_CENTER);CString e(9);CRect rectText4(centerX-(keduDRadius*10/9-14)+10,centerY-7, centerX-keduDRadius*10/9+10,centerY+7);pDC-DrawText(e, &rectText4, DT_CENTER);CString f(3);CRect rectText5(centerX+(keduDRadius*10/9-14)-10,centerY-7, centerX+keduDRadius*10/9-10,centerY+7);pDC-DrawText(f, &rectText5, DT_CENTER);pDC-SelectObject(oldFont);/若定时时间到则提醒“时间到”if(m_hour=hour)&(m_minute=minute)&(set=0)PlaySound(LPCTSTR)IDR_WAVE1, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);/播放插入的格式为wav的音乐文件set=1;/这个函数使你能够获得当前应用程序的实例句柄。AfxGetInstanceHandle总是/返回代表你的可执行文件(.EXE)的HINSTANCE值,除非它从与MFC的USRDLL/版本连接的DLL内调用的。在这种情况下,它返回的是DLL的HINSTANCE值。/如果要求时钟暂停,则不调用OnTimer函数if(flag&flag2)return;/调用OnTimer函数SetTimer(1,1000,NULL);/每1000毫秒产生一个消息,在ontimer函数里编辑相应的/响应代码(3)工作状态设定void CShejiView:OnBegin() /开始运行/ TODO: Add your command handler code hereflag=0;/0为正常,表示时钟正常运行flag2=1;/1为不正常,表示此时倒计时不工作InvalidateRect(&client, FALSE);void CShejiView:OnPause() /暂停运行/ TODO: Add your command handler code hereflag=1;flag2=1;KillTimer(1);/KillTimer:移除定时器函数的声明:移除先前用SetTimer设置的定时器。在定时器使用完毕后移除定时器时使用InvalidateRect(&client, FALSE);void CShejiView:OnSetback() /倒计时功能/ TODO: Add your command handler code hereCsetback dia;if(dia.DoModal()=IDOK)/如果点击确认“(IDOK)之后,用输入的时间来代替系统本来的时间m_hour=dia.m_hour;m_minute=dia.m_minute;m_second=dia.m_second;flag2=0;flag=1;InvalidateRect(&client, FALSE);void CShejiView:OnSettimer() /闹钟功能/ TODO: Add your command handler code hereCmydialog md;md.m_shour=hour;md.m_sminute=minute;UpdateData(false);if(md.DoModal()=IDOK)/如果Updatedata(TRUE),将控件的值赋值给成员变/量;Updatedata(FALSE),将成员变量的值赋值给控件;UpdateData(true);hour=md.m_shour;minute=md.m_sminute;set=0;(4)对时钟消息进行响应void CShejiView:OnTimer(UINT_PTR nIDEvent)/ TODO: 在此添加消息处理程序代码和/或调用默认值/若为时钟状态则获取系统当前时间if(flag=0)CTime curtime = CTime:GetCurrentTime();m_hour = curtime.GetHour();m_minute = curtime.GetMinute();m_second = curtime.GetSecond();/若为倒计时状态则判断是否倒计时结束if(flag2=0) if(m_second|m_minute|m_hour)/如果时、分、秒不同时为零,则进行倒计时if(m_second=0)/如果在时分秒不同时为零的情况下,秒为零,那么秒向/分借60秒,如果此时分也恰好为零,则同时向时借60分,因为被秒借去60秒,所/以分为59,hour减1m_second=60;if(m_minute=0)m_minute=59;m_hour-;elsem_minute-;m_second-;elsePlaySound(c:UsersyuheDesktop倩女幽魂.wav, NULL, SND_FILENAME | SND_ASYNC);flag2=1;KillTimer(1);InvalidateRect(&client, FALSE);CView:OnTimer(nIDEvent);(5)设置表盘颜色void CShejiView:OnBpcolor() / TODO: Add your command handler code hereCColorDialog ColorDlg; /创建调色板对象ColorDlg.m_cc.Flags|=CC_FULLOPEN;if(IDOK = ColorDlg.DoModal() /将调色板实例化bpcolor= ColorDlg.GetColor(); /获取选中的颜色void CShejiView:OnHourcolor()/设置时针颜色 / TODO: Add your command handler code hereCColorDialog ColorDlg; /创建调色板对象ColorDlg.m_cc.Flags|=CC_FULLOPEN;if(IDOK = ColorDlg.DoModal() /将调色板实例化hourcolor= ColorDlg.GetColor(); /获取选中的颜色void CShejiView:OnMinutecolor() /设置分针颜色/ TODO: Add your command handler code hereCColorDialog C

温馨提示

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

评论

0/150

提交评论