273 lines
9.4 KiB
C++
273 lines
9.4 KiB
C++
#include<stdio.h>
|
|
int main(void)
|
|
{
|
|
int x;
|
|
int j;
|
|
printf("1.查询某年某月是星期几,并判断是否为闰年\n");
|
|
printf("2.打印单列日历\n");
|
|
printf("3.打印双列日历\n");
|
|
printf("4.退出\n");
|
|
scanf("%d",&x);
|
|
int year;
|
|
int month;
|
|
int day;
|
|
int week;
|
|
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
|
int c;
|
|
int y;
|
|
int k=1;
|
|
int a=2;
|
|
int dayss=1;
|
|
switch(x)
|
|
{
|
|
case 1:
|
|
scanf("%d-%d-%d",&year,&month,&day);
|
|
if(((year%4==0)&&(year%100!=0))||(year%400==0))
|
|
{
|
|
days[2]=29;
|
|
printf("闰年\n");
|
|
} else printf("平年\n");
|
|
if((month==1&&day<=31)||(days[2]==29&&month==2&&day<=29)||(days[2]==28&&month==2&&day<=28)||(month==3&&day<=31)||(month==4&&day<=30)||
|
|
(month==5&&day<=31)||(month==6&&day<=30)||(month==7&&day<=31)||(month==8&&day<=31)||(month==9&&day<=30)||(year!=1582&&month==10&&day<=31)||(month==11&&day<=30)||
|
|
(month==12&&day<=31)||(year==1582&&month==10&&day!=5&&day!=6&&day!=7&&day!=8&&day!=9&&day!=10&&day!=11&&day!=12&&day!=13&&day!=14))
|
|
{
|
|
if (month == 1 || month == 2)
|
|
year--, month += 12;
|
|
c = year / 100;
|
|
y = year - c * 100;
|
|
if(year>1582)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
|
else if(year==1582&&month>10)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
|
else if((year==1582&&month==10)&&day>4)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
|
else
|
|
week=(day+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
|
if(month==13||month==14)
|
|
year++;
|
|
while(week < 0)
|
|
week += 7;
|
|
week %= 7;
|
|
switch (week)
|
|
{
|
|
case 1:printf("星期一\n"); break;
|
|
case 2:printf("星期二\n"); break;
|
|
case 3:printf("星期三\n"); break;
|
|
case 4:printf("星期四\n"); break;
|
|
case 5:printf("星期五\n"); break;
|
|
case 6:printf("星期六\n"); break;
|
|
case 0:printf("星期天\n"); break;
|
|
}break;
|
|
}
|
|
else printf("输入错误");
|
|
case 2:
|
|
scanf("%d-%d-%d",&year,&month,&day);
|
|
if((month==1&&day<=31)||(days[2]==29&&month==2&&day<=29)||(days[2]==28&&month==2&&day<=28)||(month==3&&day<=31)||(month==4&&day<=30)||
|
|
(month==5&&day<=31)||(month==6&&day<=30)||(month==7&&day<=31)||(month==8&&day<=31)||(month==9&&day<=30)||(year!=1582&&month==10&&day<=31)||(month==11&&day<=30)||
|
|
(month==12&&day<=31)||(year==1582&&month==10&&day!=5&&day!=6&&day!=7&&day!=8&&day!=9&&day!=10&&day!=11&&day!=12&&day!=13&&day!=14))
|
|
{
|
|
for( j=1;j<=12;j++)
|
|
{
|
|
month=j;
|
|
printf("\n");
|
|
printf("%d 月\n",month);
|
|
printf("周日 周一 周二 周三 周四 周五 周六\n");
|
|
if (month == 1 || month == 2)
|
|
year--, month += 12;
|
|
c = year / 100;
|
|
y = year - c * 100;
|
|
if(year>1582)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
|
else if(year==1582&&month>10)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
|
else if((year==1582&&month==10)&&day>4)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
|
else
|
|
week=(1+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
|
if(month==13||month==14)
|
|
year++;
|
|
while(week < 0)
|
|
week += 7;
|
|
week %= 7;
|
|
if(year==1582&&month==10)
|
|
week=1;
|
|
switch (week)
|
|
{
|
|
case 1:printf(" "); break;
|
|
case 2:printf(" "); break;
|
|
case 3:printf(" "); break;
|
|
case 4:printf(" "); break;
|
|
case 5:printf(" "); break;
|
|
case 6:printf(" "); break;
|
|
}
|
|
for(day=1;day<=days[j];day++)
|
|
{
|
|
month=j;
|
|
while((year==1582&&month==10)&&(day==5||day==6||day==7||day==8||day==9||day==10||day==11||day==12||day==13||day==14))
|
|
day++;
|
|
if (month == 1 || month == 2)
|
|
year--, month += 12;
|
|
c = year / 100;
|
|
y = year - c * 100;
|
|
if(year>1582)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
|
else if(year==1582&&month>10)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
|
else if((year==1582&&month==10)&&day>4)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
|
else
|
|
week=(day+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
|
if(month==13||month==14)
|
|
year++;
|
|
while(week < 0)
|
|
week += 7;
|
|
week %= 7;
|
|
if(week==6)
|
|
printf("%2d\n",day);
|
|
else
|
|
printf("%2d ",day);
|
|
}
|
|
}break;
|
|
}else printf("输入错误");
|
|
case 3:
|
|
scanf("%d-%d-%d",&year,&month,&day);
|
|
if((month==1&&day<=31)||(days[2]==29&&month==2&&day<=29)||(days[2]==28&&month==2&&day<=28)||(month==3&&day<=31)||(month==4&&day<=30)||
|
|
(month==5&&day<=31)||(month==6&&day<=30)||(month==7&&day<=31)||(month==8&&day<=31)||(month==9&&day<=30)||(year!=1582&&month==10&&day<=31)||(month==11&&day<=30)||
|
|
(month==12&&day<=31)||(year==1582&&month==10&&day!=5&&day!=6&&day!=7&&day!=8&&day!=9&&day!=10&&day!=11&&day!=12&&day!=13&&day!=14))
|
|
{
|
|
for( j=1;j<=12;j+=2)
|
|
{day=1;
|
|
month=j;
|
|
printf("\n");
|
|
printf("%d 月 %d月\n",month,month+1);
|
|
printf("周日 周一 周二 周三 周四 周五 周六 周日 周一 周二 周三 周四 周五 周六\n");
|
|
if (month == 1 || month == 2)
|
|
year--, month += 12;
|
|
c = year / 100;
|
|
y = year - c * 100;
|
|
if(year>1582)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
|
else if(year==1582&&month>10)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
|
else if((year==1582&&month==10)&&day>4)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
|
else
|
|
week=(1+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
|
if(month==13||month==14)
|
|
year++;
|
|
while(week < 0)
|
|
week += 7;
|
|
week %= 7;
|
|
if(year==1582&&month==10)
|
|
week=1;
|
|
switch (week)
|
|
{
|
|
case 1:printf(" "); break;
|
|
case 2:printf(" "); break;
|
|
case 3:printf(" "); break;
|
|
case 4:printf(" "); break;
|
|
case 5:printf(" "); break;
|
|
case 6:printf(" "); break;
|
|
}
|
|
|
|
|
|
for(;day<=days[k];day++)
|
|
{
|
|
month=k;
|
|
while((year==1582&&month==10)&&(day==5||day==6||day==7||day==8||day==9||day==10||day==11||day==12||day==13||day==14))
|
|
day++;
|
|
if (month == 1 || month == 2)
|
|
year--, month += 12;
|
|
c = year / 100;
|
|
y = year - c * 100;
|
|
if(year>1582)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
|
else if(year==1582&&month>10)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
|
else if((year==1582&&month==10)&&day>4)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1;
|
|
else
|
|
week=(day+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
|
if(month==13||month==14)
|
|
year++;
|
|
while(week < 0)
|
|
week += 7;
|
|
week %= 7;
|
|
if(week!=6)
|
|
printf("%2d ",day);
|
|
else
|
|
{
|
|
printf("%2d ",day);
|
|
for( ;a<=12;a+=2)
|
|
{
|
|
month=a;
|
|
if (month == 1 || month == 2)
|
|
year--, month += 12;
|
|
c = year / 100;
|
|
y = year - c * 100;
|
|
if(year>1582)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
|
else if(year==1582&&month>10)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
|
else if((year==1582&&month==10)&&day>4)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1;
|
|
else
|
|
week=(1+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
|
if(month==13||month==14)
|
|
year++;
|
|
while(week < 0)
|
|
week += 7;
|
|
week %= 7;
|
|
if(year==1582&&month==10)
|
|
week=1;
|
|
switch (week)
|
|
{
|
|
case 1:printf(" "); break;
|
|
case 2:printf(" "); break;
|
|
case 3:printf(" "); break;
|
|
case 4:printf(" "); break;
|
|
case 5:printf(" "); break;
|
|
case 6:printf(" "); break;
|
|
}}
|
|
for(;dayss<=days[a];dayss++)
|
|
{
|
|
month=a;
|
|
while((year==1582&&month==10)&&(dayss==5||dayss==6||dayss==7||dayss==8||dayss==9||dayss==10||dayss==11||dayss==12||dayss==13||dayss==14))
|
|
dayss++;
|
|
if (month == 1 || month == 2)
|
|
year--, month += 12;
|
|
c = year / 100;
|
|
y = year - c * 100;
|
|
if(year>1582)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + dayss - 1;
|
|
else if(year==1582&&month>10)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + dayss - 1;
|
|
else if((year==1582&&month==10)&&day>4)
|
|
week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + dayss - 1;
|
|
else
|
|
week=(dayss+1+2*month+3*(month+1)/5+year+year/4+5)%7;
|
|
|
|
if(month==13||month==14)
|
|
year++;
|
|
while(week < 0)
|
|
week += 7;
|
|
week %= 7;
|
|
if(week==6)
|
|
{printf("%2d\n",dayss);continue;}
|
|
else
|
|
printf("%2d ",dayss);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 4:
|
|
break;
|
|
default: printf("输入错误");
|
|
break;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|