UIT2024_Calendar/stu2024/软件2402唐凯杰.cpp
2024-12-07 16:23:34 +08:00

343 lines
5.9 KiB
C++

#include<stdio.h>
int main(){
int flag=0;
while(flag==0){
printf("menu \n");
printf("1:查询某年某月某日的日期是周几\n");
printf("2:该年是否为闰年\n");
printf("3:输出这一年的日历\n");
printf("4:退出\n");
char x[1];
scanf("%s",&x[1]);
if(x[1]!=49&&x[1]!=50&&x[1]!=51&&x[1]!=52)
printf("输入有误,请重新输入\n");
if(x[1]==49){
int w,d,m,y;
printf("请输入年 月 日\n");
scanf("%d%d%d",&y,&m,&d);
if(y<0||m<0||d<0||m>12||((m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&d>31)||((m==2||m==4||m==9||m==11)&&d>30)||((y%4==0&&y%100!=0||y%400==0)&&m==2&&d>29)||(y==1582&&m==10&&(d==5||d==6||d==7||d==8||d==9||d==10||d==11||d==12||d==13||d==14))){
printf("日期不存在,请重新输入\n");
}
else{
if(y<=1582&&m<=10&&d<=4){
if(m==1||m==2){
y--;
m+=12;
}
w = (d+1+2*m+3*(m+1)/5+y+y/4+5) % 7;
}
else{
if(m==1||m==2){
y--;
m+=12;
}
w = (d + 1+ 2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;}
switch(w){
case 0:printf("星期日\n");break;
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;
}
}
}
if(x[1]==50){
int n;
printf("请输入年份\n");
scanf("%d",&n);
if(n%4==0&&n%100!=0||n%400==0){
printf("%d年是闰年\n",n);
}
else{
printf("%d年不是闰年\n",n);
}
}
if(x[1]==51){
int y;
printf("请输入年份\n");
scanf("%d",&y);
if(y<=0){
printf("输入有误,请重新输入\n");
}
else{
printf("1:单列输出\n2:双列输出\n");
int n,m,w,j,d,s,m1,m2,w1,w2,s1,s2,d1,d2,j1,j2;
scanf("%d",&n);
if(n==1){
printf("%d年\n",y);
for(m=1;m<=12;m++){
printf("%d月\n",m);
if(y<=1582&&m<=10){
if(m==1||m==2){
y--;
m+=12;
}
w = (1+1+2*m+3*(m+1)/5+y+y/4+5) % 7;
}
else{
if(m==1||m==2){
y--;
m+=12;
}
w = (1 + 1+ 2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;}
if(m==13||m==14){
y++;
m-=12;
}
int month_days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(y%4==0&&y%100!=0||y%400==0){
month_days[2]=29;
}
s=month_days[m];
printf(" sum mon tue wed thu fri sat\n");
for(j=0;j<w;j++){
printf(" ");
}
for(d=1;d<=s;d++){
if(y==1582&&m==10&&d>=5&&d<=14)
continue;
printf("%4d",d);
if(y==1582&&m==10){
if(d==16||d==23||d==30){
printf("\n");
}
}
else if((d+w)%7==0){
printf("\n");
}
}
if((s+w)%7!=0){
printf("\n");
}
}
}
else if(n==2){
printf("%d年\n",y);
for(m1=1,m2=2;m1<=11,m2<=12;m1+=2,m2+=2){
int aaa=1,cnt=1;
printf("%d月 %d月\n",m1,m2);
if(y<=1582&&m1<=10){
if(m1==1||m1==2){
y--;
m1+=12;
}
w1 = (1+1+2*m1+3*(m1+1)/5+y+y/4+5) % 7;
}
else{
if(m1==1||m1==2){
y--;
m1+=12;
}
w1 = (1 + 1+ 2*m1+3*(m1+1)/5+y+y/4-y/100+y/400)%7;}
if(m1==13||m1==14){
y++;
m1-=12;
}
if(y<=1582&&m2<=10){
if(m2==1||m2==2){
y--;
m2+=12;
}
w2 = (1+1+2*m2+3*(m2+1)/5+y+y/4+5) % 7;
}
else{
if(m2==1||m2==2){
y--;
m2+=12;
}
w2 = (1 + 1+ 2*m2+3*(m2+1)/5+y+y/4-y/100+y/400)%7;}
if(m2==13||m2==14){
y++;
m2-=12;
}
int month_days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(y%4==0&&y%100!=0||y%400==0){
month_days[2]=29;
}
s1=month_days[m1];
s2=month_days[m2];
printf(" sum mon tue wed thu fri sat sum mon tue wed thu fri sat\n");
for(j1=0;j1<w1;j1++){
printf(" ");
}
for(d1=1;d1<=s1;d1++){
if(y==1582&&m1==10&&d1>=5&&d1<=14)
continue;
printf("%4d",d1);
if(y==1582&&m1==10){
if(d1==16||d1==23||d1==30){
printf(" ");
}
}
else if((d1+w1)%7==0){
printf(" ");
while(aaa){
for(j2=0;j2<w2;j2++){
printf(" ");
}
aaa--;
}
for(d2=cnt;d2<=s2;d2++){
if(y==1582&&m2==10&&d2>=5&&d2<=14)
continue;
printf("%4d",d2);
if(y==1582&&m2==10){
if(d2==16||d2==23||d2==30){
printf("\n");
}
}
else if((d2+w2)%7==0){
cnt=d2+1;
printf("\n");
break;
if(cnt!=d2){
printf("\n");}
}
}
}
}
if((s1+w1)%7!=0){
for(j1=0;j1<7-(s1+w1)%7;j1++){
printf(" ");
}
printf(" \n");
if((s2+w2)%7!=0){
printf("\n");
}
}
}
printf("\n");
}
}
}
if(x[1]==52){
flag++;
}
}
}