收藏 分享(赏)

C语言钟表设计.doc

上传人:dzzj200808 文档编号:3889352 上传时间:2018-11-25 格式:DOC 页数:8 大小:61KB
下载 相关 举报
C语言钟表设计.doc_第1页
第1页 / 共8页
C语言钟表设计.doc_第2页
第2页 / 共8页
C语言钟表设计.doc_第3页
第3页 / 共8页
C语言钟表设计.doc_第4页
第4页 / 共8页
C语言钟表设计.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、/*电子时钟源代码*/#include#include#include#include#include #include #define PI 3.1415926 /*定义常量*/#define UP 0x4800 /*上移键:修改时间*/#define DOWN 0x5000 /*下移键:修改时间*/#define ESC 0x11b /*ESC 键 : 退出系统*/#define TAB 0xf09 /*TAB 键 : 移动光标*/*函数声明*/int keyhandle(int,int); /*键盘按键判断,并调用相关函数处理*/int timeupchange(int); /*处理上移

2、按键*/int timedownchange(int); /*处理下移按键*/int digithour(double); /*将 double 型的小时数转换成 int型*/int digitmin(double); /*将 double型的分钟数转换成 int 型*/int digitsec(double); /*将double 型的秒钟数转换成 int 型*/void digitclock(int,int,int ); /*在指定位置显示时钟或分钟或秒钟数*/void drawcursor(int); /*绘制一个光标*/void clearcursor(int);/*消除前一个 光标*

3、/void clockhandle(); /*时钟处理*/double h,m,s; /*全局变量:小时,分,秒*/double x,x1,x2,y,y1,y2; /*全局变量:坐标值*/struct time t1;/*定义一个 time 结构类型的数组*/main()int driver, mode=0,i,j;driver=DETECT; /*自动检测显示设备*/initgraph(/*初始化图形系统*/errorcode = graphresult()/*为防止图形初始化时发生异常 出现错误时将出现有好的提示界面 */if (errorcode != grOk) /* 图形初始化时出现

4、错误*/printf(“Graphics error: %s/n“, grapherrormsg(errorcode);printf(“Press any key to halt:“);getch();exit(1); /* return with error code */setlinestyle(0,0,3); /*设置当前画线 宽度和类型:设置四点宽点线线setbkcolor(0);/*用调色板设置当前背景颜色*/*可以让用户选择系统支持的颜色作为背景色*/int bkcol, maxcolor, x=10, y=10;char IsOK;maxcolor = getmaxcolor()

5、;for (bkcol=0; bkcol=maxcolor; bkcol+) /* 清理屏幕 */ cleardevice(); /* 设置新的背景色*/ setbkcolor(bkcol); /* output a messsage */ if (bkcol = WHITE) setcolor(EGA_BLUE); sprintf(msg, “Background color: %d“, bkcol); outtextxy(x, y, msg); IsOK=getch(); if(IsOK=Y) break;setcolor(9); /*设置当前画线颜色*/line(82,430,558,4

6、30);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);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);a

7、rc(558,418,270,360,12); /*画主体框架的边角弧线*/setcolor(15);outtextxy(300,53,“CLOCK“); /*显示标题*/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)

8、;arc(392,320,90,270,10);arc(510,320,270,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=11;i+,h+)x=10

9、0*sin(h*60+m)/360*PI)+451;y=200-100*cos(h*60+m)/360*PI);setlinestyle(0,0,4);/在指针式时钟周围显示数字 ,使更易读数circle(x,y,2);setlinestyle(0,0,1);x=110*sin(h*60+m)/360*PI)+451;/在半径的延伸处显示 圆点代表的小时y=200-110*cos(h*60+m)/360*PI);if(h=0) h=12;char buffer110;outtextxy(x,y,buffer1);sprintf(buffer1,“%d“,h);outtextxy(x,y, bu

10、ffer1);h=0;/不要忘记将 h 再次赋值 为 0elsechar buffer110;outtextxy(x,y,buffer1);sprintf(buffer1,“%d“,h);outtextxy(x,y, buffer1);/将表示小时的圆点用更大的圆点与画出/*绘制表示分钟或秒钟的圆点*/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,

11、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 importan

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

13、line(451,200,x,y);/*在电子表中绘制 时针*/x1=80*sin(m/30*PI)+451; /*分针的 x坐标值*/y1=200-80*cos(m/30*PI); /*分针的y 坐标值*/line(451,200,x1,y1); /*在电子表中 绘制分针*/digitclock(408,318,digithour(h); /*在数字时钟中,显示当前的小时值*/digitclock(446,318,digitmin(m); /*在数字时钟中,显示 当前的分钟值*/setwritemode(1);/*规定画线的方式,如果 mode=1,则表示画线时用现在特性的线与所画之处原有的

14、线进行异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。因此, 当线的特性不变, 进行两次画线操作相当于没有 画线,即在当前位置处清除了原来的画线*/for(count=2;k!=ESC;) /*开始循环,直至用户按下 ESC键结束循环*/setcolor(12);/*淡红色*/sound(500);/*以指定频率打开 PC 扬声器,这里频率为500Hz*/delay(700);/*发一个频率为 500Hz 的音调,维持 700 毫秒*/sound(200);/*以指定频率打开 PC 扬声器,这里频率为 200Hz*/delay(300);/呵呵 声音怪怪的sound(

15、600);/*以指定频率打开 PC扬声器,这里频率为 500Hz*/delay(800);/*发一个频率为 500Hz 的音调,维持 700毫秒*/sound(400);/*以指定频率打开PC 扬声器,这里频率为 200Hz*/delay(200);/*以上两种不同频率的音调,可仿真钟表转动时的 嘀哒声*/nosound(); /*关闭 PC 扬声器*/s=t0.ti_sec;m=t0.ti_min;h=t0.ti_hour;x2=98*sin(s/30*PI)+451; /*秒针的 x坐标值*/y2=200-98*cos(s/30*PI); /*秒针的y 坐标值*/line(451,200,

16、x2,y2);/*绘制秒针*/*利用此循环,延时一秒*/while(t0.ti_sec=s/*取得系统时间*/if(bioskey(1)!=0)k=bioskey(0);count=keyhandle(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);/*用原来的颜色在原来位置处再绘制秒针,以达到清

17、除 当前秒针的目的*/*分钟处理*/if(t0.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=t0.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(t0.ti_hour*

18、60+t0.ti_min)!=(h*60+m) /*若小时数有变化*/*消除当前时针*/setcolor(15); /*白色*/x=50*sin(h*60+m)/360*PI)+451;/*50:时钟的长度(单位 :像素),451:圆心的 x 坐标值*/y=200-50*cos(h*60+m)/360*PI);line(451,200,x,y);/*绘制新的时针*/h=t0.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,

19、x,y);int 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+;break;return count;int

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

21、*处理光标下移的按键*/if(count=1) t0.ti_hour-;if(t0.ti_hour=0) t0.ti_hour=23;settime(t);/*设置新的系统时间 */if(count=2) t0.ti_min-;if(t0.ti_min=0) t0.ti_min=59;settime(t);/*设置新的系统时 间*/if(count=3) t0.ti_sec-;if(t0.ti_sec=0) t0.ti_sec=59;settime(t);/*设置新的系统 时间*/int digithour(double h)/*将 double 型的小时数转换成int 型*/int i;fo

22、r(i=0;i=23;i+)if(h=i) return i;int digitmin(double m)/*将 double 型的分钟数转换成 int 型*/int i;for(i=0;i=59;i+)if(m=i) return i;int digitsec(double s) /*将 double型的秒钟数转换成 int 型*/int i;for(i=0;i=59;i+)if(s=i) return i;void digitclock(int x,int y,int clock)/*在指定位置显示数字时钟: 时分秒*/char buffer110;setfillstyle(0,2);ba

23、r(x,y,x+15,328);if(clock=60) clock=0;sprintf(buffer1,“%d“,clock);outtextxy(x,y,buffer1);void drawcursor(int count) /*根据 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) /*根据 count 的值,清除前一个光标*/switch(count)case 2:line(424,315,424,325);break;case 3:line(465,315,465,325);break;case 1:line(505,315,505,325);break;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报