c语言实现电子时钟_课程设计_第1页
c语言实现电子时钟_课程设计_第2页
c语言实现电子时钟_课程设计_第3页
c语言实现电子时钟_课程设计_第4页
c语言实现电子时钟_课程设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言实现电子时钟课程设计 题H: C语言实现电子时钟 1 课程设讣的任务和具体要求 1(掌握利用C语言相关函数开发电子时钟的基本原理,为进一步开发高质量 的程序打 下坚实的基础。提高运用C语言解决实际问题的能力。 2( 了解讣算机图形学的相关算法。 3( 了解讣算机图形学的相关函数的使用。 指导教师签字:日期:指导教师评语 成绩:指导教师签字:日期: 2 课程设讣所需软件、硬件等 Windows xp winTC 课程设计进度计划 起至日期 工作内容 备注2010年12月1日-2010收集资料 年12月20日 2010年12月20 0-2010编写程序 年12月26日 参考文献、资料索引 序

2、号文献、资料名称编著者出版单位 a.姜灵芝等.c语言课程设汁案例精编.北京:清华大学出版社.2008 b.胡景春 等。大学生计算机课程实践优秀作品选编.南京:东南大学出版社.2010 摘要: 我们日常生活中有各种各样的时钟,随着计算机的普及和计算机科学的飞速发 展,人们开始越来越多的利用计算机解决实际问题。开发一个易于查看的时钟有较 大的现实意义。该时钟只实现简单的界面,程序与生活紧密结合,体直观开发简 单。利用c语言编辑源程序,再进行编译连接生成可执行文件,运行时可看见漂亮 的外观。 一. 设计课题:电子时钟课程设计 二. 设计目的: 本程序中涉及时间结构体,数组、绘图等方面的知识,通过本程

3、序的训练,使 我们有一个更深刻的了解,掌握利用c语言相关函数开发电子时钟的基本原理,为 进一步开发高质量的程序打下坚实的基础。提高运用c语言解决实际问题的能力。 三. 设计内容: (1) 欢迎界面,以一个笑脸开始 (2) 主界面,包括数字时钟和电子时钟和按键提示。 (3) 设计者介绍和功能提示。 四总体设计: 电子时钟是针对人们判断时间的落后和不准确性,通过利用计算机来实行对时 间的系统计算,增加了准确性。在软件的总体设计中采用自上而下,逐步细化,模 块化设计,结构化编码方式进行。 系统结构图 电子时钟 时 界按钟数 (4) 时钟动画处理模块 12 k rcosa orsina 先通过坐标点的

4、讣算 再做好时钟动画处理流程,最后退出程序。 (5) 数字时钟处理模块 在数字时钟处理模块中,会每隔一秒调用gettime ()函数,获取系统时间,再 调用digitclock函数再相应的位置显示时、分、秒值。数字的修改有当前光标的 位置和上、下移键共同决定的。 2 (6) 汉字处理模块 运用点阵法,调用dra-mat ()函数实现。 六.调试分析: 在此次课程设计中,遇到了一些问题,通过老师的指导和组员之间的协作,最 后都解决了问题。 a. 要减少调试时间首先要害死程序写出来的语法错误少,那就哟啊养成良好 的习惯, 比如写主函数mainO后写了左花括号“”马上补右括号“”等等。 b. 另一个

5、重要的方面就是数据的类型一定要对应,还有格式也非常重要,在 写程序 七(课程设计总结和心得体会: 1. 通过这次课程设计,加强了我们动手、思考和解决问题的能力。而且在设 计过程中,经常会遇到这样那样的情况,就是心里想老着这样的接法可以行得通, 经过老师一点拨就放弃了这种想法。 2. 我沉得做课程设讣同时也是对课本知识的巩固和加强,山于课本上的知识 太多,平时课间的学习并不能很好的理解和运用各个函数的功能,而且考试内容有 限,所以在这次课程设计过程中,我们了解了很多函数的功能,并且对于其在程序 中的使用有了更多的认识。3.平时看课本时,有时问题老是弄不懂,做完课程设 计,那些问题就迎刃而解了。而

6、且还可以记住很多东西。比如一些程序功能的实 现,平时看课本,这次看了,下次就忘了,通过动手实践让我们对各个函数印象深 刻。认识来源于实践,实践是认识的动力和最终LI的,实践是检验真理的唯一标 准。所以这两个星期的课程设讣对我们的作用是非常大的。经过两个星期的学习, 过程曲折可谓一语难尽。在此期间我们也失落过,也曾一度热情高涨。从开始时满 富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。此次课程设 计,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应 变,和与人合作共同提高,都受益非浅,今后的制作应该更轻松,自己也都能扛的 起并高质量的完成项LL、在此,感谢于老师的

7、细心指导,也同样谢谢其他各组同 学的无私帮助 八(参考文献: C.姜灵芝等.C语言课程设计案例精编.北京:清华大学出版社.2008 d.胡景春 等。大学生计算机课程实践优秀作品选编.南京:东南大学出版社.2010附录(源代 码): ncludegraphics h ncludestdio. h #include #include Sdefine PI 3. 1415926 /*定义常量*/ itdefine UP 0 x4800 /*上移?键:修改时间*/ define DOWN 0 x5000 /*下移?键: 修改时间*/ 退出系统*/ ttdefine ESC Oxllb /*ESC 键:

8、 #define TAB 0 xf09 /*TAB键:移动光标*/ /*函数声明*/ int keyhandle (int, int) : /*键盘按键判断,并调用相关函数处理*/ int timeupchange(int) ; /*处理上移按键*/ int timedownchange(int) : /*处理下移按键*/ int digithour (double) ; /*将 double 型的小时数转换成 int 型*/ int digitmin(double) ; /*将 double 型的分钟数转换成 int 型*/ int digitsec (double) ; /*将 doubl

9、e 型的秒钟数转换成 int 型*/ void digitclock(int, int, int ); /*在指定位置显示时钟或分钟或秒钟数*/ void drawcursor (int) ; /*绘制一个光标*/ void clearcursor (int) ;/*消除前一个光标*/ void clockhandle () ; /*时钟处理*/ double h, m, s; /*全局变量:小时,分,秒*/ double x, xl, x2, y, yl,y2; /*全局变量:坐标值*/ struct time定义一个time结构类型的数组*/ main() int driver, mode

10、二0, i,j; driver二DETECT; /*自动检测显示设备*/ initgraph(/*初始化图形系统*/ setlinestyle(0, 0, 3) ; /*设置当前画线宽度和类型:设置三点宽实线*/ setbkcolor(O);/*用调色板设置当前背景颜色*/ setcolor (9) ; /*设置当前画线颜色*/ line (82, 430, 55 line(70, 62, 70,418); line (82, 50, 558, 50); line(570, 62, 570,418); line(70, 62, 570, 62); line(76, 56, 297, 56);

11、line (340, 56, 564, 56) ; /*画主体框架的边直线*/ /*arc(int x, int y, int stangle, int endangle, int radius)*/ arc (82, 62, 90, 180, 12); arc (55 setlinestyle(0, 0, 3); arc (82,418, 180, 279,12); setlinestyle(0, 0, 3); arc (558, 418, 270, 360, 12) ; /*画主体框架的边角弧线*/ 4 setcolor (15); outtextxy (300, 53, CLOCK) ;

12、 /*显示标题*/ setcolor (7); rectangle (342, 72, 560, 360) ; /*画一个矩形,作为时钟的框架*/ setwritemode (0) ; /*规定画线的方式。mode二0,则表示画线时将所画位置的 原来信息覆盖*/ setcolor (15); outtextxy (433, 75, CLOCK) ;/*时钟的标题*/ setcolor (7); line(392, 310, 510, 310); line(392, 330, 510, 330); arc (392, 320, 90, 270, 10); arc (510, 320, 270,

13、90, 10) ; /*绘制电子动画时钟下的数字时钟的边框架*/ /*绘制数字时钟的时分秒的分隔符*/ setcolor (5); for(i=431;i=470;i+=39) for(j=317;j=324;j+=7) setlinestyle(0, 0, 3); circle(i, j, 1); /*以(i, y)为圆心,1为半径画圆*/ setcolor (15); line(424, 315, 424, 325) ; /*在运行电子时钟前先画一个光标*/ / *绘制表示小时的圆点* / for (i=0, m=0, h=0; i=ll; i+, h+) x=100*sin(h*60+m

14、)/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); o

15、uttextxy(182, 125, HELP”); setcolor (5); outtextxy(140, 185, TAB : Cursor move); outtextxy(140, 225, UP : Time +); 5 outtextxy(140, 265, DOWN: Time 一一”); outtextxy (140, 305, ESC : Quit system!z/); outtextxy(140, 345, Version : 2.0); setcolor(12); outtextxy (150, 400, Nothing is more important than

16、time!); clockhandle () ; /*开始调用时钟处理程序*/ closegraph() ; /*关闭图形系统*/ */ return 0; /*表示程序正常结束,向操作系统返回一个0值 void clockhandle() int k=0, count; setcolor(15); gettime(t) ;/*取得系统时间,保存在time结构类型的数组变量中*/ h二t0. ti_hour; m=t0Z. ti_min; x=50*sin (h*60+m)/360*PI) +451; /*时针的 x 坐标值*/ y=200-50*cos (h*60+m) /360*PI) ;

17、 /*时针的 y 坐标值*/ line (451, 200, x, y) ;/*在电子表中绘制时针*/ xl=80*sin (m/30*PI) +451; /*分针的 x 坐标值*/ yl=200-80*cos (m/30*PI) ; /*分针的 y 坐标值*/ line (451, 200, xl, yl) ; /*在电子表中绘制分针*/ digitclock(408, 318, digithour (h) ; /*在数字时钟中,显示当前的小时值*/ digitclock(446, 318, digitmin(m); /*在数字时钟中,显示当前的分钟值*/ setwritemode(1);

18、/*规定画线的方式,如果mode二1,则表示画线时用现在特性的线与所画之处原 有的线进行异或(X0R)操作,实际上画出的线是原有线与现在规定的线进行异或后 的结果。因此,当线的特性不变,进行两次画线操作相当于没有画线,即在当前 位置处清除了原来的画线*/ for (count二2;k!二ESC;) /*开始循环,直至用户按下ESC键结束循环*/ sound (500) ;/*以指定频率打开PC扬声器,这里频率为500Hz*/ delay (700) ;/*发一个频率为500Hz的音调,维持700毫秒*/ sound(200) ;/*以指定频率打开PC扬声器,这里频率为200Hz*/ delay

19、(300); /*以上两种不同频率的音调,可仿真钟表转动时的嘀哒声*/ nosound () ; /*关闭 PC 扬声器*/ s二t0. ti_sec; m=t0J. ti_min; h=tOJ. ti_hour; 6 x2二98*sin (s/30*PI)+451; /*秒针的 x 坐标值*/ y2=200-98*cos(s/30*PI) ; /*秒针的 y 坐标值*/ line (451,200, x2, y2); /*绘制秒针*/ /*利用此循环,延时一秒*/ while(t0. ti_sec=s/*取得系统时间*/ if (bioskey(1)!=0) k二bioskey(0); co

20、unt二keyhandle(k, count); if(count=5) count二1; setcolor(15); digitclock(485, 318, digitsec(s)+l) ;/*数字时钟增加,秒*/ setcolor (12) : /*淡红色*/ x2=98*sin(s/30*PI)+451; y2=200-98*cos(s/30*PI); line (451,200, x2, y2); /*用原来的颜色在原来位置处再绘制秒针,以达到清除当前秒针的U的*/ /*分钟处理*/ if (t0. ti_min!=m) /*若分钟有变化*/ /*消除当前分针*/ setcolor(

21、15) : /*白色*/ xl=80*sin(m/30*PI)+451; yl=200-80*cos(m/30*PI); line(451, 200, xl, yl); /*绘制新的分针*/ m=t0, ti_min; digitclock(446, 318, digitmin(m) ; /*在数字时钟中显示新的分钟值*/ xl=80*sin(m/30*PI)+451; yl=200-80*cos(m/30*PI); line(451, 200, xl, yl); /*小时处理*/ if (tOj. ti_hour*60+t 0. ti_min) ! = (h*60+m) /*若小时数有变化*

22、/ /*消除当前时针*/ setcolor(15) ; /*白色*/ x=50*sin(h*60+m)/360*PI) +451; /*50:时钟的长度(单位:像素),451:圆心的 X坐 标值*/ 7 y=200-50*cos(h*60+m)/360*PI); line (451, 200, x, y); /*绘制新的时针*/ h=t0 ti_hour; digitclock(408, 318, digithour(h); =50*sin(h*60+m)/360*PI)+451; x y=200-50*cos(h*60+m)/360*PI); line (451, 200, x, y); i

23、nt keyhandle (int key, int count) /*键盘控制 */ switch(key) case UP: timeupchange(count-1) ; /*因为 count 的初始值为,所以此处 减,*/ break; 所以此处减,*/ case DOWN: timedownchange (count-1) ; /*因为 count 的初始 值为,, break; case TAB:setcolor(15): clearcursor (count) ; /*清除原来的光标*/ drawcursor (count) ; /*显示一个新的光标*/ count+; brea

24、k; return count: int timeupchange (int count) /*处理光标上移的按键*/ if (count=l) t0. ti_hour+; if(t0. ti_hour=24) t0. ti_hour=0; settime(t) ; /*设置新的系统时间*/ if (count=2) t0. ti_min+; if (t 0. ti_min=60) t0. ti_min=0; settime(t) : /*设置新的系统时间*/ if (count=3) t0. ti_sec+; 8 if (t0. ti_sec=60) t0. ti_sec=0; settim

25、e(t) : /*设置新的系统时间*/ int timedownchange (int count) /*处理光标下移的按键*/ if (count=l) t0. ti_hour; if (t 0. ti_hour=0) t 0. ti_hour=23; settime(t) ;/*设置新的系统时间*/ if(count=2) t0. ti_min; if (t0. ti_min=0) t0. ti_min=59; settime (t) ;/*设置新的系统时间*/ 辻(count=3) t 0. ti_sec; if ti_sec=0) t0. ti_sec=59; settime(t) ;/*设置新的系统时间*/ int digithour (d

温馨提示

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

评论

0/150

提交评论