C语言万年历

来源:互联网 发布:java图片上传原理 编辑:程序博客网 时间:2024/04/28 14:28

#include <stdio.h>
#include <string.h>

//返回0表示成功
int show(int year,int month)
{
int N,m,d,y,c,Wd;
int i,maxday;

if(month==13)
{
   year++;
   month=1;
}else if(month==0){
   year--;
   month=12;
}

if(month>13||month<0)
{
   printf("HAVE WRONG!");
   return -1;
}


m=month;
printf("/n============%d,%2d============/n",year,month);

switch(m)
{
case 1:maxday=31;break;
case 2:
   if( (year%4==0&&year%100!=0) || (year%400==0) )
    maxday=29;
   else
    maxday=28;
   break;
case 3:maxday=31;break;
case 4:maxday=30;break;
case 5:maxday=31;break;
case 6:maxday=30;break;
case 7:maxday=31;break;
case 8:maxday=31;break;
case 9:maxday=30;break;
case 10:maxday=31;break;
case 11:maxday=30;break;
case 12:maxday=31;break;  
}

if(0<m&&m<=2)
{  
   N=year-1;
   m=m+12-2;
}
else
{
   N=year;
   m=m-2;
}
c=N/100;
y=N%100;
//这是一个著名的是蔡勒(Zeller)公式。具体原理请网上搜索一下。
Wd=((1+(13*m-1)/5+y+y/4+c/4-2*c)%7+7)%7;

printf(" SUN MOU TUE WED TUR FRI SAT/n");
for(i=0;i<Wd;i++)
   printf("%4c",' ');
for(d=1;d<=maxday;d++)
{
   printf("%4d",d);
   Wd=(Wd+1)%7;
   if(Wd==0)
    printf("/n");
}
printf("/n");
return 0;
}

void main( )
{
int year,month;
char x[20];
int flag=0;

printf("please input   year: ");
scanf("%d",&year);
printf("please input month: ");
scanf("%d",&month);

flag=show(year,month);
while(flag==0)
{
   printf("/n");
   printf("功能列表:下月N,上月P,退出Q /n");
   scanf("%s",x);
   if(x[0]=='N' || x[0]=='n')
   { flag=show(year,++month); }
   else if(x[0]=='P' || x[0]=='p')
   { flag=show(year,--month); }
   else
   {
    printf("感谢使用!/n");
    flag=-1;
   }

}

 


}
 

原创粉丝点击