這 個萬年曆有能用上下左右鍵來控制幾號的改變和年份的改變!希望網友測出bug來!
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
//判斷是否爲閏年
int Leap(int y)
{
int s=0;
if((y%4==0)&&(y%100!=0)||(y%400==0))
{
s=1;
}
return s;
}
int yue(int a,int b)
{
int d=0;
switch(b)
{
case 1: d=31 ;break;
case 2: d=Leap(a)==1?29:28;break;
case 3: d=31;break;
case 4: d=30;break;
case 5: d=31;break;
case 6: d=30;break;
case 7: d=31;break;
case 8: d=31;break;
case 9: d=30;break;
case 10: d=31;break;
case 11: d=30;break;
case 12: d=31;break;
default :printf("輸入的月份有誤!\n");
}
return d;
}
void face(int a,int b,int s,int h)
//a是一個月前偏移量(空格數),b是幾月,s=1表示是閏年,s=0表示是平年
//h是幾號
{
int c=a;//c用來保存空格數
int d=0;//用來表示是幾月的
printf(" Su Mo Tu We Th Fr Sa\n");
while(a--)
{
printf(" ");
}
switch(b)
{
case 1: d=31 ;break;
case 2: d=s==1?29:28;break;
case 3: d=31;break;
case 4: d=30;break;
case 5: d=31;break;
case 6: d=30;break;
case 7: d=31;break;
case 8: d=31;break;
case 9: d=30;break;
case 10: d=31;break;
case 11: d=30;break;
case 12: d=31;break;
default :printf("輸入的月份有誤!\n");
}
if(h<=d)
{
for(int i=1;i<=d;i++)
{
if(i==h)//輸入的幾號
{
printf("[%2d]",i);
}
else
{
printf(" %2d ",i);
}
if((c+i)%7==0)
{
printf("\n");
}
}
}
else
{
printf("輸入的天數錯誤!\n");
}
}
int xiqi(int a,int b)
//計算輸入的年月的第一天,例如:2013年11月1號是星期幾,也就是萬年曆上的偏移量
{
int p=0;//偏移量
int r=0,s=0;//分別表示閏年的個數和平年的個數
//int d=0;//存放月的月的天數
for(int i=1910;i<a;i++)
//這裏是把1910年1月1號作爲一個標準,它是星期六
{
if(Leap(i)==1)
{
r++;
}
else
{
s++;
}
}
// p=(366*r+365*s+6)%7;
//這裏加6是1990,1,1爲星期六
switch(b)
{
case 1: p=(366*r+365*s+6)%7;break;
case 2: p=(366*r+365*s+6+31)%7;break;
case 3: p=(366*r+365*s+6+(Leap(a)==1?29:28))%7;break;
case 4: p=(366*r+365*s+6+31)%7;break;
case 5: p=(366*r+365*s+6+30)%7;break;
case 6: p=(366*r+365*s+6+31)%7;break;
case 7: p=(366*r+365*s+6+30)%7;break;
case 8: p=(366*r+365*s+6+31)%7;break;
case 9: p=(366*r+365*s+6+31)%7;break;
case 10: p=(366*r+365*s+6+30)%7;break;
case 11: p=(366*r+365*s+6+31)%7;break;
case 12: p=(366*r+365*s+6+30)%7;break;
}
return p;
}
int main()
{
int a=0,b=0,c=0;
char s='y';
char o;
while(s=='y'||s=='Y')
{
printf("請輸入年月日,格式爲:(1992 11 29):\n");
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
printf("%d-%d-%d\n",a,b,c);
face(xiqi(a,b),b,Leap(a),c);
while(o!='a')
{
printf("\n你可以按上下左右鍵來控制萬年曆哦!\n");
getch();
o=getch();
if(o==0x4b) //左鍵
{
if(c==1&&b==1)
{
printf("%d-%d-%d\n",a-1,12,yue(a,b));
a--;
b=12;
face(xiqi(a,b),b,Leap(a), yue(a,b));
c=yue(a,b);
}
else
{
if(c==1)
{
printf("%d-%d-%d\n",a,b-1,yue(a,b));
b--;
face(xiqi(a,b),b,Leap(a), yue(a,b));
c=yue(a,b);
}
else
{
printf("%d-%d-%d\n",a,b,c-1);
face(xiqi(a,b),b,Leap(a),--c);
}
}
}
else if(o==0x4d) //右鍵
{
if(c==yue(a,b)&&b==12)
{
printf("%d-%d-%d\n",a+1,1,1);
a++;
b=1;
face(xiqi(a,b),b,Leap(a),1);
c=1;
}
else
{
if(c==yue(a,b))
{
printf("%d-%d-%d\n",a,b+1,1);
b++;
face(xiqi(a,b),b,Leap(a),1);
c=1;
}
else
{
printf("%d-%d-%d\n",a,b,c+1);
face(xiqi(a,b),b,Leap(a),++c);
}
}
}
else if(o==0x48)
{
a--;
printf("%d-%d-%d\n",a,b,c);
face(xiqi(a,b),b,Leap(a),c);
}
else if(o==0x50)
{
a++;
printf("%d-%d-%d\n",a,b,c);
face(xiqi(a,b),b,Leap(a),c);
}
else if(o=='a')
{
break;
}
}
printf("\n還想繼續查詢嗎?(是(y),否(n)):\n");
s=getch();
}
system("Pause");
return 0;
}