怎么用C语言编程数字时钟

怎么用C语言编程数字时钟,第1张

1、以下例程实现时钟的实时显示基本要求: 1) 自行设计界面,模拟表盘式时钟。要求界面美观,清晰。2)数字同步显示时间信息。

2、例程:

#include<graphics.h> 

#include<math.h> 

#include<dos.h> 

#define PI 3.1415926 

//屏幕中心的坐标(640X480模式下)

#define mid_x 320 

#define mid_y 240 

int main() 

{ int graphdriver=DETECT,graphmode 

int end_x,end_y 

struct time curtime 

float th_hour,th_min,th_sec 

initgraph(&graphdriver,&graphmode,"C:\\TC2") //初始化VGA屏幕模式

setbkcolor(BLACK) //使用黑色的背景色

while(!kbhit(0)) //若有键盘输入,则跳出,即是结束程序

{ setcolor(GREEN) //把画笔设为绿色

circle(mid_x,mid_y,180) //钟的外圆

circle(mid_x,mid_y,150) //钟的内圆

circle(mid_x,mid_y,1) //画出钟的圆心

gettime(&curtime) //取得系统当前时间

th_sec=(float)curtime.ti_sec*0.1047197551 //把秒针的角度化为弧度,为以后绘制时方便,下同

th_min=(float)curtime.ti_min*0.1047197551+th_sec/60.0 //分针的弧度

th_hour=(float)curtime.ti_hour*0.5235987755+th_min/12.0 //时度的弧度,注意整时是12等分的,所时乘的是3.14/180*5

//计算出时针的尾的坐标(时针长70)

end_x=mid_x+70*sin(th_hour) 

end_y=mid_y-70*cos(th_hour) 

setcolor(RED) 

line(mid_x,mid_y,end_x,end_y) //用红色线画出时针

//计算出分针坐标(分针长110)

end_x=mid_x+110*sin(th_min) 

end_y=mid_y-110*cos(th_min) 

setcolor(RED) 

line(mid_x,mid_y,end_x,end_y) //用红色画出分针

end_x=mid_x+140*sin(th_sec) 

end_y=mid_y-140*cos(th_sec) 

setcolor(RED) 

line(mid_x,mid_y,end_x,end_y) //同上,画出秒针,长为140

//画出钟盘上的刻度,刻度长20

line(140,240,160,240) //9点对应的大刻度

line(320,60,320,80) //12点对应的大刻度

line(500,240,480,240) //3点的刻度

line(320,420,320,400) //6点的刻度

line(410,395.7,400,378.4) //5点

line(475.7,330,458.4,320) //4点

line(475.7,150,458.4,160) //2点

line(410,84.3,400,101.6) //1点

line(230,84.3,240,101.6) //11点

line(164.3,150,181.6,160) //10点

line(164.3,330,181.6,320) //8点

line(230,395.7,240,378.4) //7点

sleep(BLUE) //这里应该是打错,停止一秒,应为sleep(1000)

cleardevice() //清除屏幕上的显示

closegraph() //关闭VGA屏幕,即返回文本方式

return 0 

}

1、用sleep延时刷新并获取系统时间来显示。

2、例程:

#include<graphics.h> 

#include<math.h> 

#include<dos.h> 

#define PI 3.1415926 

//屏幕中心的坐标(640X480模式下)

#define mid_x 320 

#define mid_y 240 

int main() 

{ int graphdriver=DETECT,graphmode 

int end_x,end_y 

struct time curtime 

float th_hour,th_min,th_sec 

initgraph(&graphdriver,&graphmode,"C:\\TC2") //初始化VGA屏幕模式

setbkcolor(BLACK) //使用黑色的背景色

while(!kbhit(0)) //若有键盘输入,则跳出,即是结束程序

{ setcolor(GREEN) //把画笔设为绿色

circle(mid_x,mid_y,180) //钟的外圆

circle(mid_x,mid_y,150) //钟的内圆

circle(mid_x,mid_y,1) //画出钟的圆心

gettime(&curtime) //取得系统当前时间

th_sec=(float)curtime.ti_sec*0.1047197551 //把秒针的角度化为弧度,为以后绘制时方便,下同

th_min=(float)curtime.ti_min*0.1047197551+th_sec/60.0 //分针的弧度

th_hour=(float)curtime.ti_hour*0.5235987755+th_min/12.0 //时度的弧度,注意整时是12等分的,所时乘的是3.14/180*5

//计算出时针的尾的坐标(时针长70)

end_x=mid_x+70*sin(th_hour) 

end_y=mid_y-70*cos(th_hour) 

setcolor(RED) 

line(mid_x,mid_y,end_x,end_y) //用红色线画出时针

//计算出分针坐标(分针长110)

end_x=mid_x+110*sin(th_min) 

end_y=mid_y-110*cos(th_min) 

setcolor(RED) 

line(mid_x,mid_y,end_x,end_y) //用红色画出分针

end_x=mid_x+140*sin(th_sec) 

end_y=mid_y-140*cos(th_sec) 

setcolor(RED) 

line(mid_x,mid_y,end_x,end_y) //同上,画出秒针,长为140

//画出钟盘上的刻度,刻度长20

line(140,240,160,240) //9点对应的大刻度

line(320,60,320,80) //12点对应的大刻度

line(500,240,480,240) //3点的刻度

line(320,420,320,400) //6点的刻度

line(410,395.7,400,378.4) //5点

line(475.7,330,458.4,320) //4点

line(475.7,150,458.4,160) //2点

line(410,84.3,400,101.6) //1点

line(230,84.3,240,101.6) //11点

line(164.3,150,181.6,160) //10点

line(164.3,330,181.6,320) //8点

line(230,395.7,240,378.4) //7点

sleep(BLUE) //这里应该是打错,停止一秒,应为sleep(1000)

cleardevice() //清除屏幕上的显示

closegraph() //关闭VGA屏幕,即返回文本方式

return 0 

}

“响一次”需要牵涉到图形编程中的音乐播放问题,需要自己下载图形编程相关库文件,具体实现请自己在TODO里添加播放音乐的代码

数字时钟的实现很简单,运用time.h相关函数即可

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

time_t oldt=-1

struct tm *p

bool Printdate()

{

time_t t=time(NULL)

if(t!=oldt)

{

oldt=t

p=localtime(&t)

system("cls")

printf("%d/%d/%d 周",1900+p->tm_year,1+p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec) 

switch(p->tm_wday)

{

       case 1:printf("一")break

       case 2:printf("二")break

       case 3:printf("三")break

       case 4:printf("四")break

       case 5:printf("五")break

       case 6:printf("六")break

       case 7:printf("日")break

 }  

printf(" %d:%02d:%02d     ", p->tm_hour, p->tm_min,  p->tm_sec)

return 1

}

return 0

}

main()

{

while(1)

    if(Printdate())

    {

    /*************TODO*************/

    /**For example: printf("\a")**/

    }

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10974036.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存