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

354 lines
7.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}