您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 面向对象程序设计报告
VS2010课程设计报告学生姓名张雨荷____学号1304120309____专业班级数学科学1201__指导老师刘圣军__________数学与统计学院2014.9一、课程设计目的时钟几乎是每个人必备的生活用品,虽小却非常重要。一款精美的时钟可以给人们带来极大的便利。现在关于时钟的各种应用程序层出不穷,我的目的是设计一款界面简单、方便易用、功能相对丰富的指针式时钟程序。为了达到上述目标,满足课程设计的要求,我结合自身情况,选择了PC平台、Windows操作系统、VisualStudio开发平台、MFC框架来实现自己的程序。希望能通过自己这款小应用程序的设计,来掌握面向对象的程序设计方法,了解面向对象的设计技巧,有效地、深刻地理解课程内容,体会理论、方法和设计原则;培养分析实际问题和解决问题的能力,具备使用面向对象程序设计开发工具设计实际系统的能力。二、课程设计内容及要求程序所实现的功能:运行界面是一款指针式时钟,包括时、分、秒三个指针,有12个钟点的显示,并通过指针的转动来实时更新时间,同时可以显示相应时间的数字时钟形式。通过菜单可以实现闹铃功能、表盘及指针颜色设置、倒计时等功能。同时为程序窗口添加了一张精美图片作为背景。三、系统设计各模块关系图时钟程序时间查看功能工作状态设置颜色设置功能开始工作暂停工作倒计时功能表盘颜色设置时针颜色设置分钟颜色设置闹铃功能秒针颜色设置主程序及其主要模块的流程图绘制时钟指针制作数字时钟绘制表盘刻度关闭时钟功能选择结束同步时间填充背景开始四、用户手册1、windows系统visualstudio2010设计2、本程序不需要安装使用,直接运行即可弹出时钟对话框3、程序示意图图1时钟主界面图2程序功能界面图3倒计时时间设置界面图4闹铃时间设置界面打开功能列表可以选择各个功能,图3为选择倒计时功能弹出的对话框,图4为选择闹铃功能弹出的对话框。图5表盘及指针颜色设置界面选择设置表盘或者指针颜色时都会弹出图5,选择喜欢的颜色点击确定后即可改变颜色。五、程序清单(1)视图类的构造函数CShejiView::CShejiView(){//TODO:addconstructioncodehereCBitmapbmp;//定义一个位图类型的变量。bmp.LoadBitmap(IDB_BITMAP1);///加载位图m_brushBackground.CreatePatternBrush(&bmp);///创建位图画刷CTimecurtime=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()函数进行绘制voidCShejiView::OnDraw(CDC*pDC){CShejiDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahereCRectrect;GetClientRect(rect);///取得客户区域pDC-FillRect(rect,&m_brushBackground);///用背景画刷填充区域,而我们在mbrushbackground里加载了位图,所以理所当然就变成了我们设置的图片//画表盘,标注刻度GetClientRect(&client);intcenterX=client.Width()/2;intcenterY=client.Height()/2;intclockRadius=centerXcenterY?centerY:centerX;//用较小的一个作为钟表的半径,避免半径太大矩形放不开clockRadius=clockRadius*0.9;intkeduDRadius=clockRadius*0.85;intkeduXRadius=clockRadius*0.95;inthourRadius=clockRadius*0.3;//时针半径intminuteRadius=clockRadius*0.5;//分针半径intsecondRadius=clockRadius*0.7;//秒针半径//CPenclockPen(PS_SOLID,2,RGB(0,0,255));CPenclockPen(PS_SOLID,2,bpcolor);//配合下面的执行代码,使用自己定义的画笔来设置表盘的颜色CPen*oldPen=pDC-SelectObject(&clockPen);//恢复到原来的画笔//标注刻度for(inti=0;i12;i++){pDC-MoveTo(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(intj=0;j60;j++){pDC-MoveTo(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);//调节时,分,秒针角度显示的关系doublesecondRadians=m_second*2*PI/60;//一个圆周是2pi,共有60秒,所以一秒是左边这个表达式,用的是弧度值doubleminuteRadians=m_minute*2*PI/60+secondRadians/60;//秒针每动一格,其效果等同于分针动1/60格doublehourRadians=m_hour*2*PI/12+minuteRadians*5/60;//依照所计算的角度画出时,分,秒针//CPensecondPen(PS_SOLID,2,RGB(0,255,0));CPensecondPen(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));CPenminutePen(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));CPenhourPen(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);//画表盘中心CBrushabrush(RGB(255,0,0));CBrush*oldbrush=pDC-SelectObject(&abrush);pDC-Ellipse(centerX-8,centerY-8,centerX+8,centerY+8);//最左是圆心减8,最右是圆心加8pDC-SelectObject(oldbrush);//定义数字时钟的位置,显示当前时间CRectdianzibiao(centerX-52,centerY*6/15,centerX+52,centerY);CStringshijian;chartemp1[3],temp2[3],temp3[3];_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_minute10){shijian+=0;//如果分钟小于10,则在前面加上字符“0”,以用来显示“07”、“08”之类的形式}shijian+=temp2;shijian+=:;if(m_second10){shijian+=0;//同理}shijian+=temp3;//完成数字时钟显示当前时间pDC-SetBkMode(TRANSPARENT);pDC-SetTextColor(RGB(255,0,0));pDC-DrawText(shijian,&dianzibiao,DT_CENTER);//dianzibiao是一个矩形,shijian是我们转换后的cstring类型//设置文本的字体大小,颜色CStringb(千与千寻);CFontabc;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));CRectrectText1(centerX-52,centerY*3/2,centerX+52,centerY*2);pDC-DrawText(b,&rectText1,DT_CENTER);CStringc(12);CRectrectText2(centerX-8,centerY-keduDRadius*10/9+10,centerX+8,centerY-(keduDRadius*10/9-14)+10);pDC-SetTextColor(RGB(255,0,0));pDC-Dra
本文标题:面向对象程序设计报告
链接地址:https://www.777doc.com/doc-1980938 .html