UIT2024_Calendar/stu2024/虚拟2401刘军保(1).c
2024-12-07 16:23:34 +08:00

193 lines
4.7 KiB
C

#include <stdio.h>
#include <stdlib.h>
//判断读入的n值-------------------------------------------------------------------------------------------------------
int durun() {
int i;
char x;
printf("1.查询某年某月是星期几是否为闰年\n2.打印单列日历\n3.打印双列日历\n4.退出程序\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 x=5;
return x;
}
//判断年份-------------------------------------------------------------------------------------------------------------
int runian(int x1) {
int m=28;
if(x1%4==0&&x1%100!=0||x1%400==0)
m=29;
return m;
}
int riqi(int x1) {
int w,i;
if(x1>2000)
w=((x1-1)*365+((x1-1)/4)-((x1-1)/100)+((x1-1)/400)+1)%7;
else w=(x1/100)/4-2*(x1/100)+x1%100+(x1%100)/4+(13*12/5);
w=w%7;
if(w==0)
w=7;
return w;
}
//主体-----------------------------------------------------------------------------------------------------------------
int main() {
for(;;) {
qaz:;
int m[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
int n,year,ri;
n=durun();
if(n==5) {
system("cls");
printf("输入错误请从新输入\n\n");
goto qaz;
}
if(n==4)
break;
//---------------------------------------------------------------------------------------------------------------------------
if(n==1) {
system("cls");
zaq:;
int xiqi,i;
printf("请依次输入年 月 日\n返回上一级请输入-1\n");
scanf("%d",&year);
if(year==-1) {
system("cls");
goto qaz;
}
scanf("%d%d",&m[0],&ri);
m[2]=runian(year);
if(year<=9999&&year>0&&m[0]>=1&&m[0]<=12&&ri>0&&ri<=m[m[0]]) {
xiqi=riqi(year);
if(year==1582) {
if(m[0]==10&&ri>4&&ri<15) {
printf("输入错误\n\n");
goto zaq;
}
if(m[0]>10)
m[10]-=10;
if(ri>=15&&m[0]==10)
xiqi=xiqi-10;
}
for(i=1; i<m[0]; i++)
xiqi+=m[i];
xiqi+=ri;
xiqi=(xiqi-1)%7;
if(xiqi==0)
xiqi=7;
printf("%d年%d月%d日是星期%d",year,m[0],ri,xiqi);
if(m[2]==29)
printf("是闰年\n\n");
else printf("不是闰年\n\n");
} else printf("输入错误\n\n");
}
//--------------------------------------------------------------------------------------------------------------------------------------------
if(n==2) {
system("cls");
int i,j,w,year;
printf("请输入年份\n返回上一级请输入-1\n");
scanf("%d",&year);
if(year==-1) {
system("cls");
goto qaz;
}
m[2]=runian(year);
w=riqi(year);
if(year<=9999&&year>0) {
printf("======================%.4d======================\n\n\n",year);
for(i=1; i<=12; i++) {
printf("=======================%.2d=======================\n",i);
printf("星期一 星期二 星期三 星期四 星期五 星期六 星期日\n");
for(j=1; j<w; j++)
printf(" ");
for(j=1; j<=m[i]; j++) {
if(year==1582&&i==10) {
if(j==5)
j=15;
}
printf(" %.2d ",j);
w++;
if(w>7) {
printf("\n");
w=1;
}
}
printf("\n\n");
}
} else printf("输入错误\n\n");
}
//---------------------------------------------------------------------------------------------------------------------------------
if(n==3) {
system("cls");
int i,j1,w,w2,year;
int x1,x2,x3,x4,x5;
printf("请输入年份\n返回上一级请输入-1\n");
scanf("%d",&year);
if(year==-1) {
system("cls");
goto qaz;
}
m[2]=runian(year);
w=riqi(year);
if(year<=9999&&year>0) {
printf("===============================================%.4d===============================================\n\n\n",year);
for(i=1; i<=12; i=i+2) {
x1=1,x3=1,x4=1;
printf(" \n");
printf("=======================%.2d======================= ",i);
printf("=======================%.2d=======================\n",i+1);
printf("星期一 星期二 星期三 星期四 星期五 星期六 星期日 ");
printf(" 星期一 星期二 星期三 星期四 星期五 星期六 星期日\n");
w2=(w+m[i])%7;
if(w2==0)
w2=7;
for(j1=1; j1<w; j1++)
printf(" ");
for(j1=1; j1<=38; j1++) {
if(j1<=m[i])
printf(" %.2d ",j1);
else if(x4==m[i+1])
break;
else printf(" ");
w++;
if(w>7) {
if(x1==1) {
for(x2=1; x2<w2; x2++)
printf(" ");
x1=0;
x5=w2;
}
for(x3; x3<=m[i+1]; x3++) {
if(x4<=m[i+1]) {
if(year==1582&&i==9&&x4==5) {
x4=15;
}
printf(" %.2d ",x4);
x4++;
}
x5++;
if(x5>7) {
x5=1;
printf("\n");
break;
}
}
printf("\n");
w=1;
}
}
if(year==1582&&i==9)
m[10]=21;
w=(w2+m[i+1])%7;
if(w==0)
w=7;
}
} else printf("输入错误\n\n");
}
}
}