模拟时钟转动程序课程设计报告
msp430模拟时钟课程设计
msp430模拟时钟课程设计一、课程目标知识目标:1. 学生理解MSP430单片机的结构与功能,掌握其基本编程方法。
2. 学生能够解释模拟时钟的运行原理,了解时钟模块在单片机系统中的应用。
3. 学生掌握如何使用MSP430内置的定时器/计数器功能来实现时钟功能。
技能目标:1. 学生能够运用C语言进行MSP430单片机的程序编写,完成模拟时钟的设计与实现。
2. 学生通过实践操作,培养动手能力,提高问题解决和调试程序的能力。
3. 学生能够利用所学知识,对模拟时钟进行优化和拓展,实现更多功能。
情感态度价值观目标:1. 学生通过本课程的学习,培养对单片机及编程的兴趣,提高对电子工程领域的认识。
2. 学生在课程实践中,培养团队协作和沟通能力,学会分享和互助。
3. 学生通过解决实际问题,增强自信心,形成积极向上的学习态度。
课程性质:本课程为实践性较强的课程,结合理论知识,让学生动手实践,培养实际操作能力。
学生特点:学生具备一定的单片机基础知识,对编程有一定了解,但实际操作能力有待提高。
教学要求:课程注重理论与实践相结合,强调学生动手实践,鼓励学生探索和解决问题,培养其创新意识。
通过课程目标的分解,使学生在完成具体学习成果的过程中,达到课程目标的要求。
后续教学设计和评估将以此为基础,确保教学效果。
二、教学内容本课程教学内容主要包括以下三个方面:1. MSP430单片机基础:- 简介及特点:使学生了解MSP430单片机的性能、结构和应用领域。
- 编程环境:学习MSP430的开发工具,如IAR、CCS等。
- 基本编程:掌握MSP430的GPIO、定时器/计数器等基本模块的使用。
2. 模拟时钟原理与实现:- 时钟原理:介绍时钟的基本概念,如秒、分、时等,以及它们的计算方法。
- 时钟设计:学习如何使用MSP430内置定时器/计数器实现时钟功能。
- 显示技术:了解数码管、LCD等显示技术,并应用于时钟显示。
3. 课程实践:- 编程实践:编写程序实现模拟时钟功能,包括秒、分、时的显示和更新。
c模拟时钟课程设计
c 模拟时钟课程设计一、教学目标本课程的学习目标主要包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握C语言的基本语法、数据类型、运算符、控制结构等,了解模拟时钟的基本原理和设计方法。
技能目标要求学生能够运用C语言编写简单的模拟时钟程序,培养学生的编程能力和问题解决能力。
情感态度价值观目标培养学生的团队合作意识、创新精神和对计算机科学的兴趣。
二、教学内容教学内容主要包括C语言基础知识、模拟时钟的设计与实现。
详细的教学大纲如下:1.C语言基础知识:介绍C语言的基本语法、数据类型、运算符、控制结构等,为学生编写模拟时钟程序打下基础。
2.模拟时钟的设计与实现:讲解模拟时钟的基本原理,引导学生运用C语言编写模拟时钟程序,培养学生的编程能力和问题解决能力。
三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法,以激发学生的学习兴趣和主动性。
1.讲授法:通过讲解C语言基础知识和模拟时钟的设计原理,使学生掌握相关知识。
2.讨论法:学生进行小组讨论,分享学习心得和编程经验,提高学生的团队合作能力。
3.案例分析法:分析典型的模拟时钟程序案例,引导学生学会分析问题、解决问题。
4.实验法:让学生动手编写模拟时钟程序,培养学生的实际编程能力和操作技能。
四、教学资源本课程所需教学资源包括教材、参考书、多媒体资料和实验设备。
1.教材:选用权威、实用的C语言教材,为学生提供系统的学习资料。
2.参考书:提供相关的C语言编程参考书籍,丰富学生的知识储备。
3.多媒体资料:制作精美的PPT、教学视频等,增强课堂教学的趣味性和生动性。
4.实验设备:为学生提供充足的计算机设备,确保每位学生都能动手实践。
五、教学评估为了全面、客观地评估学生的学习成果,本课程采用多元化的评估方式。
评估内容包括平时表现、作业、考试等。
1.平时表现:通过观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和知识掌握程度。
C语言模拟时钟转动课程设计报告
《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<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, 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);hwndCreateWindow(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/2SetViewportExtEx(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]))),(int)(radius[i]*sin(ANGLE*(90-angle[i]))));}}LRESULT CALLBACK WindowProc(HWND hwnd,UINT message, // 消息标识符,标识某个特定的消息WPARAM wParam,LPARAM lParam) //消息处理函数{TCHAR time[40];PAINTSTRUCT 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秒"),//记录系统时间,包括年、月、日、时、分、秒st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);SetWindowText(hwnd,time); // 设置当前时间为窗口titlepreSt = st;return 0;case WM_SIZE:cxClient = LOWORD(lParam);cyClient = HIWORD(lParam);return 0;case WM_TIMER: //定时器到时,即是每隔一秒要重画下界面GetLocalTime(&st); //每次都要获取当前时间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);wsprintf(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_PAINT: //窗口绘制消息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;}returnDefWindowProc(hwnd,message,wParam,lParam);//其他消息有系统默认处理}第五章课程设计的运行结果5.1 C语言课程设计的运行结果第六章课程设计的结果分析6.1 C语言课程设计的结果分析运行结果分析问题一:程序清单中某个符号添加错误,导致编译时出现错误,执行不出结果。
模拟时钟转动程序
课程设计课程名称高级语言程序课程设计题目名称模拟时钟转动程序学生学院自动化学院专业班级自动化06级(2 )班学号 3106000858 学生姓名霍杰英指导教师杨其宇2007年6月18日广东工业大学课程设计任务书题目名称模拟时钟转动程序学生学院自动化学院专业班级自动化06级(2 )班姓名霍杰英学号3106000858一、课程设计的内容要求:能模拟机械钟表行走,还要准确地利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
二、课程设计的要求与数据1、进一步掌握和利用C语言进行程设计的能力;2、进一步理解和运用结构化程序设计的思想和方法;3、初步掌握开发一个小型实用系统的基本方法;4、学会调试一个较长程序的基本方法;5、学会利用流程图或N-S图表示算法;6、掌握书写程序设计开发文档的能力。
三、课程设计应完成的工作1、编写完成相应题目的程序;2、编写课程设计报告,课程设计报告的内容应包括以下6个部分:1) 需求分析:包括设计题目、设计要求以及系统功能需求分析;2) 总体设计:包括系统总体设计框架和系统功能模块图;3) 详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图;4) 调试分析过程描述:包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等,适当的包含结果截图);5) 总结:课程设计完成了哪些功能,有没有什么扩展功能?还有哪些地方需要改进?课程设计过程中的学习体会与收获、对本次课程设计的认识以及自己的建议等内容;6) 附录:主要源程序代码,含必要的注释。
3、答辩:在实验室建立程序运行的环境,并在指导教师的监督下,独立解决问题、运行程序和回答教师提出的问题。
四、课程设计进程安排五、应收集的资料及主要参考文献[1] 谭浩强.C程序设计(第三版)[M],北京:清华大学出版社,2005.9[2] 谭浩强. C程序设计题解与上机指导(第三版)[M],北京:清华大学出版社,2005.7[3] 夏宝岚张慕蓉夏耘.程序设计教程(第二版)[M],上海:华东理工出版社,2003.1[4] 陈锦昌赵明秀.c语言计算机绘图教程(第一版)[M],广州:华南理工大学出版社,1998.9[5] /course/3_program/c/cshl/2007213/21159.html发出任务书日期:2007年 6 月18 日指导教师签名:计划完成日期:2007年 6 月22 日基层教学单位责任人签章:主管院长签章:目录1 设计目的与要求 (5)2 总体设计 (6)3 详细设计 (7)功能模块设计 (7)3.1画出钟表的轮廓 (7)3.2获取系统时间 (7)3.3让时间和声音动起来 (7)4调试分析 (8)5 总结 (11)6 附录 (12)7 答辩记录 (16)8 指导教师意见 (17)1 目的与要求(1) C题目二十九: 模拟时钟转动程序要求:能模拟机械钟表行走,还要准确地利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
模拟时钟实验报告
连接线段,隐藏点。
8.选中圆点标记,把线段进行两次缩放,每次缩放长度不一样,再改成不同颜色。
9.先建参数,秒=1.00,选择操作按钮动画里面的动画,修改标签为“启动时钟”动画为离散型,选中秒针旋转。
10.分针和时针与步骤9相同
11.利用文本工具添上数字。
1.计算小时数trunc(秒/3600)=?计算分trunc((秒-小时数*3600)/60)=?计算秒,秒-小时数*3600-分*60=?
2.单击、属性设置,数值标签精确度为单位、显示为无标签。
3.用文字工具A拖一个矩形区域,先点击数字,接着输入பைடு நூலகம்时,类似输入分秒。
三、调试和运行程序过程中产生的问题及采取的措施:
设计模拟时钟实验报告
姓名
陈贵
学号
33号
日期
2013.03.26
实验项目
模拟时钟和数字时钟
指导教师
黄建华
一、上机实验的问题和要求(需求分析):
先用几何画板画一个圆,在进行缩放、旋转、深度迭代等操作做模拟时钟,再利用数据计算、属性设置、最后用文字工具拖一个矩形,点击数字进行输入
二、程序设计的基本思想,原理和算法描述:
隐藏点和线段,也可以选中对象后【右键单击】或单击【显示(D)】菜单栏,再单击隐藏命令。
五、运行输出结果及分析:
1.先画一个圆
2.在隐藏圆上的点,在点一个点,以此点为缩放中心进行缩放,然后在缩放点和圆上点构造线段,再隐藏缩放点。
3.先标记圆心,选中点和线段旋转30°
4.建立参数t=10,选中点,再选中参数,按住SHIFT健,进行深度迭代。
5.重复2、3、4步骤(数据不同旋转6°、T=58)。
模拟时钟程序报告书
目录1. 基本功能描述 (1)2. 设计思路 (2)3. 软件设计 (3)3.1 设计步骤 (3)3.2 界面设计 (6)3.3 关键功能的实现 (7)3.3.1 指针式时钟的实现 (7)3.3.2 数字式时钟的实现 (8)3.3.3 设置部分的实现 (8)4 结论与心得体会 (8)5 参考文献 (9)6 思考题 (9)7 附录 (10)7.1 调试报告 (10)7.2 测试结果 (11)7.3 关键源代码 (12)模拟时钟程序1. 基本功能描述计时器是程序中最常用的后台任务机制之一,其时间间隔最低约55毫秒,被广泛用于时钟、磁盘备份程序或需要在某一时刻运行的程序等。
而模拟时钟是一种集计时器和时钟显示于一体的程序。
以实例为背景学习基于MFC的WINDOWS程序设计,编写一个指针式时钟程序.界面上包括数字式时钟、指针式时钟,可以实现对系统时间的修改与再定义。
具体要求包括以下三点:1)指针式时钟包含均匀分布的十二个刻度点、时/分/秒三指针,具体表盘形式可自由设计,要求时钟样式得体、易于辨认。
同理,要求指针位置随系统时间变化运动且与数字式时钟同步。
2)数字钟的钟面为一个规则的矩形,其显示时间的格式是时:分:秒,小时为24进制,分钟和秒是60进制,显示时间随系统时间变化跳变且与指针式时钟同步。
3)包含修改系统时间菜单项,可在弹出对话框中修改并再定义系统时间。
该对话框弹出时,数字式时钟与指针式时钟不停止跳变(与WINDOWS系统自带时钟程序一致)。
4)程序界面设计合理,色彩得体大方,显示正确。
效果图如图1所示:图1 时钟效果显示图2. 设计思路图2CView类OnDraw( )函数中。
下面对上页程序流程图中关键步骤作出简要分析说明:1)要实现时钟程序的显示及同步跳变,实质上是在实现每隔一秒定时刷新屏幕重新绘图。
OnCreate( )函数创建计时器并定义计时间隔为一秒,OnTimer( )函数作计时器的消息处理函数用于通知OnDraw( )函数重新绘图。
模拟时钟转动程序
C语言集中上机实验报告题目五: 模拟时钟转动程序院系:班级:姓名:学号:指导教师:2011 年12 月08日目录一课程设计的地位、作用与目的 (2)二课程的基本要求 (2)三课程设计的主要设计思路与流程图 (2)1.设计思路2.流程图3.使用的主要函数4.程序各功能模块四程序的运行结果 (7)1.调试过程出现的问题2.运行结果五心得体会 (7)一课程设计的地位、作用与目的为综合应用C语言程序设计理论知识、进一步提高学生综合解决问题、协调工作的能力和良好的软件开发习惯,特安排本实验内容。
希望通过该实习能够进一步激发学生的学习热情,培养学生初步编程的能力,为后续的学习和发展奠定基础。
二课程的基本要求能模拟机械钟表行走,还要准确地利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
三课程设计的主要设计思路与流程图设计思路:在绘图窗口中先画出表盘后获取系统的时间,利用得到的系统时间计算表针的位置,并将时间在屏幕上输出。
每隔一秒读取一次时间,直到键盘有输入为止。
流程图开始使用的主要函数:setlinestyle 设置画线setcolor 设置颜色line(int x1,int y1,int x2,int y2)画直线circle(int x,int y,int r)画圆outtextxy(int x,int y,char *textstring)在指定位置输出字符initgraph(int x, int y); 初始化绘图窗口setwritemode( ); 设置绘图模式kbhit() 检查是否有键盘输入GetLocalTime(&ti); 获取当前时间sleep() 程序暂停若干时间程序各功能模块:1.计算表针的位置并画出表针void Drawzhizhen(int hour, int minute, int second){double a_hour, a_min, a_sec; // 时、分、秒针的弧度值int x_hour, y_hour, x_min, y_min, x_sec, y_sec; // 时、分、秒针的位置a_sec = second * 2 * PI / 60; // 计算时、分、秒针的弧度值a_min = minute * 2 * PI / 60 + a_sec / 60;a_hour= hour * 2 * PI / 12 + a_min / 12;x_sec = int(120 * sin(a_sec)); y_sec = int(120 * cos(a_sec)); ///计算时、分、秒针的位置x_min = int(100 * sin(a_min)); y_min = int(100 * cos(a_min));x_hour= int(70 * sin(a_hour)); y_hour= int(70 * cos(a_hour));setlinestyle(PS_SOLID, NULL, 10); // 画时针setcolor(WHITE);line(300 + x_hour, 240 - y_hour, 300 - x_hour / 7, 240 + y_hour / 7);setlinestyle(PS_SOLID, NULL, 5);// 画分针setcolor(YELLOW);line(300 + x_min, 240 - y_min, 300 - x_min / 5, 240 + y_min / 5);setlinestyle(PS_SOLID, NULL, 2); // 画秒针setcolor(RED);line(300 + x_sec, 240 - y_sec, 300 - x_sec / 3, 240 + y_sec / 3);}2.画表盘void Drawbiaopan(){int i,l,x1,x2,y1,y2;setbkcolor(1);circle(300,240,180);circle(300,240,185);circle(300,240,20);for(i=0;i<60;i++) /*划钟点上的短线*/ {if(i%5==0)l=15;elsel=5;x1=180*sin(i*6*PI/180)+300;y1=180*cos(i*6*PI/180)+240;x2=(180-l)*sin(i*6*PI/180)+300;y2=(180-l)*cos(i*6*PI/180)+240;line(x1,y1,x2,y2);}outtextxy(300,80,"12") ;outtextxy(300,390,"6");outtextxy(140,230,"9");outtextxy(460,230,"3");outtextxy(380,100,"1");outtextxy(220,100,"11");outtextxy(430,160,"2");outtextxy(430,310,"4");outtextxy(380,370,"5");outtextxy(220,370,"7");outtextxy(160,160,"10");outtextxy(160,310,"8");}3.将获取的整数型时间变量转换成字符型void ch1(int a,int x) //将年转换成字符型并输出{char b,c,d,e;b=(char)(a/1000+48);c=(char)((a%1000)/100+48);d=(char)((a%100)/10+48);e=(char)(a%10+48);outtextxy(x,10,b);outtextxy(x+10,10,c);outtextxy(x+20,10,d);outtextxy(x+30,10,e);}void ch2(int a,int x) //其他时间转换成字符型并输出{char b,c;b=(char)(a/10+48);c=(char)(a%10+48);outtextxy(x,10,b);outtextxy(x+10,10,c);}主函数:void main(){initgraph(640, 480); // 初始化绘图窗口Drawbiaopan(); // 绘制表盘setwritemode(R2_XORPEN); // 设置绘图模式SYSTEMTIME ti; // 定义ti保存当前时间while(!kbhit()) // 按任意键退出钟表程序{GetLocalTime(&ti); // 获取当前时间ch1(ti.wYear,10);outtextxy(50,10,"年"); //输出时间ch2(ti.wMonth,65);outtextxy(85,10,"月");ch2(ti.wDay,100);outtextxy(120,10,"日");ch2(ti.wHour,135);outtextxy(155,10,":");ch2(ti.wMinute,165);outtextxy(185,10,":");ch2(ti.wSecond,195);Drawzhizhen(ti.wHour, ti.wMinute, ti.wSecond); // 画表针Sleep(1000); // 延时1 秒Drawzhizhen(ti.wHour, ti.wMinute, ti.wSecond); // 画表针}closegraph(); // 关闭绘图窗口}四程序的调试与运行结果调试过程出现的问题:1.Vc++6.0中没有“graphics.h”解决办法:安装turboc.2.0中的函数库EasyX2.无法获取系统时间解决办法:使用函数GetLocalTime( );并使用#include <time.h>声明3.Outtextxy()函数无法显示整数型时间解决办法:将整数型时间变量转换为字符型再输出运行结果:五心得体会由于C语言没有学过图形方面的知识,很多东西都要去查资料。
模拟时钟转动程序(精)
•
for(i=0;i<=6;i++)
• • • • • • • • • • • • • • • • • • •
{ 小*/ settextstyle(TRIPLEX_FONT,HORIZ_DIR,i); /*控制输出字符的字体,方向,大 cleardevice(); settextjustify(1,1); /*在指定坐标上输出字符串*/ outtextxy(300,80,"12") ; outtextxy(300,390,"6"); outtextxy(140,230,"9"); outtextxy(460,230,"3"); outtextxy(380,100,"1"); outtextxy(220,100,"11"); outtextxy(430,160,"2"); outtextxy(430,310,"4"); outtextxy(380,370,"5"); outtextxy(220,370,"7"); outtextxy(160,160,"10"); outtextxy(160,310,"8");
绘制表盘部分
• void init() /*画时钟边框函数*/ • { • int i,l,x1,x2,y1,y2; • setbkcolor(1); /*设置背景颜色白色 */ • circle(300,240,200); /*画圆心为(300,240)半径200圆*/ • circle(300,240,205); • circle(230,180,25); • rectangle(220,280,400,300); /*画矩形(左上角和右下 角坐标)*/ • circle(380,180,25); • circle(300,240,5);
C语言课程设计报告-模拟时钟转动程序
课程设计报告课程名称结构化程序设计课程设计院部名称专业班级学生姓名王蕾学号课程设计地点课程设计学时指导教师金陵科技学院教务处制目录第一章课程设计的目的和要求.............................................1.1 C语言课程设计的目的............................................1.2 C语言课程设计实现的要求........................................ 第二章课程设计的任务内容............................................... 第三章详细设计说明.....................................................3.1 程序系统的结构..................................................3.1.1 实验设备及环境:(软、硬件环境)3.2 模块描述........................................................3.2.1 指针式时钟................................................3.2.2 数字式时钟................................................3.3 输出项..........................................................3.4 算法............................................................3.5 流程图..........................................................3.6 函数说明........................................................3.7 接口............................................................3.8 调试结果........................................................ 第四章软件使用说明.....................................................4.1 软件使用说明及出现的问题........................................4.2 运行结果........................................................ 第五章课程设计心得与体会............................................... 附录1:参考文献......................................................... 附录2:修改后的源代码……………………………………………………………………模拟时钟转动程序第一章课程设计的目的和要求1.1 C语言课程设计的目的加深对讲授内容的理解,尤其是一些语法规定。
C语言模拟时钟转动课程设计报告
《C语言程序设计》课程设计报告题目:模拟时钟转动程序班级:组别:页脚内容- 0 -组员:指导教师:目录第一章课程设计的题目 (2)1.1C语言课程设计的题目 (2)第二章课程设计的要求 (2)2.1C语言课程设计的要求 (2)第三章课程设计的目的 (2)3.1C语言课程设计的目的 (2)第四章课程设计的内容 (3)4.1C语言课程设计的程序清单和注释 (3)第五章课程设计的运行结果 (7)5.1C语言课程设计的运行结果 (7)第六章课程设计的结果分析 (8)页脚内容- 1 -6.1C语言课程设计的结果分析 (8)第七章课程设计的心得体会 (9)7.1C语言课程设计的心得体会 (9)模拟时钟转动程序第一章课程设计的题目1.1 C语言课程设计的题目本次为期两周的课程设计的题目为设计一个模拟时钟转动的程序。
第二章课程设计的要求2.1 C语言课程设计的要求页脚内容- 2 -能模拟机械钟表行走;要准确地利用数字显示日期和时间;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;数字式时钟的时间显示与指针式时钟显示一致;按任意键时程序退出。
第三章课程设计的目的3.1 C语言课程设计的目的加深对讲授内容的理解,尤其是一些语法规定。
通过课程设计,自然地、熟练地掌握。
熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。
学会上机调试程序。
第四章课程设计的内容4.1 C语言课程设计的程序清单和注释模拟时钟转动程序清单+注释#include<windows.h> //包含窗口头文件#include<math.h> //头文件,包含了一些数学计算的函数#define TWOPI (2*3.14159)#define IDTIMER 1 //计时器ID#define ANGLE TWOPI/360 //2PI页脚内容- 3 -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;页脚内容- 4 -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应用程序的消息循环形式}页脚内容- 5 -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;页脚内容- 6 -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]))),(int)(radius[i]*sin(ANGLE*(90-angle[i]))));页脚内容- 7 -}}LRESULT CALLBACK WindowProc(HWND hwnd,UINT message, // 消息标识符,标识某个特定的消息WPARAM wParam,LPARAM lParam) //消息处理函数{TCHAR time[40];PAINTSTRUCT ps;HDC hdc;static int cxClient, cyClient;SYSTEMTIME st; //定义结构体变量static SYSTEMTIME preSt;BOOL hChange;switch(message) //switch 语句一个case代表一种情况页脚内容- 8 -{case WM_CREATE: // 窗口创建事件SetTimer(hwnd,IDTIMER,1000,NULL); //创建一个1000ms定时器GetLocalTime(&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); // 设置当前时间为窗口titlepreSt = st;return 0;case WM_SIZE:页脚内容- 9 -cxClient = LOWORD(lParam);cyClient = HIWORD(lParam);return 0;case WM_TIMER: //定时器到时,即是每隔一秒要重画下界面GetLocalTime(&st); //每次都要获取当前时间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);wsprintf(time,TEXT("%d年%d月%d日%d时%d分%d秒"),//记录系统时间,包括年、月、日、时、分、秒st.wYear,st.wMonth,页脚内容- 10 -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_PAINT: //窗口绘制消息hdc = BeginPaint(hwnd,&ps); //开始绘制setISOTROPIC(hdc,cxClient,cyClient);drawClock(hdc);drawHands(hdc,&preSt,TRUE);页脚内容- 11 -EndPaint(hwnd,&ps); //结束绘制return 0;case WM_DESTROY: //程序退出消息PostQuitMessage(0);return 0;}returnDefWindowProc(hwnd,message,wParam,lParam);//其他消息有系统默认处理}第五章课程设计的运行结果5.1 C语言课程设计的运行结果页脚内容- 12 -第六章课程设计的结果分析6.1 C语言课程设计的结果分析页脚内容- 13 -运行结果分析问题一:程序清单中某个符号添加错误,导致编译时出现错误,执行不出结果。
60s旋转时钟课程设计
60s旋转时钟课程设计一、课程目标知识目标:1. 学生能理解时钟的基本构造和旋转原理,掌握60秒旋转一周的时钟运行规律。
2. 学生能够运用所学知识,解释时钟指针运动与时间变化之间的关系。
3. 学生理解时钟的时间单位(时、分、秒)及其换算关系。
技能目标:1. 学生通过制作简易的60秒旋转时钟模型,提高动手操作能力和问题解决能力。
2. 学生能够运用数学知识,进行时钟指针角度的计算。
3. 学生通过小组合作,培养沟通协调能力和团队合作精神。
情感态度价值观目标:1. 学生培养对时间观念的重视,养成珍惜时间的好习惯。
2. 学生在探索时钟旋转原理的过程中,激发对数学和科学的好奇心和求知欲。
3. 学生通过学习时钟的制作,体会工匠精神,培养精益求精的态度。
课程性质:本课程为综合实践活动课程,结合数学、科学和工艺制作等多学科内容。
学生特点:五年级学生具有一定的数学基础、动手能力和合作意识。
教学要求:注重理论与实践相结合,鼓励学生动手实践、自主探索和合作交流,提高学生的综合素养。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 介绍时钟的基本结构,包括时针、分针、秒针的构造及其功能。
2. 讲解时钟的旋转原理,重点阐述秒针60秒旋转一周的运行规律。
3. 结合数学知识,引导学生学习时钟指针角度的计算方法。
4. 利用教材相关章节,组织学生进行时钟时间单位换算的练习。
5. 开展实践活动,指导学生制作简易的60秒旋转时钟模型。
6. 通过小组合作,让学生在实践中探索和解决时钟制作过程中遇到的问题。
7. 结合工艺制作课程,教授学生使用工具和材料,培养动手操作能力。
教学内容安排和进度:第一课时:介绍时钟的基本结构,学习旋转原理。
第二课时:学习时钟指针角度计算,进行时间单位换算练习。
第三课时:实践活动,制作简易60秒旋转时钟模型。
第四课时:小组合作,解决时钟制作过程中的问题,总结经验。
教学内容关联教材章节:数学:《角的度量》、《时间单位换算》科学:《简单机械》工艺制作:《模型设计与制作》教学内容确保科学性和系统性,注重理论与实践相结合,提高学生的综合运用能力。
模拟时钟转动程序
模拟时钟转动程序一、课程设计的内容能模拟机械钟表行走,还要准确利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
二、课程设计的要求与数据1.进一步掌握和利用C语言进行课程设计的能力2.进一步理解和运用结构化程序设计的思想和方法3.初步掌握开发一个小型实用系统的基本方法4.学会调试一个较长程序的基本方法5.学会利用流程图和N-S图表示算法6.掌握书写程序设计开发文当的能力三、课程设计应完成的工作1、编写完成相应题目的程序2、编写课程设计报告,课程设计报告应该包含以下6部分1)需求分析:包括设计题目、设计要求以及系统功能需求分析2)总体设计:包括系统总体设计框架和系统功能模块图3)详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图4)调试分析过程描述:包括测试数据、测试输出结果以及对程序测试过程中存在问题进行思考(主要问题的出错现象、出错原因、解决方法及其效果等,相应效果截图)5)总结:课程设计完成了哪些主要功能,是否有扩展功能?还有哪些地方需要改进?课程设计的学习与体会?有哪些合理化建议?6)附录:主要原程序代码含必要的注释3、答辩:在实验室建立程序运行环境,并在指导教师的监督下,独立解决问题,运行程序和回答教师的提问。
四、课程设计进程安排五、应收集的资料及其主要参考文献[1]谭浩强.C程序设计(第三版)[M]北京:清华大学出版社,2005年9月[2]谭浩强.C程序设计题解与上机指导(第三版)[M]北京:清华大学出版社,2005年7月[3]夏宝岚张慕蓉夏耘.程序设计教程(第二版)[M],上海:华东理工出版社,2003.1[4]陈锦昌赵明秀.C语言计算机绘图教程(第一版)[M],广州:华南理工大学出版社,1998.9发出任务日期:2010年12月15日指导教师签名:计划完成日期:2010年12月30日基层教学单位责任人签名:主管院长签章:目录1.设计目的与要求 (5)2.总体设计 (6)3.详细设计 (7)3.1画出钟表的轮廓3.2获取系统时间3.3时间和声音的表达4.调试分析 (8)5.总结 (9)6.附录(程序) (10)7.答辩记录(正文处留出适当空白) (13)8.指导教师意见(正文处留出适当空白) (14)1.目的与要求要求:能模拟机械钟表行走,还要准确利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
60秒旋转时钟课程设计
60秒旋转时钟课程设计一、课程目标知识目标:1. 学生能理解旋转时钟的基本概念,掌握60秒旋转一周的规律。
2. 学生能够运用所学的旋转知识,解释时钟指针运动的规律。
3. 学生了解时钟的构造,理解时钟运动与时间的关系。
技能目标:1. 学生能够运用几何图形的运动原理,分析并绘制旋转时钟的运动轨迹。
2. 学生能够运用数学运算,准确计算时钟指针在任意时刻的位置。
3. 学生通过小组合作,解决与旋转时钟相关的实际问题,提高解决问题的能力。
情感态度价值观目标:1. 学生对数学学科产生兴趣,认识到数学知识在生活中的应用。
2. 学生在学习过程中,培养观察、分析、解决问题的能力,增强自信心。
3. 学生通过学习旋转时钟,培养珍惜时间、合理安排时间的意识。
课程性质:本课程为数学学科课程,结合实际生活,让学生在掌握旋转知识的基础上,深入了解时钟的运动规律。
学生特点:六年级学生对几何图形的运动有一定的了解,具备一定的数学运算能力,但需要进一步引导他们将理论知识与实际应用相结合。
教学要求:教师应注重启发式教学,引导学生观察、思考、实践,使学生在自主探究与合作交流中掌握知识,提高能力。
同时,关注学生的情感态度价值观的培养,使学生在学习过程中形成正确的价值观。
通过分解课程目标为具体的学习成果,为后续的教学设计和评估提供依据。
二、教学内容本节教学内容以六年级数学教材中“几何图形的运动——旋转”章节为基础,结合时钟的旋转运动进行深入讲解。
1. 教学大纲:a. 引入旋转的概念,让学生回顾已学的旋转知识。
b. 通过观察和分析时钟,引导学生理解60秒旋转一周的规律。
c. 讲解时钟的构造,分析时钟指针的运动原理。
d. 结合实例,让学生运用旋转知识解决实际问题。
2. 教学内容安排与进度:a. 第一节课:引入旋转概念,观察时钟运动,分析旋转规律。
b. 第二节课:讲解时钟构造,运用旋转知识解决实际问题。
c. 课后作业:设计相关练习题,巩固旋转知识,提高解决问题的能力。
模拟时钟课程设计报告
课程设计报告课程:面向对象程序设计学号:1210461018 1210461027 1210461050姓名:张扬李佳珂金正行班级: 12计科2班教师:钱田芬时间:2014年12月10日计算机科学与技术系设计名称:模拟时钟日期:2014年1 2月10日设计内容:通过多线程技术,重绘界面,绘制一个虚拟的时钟,时钟界面包括表盘和指针。
并用数字表显示当前的时间。
1 设计目的与要求1.1基本要求⑴编写一个模拟时钟程序,此程序在屏幕中间有一指针式钟面。
左上角以数字方式显示时间,该时间应与指针显示的时间一致,且与机器系统时间相同。
⑵在设计的过程中,需要用到awt组件和Swing容器与组件,布局管理器,事件处理,绘制图形,还运用到了类的继承,事件监听器和线程。
掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。
增进Java 语言编辑基本功,1.2 设计目的⑴设计一个带有指针、数字时钟,并且具有秒表功能,能方便我们的使用和操作,为我们以后的使用创造一个良好的平台。
⑵把自己所学的理论知识运用到实际操作中去,以此来发现自己的不足,及时的改正。
在实际的操作中学习及运用还没有学过的知识。
最后在调试与测试的过程还可以提升自己的改错能力也是自己经验的积累!2 设计环境、思想和功能描述2.1运行环境:Eclipse +JDK平台CPU:Pentium 2.8GHz以上内存:256MB以上硬盘空间:80G以上操作系统:Windows XP Windows 7 Windows 82.2主要设计思想:先是利用构造函数创建一个长为200,宽为200的窗体,颜色设置为black,并把窗体设计为固定大小。
利用AWT绘制图形的方法,在窗体中间画一个圆,并且绘制时钟上的12个数字,然后利用Calendar类提供的HOUR,MINUTE和SECOND 方法获得现在的时间,在计算时间和度数的关系;在利用AWT绘制图形的方法绘制出各指针,并设置不同的颜色。
模拟时钟转动程序设计说明书
摘要 ............................................................. - 0 -1 引言 ........................................................... - 2 -1.1 选题背景 ..................................................... - 2 -1.2 任务与分析 ................................................... - 2 -2 方案设计 ....................................................... -3 -3 界面设计 ....................................................... - 3 -4 代码设计及程序调试 ............................................. - 4 -总结与体会 ....................................................... - 7 -致谢 ............................................................. - 9 -参考文献 ........................................................ - 10 -摘要随着计算机的不断更新发展,计算机图形操作和动画设计扮演着极为重要的角色, Windows环境下的Visual Basic提供了丰富的图形功能。
本文主要通过对选题背景、方案设计、界面设计、代码编写及调试以及软件使用说明等的介绍,介绍了作者利用Visual Basic对“模拟时钟转动”程序的开发设计过程。
模拟时钟转动程序(精)
绘制表盘部分
• void init() /*画时钟边框函数*/ • { • int i,l,x1,x2,y1,y2; • setbkcolor(1); /*设置背景颜色白色 */ • circle(300,240,200); /*画圆心为(300,240)半径200圆*/ • circle(300,240,205); • circle(230,180,25); • rectangle(220,280,400,300); /*画矩形(左上角和右下 角坐标)*/ • circle(380,180,25); • circle(300,240,5);
•
for(i=0;i<=6;i++)
• • • • • • • • • • • • • • • • • • •
{ 小*/ settextstyle(TRIPLEX_FONT,HORIZ_DIR,i); /*控制输出字符的字体,方向,大 cleardevice(); settextjustify(1,1); /*在指定坐标上输出字符串*/ outtextxy(300,80,"12") ; outtextxy(300,390,"6"); outtextxy(140,230,"9"); outtextxy(460,230,"3"); outtextxy(380,100,"1"); outtextxy(220,100,"11"); outtextxy(430,160,"2"); outtextxy(430,310,"4"); outtextxy(380,370,"5"); outtextxy(220,370,"7"); outtextxy(160,160,"10"); outtextxy(160,310,"8");
C语言课程设计报告-模拟时钟转动程序
课程设计报告课程名称结构化程序设计课程设计院部名称专业班级学生姓名王蕾学号课程设计地点课程设计学时指导教师金陵科技学院教务处制目录第一章课程设计的目的和要求.............................................1.1 C语言课程设计的目的............................................1.2 C语言课程设计实现的要求........................................ 第二章课程设计的任务内容............................................... 第三章详细设计说明.....................................................3.1 程序系统的结构..................................................3.1.1 实验设备及环境:(软、硬件环境)3.2 模块描述........................................................3.2.1 指针式时钟................................................3.2.2 数字式时钟................................................3.3 输出项..........................................................3.4 算法............................................................3.5 流程图..........................................................3.6 函数说明........................................................3.7 接口............................................................3.8 调试结果........................................................ 第四章软件使用说明.....................................................4.1 软件使用说明及出现的问题........................................4.2 运行结果........................................................ 第五章课程设计心得与体会............................................... 附录1:参考文献......................................................... 附录2:修改后的源代码……………………………………………………………………模拟时钟转动程序第一章课程设计的目的和要求1.1 C语言课程设计的目的加深对讲授内容的理解,尤其是一些语法规定。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《高级语言》课程设计课题名称模拟时钟转动程序学院信息工程专业网络工程地点 D507 学生姓名钟都华学号 13046130 开课时间 2013 至 2014 学年第 2 学期同组人李卓成绩一、课程设计的目的和要求1.课程设计的目的本程序旨在训练读者的基本编程能力,使读者熟悉C语言图形模式下的编程。
本程序中涉及时间结构体、数组、绘图等方面的知识。
通过本程序的训练,使读者能对C 语言有一个更深刻的了解,掌握利用C语言相关函数开发电子时钟的基本原理,为进一步开发出高质量的程序打下坚实的基础。
2.课程设计的要求能模拟机械钟表行走;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;要准确的利用数字显示日期和时间并且可以根据用户的需求更改当前时间(指针式时钟与数字式时钟实现同步更改);数字式时钟的时间显示与指针式时钟显示一致;可以通过上下键改变当前的时、分、秒;改的时间是小时、分钟、还是秒数;通过Tab键切换按Esc时程序退出。
二、设计如下图,此电子时钟主要由以下4个功能模块组成。
1.界面显示模块电子时钟界面显示在调用时钟运行处理之前完成,在这里主要调用了C语言图形系统函数和自负屏幕处理函数画出时钟程序的主界面。
主界面包括类似Windows自带的电子时钟的界面和帮助界面两部冯。
电子时钟界面包括一个模拟时钟运转的钟表和一个显示时间的数字钟表。
在帮助界面中,主要包括一些按键的操作说明。
2.按键控制模块按键控制模块主要完成两大部分功能。
第一,读取用户按键的键值。
第二,通过对键盘按键值得判断,执行相应的操作,如光标移动、修改时间。
3.时钟动画处理模块在时钟动画处理模块中,它通过对相关条件的判断和时钟坐标值的计算,完成时、分、秒指针的擦除和重绘,以达到模拟时钟运转的功能。
4.数字时钟处理模块在数字时钟处理模块中,它主要实现了数字时钟的显示和数字时钟的修改。
其中,用户可先按Tab键定位需要修改内容的位置,然后通过按光标上移()或下移(功能模块设计1.电子时钟执行主流程此电子时钟执行主流程如右图所示。
首先,程序调用initgraph()函数,使系统进入图形模式,然后通过使用line()、arc()、outtextxy()、circle()等函数来绘制主窗口及电子时钟界面,最后调用clockHandle()函数来处理时钟的运转及数字时钟的显示。
在clockhandle()函数中,它使用了bioskey()函数来获取用户的按键值,当用户按键为Esc时,程序会从clockhandle()函数中返回,从而退出程序。
2.电子时钟界面显示电子时钟界面的实现比较简单,在功能模块有详细描述,值得一提的是,模拟时钟运转的动画时钟的时间刻度是用大小不同的圆来表示的,三根长度不同但有一端在相同坐标位置的直线分别表示时、分、秒针。
3.按键控制模块(1)按下Tab键,清除上一个位置的光标,然后在新位置出绘制一个光标。
(2)按下光标上/下移键,增加/减少相应的时、分、秒值。
(3)按下Esc键,程序结束时钟运行,从而退出系统。
4.动画处理模块坐标点的计算rsinα rcosα分别是这两条虚线的长度弧度360°=2π在电子时钟中,秒针转动60次每一次的弧度为2π/60 = π/30;上图对于∠K而言sin=边3/边1,在程序中已经知道∠α的弧度也就知道了∠K的度数;设分钟为m则∠K开始进入图形模式绘制主窗体界面绘制电子时钟界面绘制帮助界面调用clockhandle()时钟处理程序退出系统结束的度数为m*2π/60 = m*π/30,利用C函数sin(m*π/30)则可得到边3与边1的比,带入程序rsinα则可得到边3的长度;设秒针的长度为80像素即r = 80像素 rsinα=80*sin(m*π/30)可求得rsinα长度,则可以得到相对于圆心而言X轴的偏移位置即451+rsinα也就是K的X轴坐标。
同理求的Y轴坐标,对∠K而言,cos∠K=边2/边1 则80*cos(m*π/30) 就可得到y轴的偏移位置K坐标为(451+rsinα,200-rcosα)5.数字时钟处理模块它主要由光标上移或下移按键共同控制,当光标在时/分/秒位置且按下上移/下移按键,程序会将当前时间的时/分/秒增加/减少1,即增加/减少1小时/分钟/秒。
函数功能描述1.keyhandle()函数原型:int keyhandle(int key,int count)Keyhandle()函数用于对用户的按键值key进行判断,然后调用timeupchange(count)或timedownchange(count)或直接处理Tab按键,其中count的值为1、2、3,1表示小时、2表示分钟、3表示秒钟。
按Tab键后,count值加1.2.timeupchange()函数原型:int timeupchange(int count)Timeupchange()函数用于增加时、分、秒数,然后将新的时间设置为系统当前时间。
3.timedownchange()函数原型:int timedownchange(int count)Timedownchange()函数用于减少时、分、秒数,然后将新的时间设置为系统当前时间。
4.digitclock()函数原型:void digitclock(int x,int y,int clock)Digitclock()函数用于在(x,y)位置显示clock值,clock值为时、分、秒值。
5.drawcursor()函数原型:void drawcursor(int count)Drawcursor()函数用于对count进行判断后,在相应位置绘制一条直线作为光标。
6.clearcursor()函数原型:void clearcursor(int count)clearcursor()函数用于对count进行判断后,在相应位置擦除原来的光标。
7.void clockhandle()函数原型:void clockhandle()void clockhandle()函数用于完成时钟转动和数字时钟的显示。
8.main()函数原型:void main()Main()为主函数。
分工:钟都华:电子时钟主流程、界面显示模块、时钟动画处理模块、对程序的改进。
李卓:时钟按键控制模块、数字时钟处理模块、代码的输入。
三、编码#include<graphics.h> //程序的预处理#include<stdio.h>#include<math.h>#include <dos.h>#define PI 3.1415926#define UP 0x4800#define DOWN 0x5000#define ESC 0x11b#define TAB 0xf09int keyhandle(int,int);int timeupchange(int);int timedownchange(int);int digithour(double);int digitmin(double);int digitesc(double);void digitclock(int,int,int);void drawcursor(int);void clockcursor(int);void clockhandle();double h,m,s;double x,x1,x2,y,y1,y2;struct time t[1];main() //主函数(包括界面的绘制){int driver,mode=0,i,j;driver=DETECT;initgraph(&driver,&mode," "); //初始化图形系统setlinestyle(0,0,3);setbkcolor(0);setcolor(9);line(82,430,558,430);line(70,62,70,418);line(82,50,558,50);line(570,62,570,418);line(70,62,570,418);line(76,56,179,56);line(340,56,564,56);/*arc(int x, int y, int stangle, int endangle, int radius)*/ arc(82,62,90,180,12);arc(558,62,0,90,12);setlinestyle(0,0,3);arc(82,418,180,279,12);setlinestyle(0,0,3);arc(558,418,270,360,12);setcolor(15);outtextxy(300,53,"CLOCK");setcolor(7);rectangle(342,70,560,360);setwritemode(0);setcolor(15);outtext(433,75,"CLOCK");setcolor(7);line(392,310,510,310);line(392,330,510,330);arc(392,320,90,370,10);arc(510,320,270,90,10);setcolor(5);for(i=431;i<=470;i+=38)for(j=317;j<=324;j+=7){setlinestyle(0,0,3);circle(i,j,1);}setcolor(15);line(424,315,424,325);for(i=0,m=0,h=0;i<=11;i++,h++){x=100*sin((h*60+m)/360*PI)+451;y=200-100*cos((h*60+m)/360*PI);setlinestyle(0,0,3);circle(x,y,1);}for(i=0,m=0;i<=59;m++,i++){x=100*sin(m/30*PI)+451;y=200-100*cos(m/30*PI);setlinestyle(0,0,1);circle(x,y,1);}setcolor(4);outtextxy(184,125,"Help");setcolor(15);outtextxy(182,125,"Help");setcolor(5);outtextxy(140,185,"Tab : Cursor move");outtextxy(140,225,"Up : Time ++");outtextxy(140,265,"Down: Time --");outtextxy(140,305,"Esc : Quit system!");outtextxy(140,345,"Version : 2.0");setcolor(12);outtextxy(150,400,"Nothing is more important than time!");clockhandle(); //开始调用时钟处理程序closegraph(); //关闭图形系统return 0;}void clockhandle() //时钟动画处理模块{int k=0;count;setcolor(15);gettime(t);h=t[0].ti_hour;m=t[0].ti_min;x=50*sin((h*60+m)/360*PI)+451;y=200-50*cos((h*60+m)/360*PI);line(451,200,x1,y1);x1=80*sin(m/30*PI)+451;y1=200-80*cos(m/30*PI);line(451,200,x1,y1);digitclock(408,318,digithour(h));digitclock(446,318,digitmin(m));setwritemode(1);for(count=2;k!=Esc;){setcolor(12);sound(500);delay(700);sound(200);delay(300);nosound();s=t[0].ti_sec;m=t[0].ti_min;h=t[0].ti_hour;x2=98*sin(s/30*PI)+451;y2=200-98*cos(s/30*PI);line(451,200,x2,y2);while(t[0].ti_sec==s&&t[0].ti_min==m&&t[0].ti_hour==h) {gettime(t);if(bioskey(1)!=0){k=bioskey(0);count=keyhand(k,count);if(count==5) count=1;}}setcolor(15);digitclock(485,318,digitsec(s)+1);setcolor(12);x2=98*sin(s/30*PI)+451;y2=200-98*cos(s/30*PI);line(451,200,x2,y2);if(t[0].ti_min!=m){setcolor(15);x1=80*sin(m/30*PI)+451;y1=200-80*cos(m/30*PI);line(451,200,x1,y1);m=t[0].ti_min;digitclock(446,318,digitmin(m));x1=80*sin(m/30*PI)+451;y1=200-80*cos(m/30*PI);line(451,200,x1,y1);}if((t[0].ti_hour*60+t[0].ti_min)!=(h*60+m)){setcolor(15);x=50*sin((h*60+m)/360*PI)+451;y=200-50*cos((h*60+m)/360*PI);line(451,200,x,y);h=t[0].ti-hour;digitclock(408,318,digithour(h));x=50*sin((h*60+m)/360+PI)+451;y=200-50*cos((h*60+m)/360*PI);line(451,200,x,y);}}}int keyhandle(int key,int count) //时钟按键控制模块{switch(key){case UP: timeupchange(count-1);break;case DOWN:timedownchange(count-1);break;case TAB:setcolor(15);clearcursor(count);drawcursor(count);count++;break;}return count;}int timeupchange(int count){if(count==1){t[0].ti_hour++;if(t[0].ti_hour==24) t[0].hour=0;settime(t);}if(count==2){t[0].ti_min++;if(t[0].ti_min==60) t[0].min=0;settime(t);}if(count==3){t[0].ti_sec++;if(t[0].ti_sec==60) t[0].sec=0;settime(t);}}int timedownchange(int count){if(count==1){t[0].ti_hour--;if(t[0].ti_hour==0) t[0].hour=23;settime(t);}if(count==2){t[0].ti_min--;if(t[0].ti_min==0) t[0].min=59;settime(t);}if(count==3){t[0].ti_sec--;if(t[0].ti_sec==0) t[0].sec=59;settime(t);}}void digitclock(int x,int y,int clock)//数字时钟处理模块{char buffer1[10];setfillstyle(0,2);bar(x,y,x+15,328);if(clock==60) clock=0;sprintf(buffer1,"%d",clock);outtextxy(x,y,buffer1);}int digithour(double h){int i;for(i=0;i<=23;i++){if(h==i) return i;}}int digitmin(double m){int i;for(i=0;i<=59;i++){if(m==i) return i;}}int digitsec(double s){int i;for(i=0;i<=59;i++){if(s=i) return i;}}void drawcursor(int count){switch(count){case 1:line(424,315,424,325);break;case 2:line(465,315,465,325);break;case 3:line(505,315,505,325);break;}}void clearcursor (int count){switch(count){case 1:line(424,315,424,325);break;case 2:line(465,315,465,325);break;case 3:line(505,315,505,325);break;}}四、调试和运行调试:程序在VC++6.0上不能运行,原因是VC++6.0无graphics函数,只能在win-tc 上运行。