C语言模拟时钟转动课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《C语言程序设计》

题目:模拟时钟转动程序

班级:

组别:

组员:

指导教师:

目录

第一章课程设计的题目 (2)

1.1 C语言课程设计的题目 (2)

第二章课程设计的要求 (2)

2.1 C语言课程设计的要求 (2)

第三章课程设计的目的 (2)

3.1 C语言课程设计的目的 (2)

第四章课程设计的内容 (3)

4.1 C语言课程设计的程序清单和注释 (3)

第五章课程设计的运行结果 (7)

5.1 C语言课程设计的运行结果 (7)

第六章课程设计的结果分析 (8)

6.1 C语言课程设计的结果分析 (8)

第七章课程设计的心得体会 (9)

7.1 C语言课程设计的心得体会 (9)

模拟时钟转动程序

第一章课程设计的题目

1.1 C语言课程设计的题目

本次为期两周的课程设计的题目为设计一个模拟时钟转动的程序。

第二章课程设计的要求

2.1 C语言课程设计的要求

能模拟机械钟表行走;要准确地利用数字显示日期和时间;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;数字式时钟的时间显示与指针式时钟显示一致;按任意键时程序退出。

第三章课程设计的目的

3.1 C语言课程设计的目的

加深对讲授内容的理解,尤其是一些语法规定。通过课程设计,自然地、熟练地掌握。熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。学会上机调试程序。

第四章课程设计的内容

4.1 C语言课程设计的程序清单和注释

模拟时钟转动程序清单+注释

#include //包含窗口头文件

#include //头文件,包含了一些数学计算的函数

#define TWOPI (2*3.14159)

#define IDTIMER 1 //计时器ID

#define ANGLE TWOPI/360 //2PI

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam ); //回调函数

Int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR 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);

//窗口背景为白色

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

CreateWindow(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 是从调用线程

的消息队列里取得一个消息并将其放于指定的结构

{

TranslateMessage(&msg); //消息处理

DispatchMessage(&msg); //消息派遣

}

return msg.wParam; //windows应用程序的消息循环形式}

void setISOTROPIC(HDC hdc,int cxClient,int cyClient)

//设置映射模式,使之成为笛卡尔坐标系的映射模式{

SetMapMode(hdc,MM_ISOTROPIC);

SetWindowExtEx(hdc,1000,1000,NULL); // 逻辑单位与设备单位比1/2 SetViewportExtEx(hdc,cxClient/2,-cyClient/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); //cos函数,包含在math.h头文件利的函数y = (int)(sin(TWOPI/360*i)*900);

radius = !(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 radius[3] = {500,700,850};

int angle[3];

angle[0] = pst->wHour*30+pst->wMinute/12*6;

angle[1] = pst->wMinute*6;

angle[2] = pst->wSecond*6;

for(int i=hChange?0:2;i<3;i++)

{

MoveToEx(hdc,0,0,NULL);

LineTo(hdc,(int)(radius[i]*cos(ANGLE*(90-angle[i]))),

相关文档
最新文档