c语言windows时间,修正后的"模拟windows 日期/时间 的C程序

上次传的那个我传完之后才发现是我先前没做好的版本,漏洞百出。

这次上传的的是我修正后的版本。

主要修正了万年历的诸多错误!

还有连按按键屏幕出错的问题。

还有时针的错误。

反正是错误百出!!嘻嘻嘻,不好意思:)

本人在此声明:此程序为本人原创,由于是本人的课设作业,如有北工大的同学,请勿抄袭,发表此程序完全为了交流经验,互相学习、探讨之用。如有问题可以给我发邮件,谢谢。

非常希望大家给我能提出宝贵意见。

#include

#include

#include

#include

#define PI 3.1415926

#define UP 0×4800

#define DOWN 0×5000

#define ESC 0x11b

#define TAB 0xf09

clock();

date(int,int);

int digitsec(double s)/*digital clock second*/

{int i;

for(i=0;i<=59;i++) if(s==i) return i;

}

int digithour(double h)/*digital clock hour*/

{int i;

for(i=0;i<=23;i++) if(h==i) return i;

}

int digitmin(double m)/*digital clock minute*/

{int i;

for(i=0;i<=59;i++) if(m==i) return i;

}

digitclock(int x,int y,int clock)/*整个digital clock*/

{char buffer1[10];

setfillstyle(0,2);

bar(x,y,x+15,328);

if(clock==60) clock=0;

sprintf(buffer1,”%d”,clock);

outtextxy(x,y,buffer1);

}

cursor(int count)    /*画一个光标函数*/

{switch(count)

{case 1:line(156,108,156,118);break;

case 2:line(280,108,280,118);break;

case 3:line(424,315,424,325);break;

case 4:line(465,315,465,325);break;

case 5:line(505,315,505,325);break;

}

}

clear(int count)    /*清除光标函数*/

{switch(count)

{case 2:line(156,108,156,118);break;

case 3:line(280,108,280,118);break;

case 4:line(424,315,424,325);break;

case 5:line(465,315,465,325);break;

case 1:line(505,315,505,325);break;

}

}

int key(int,int);

int dateupchange(int);

int datedownchange(int);

int timeupchange(int);

int timedownchange(int);

double h,m,s;

double x,x1,x2,y,y1,y2;

char buffer[80];

struct time t[1];

struct date da[1];

main()

{int driver, mode=0,i,j;

int year,mon;

char *month[]={“SUN”,”MON”,”TUE”,”WEN”,”THU”,”FRI”,”SAT”};

driver=DETECT;

initgraph(&driver, &mode, “”);

setlinestyle(0,0,3);

setbkcolor(0);

setcolor(7);

line(82,430,558,430);

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);  /*画主体框架*/

setlinestyle(0,0,3);

arc(82,62,90,180,12);

setlinestyle(0,0,3);

arc(558,62,0,90,12);

setlinestyle(0,0,3);

arc(82,418,180,279,12);

setlinestyle(0,0,3);

arc(558,418,270,360,12);   /*画边角*/

setcolor(15);

outtextxy(300,53,”CLOCK”); /*总标题*/

setcolor(7);

rectangle(80,72,332,360);  /*月历的框架*/

rectangle(342,72,560,360); /*时钟的框架*/

for(j=78;j<=84;j+=6)

line(80,j,332,j);

setwritemode(1);

line(190,78,225,78);

setwritemode(0);

setcolor(15);

outtextxy(193,75,”DATE”);

setcolor(7);

rectangle(90,106,160,120);

outtextxy(163,110,”(M)”);  /*打印月份标题*/

rectangle(190,106,290,120);

outtextxy(293,110,”(Y)”);  /*打印年标题*/

for(i=0,j=90;i<7;i++,j+=35)

outtextxy(j,145,month);/*打印周一至周日*/

rectangle(88,140,323,330);

line(88,158,323,158);/*月份的框架*/

for(j=78;j<=84;j+=6)

line(342,j,560,j);

setwritemode(1);

line(431,78,465,78);

setwritemode(0);

setcolor(15);

outtextxy(433,75,”TIME”);/*时钟的标题*/

setcolor(7);

line(392,310,510,310);

line(392,330,510,330);

arc(392,320,90,270,10);

arc(510,320,270,90,10);

for(i=431;i<=470;i+=39)

for(j=317;j<=324;j+=7){

setlinestyle(0,0,3);

circle(i,j,1);

}                  /*DIG99vAL CLOCK*/

setcolor(15);

line(156,108,156,118);     /*在运行起始先画一个光标*/

for(i=0,m=0,h=0;i<=11;i++,h++){                                   /*hour points*/

x=100*sin((h*60+m)/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++){                                           /*minute points*/

x=100*sin(m/30*PI)+451;

y=200-100*cos(m/30*PI);

setlinestyle(0,0,1);

circle(x,y,1);

}

setcolor(9);

outtextxy(83,380,”COLLEGE OF COMPUTER SCIENCE BEIJING UNIVERS99vY OF TECHNOLOGY”);

outtextxy(400,400,”DESIGNED BY flowers”);

outtextxy(500,410,”2003.6″);

setcolor(15);

outtextxy(81,380,”COLLEGE OF COMPUTER SCIENCE BEIJING UNIVERS99vY OF TECHNOLOGY”);

outtextxy(398,400,”DESIGNED BY flowers”);

outtextxy(498,410,”2003.6″);

outtextxy(81,410,”Control:TAB,UP,DOWN,ESC”);

getdate(da);

mon=da[0].da_mon;

year=da[0].da_year;

date(year,mon);

clock();

closegraph();

return 0;

}

clock(){

int k=0,count;

setcolor(15);

gettime(t);

h=t[0].ti_hour;

m=t[0].ti_min;

x=50*sin((h*60+m)/360*PI)+451;

y=200-50*cos((h*60+m)/360*PI);

line(451,200,x,y);

x1=80*sin(m/30*PI)+451;

y1=200-80*cos(m/30*PI);

line(451,200,x1,y1);

digitclock(408,318,digithour(h));

digitclock(446,318,digitmin(m));

setwritemode(1);

for(count=2;k!=ESC;){                            /*second hand*/

setcolor(12);

sound(500);

delay(70);

sound(200);

delay(30);

nosound();

s=t[0].ti_sec;

m=t[0].ti_min;

h=t[0].ti_hour;

x2=98*sin(s/30*PI)+451;

y2=200-98*cos(s/30*PI);

line(451,200,x2,y2);

s=t[0].ti_sec;

while(t[0].ti_sec==s&&t[0].ti_min==m&&t[0].ti_hour==h)

{gettime(t);/*让时间静止一秒钟!!*/

if(bioskey(1)!=0){

k=bioskey(0);

count=key(k,count);

if(count==6) 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);

if(t[0] .ti_min!=m){                           /*minute hand*/

setcolor(15);

x1=80*sin(m/30*PI)+451;

y1=200-80*cos(m/30*PI);

line(451,200,x1,y1);

m=t[0].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((t[0].ti_hour*60+t[0] .ti_min)!=(h*60+m)){                        /*hour hand*/

setcolor(15);

x=50*sin((h*60+m)/360*PI)+451;

y=200-50*cos((h*60+m)/360*PI);

line(451,200,x,y);

h=t[0].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,x,y);

}

}

}

date(int year,int month)                 /*万年历函数*/

{char buffer2[80];

int a,b,c,d,e,judge,l;

int year3;

setcolor(15);

year3=year;

if(year>2000) for(a=1,year–;year>2000;year–)                        /*计算除当年外有几个闰年*/

if((year%4==0&&year%100!=0)||(year%100==0&&y ear%400==0))

a++;

if(year<2000) for(a=0,year++;year<2000;year++)

if((year%4==0&&year%100!=0)||(year%100==0&&y ear%400==0))

a++;

year=year3;

if((year%4==0&&year%100!=0)||(year%100==0&&y ear%400==0)) judge=1;/*判断当年是否为闰年*/

else judge=0;

if(month==1) d=0;

if(month==2) d=31;

if(month==3) d=59+judge;

if(month==4) d=90+judge;

if(month==5) d=120+judge;

if(month==6) d=151+judge;

if(month==7) d=181+judge;

if(month==8) d=212+judge;

if(month==9) d=243+judge;

if(month==10) d=273+judge;

if(month==11) d=304+judge;

if(month==12) d=334+judge;  /*计算月份的天数差*/

/*计算当月一日是星期几*/

if(year==1999) c=(365-d)%7;

if(year<1999) c=((2000-year)*365+a+judge-d)%7;

switch(c)

{case 0: c=7;break;

case 1: c=6;break;

case 2: c=5;break;

case 3: c=4;break;

case 4: c=3;break;

case 5: c=2;break;

case 6: c=1;break;

}

if(year==2000) c=d%7;

if(year>2000) c=((year-2000)*365+a+d)%7;

if(c==0) c=7;

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)/*判断每月的天数*/

e=31;

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

e=30;

if(month==2&&judge==0) e=28;

if(month==2&&judge==1) e=29;

setfillstyle(1,0);

bar(90,160,321,328);/*清空前一个月份*/

for(l=1,y=162;l<=e;l++,c++){                              /*画出月历*/

if(c>7) {

y+=32;

c=1;

}

sprintf(buffer2,”%d”,l);

outtextxy((c-1)*35+92,y,buffer2);

}

setfillstyle(1,0);

bar(140,110,155,118);

sprintf(buffer2,”%d”,month);

outtextxy(140,110,buffer2);

setfillstyle(1,0);

bar(250,110,279,118);

sprintf(buffer2,”%d”,year);

outtextxy(250,110,buffer2);

free(buffer);

}

int key(int key,int count)   /*键盘控制 */

{switch(key)

{case UP:dateupchange(count-1);

date(da[0].da_year,da[0].da_mon);

timeupchange(count-1);

break;

case DOWN:datedownchange(count-1);

date(da[0].da_year,da[0].da_mon);

timedownchange(count-1);

break;

case TAB:setcolor(15);

clear(count);

cursor(count);

count++;

break;

}

return count;

}

int dateupchange(int count)

{if(count==1) {da[0].da_mon++;

if(da[0].da_mon==13)

da[0].da_mon=1;

}

if(count==2) da[0].da_year++;

setdate(da);

}

int datedownchange(int count)

{if(count==1) {da[0].da_mon–;

if(da[0].da_mon==0)

da[0].da_mon=12;

}

if(count==2) da[0].da_year–;

setdate(da);

}

int timeupchange(int count)

{if(count==3) {t[0].ti_hour++;

if(t[0].ti_hour==24) t[0].ti_hour=0;

settime(t);

}

if(count==4) {t[0].ti_min++;

if(t[0].ti_min==59) t[0].ti_min=0;

settime(t);

}

}

int timedownchange(int count)

{if(count==3) {t[0].ti_hour–;

if(t[0].ti_hour==0) t[0].ti_hour=23;

settime(t);

}

if(count==4) {t[0].ti_min–;

if(t[0].ti_min==0) t[0].ti_min=59;

settime(t);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值