UIT2024_Calendar/stu2024/数技2402张一寒.cpp
2024-12-07 16:23:34 +08:00

394 lines
7.2 KiB
C++

#include "stdio.h"
#include "math.h"
#include "stdlib.h"
int main(void)
{
printf("1.查询对应年份的日历\n2.查询某具体日期的星期\n3.查询对应年份是否为闰年\n");
int num,year,mon,day,a,b,d;
printf("**********************\n");
printf("输入查询项目编号\n");
scanf("%d",&num);
system("cls");//清屏
if(num==1)
{
int nums;
printf("1.单列输出\n2.双列输出\n");
printf("输入想要表现形式的序号:\n");
scanf("%d",&nums);
if(nums==1)
{
printf("输入年份");
scanf("%d",&year);
a=(year%4==0&&year%100!=0||year%400==0);
b=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+1)%7;//每年一月一日是周几
if(year!=1582)
{
for(mon=1;mon<=12;mon++)
{
switch(mon)//判每月天数
{
case 1:
day=31;
break;
case 2:
if(a==1)
day=29;
else
day=28;
break;
case 3:
day=31;
break;
case 4:
day=30;
break;
case 5:
day=31;
break;
case 6:
day=30;
break;
case 7:
day=31;
break;
case 8:
day=31;
break;
case 9:
day=30;
break;
case 10:
day=31;
break;
case 11:
day=30;
break;
case 12:
day=31;
break;
}
printf("----------------%d月---------------\n",mon);
printf(" 日 一 二 三 四 五 六\n");//一个中文占两个字节
switch(b)//判位置
{
case 1:
printf("%5c",'\40');
break;
case 2:
printf("%10c",'\40');
break;
case 3:
printf("%15c",'\40');
break;
case 4:
printf("%20c",'\40');
break;
case 5:
printf("%25c",'\40');
break;
case 6:
printf("%30c",'\40');
break;
}
for(int i=1,j=b;i<=day;i++,j++)
{
printf("%5d",i);
if(j%7==6)
printf("\n");
}
b=(b+day)%7;//下个月的第一天周几
printf("\n");
}
}
else if(year==1582)//1582的单列输出
{
d=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+11)%7;
for(mon=1;mon<=12;mon++)
{
switch(mon)
{
case 1:
day=31;
break;
case 2:
if(a==1)
day=29;
else
day=28;
break;
case 3:
day=31;
break;
case 4:
day=30;
break;
case 5:
day=31;
break;
case 6:
day=30;
break;
case 7:
day=31;
break;
case 8:
day=31;
break;
case 9:
day=30;
break;
case 10:
day=31;
break;
case 11:
day=30;
break;
case 12:
day=31;
break;
}
printf("----------------%d月---------------\n",mon);
printf(" 日 一 二 三 四 五 六\n");
switch(d)
{
case 1:
printf("%5c",'\40');
break;
case 2:
printf("%10c",'\40');
break;
case 3:
printf("%15c",'\40');
break;
case 4:
printf("%20c",'\40');
break;
case 5:
printf("%25c",'\40');
break;
case 6:
printf("%30c",'\40');
break;
}
for(int i=1,j=d;i<=day;i++,j++)
{
if(mon==10)
{
if(i>4&&i<15)
continue;
printf("%5d",i);
if(i==16||i==23||i==30)
{
printf("\n");
}
}
else
{
printf("%5d",i);
if(j%7==6)
printf("\n");
}
}
if(mon==10)
{
d=(d+day+ 1)%7;//下个月第一天是周几
printf("\n");
}
d=(d+day)%7;//下个月第一天是周几
printf("\n");
}
}
}
else if(nums==2)//双列
{
printf("输入年份");
scanf("%d",&year);
a=(year%4==0&&year%100!=0||year%400==0);
b=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+1)%7;//每年一月一日是周几
for(mon=1;mon<=12;mon++)
{
switch(mon)//判每月天数
{
case 1:
day=31;
break;
case 2:
if(a==1)
day=29;
else
day=28;
break;
case 3:
day=31;
break;
case 4:
day=30;
break;
case 5:
day=31;
break;
case 6:
day=30;
break;
case 7:
day=31;
break;
case 8:
day=31;
break;
case 9:
day=30;
break;
case 10:
day=31;
break;
case 11:
day=30;
break;
case 12:
day=31;
break;
}
printf("----------------%d月----------------|",mon++);
printf("----------------%d月----------------\n",mon);
printf(" 日 一 二 三 四 五 六");
printf(" 日 一 二 三 四 五 六\n");
switch(b)//判位置
{
case 1:
printf("%5c",'\40');
break;
case 2:
printf("%10c",'\40');
break;
case 3:
printf("%15c",'\40');
break;
case 4:
printf("%20c",'\40');
break;
case 5:
printf("%25c",'\40');
break;
case 6:
printf("%30c",'\40');
break;
}
for(int i=1,j=b;i<=day;i++,j++)
{
printf("%5d",i);
if(j%7==6)
printf("\n");
}
b=(b+day)%7;//下个月的第一天周几
printf("\n");
}
}
}
else if(num==2)//判星期
{
int year,mon,day,a,b,c,d,e ;
printf("输入想要查询的具体日期\n");
printf("年:\n");
scanf("%d",&year);
printf("月:\n");
scanf("%d",&mon);
printf("日:\n");
scanf("%d",&day);
int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(year==1582)
arr[10]=21;
a=(year%4==0&&year%100!=0||year%400==0);
b=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+1)%7;
d=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+11)%7;
if(year>1582)
{
if(a==1)
arr[2]=29;
for(int i=0;i<mon;i++)
{
b=(b+arr[i])%7;
c=(b+day-1)%7;
}
}
else if(year<1582)
{
if(a==1)
arr[2]=29;
for(int i=0;i<mon;i++)
{
d=(d+arr[i])%7;
c=(d+day-1)%7;
}
}
else if(year==1582)
{
if(mon<=10&&day<5)
{
for(int i=0;i<mon;i++)
{
d=(d+arr[i])%7;
c=(d+day-1)%7;
}
}
else if(mon==10&&15<=day<=31)
{
for(int i=0;i<mon;i++)
{
d=(d+arr[i])%7;
c=(d+day-11)%7;
}
}
else if (mon>10)
{
for(int i=0;i<mon;i++)
{
d=(d+arr[i])%7;
c=(d+day-1)%7;
}
}
}
switch(c)
{
case 0:
printf("星期日");
break;
case 1:
printf("星期一");
break;
case 2:
printf("星期二");
break;
case 3:
printf("星期三");
break;
case 4:
printf("星期四");
break;
case 5:
printf("星期五");
break;
case 6:
printf("星期六");
break;
}
}
else if(num==3)
{
printf("输入年份");
scanf("%d",&year);
if(year%4==0&&year%100!=0||year%400==0)
{
printf("闰年");
return 0;
}
else
printf("不是闰年");
}
return 0;
}