394 lines
7.2 KiB
C++
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;
|
|
}
|
|
|
|
|
|
|
|
|