UIT2024_Calendar/stu2024/软件2404纪新峰.cpp.cpp
2024-12-07 16:23:34 +08:00

219 lines
3.8 KiB
C++

#include<stdio.h>
#include<stdlib.h>
void caidan(void)
{
printf("1.查询对应年份的日历\n");
printf("2.查询对应日期的星期\n");
printf("3.查询对应年份是否为闰年\n");
printf("4.退出\n\n");
}
int fang()
{
int t;
while(scanf("%d",&t)!=1)
{
printf("请重新输入\n");
while(getchar()!='\n');
}
return t;
}
void riqi()
{
int y,m,d,q,xingqi;
printf("请输入日期:");
scanf("%d",&y);
scanf("%d",&m);
scanf("%d",&d);
if(y<1||y>10000||m<1||m>12||d<1||((m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&d>31)||((m==4||m==6||m==9||m==11)&&d>30)||(m==2&&d>29))
{
printf("请重新输入\n");
while(scanf("%d",&y)!=1||scanf("%d",&m)!=1||scanf("%d",&d)!=1)
{
printf("请重新输入\n");
while(getchar()!='\n');
}
}
xingqi=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
xingqi++;
switch(xingqi)
{
case 1:printf("星期一");break;
case 2:printf("星期二");break;
case 3:printf("星期三");break;
case 4:printf("星期四");break;
case 5:printf("星期五");break;
case 6:printf("星期六");break;
case 7:printf("星期日");break;
}
}
int runnian()
{
int year;
printf("请输入查询的年份:");
year=fang();
if(year<0||year>100)
{
printf("请重新输入\n");
year=fang();
}
if((year%4==0&&year%100!=0)||year%400==0)
printf("%d年是闰年",year);
else
printf("%d年不是闰年",year);
return year;
}
int yihao(int year,int month)
{
if(month<3)
{
year--;
month+=12;
}
int d=(1+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
d++;
return d;
}
int danrili(int year)
{
int month;
int x,n,s;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if((year%100!=0&&year%4==0)||year%400==0)
{
a[2]=29;
}
for(month=1;month<=12;month++)
{
printf("%2d月\n",month);
printf(" 日 一 二 三 四 五 六\n");
x=yihao(year,month);
if(year==1582&&month==10)
x=1;
for(int i=0;i<x;i++)
{
if(x!=7)
printf(" ");
}
for(int j=1;j<=a[month];j++)
{
printf("%3d",j);
if(year==1582)
{
if(month==10)
{
if(j==4)
j+=10;
if(j==16||j==23||j==30||j==a[month])
{
printf("\n");
}
}
else if((j+x)%7==0||j==a[month])
{
printf("\n");
}
}
else if((j+x)%7==0||j==a[month])
{
printf("\n");
}
}
printf("\n");
printf("\n");
}
}
int shuangrili(int year)
{
int month;
int z,x,c,v,b,k,j;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if((year%100!=0&&year%4==0)||year%400==0)
{
a[2]=29;
}
for(month=1;month<=12;month+=2)
{
int y1=1,y2=1;
z=yihao(year,month);
x=yihao(year,month+1);
c=(a[month]+z-1)/7+1;
v=(a[month+1]+x-1)/7+1;
if(z==7)
z=0;
if(x==7)
x=0;
if(c>v)
b=c;
else
b=v;
printf(" %2d月 %2d月\n",month,month+1);
printf(" 日 一 二 三 四 五 六 日 一 二 三 四 五 六\n");
for(j=0;j<b;j++)
{
for(int i=0;i<7;i++)
{
if(j==0&&i<z)
printf(" ");
else if(y1<=a[month])
printf("%3d",y1++);
else
printf(" ");
}
printf(" ");
for(int i=0;i<7;i++)
{
if(j==0&&i<x)
printf(" ");
else if(y2<=a[month+1])
printf("%3d",y2++);
else
printf(" ");
}
printf("\n");
}
}
printf("\n");
return b;
}
int rili()
{
int p,o;
printf("请输入年份:");
while(scanf("%d",&p)!=1||p<0||p>10000)
{
printf("请重新输入\n");
while(getchar()!='\n');
}
printf("单列输出1\n双列输出2\n");
while(scanf("%d",&o)!=1||o<1||o>2)
{
printf("请重新输入\n");
while(getchar()!='\n');
}
switch(o)
{
case 1:danrili(p);break;
case 2:shuangrili(p);break;
}
}
int main()
{
int n,year,month,day;
caidan();
while(scanf("%d",&n)!=1||n<1||n>4)
{
printf("请重新输入\n");
while(getchar()!='\n');
}
switch(n)
{
case 1:rili();break;
case 2:riqi();break;
case 3:runnian();break;
case 4:break;
}
return 0;
}