UIT2024_Calendar/stu2024/计科2401王需.cpp
2024-12-07 16:23:34 +08:00

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;
}