谁能帮我编一个C语言时钟啊

/*这是我做了一半的万年历的界面,正好有你需要的显示时钟的功能,你把它分离出来吧*/

#include<stdio.h>

#include<windows.h>

#include<time.h>

int week; //用于存放星期几的变量

/****定义结构体存时间数据***/

int year,month,day,hour,min,sec; //当前时间

int l_year,l_month,l_day,l_hour,l_min,l_sec; //前一次的时间

//定义星期几和格子坐标的数组

int curx[5][7]={

{2,6,10,14,18,22,26},

{2,6,10,14,18,22,26},

{2,6,10,14,18,22,26},

{2,6,10,14,18,22,26},

{2,6,10,14,18,22,26}

};

void setcur(int x,int y); //set cursor

void setcur(int x,int y)

{

HANDLE hOut = ::GetStdHandle(STD_OUTPUT_HANDLE); // get the handle

COORD p;

p.X = x;

p.Y = y;

SetConsoleCursorPosition(hOut,p);

}

/*把某年某天转换到几天*/

int y_2_d(int year,int month,int day);

int y_2_d(int year,int month,int day)

{

const short MonthDay[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

int JD,i;

JD = day;

for(i=1;i<month;i++)

JD+=MonthDay[i];

if((year%4==0)&&(year%100!=0)||(year%400==0)&&month>2)

JD++;

return JD;

}

/****把天数转换成星期****/

int d_2_w(int year,int month,int day);

int d_2_w(int year,int month,int day)

{

int cha,d,w;

cha = ((year-1)+(year-1)/4-(year-1)/100+(year-1)/400)%7;

d = y_2_d(year,month,day);

w = (d+cha) % 7;

return w;

}

void drawmap();

void drawmap()

{

system("mode con cols=44 lines=16");

system("title _______________万年历________________");

system("color 3a");

int x,y;

/* 万年历地图 1:┌ 2:┐ 3:└ 4:┘ 5:┼ 6:─ 7:│ 8:┬ 9:├ 10:┤

11:┴

*/

int map[15][44]={

{1,0,6,0,6,0,6,0,6,0,6,0,6,0,6,0,6,0,6,0,6,0,6,0,6,0,6,0,8,0,6,0,6,0,6,0,6,0,6,0,6,0,2,0},

{7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0},

{9,0,6,0,8,0,6,0,8,0,6,0,8,0,6,0,8,0,6,0,8,0,6,0,8,0,6,0,5,0,6,0,6,0,6,0,6,0,6,0,6,0,10,0},

{7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0},

{9,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0},

{7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0},

{9,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0},

{7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0},

{9,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0},

{7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0},

{9,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0},

{7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0},

{9,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,5,0,6,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0},

{7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0},

{3,0,6,0,11,0,6,0,11,0,6,0,11,0,6,0,11,0,6,0,11,0,6,0,11,0,6,0,11,0,6,0,6,0,6,0,6,0,6,0,6,0,4,0}

};

for(y=0;y<15;y++)

for(x=0;x<44;x+=2)

{

setcur(x,y);

/* 1:┌ 2:┐ 3:└ 4:┘ 5:┼ 6:─ 7:│ 8:┬ 9:├ 10:┤11:┴ */

switch(map[y][x])

{

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;

case 8: printf("┬");break;

case 9: printf("├");break;

case 10: printf("┤");break;

case 11: printf("┴");break;

default: printf(" ");

}

}

//显示星期

for(int w=2;w<44;w+=4)

{

setcur(w,3);

switch(w)

{

case 2: printf("日");break;

case 6: printf("一");break;

case 10: printf("二");break;

case 14: printf("三");break;

case 18: printf("四");break;

case 22: printf("五");break;

case 26: printf("六");break;

case 30: printf("〖详细信息〗");break;

default:break;

w+=4;

}

}

//画时间间隔符

setcur(35,1);

printf(":");

setcur(38,1);

printf(":");

//画日期间隔符

setcur(13,1);

printf("年");

setcur(17,1);

printf("月");

setcur(21,1);

printf("日");

}

/*******更新年-月-日*****/

void setymd(int year,int month,int day);

void setymd(int year,int month,int day)

{

if(l_year!=year)

{

setcur(9,1);

printf("%d",year);

}

if(l_month!=month)

{

setcur(15,1);

printf(month<=9?"0%d":"%d",month);

}

if(l_day!=day)

{

setcur(19,1);

printf(day<=9?"0%d":"%d",day);

}

l_year = year;

l_month = month;

l_day = day;

}

/**更新时间***/

void settime(int hour,int min,int sec);

void settime(int hour,int min,int sec)

{

if(l_sec!=sec) //判断系统时间是否改变,如果改变,就更新

{

setcur(39,1);

printf(sec<=9?"0%d":"%d",sec); //判断秒数是否小于10 如果小于 就在前面加0

}

if(l_min!=min)

{

setcur(36,1);

printf(min<=9?"0%d":"%d",min);

}

if(l_hour!=hour)

{

setcur(33,1);

printf(hour<=9?"0%d":"%d",hour);

}

l_hour=hour; //把当前的时间保存在全局变量中,给下一次和新的时间对比

l_min=min;

l_sec=sec;

}

/************写入日期数据**************/

void writedata(int week,int maxday);

void writedata(int week,int maxday)

{

int x,y=6,i,j,n=1;

switch(week)

{

case 0:x=2;break;

case 1:x=6;break;

case 2:x=10;break;

case 3:x=14;break;

case 4:x=18;break;

case 5:x=22;break;

case 6:x=26;break;

default:break;

}

for(j=0;j<5;j++)

for(i=x;i<7;i++)

{

setcur(curx[j][i],y);

printf(n>9?"%d":"0%d",n);

n++;

y+=2;

}

}

/********更新万年历日期数据********/

void setdate(int year,int month,int week);

void setdate(int year,int month,int week)

{

if((year%4==0)&&(year%100!=0)||(year%400==0&&month==2))

{

writedata(week,28);

}

else if(month==4||month==6||month==9||month==11)

{

writedata(week,30);

}

else if(month==2)

{

writedata(week,29);

}

else

{

writedata(week,31);

}

}

void main() //主函数

{

/*******以下部分隐藏光标,并且画出背景地图*******/

HANDLE hOut = ::GetStdHandle(STD_OUTPUT_HANDLE); //get the handle

CONSOLE_CURSOR_INFO cci;

::GetConsoleCursorInfo(hOut, &cci); //get the cursor infomation

cci.bVisible = false; //可见属性设置为假

::SetConsoleCursorInfo(hOut, &cci); //set the cursor infomation

drawmap();

/*********以下部分获取系统时间********

struct tm -- 时间结构,time.h 定义如下:

int tm_sec;

int tm_min;

int tm_hour;

int tm_mday;

int tm_mon;

int tm_year;

int tm_wday;

int tm_yday;

int tm_isdst;

*/

time_t nowtime;

struct tm *timeinfo;

while(1)

{

time(&nowtime);

timeinfo = localtime(&nowtime);

year = timeinfo->tm_year + 1900;

month =timeinfo->tm_mon + 1;

day = timeinfo->tm_mday;

hour = timeinfo->tm_hour;

min = timeinfo->tm_min;

sec = timeinfo->tm_sec;

setymd(year,month,day);

settime(hour,min,sec);

week = d_2_w(year,month,1);

setdate(year,month,week);

}

Sleep(100000);

}