174 lines
3.3 KiB
C
174 lines
3.3 KiB
C
#include<stdio.h>
|
|
#include<stdlib.h>
|
|
int fangbao()
|
|
{
|
|
int i;
|
|
char x;
|
|
printf("1.查询日期所对应的星期\n2.查询该年份日历并竖向输出\n3.查询该年份日历并以2*6格式输出\n4.查询该年是否为闰年\n5.退出程序\n");
|
|
scanf(" %c",&x);
|
|
if(x=='1')
|
|
x=1;
|
|
else if(x=='2')
|
|
x=2;
|
|
else if(x=='3')
|
|
x=3;
|
|
else if(x=='4')
|
|
x=4;
|
|
else if(x='5')
|
|
x=5;
|
|
else
|
|
x=6;
|
|
return x;
|
|
}
|
|
int runnian(int year,int month)
|
|
{
|
|
int md[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
|
if((year%4==0&&year%100!=0||year%400==0)&&month==2)
|
|
return 29;
|
|
else
|
|
return md[month];
|
|
}
|
|
int date(int year,int month,int day)
|
|
{
|
|
int c;
|
|
if(month<3)
|
|
{
|
|
month+=12;
|
|
year--;
|
|
}
|
|
if(year!=1582)
|
|
{
|
|
int a,b;
|
|
a=year/100;
|
|
b=year%100;
|
|
c=(a/4-2*a+b+b/4+13*(month+1)/5+day-1)%7;
|
|
if(c<0)
|
|
c+=7;
|
|
}
|
|
else if(year==1582&&month<=10&&day<=4)
|
|
|
|
c=(day+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
|
else if(year==1582&&month>=10&&day>=15)
|
|
c=(day+1+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
|
|
return c;
|
|
}
|
|
void yeartb(int year,int month)
|
|
{
|
|
int h,j,i;
|
|
h=runnian(1582,month);
|
|
j=date(1582,month,1);
|
|
for(i=0;i<j;i++)
|
|
printf(" ");
|
|
for(i=1;i<=h;i++)
|
|
{
|
|
if(month==10&&i==5)
|
|
{
|
|
i+=10;
|
|
}
|
|
printf("%3d",i);
|
|
if(month==10&&i>=5&&(i-10+j)%7==0)
|
|
printf("\n");
|
|
else if(month!=10&&(i+j)%7==0)
|
|
printf("\n");
|
|
}
|
|
printf("\n");
|
|
}
|
|
void monthtwo(int year, int month)
|
|
{
|
|
int w,k,e;
|
|
w=runnian(year,month);
|
|
k=date(year,month,1);
|
|
for(e=0;e<k;e++)
|
|
printf(" ");
|
|
for(e=1;e<=w;e++)
|
|
{
|
|
printf("%3d",e);
|
|
if((e+k)%7==0)
|
|
printf("\n");
|
|
}
|
|
printf("\n");
|
|
}
|
|
int main(void)
|
|
{
|
|
for(;;)
|
|
{
|
|
int year,month,day,d,e;
|
|
d=fangbao();
|
|
if(d==6)
|
|
{
|
|
printf("输入错误请从新输入\n\n");
|
|
}
|
|
if(d==5)
|
|
break;
|
|
if(d==1)
|
|
{
|
|
int year,month,day,m;
|
|
printf("请输入日期:\n");
|
|
scanf("%d%d%d",&year,&month,&day);
|
|
if(year<0||month>12||(month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>31||(month==4||month==6||month==9||month==11)&&day>30)
|
|
printf("输入错误\n");
|
|
if((year%4==0&&year%100!=0||year%400==0)&&month==2&&day>29||(year%4!=0&&year%100==0||year%400!=0)&&day>28)
|
|
printf("输入错误\n");
|
|
if(year==1582)
|
|
{
|
|
if(month==10&&day>4&&day<15)
|
|
printf("输入错误\n\n");
|
|
}
|
|
m=date(year,month,day);
|
|
if(m==0)
|
|
printf("该日期为星期日\n");
|
|
else
|
|
printf("该日期为星期%d\n",m);
|
|
}
|
|
if(d==2)
|
|
{
|
|
int f,g;
|
|
printf("请输入年份:\n");
|
|
scanf("%d",&year);
|
|
if(year<0)
|
|
printf("输入错误\n");
|
|
printf("%4d年的日历为:\n",year);
|
|
for(month=1;month<=12;month++)
|
|
{
|
|
printf("%d月\n",month);
|
|
printf(" 日 一 二 三 四 五 六\n");
|
|
if(year!=1582)
|
|
monthtwo(year,month);
|
|
else
|
|
yeartb(year,month);
|
|
if(month!=12)
|
|
printf("\n");
|
|
}
|
|
}
|
|
if(d==3)
|
|
{
|
|
printf("请输入年份:\n");
|
|
scanf("%d",&year);
|
|
if(year<0)
|
|
printf("输入错误\n");
|
|
printf("%4d年的日历为:\n",year);
|
|
for(month=1;month<=12;month+=2)
|
|
{
|
|
printf("%d月",month);
|
|
printf("%d月\n",month+1);
|
|
printf(" 日 一 二 三 四 五 六");
|
|
printf(" 日 一 二 三 四 五 六\n");
|
|
monthtwo(year,month);
|
|
}
|
|
}
|
|
if(d==4)
|
|
{
|
|
int year;
|
|
printf("请输入年份:\n");
|
|
scanf("%d",&year);
|
|
if(year<0)
|
|
printf("输入错误\n");
|
|
if(year%4==0&&year%100!=0||year%400==0)
|
|
printf("该年份为闰年\n");
|
|
else
|
|
printf("该年份不是闰年\n");
|
|
}
|
|
}
|
|
return 0;
|
|
}
|