当前位置:文档之家› 模拟时钟行走 C语言程序

模拟时钟行走 C语言程序

模拟时钟行走课程设计总体要求采用模块儿化程序设计;鼓励可视化编程;源程序中有足够的注释;学生可自行增加新功能模块儿;必须上机调试通过;注重算法运用,优化存储效率与运算效率;需提交源程序及相关文件;目录1 课程任务书2 系统设计3 模块设计3.1 总体结构3.2 流程图3.3 使用的主要函数4 调试及测试1、调试过程中的问题2、调试结果5 设计总结6 心得体会及致谢7 答辩记录8 教师意见一、课程设计任务书在屏幕上显示一个活动时钟;能模拟机械钟表行走;准确地利用数字显示日期和时间;按任意键时程序退出。

二、系统设计总体结构:在绘图窗口中先画出表盘后获取系统的时间,利用得到的系统时间计算表针的位置,并将时间在屏幕上输出。

每隔一秒读取一次时间,直到键盘有输入为止。

流程图开始初始化绘画窗口画表盘否获取系统时间结束使用的主要函数: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(BLUE);line(300 + x_hour, 240 - y_hour, 300, 240 );setlinestyle(PS_SOLID, NULL, 5);// 画分针setcolor(GREEN);line(300 + x_min, 240 - y_min, 300, 240 );setlinestyle(PS_SOLID, NULL, 2); // 画秒针setcolor(WHITE);line(300 + x_sec, 240 - y_sec, 300, 240 );}2.画表盘void Drawbiaopan(){int i,l,x1,x2,y1,y2;setbkcolor(1);circle(300,240,180);circle(300,240,185);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(); // 关闭绘图窗口}四调试及测试使用vc企业版进行反复调试五设计总结调试过程出现的问题:1.Vc++6.0中没有“graphics.h”,安装turboc.2.0中的函数库EasyX后出现权限问题。

解决办法:安装vc企业版解决权限问题,然后导入graphics.h。

2.无法获取系统时间解决办法:使用函数GetLocalTime( );并使用#include <time.h>声明3.Outtextxy()函数无法显示整数型时间解决办法:将整数型时间变量转换为字符型再输出六、心得体会及致谢由于C语言没有学过图形方面的知识,很多东西都要去查资料。

在设计的过程中遇到很多问题,都需要花很多时间去尝试,去解决。

这个程序总体来说不复杂,思路也简单,编写的过程中询问了相关知识的专业人士,上网搜集很多前人所作的资料,查询借阅图书馆的相关书籍,对自己在思维方面的帮助很大。

参考文献1.谭浩强著,C程序设计(第三版),北京:清华大学出版社。

2. Gary J.Bronson著,刘勇译,C++程序开发与设计(第二版)北京:人民邮电出版社3.朱站立编著,数据结构——使用C语言(第4版)北京:电子工业出版社4.谭浩强,张基温,唐永炎编著,C语言程序设计教程,北京:高等教育出版社19925.谭浩强编著,C程序设计题解与上机指导(第二版),北京:清华大学出版社,19926.谭浩强编著,QBASIC语言教程,北京:电子工业出版社,19977.谭浩强编著,田数清编著,PASCAL语言程序设计(第二版),北京:高等教育出版社,19988.C程序编写组,常用C语言用法速查手册,北京:龙门书局,19959.H M Peitel,P J Deitei.C How to progrom,second Edition. 蒋才鹏等译,C程序设计教程,北京:机械工业出版社,200010.Herbert Schild著,王曦若,李沛译,ANSIC标准详解,北京:学院出版社,1994七、答辩记录八、教师意见。

相关主题