C语言模拟时钟转动课程设计报告_第1页
C语言模拟时钟转动课程设计报告_第2页
C语言模拟时钟转动课程设计报告_第3页
C语言模拟时钟转动课程设计报告_第4页
C语言模拟时钟转动课程设计报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言程序设计课程设计报告题目: 模拟时钟转动程序 班级: 组别: 组员: 指导教师: 目录第一章 课程设计的题目.21.1 C语言课程设计的题目.2第二章 课程设计的要求.22.1 C语言课程设计的要求.2第三章 课程设计的目的.23.1 C语言课程设计的目的.2第四章 课程设计的内容.34.1 C语言课程设计的程序清单和注释.3第五章 课程设计的运行结果.75.1 C语言课程设计的运行结果.7第六章 课程设计的结果分析.86.1 C语言课程设计的结果分析.8第七章 课程设计的心得体会.97.1 C语言课程设计的心得体会.9模拟时钟转动程序第一章 课程设计的题目 C语言课程设计的题目 本次为

2、期两周的课程设计的题目为设计一个模拟时钟转动的程序。第二章 课程设计的要求2.1 C语言课程设计的要求能模拟机械钟表行走;要准确地利用数字显示日期和时间;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;数字式时钟的时间显示与指针式时钟显示一致;按任意键时程序退出。第三章 课程设计的目的3.1 C语言课程设计的目的加深对讲授内容的理解,尤其是一些语法规定。通过课程设计,自然地、熟练地掌握。熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。学会上机调试程序。第四章 课程设计的内容4.1 C语言课程设计的程序清单和注释模拟时钟转动程序清单+注释#i

3、nclude<windows.h> /包含窗口头文件#include<math.h> /头文件,包含了一些数学计算的函数#define TWOPI (2*3.14159)#define IDTIMER 1 /计时器ID#define ANGLE TWOPI/360 /2PILRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam ); /回调函数Int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, L

4、PSTR lpCmdLine,int nCmdShow ) / 应用启动函数mian TCHAR szClassName = TEXT("analogCloc"); MSG msg; /定义消息 HWND hwnd; /窗口句柄 WNDCLASS wndclass; /系统支持结构,定义并初始化窗口结构 wndclass.cbClsExtra = 0; /窗口类无扩展 wndclass.cbWndExtra = 0; /窗口势力无扩展 wndclass.hbrBackground = (HBRUSH):GetStockObject(WHITE_BRUSH);/窗口背景为白色

5、 wndclass.hCursor = NULL; wndclass.hIcon = NULL; wndclass.hInstance = hInstance; /当前实例句柄 wndclass.lpfnWndProc = WindowProc; /关联到消息回调函数 wndclass.lpszClassName = szClassName; wndclass.lpszMenuName = NULL; /窗口中无菜单 wndclass.style = CS_HREDRAW | CS_VREDRAW ; /窗口重绘风格 RegisterClass(&wndclass); hwnd Cre

6、ateWindow(szClassName,TEXT("Clock"),WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, NULL, NULL, hInstance, NULL); /创建窗口 ShowWindow(hwnd,nCmdShow); /显示窗口 UpdateWindow(hwnd); /更新窗口,强制显示 while(GetMessage(&msg,NULL,0,0) /函数GetMessage 是 从调用线程的消息队列里取得一个消息并将其放于指

7、定的结构 TranslateMessage(&msg); /消息处理 DispatchMessage(&msg); /消息派遣 return maram; /windows应用程序的消息循环形式void setISOTROPIC(HDC hdc,int cxClient,int cyClient)/设置映射模式,使之成为笛卡尔坐标系的映射模式 SetMapMode(hdc,MM_ISOTROPIC); SetWindowExtEx(hdc,1000,1000,NULL); / 逻辑单位与设备单位比1/2 SetViewportExtEx(hdc,cxClient/2,-cyCl

8、ient/2,NULL); SetViewportOrgEx(hdc,cxClient/2,cyClient/2,NULL); /竖坐标向上为正,下为负void drawClock(HDC hdc) / 画时钟圆盘 int x, y, radius; /以逻辑单位表示的窗口原点坐标 SelectObject(hdc,CreateSolidBrush(RGB(1,148,138);/设置整个窗口线条颜色 for(int i=0;i<360;i+=6) x = (int)(cos(TWOPI/360*i)*900); y = (int)(sin(TWOPI/360*i)*900); radi

9、us = !(i%5)?40:10; Ellipse(hdc,x-radius,y-radius,x+radius,y+radius);/ 把弧度制转换成坐标形式,Ellipse函数用来画圆 void drawHands(HDC hdc,SYSTEMTIME *pst,BOOL hChange)/ draw hands函数负责绘制时钟的时针、分针和秒针的轮廓 int radius3 = 500,700,850; int angle3; angle0 = pst->wHour*30+pst->wMinute/12*6; angle1 = pst->wMinute*6; angl

10、e2 = pst->wSecond*6; for(int i=hChange?0:2;i<3;i+) MoveToEx(hdc,0,0,NULL); LineTo(hdc,(int)(radiusi*cos(ANGLE*(90-anglei), (int)(radiusi*sin(ANGLE*(90-anglei); LRESULT CALLBACK WindowProc( HWND hwnd, UINT message, / 消息标识符,标识某个特定的消息 WPARAM wParam, LPARAM lParam ) /消息处理函数 TCHAR time40; PAINTSTRU

11、CT ps; HDC hdc; static int cxClient, cyClient; SYSTEMTIME st; /定义结构体变量 static SYSTEMTIME preSt; BOOL hChange; switch(message) /switch 语句 一个case代表一种情况 case WM_CREATE: / 窗口创建事件 SetTimer(hwnd,IDTIMER,1000,NULL); /创建一个1000ms定时器 GetLocalTime(&st); /得到当前系统时间 wsprintf(time,TEXT("%d年%d月%d日%d时%d分%d秒

12、"), /记录系统时间,包括年、月、日、时、分、秒 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); return 0; case WM_TIMER: /定时器到时,即是每隔一秒要重画下界面 GetLocalTime(&st); /每次

13、都要获取当前时间 hChange = st.wHour!=preSt.wHour|st.wMinute!=preSt.wMinute; hdc = GetDC(hwnd); setISOTROPIC(hdc,cxClient,cyClient); SelectObject(hdc,GetStockObject(WHITE_PEN); drawHands(hdc,&preSt,hChange); SelectObject(hdc,GetStockObject(BLACK_PEN); drawHands(hdc,&st,TRUE); ReleaseDC(hwnd,hdc);wspr

14、intf(time,TEXT("%d年%d月%d日%d时%d分%d秒"),/记录系统时间,包括年、月、日、时、分、秒st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); SetWindowText(hwnd,time); /setwindowText函数:系统里的函数 preSt = st; / 更新完毕后记录前一次的状态 return 0; case WM_KEYDOWN: case WM_CHAR: DestroyWindow(hwnd); / 关闭窗口return 0; case WM_PAI

15、NT: /窗口绘制消息 hdc = BeginPaint(hwnd,&ps); /开始绘制 setISOTROPIC(hdc,cxClient,cyClient); drawClock(hdc); drawHands(hdc,&preSt,TRUE); EndPaint(hwnd,&ps); /结束绘制 return 0; case WM_DESTROY: /程序退出消息 PostQuitMessage(0); return 0; return DefWindowProc(hwnd,message,wParam,lParam);/其他消息有系统默认处理第五章 课程设计的运行结果5.1 C语言课程设计的运行结果第六章 课程设计的结果分析6.1 C语言课程设计的结果分析运行结果分析问题 一:程序清单中某个符号添加错误,导致编译时出现错误,执行不出结果。分析:经小组讨论分析与搜索,源程序中符号“:”无意义,删除程序清单中所有“:”符号,在编译时,无错误。问题 二:若直接建立一个C +文件,执行时则找不到“”源文件,结果不能运行出来。分析:在运行VC +6.0时,需要建立一个Win 32 application工程,然后再新建一个C +文件,输

温馨提示

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

评论

0/150

提交评论