ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:75.76KB ,
资源ID:16728531      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16728531.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(模拟时钟转动课程设计报告Word格式.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

模拟时钟转动课程设计报告Word格式.docx

1、运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。用C语言实现一个模拟时钟转动程序。提出总体方案的设计思想和原理,绘制程序流程图和描述程序的功能,并说明程序的特点和难点。模拟时钟是一种集计时器和时钟显示于一体的程序。编写一个指针式时钟程序,此程序在屏幕正中有一个指针式钟面,窗口标题以数字方式显示日期和时间。指针式的时钟表盘为椭圆形或圆形,并且圆周上有分布均匀的12个刻度,刻度要求显示清楚,钟面上有长度不相同的指针,即时针、分针、秒针,指针的运动要求具有规律性,且为顺时针。数字钟显示时间的格式是年月日时

2、分秒,小时为24进制,分钟和秒是60进制,指针式的时钟和数字式的时钟显示的时间同步,且两个时钟所显示的时间与计算机的系统时间一致。第三章 详细设计说明3.1 程序系统的结构图3.1 功能模块图3.2 模块描述3.2.1 指针式时钟指针式的时钟表盘为椭圆形,并且圆周上有分布均匀的12个刻度,刻度显示清楚,钟面上有长度不相同的指针,即时针、分针、秒针,指针的运动具有规律性,为顺时针。3.2.2 数字式时钟窗口标题为数字钟。3.3 输出项数字式时钟输出“%d年%d月%d日%d时%d分%d秒”。3.4 算法不论何种指针,每次转动均以/30弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。计算指针

3、端点(x, y)的公式如下:x =圆心x坐标 指针长度 * cos (指针方向角)y =圆心y坐标 指针长度 * sin (指针方向角)注重,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可以跨越圆心,因此一个指针需要计算两个端点。三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此应该使用一个定时器消息来处理指针的运动。3.5 流程图图3.2 程序流程图3.6 函数说明 1.OnDraw()函数实现对系统时间的获取和绘制椭圆表面和时钟指针。2.设置计时器,创建窗口时启动一个计时器不断发出WM_TIMER消息,调用SetTimer()函

4、数。3.用TextOut()函数显示数字钟。画模拟时钟最重要的大约就是三角函数了。手机和电脑的默认坐标系都是原点在左上角。这样,我们确定了圆心位置后,就确定了表的位置,表针,表盘的位置坐标都在以圆心为中心的圆环上。其坐标可以通过三解函数推导出来。设圆心为(X,Y),半径为R,表上其他点的坐标为(X1,Y1),该点与圆心X轴夹角为A,大致可以推出该点坐标公式:位于圆心右上角点的公式为:X1 = X + RcosA;Y1 = Y - RsinA;位于圆心左上角点的公式为:X1 = X - RcosA;位于圆心左下角的公式为:Y1 = Y + RsinA;位于圆心右下角的公式为:如果+ -使用角度来

5、校正,公式就可以统一为X1 = X + RcosA;由于表是顺时针转动,我们的角度习惯上使用逆时针,所以我们使用自己校正后的角度值,从12点开始,按顺时针重新排列三角函数值,加入对角度正负的校正。首先定义一些时钟常用的宏:#define ANALOG_CENTER_X (227) /时钟显示的中心位置的横坐标 227#define ANALOG_CENTER_Y (178) /时钟显示的中心位置的纵坐标 178#define ANALOG_R (150) /时钟显示图的半径 150#define ANALOG_CENTER_R (10) /时钟显示中心图形的半径 10#define ANALO

6、G_HOUR_LEN (ANALOG_R-80) /时针长短(半径)70#define ANALOG_MINUTE_LEN (ANALOG_R-50) /分针长短(半径)100#define ANALOG_SECOND_LEN (ANALOG_R-30) /秒针长短(半径)1203.7 接口 1.是主要的头文件,它包含了其他Windows头文件。2.数学函数库,一些数学计算的公式的具体实现是放在math.h里。3.8 调试结果图3.3 运行结果第四章 软件使用说明4.1 软件使用说明及出现的问题在vc+6.0中新建一个win32 application 项目,然后新建一个C+文件 输入代码。运

7、行后显示一个正在行走的机械时钟。将数字日期显示为窗口标题。按任意键退出。4.2 运行结果图4.1 运行结果第五章 课程设计心得与体会经过一个学期对课程设计的学习,我们学习了理论知识,了解了C语言程序设计的思想,这些知识都为我们的下一步学习打下了坚实的基础。通过课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。通过对模拟时钟的设计进一步的巩固了用C+编写程序,并且有利于更好的掌握程序设计语言!在模拟时钟的编写过程中也体会到了做事情一顶要细心、认真。更加知道了要掌握好基础知识。还有体会到了成

8、功的感觉! 通过本项课程设计也培养了我独立思考、 综合运用所学有关相应知识的能力,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!由于程序设计语言是近年在国内外得到迅速推广应用的一种语言。它功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。通过这次的程序设计更加了解了语言设计的好处和其可用性!在这次课程设计中也知道了自己的动手能力不强有待进一部的提高!在设计过程中不能够把书本上的知识与实践相结合,这也就增加了设计不好该程序的想法!在设计过程中的一次次设计错误增加了我放弃的想法!不过经过自己的独

9、立思考和同学的帮助终于完成了课程设计!完成该程序后想起自己以前的每一次对自己失去信心,就觉得并不是在知识掌握上打败了,而是自己对自己缺乏信心!只要自己对自己不失去信心相信就可以完成那些以前认为完成不了的事情!也让我懂得了要想成功首先就必须有很强的自信心!懂得了自己以后要在做任何事情时都要自信!当自己都不相信自己能够成功时还可能会获得成功吗?在课程设计的过程中也知道了自己在以前的学习中有很大的不足导致在设计过程中出现了很多的问题,有些地方看不懂也不知道怎么去设计,但是在设计过程中也学习了很多,掌握了自己以前没有学好的知识,虽然一时可以掌握完以前没有学好的知识,不过也给自己敲响了警钟,在学习中不可

10、以伏于表面,要想学好每一门课程都要踏踏实实,做什么都不是给别人看的!都是要更好的掌握该门知识,提高自己的自身的修养,提高自己的能力!为以后的工作打下良好的知识基础和技能基础!附录1:参考文献1、田淑清, C语言程序设计,北京:高等教育出版社,2006年1月2、David J.Kruglinski,Scot Wingo,George Shepherd,Visual C+6.0技术内幕(第五版),希望图书室译,北京:北京希望电子出版社,2001 年1月附录2:程序清单#include#define TWOPI (2*3.14159)#define IDTIMER 1#define ANGLE TW

11、OPI/360LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );int WINAPI WinMain( / 应用启动函数mian; HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) TCHAR szClassName = TEXT(analogCloc MSG msg; HWND hwnd; WNDCLASS wndclass; wndclass.cbClsExtra = 0;

12、 wndclass.cbWndExtra = 0; wndclass.hbrBackground = (HBRUSH):GetStockObject(WHITE_BRUSH); wndclass.hCursor = NULL; wndclass.hIcon = NULL; wndclass.hInstance = hInstance; wndclass.lpfnWndProc = WindowProc; wndclass.lpszClassName = szClassName; wndclass.lpszMenuName = NULL; wndclass.style = CS_HREDRAW

13、| CS_VREDRAW ; :RegisterClass(&wndclass); hwnd = :CreateWindow(szClassName,TEXT(Clock),WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT, NULL, NULL, hInstance, NULL); / 创建并显示主窗体;ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd); while(:GetMessage(&msg,NULL,0,0) TranslateMessage(&msg);DispatchMessage(& re

14、turn msg.wParam;void setISOTROPIC(HDC hdc,int cxClient,int cyClient)/设置映射模式,使之成为笛卡尔坐标系的映射模式SetMapMode(hdc,MM_ISOTROPIC);SetWindowExtEx(hdc,1000,1000,NULL); / 逻辑单位与设备单位比1/2SetViewportExtEx(hdc,cxClient/2,-cyClient/2,NULL);SetViewportOrgEx(hdc,cxClient/2,cyClient/2,NULL); / 竖坐标向上为正,下为负void drawClock(H

15、DC hdc) / 画时钟圆盘; int x, y, radius;SelectObject(hdc,:CreateSolidBrush(RGB(1,148,138); for(int i=0;iwHour*30+pst-wMinute/12*6; angle1 = pst-wMinute*6; angle2 = pst-wSecond*6; for(int i=hChange?0:2;3;i+) MoveToEx(hdc,0,0,NULL); LineTo(hdc,(int)(radiusi*cos(ANGLE*(90-anglei), (int)(radiusi*sin(ANGLE*(90

16、-anglei);LRESULT CALLBACK WindowProc( / 窗口处理函数; UINT message, WPARAM wParam, TCHAR time40; PAINTSTRUCT ps; HDC hdc; static int cxClient, cyClient; SYSTEMTIME st; static SYSTEMTIME preSt; BOOL hChange; switch(message) case WM_CREATE: / 窗口创建事件;SetTimer(hwnd,IDTIMER,1000,NULL); /创建一个1000ms定时器;GetLocalT

17、ime(&st); / 取当前系统事件; wsprintf(time,TEXT(%d年%d月%d日%d时%d分%d秒), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); SetWindowText(hwnd,time); / 设置当前时间为窗口title; preSt = st; return 0; case WM_SIZE: cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); case WM_TIMER: / 定时器到时,即是每隔一秒要重画下界面; /每次

18、都要获取当前时间 hChange = st.wHour!=preSt.wHour|st.wMinute!=preSt.wMinute; hdc = GetDC(hwnd); setISOTROPIC(hdc,cxClient,cyClient);GetStockObject(WHITE_PEN); drawHands(hdc,&preSt,hChange);GetStockObject(BLACK_PEN);st,TRUE); ReleaseDC(hwnd,hdc); / 更新完毕后记录前一次的状态 case WM_KEYDOWN: case WM_CHAR:DestroyWindow(hwnd); / 关闭窗口 case WM_PAINT: / 绘图事件; hdc = :BeginPaint(hwnd,&ps); drawClock(hdc);preSt,TRUE);EndPaint(hwnd,& case WM_DESTROY:PostQuitMessage(0); return DefWindowProc(hwnd,message,wParam,lParam);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1