354 lines
7.6 KiB
C++
354 lines
7.6 KiB
C++
#include "stdio.h"
|
||
#include "string.h"
|
||
#include "math.h"
|
||
|
||
int panduan(int a,int b,int c) // a年b月c日
|
||
{
|
||
if(b<=0||b>12)
|
||
{
|
||
printf("每年为12个月份,你所输入的%d不在这范围内",b);
|
||
return 0;
|
||
}
|
||
if(b==1||b==3||b==5||b==7||b==8||b==10||b==12)
|
||
if(c<=0||c>31)
|
||
{
|
||
printf("你输入的为%d月,本月共31天,你输入的%d不在此范围内",b,c);
|
||
return 0;
|
||
}
|
||
if(b==4||b==6||b==9||b==11)
|
||
if(c<=0||c>30)
|
||
{
|
||
printf("你输入的为%d月,本月共30天,你输入的%d不在此范围内",b,c);
|
||
return 0;
|
||
}
|
||
if((a%4==0&&a%100!=0)||a%400==0)
|
||
if(b==2)
|
||
if(c<=0||c>29)
|
||
{
|
||
printf("你输入的为闰年的2月,本月共29天,你输入的%d不在此范围内",c);
|
||
return 0;
|
||
}
|
||
if(b==2)
|
||
if(c<=0||c>28)
|
||
{
|
||
printf("你输入的不是闰年的2月,本月共28天,你输入的%d不在此范围内",c);
|
||
return 0;
|
||
}
|
||
if(a==1582&&b==10&&c>4&&c<15)
|
||
{
|
||
printf("因为特殊原因,不存在你所输入的1582年10月%d日",c);
|
||
return 0;
|
||
}
|
||
|
||
char weak[7][5]={"周三","周四","周五","周六","周日","周一","周二"};
|
||
long long sum=365*(a-1)+c;
|
||
int p=a/100,m=a/400;
|
||
for(int l=1;l<a;l++)
|
||
if((l%4==0&&l%100!=0)||l%400==0)
|
||
sum++;
|
||
switch(b)
|
||
{
|
||
case 12:sum+=30; //11月30天
|
||
case 11:sum+=31; //10月31天
|
||
case 10:sum+=30; //9 月30天
|
||
case 9 :sum+=31; //8 月31天
|
||
case 8 :sum+=31; //7 月31天
|
||
case 7 :sum+=30; //6 月30天
|
||
case 6 :sum+=31; //5 月31天
|
||
case 5 :sum+=30; //4 月30天
|
||
case 4 :sum+=31; //3 月31天
|
||
case 3 :sum+=28; //2 月28天
|
||
case 2 :sum+=31; //1 月31天
|
||
}
|
||
if((a%4==0&&a%100!=0)||a%400==0)
|
||
{
|
||
printf("你输入的%d为闰年\n",a);
|
||
if(b>2)
|
||
sum++;
|
||
}
|
||
else
|
||
printf("你输入的%d年不是闰年\n",a);
|
||
if(a>1582)
|
||
sum-=10;
|
||
else if(a==1582&&b>10)
|
||
sum-=10;
|
||
else if(a==1582&&b==10&&c>=15)
|
||
sum-=10;
|
||
else
|
||
sum;
|
||
int k=sum%7;
|
||
printf("你输入的%d年%d月%d日为%s",a,b,c,weak[k]);
|
||
}
|
||
|
||
int danhang(int a)
|
||
{
|
||
int c[12]={31,28,31,30,31,30,31,31,30,31,30,31};
|
||
|
||
if((a%4==0&&a%100!=0)||a%400==0)
|
||
c[1]++;
|
||
|
||
int sum=(a-1)*365;
|
||
|
||
if(a>1582)
|
||
sum-=10;
|
||
|
||
for(int i=1;i<a;i++)
|
||
if((i%4==0&&i%100!=0)||i%400==0)
|
||
sum++;
|
||
|
||
int b=sum%7;
|
||
int a1[7]={4,5,6,7,1,2,3};
|
||
int fd=a1[b]; //确定一月一日为周几
|
||
|
||
if(a==1582)
|
||
{
|
||
for(int y=1;y<=12;y++)
|
||
{
|
||
printf("\n\n%d月\n",y);
|
||
printf(" 日 一 二 三 四 五 六\n");
|
||
for(int z=1;z<=fd;z++)
|
||
printf(" ");
|
||
for(int x=1;x<=c[y-1];x++)
|
||
{
|
||
if(y==10&&x==5)
|
||
{
|
||
x=15;
|
||
fd=5;
|
||
}
|
||
if(fd==7)
|
||
{
|
||
fd=0;
|
||
printf("\n");
|
||
}
|
||
printf("%4d",x);
|
||
fd++;
|
||
}
|
||
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for(int y=1;y<=12;y++)
|
||
{
|
||
printf("\n\n%d月\n",y);
|
||
printf(" 日 一 二 三 四 五 六\n");
|
||
for(int z=1;z<=fd;z++)
|
||
printf(" ");
|
||
|
||
for(int x=1;x<=c[y-1];x++)
|
||
{
|
||
if(fd==7)
|
||
{
|
||
fd=0;
|
||
printf("\n");
|
||
}
|
||
printf("%4d",x);
|
||
fd++;
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
int shuanghang(int a)
|
||
{
|
||
int c[12]={31,28,31,30,31,30,31,31,30,31,30,31};
|
||
|
||
if((a%4==0&&a%100!=0)||a%400==0)
|
||
c[1]++;
|
||
|
||
int sum=(a-1)*365;
|
||
|
||
if(a>1582)
|
||
sum-=10;
|
||
|
||
for(int i=1;i<a;i++)
|
||
if((i%4==0&&i%100!=0)||i%400==0)
|
||
sum++;
|
||
|
||
int b=sum%7;
|
||
int a1[7]={4,5,6,7,1,2,3};
|
||
int fd=a1[b],d1,d2; //确定一月一日为周几
|
||
|
||
int m[12];
|
||
for(int x=0;x<12;x++)
|
||
{
|
||
if(x==0)
|
||
m[0]=fd;
|
||
else if(x==1)
|
||
m[1]=(fd+31)%7;
|
||
else
|
||
m[x]=(m[x-1]+c[x-1])%7;
|
||
}
|
||
|
||
if(a==1582)
|
||
{
|
||
for(int y=1;y<12;y+=2)
|
||
{
|
||
int r=0;
|
||
d1=m[y-1],d2=m[y];
|
||
printf("\n\n%d月 %d月\n",y,y+1);
|
||
printf(" 日 一 二 三 四 五 六 日 一 二 三 四 五 六\n");
|
||
for(int z=1;z<=m[y-1];z++)
|
||
printf(" ");
|
||
for(int x=1;x<=c[y-1];x++)
|
||
{
|
||
int z,l;
|
||
if(x==1)
|
||
z=1;
|
||
printf("%4d",x);
|
||
d1++;
|
||
if(x==c[y-1])
|
||
for(d1;d1<7;d1++)
|
||
printf(" ");
|
||
if(d1==7)
|
||
{
|
||
d1=0;
|
||
printf(" ");
|
||
|
||
if(x<8)
|
||
{
|
||
d2=m[y];
|
||
for(int z=1;z<=d2;z++)
|
||
printf(" ");
|
||
}
|
||
for(l=z;l<=c[y];l++)
|
||
{
|
||
if(y==9&&l==5)
|
||
{
|
||
l=15;
|
||
d2=5;
|
||
}
|
||
|
||
if(l==c[y]&&r!=0)
|
||
break;
|
||
else if(l==c[y]&&r==0)
|
||
r++;
|
||
|
||
printf("%4d",l);
|
||
d2++;
|
||
|
||
if(d2==7)
|
||
{
|
||
z=l+1;
|
||
d2=0;
|
||
if(x==c[y-1]&&z<c[y])
|
||
{
|
||
printf("\n");
|
||
printf(" ");
|
||
for(z;z<=c[y];z++)
|
||
printf("%4d",z);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
printf("\n");
|
||
}
|
||
}
|
||
for(int z=1;z<=m[y+1];z++)
|
||
printf(" ");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for(int y=1;y<12;y+=2) //y为月份
|
||
{
|
||
int r=0;
|
||
d1=m[y-1],d2=m[y];
|
||
printf("\n\n%d月 %d月\n",y,y+1);
|
||
printf(" 日 一 二 三 四 五 六 日 一 二 三 四 五 六\n");
|
||
for(int z=1;z<=m[y-1];z++)
|
||
printf(" ");
|
||
for(int x=1;x<=c[y-1];x++) //x为奇数月日期
|
||
{
|
||
int z,l;
|
||
if(x==1)
|
||
z=1;
|
||
printf("%4d",x);
|
||
d1++;
|
||
if(x==c[y-1])
|
||
for(d1;d1<7;d1++)
|
||
printf(" ");
|
||
if(x==c[y-1]&&d2!=0)
|
||
break;
|
||
if(d1==7)
|
||
{
|
||
d1=0;
|
||
printf(" ");
|
||
|
||
if(x<8)
|
||
{
|
||
d2=m[y];
|
||
for(int z=1;z<=d2;z++)
|
||
printf(" ");
|
||
}
|
||
for(l=z;l<=c[y];l++) //l为偶数月日期
|
||
{
|
||
printf("%4d",l);
|
||
d2++;
|
||
if(x==c[y-1]&&l<c[y]&&d2==7)
|
||
{
|
||
printf("\n");
|
||
for(int v=z+7;v<=c[y];v++)
|
||
printf(" %4d",v);
|
||
printf("\n");
|
||
break;
|
||
}
|
||
if(d2==7)
|
||
{
|
||
z=l+1;
|
||
d2=0;
|
||
break;
|
||
}
|
||
}
|
||
printf("\n");
|
||
}
|
||
|
||
}
|
||
for(int z=1;z<=m[y+1];z++)
|
||
printf(" ");
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
int main(void)
|
||
{
|
||
int i;
|
||
printf("本程序为万年历\n若你想知道这一年是否为闰年或者一天为周几,请输入1\n");
|
||
printf("若你想要输出一个年份的日历,请输入2\n");
|
||
scanf("%d",&i);
|
||
if(i==1)
|
||
{
|
||
int a,b,c;
|
||
printf("请输入年份:\n");
|
||
scanf("%d",&a);
|
||
printf("请输入月份:\n");
|
||
scanf("%d",&b);
|
||
printf("请输入日期:\n");
|
||
scanf("%d",&c);
|
||
panduan(a,b,c);
|
||
}
|
||
else if(i==2)
|
||
{
|
||
int c;
|
||
printf("请选择是单列输出还是双列输出\n单列请输入1 双列请输入2\n");
|
||
scanf("%d",&c);
|
||
if(c==1)
|
||
{
|
||
int a;
|
||
printf("请输入年份:\n");
|
||
scanf("%d",&a);
|
||
danhang(a);
|
||
}
|
||
else if(c==2)
|
||
{
|
||
int a;
|
||
printf("请输入年份:\n");
|
||
scanf("%d",&a);
|
||
shuanghang(a);
|
||
}
|
||
}
|
||
return 0;
|
||
}
|