UIT2024_Calendar/stu2024/数科2401易诗雅.c
2024-12-07 16:23:34 +08:00

237 lines
4.8 KiB
C

#include <stdio.h>
int isLeapYear(int year)
{
return (year % 4 == 0 && year % 100!= 0) || (year % 400 == 0);
}
int getDaysInMonth(int year, int month)
{
int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 1 && isLeapYear(year))
{
return 29;
}
return daysInMonth[month];
}
void printCalendarHeader()
{
printf(" Sun Mon Tue Wed Thu Fri Sat\n");
}
void printMonth(int year, int month)
{
int z;
int days = getDaysInMonth(year, month);
int firstDayOfMonth = (year * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7;
int i,day;
for (i = 0; i < month; i++)
{
firstDayOfMonth += getDaysInMonth(year, i);
}
firstDayOfMonth %= 7;
printCalendarHeader();
for (i = 0; i < firstDayOfMonth; i++)
{
printf(" ");
}
for (day = 1; day <= days; day++)
{
printf("%5d", day);
if ((firstDayOfMonth + day) % 7 == 0)
{
printf("\n");
}
}
}
int main(void)
{
int choice;
printf("1. 查询对应年份日历\n");
printf("2. 查询对应日期星期\n");
printf("3. 判断所输入年份是否为闰年\n");
printf("4. 退出\n");
scanf("%d", &choice);
int year,month,week,day,day_x,day_z=0,c=0;
int i,j,k,l,m,n,b;
char a;
start:
switch (choice)
{
case 1:
printf("请输入年份:");
scanf("%d", &year);
int month;
int z;
printf("1.单列输出\n2.双列输出\n");
scanf("%d",&z);
for (month = 0; month < 12; month++)
{
printf("\n %d月\n", month + 1);
printMonth(year, month);
}
break;
case 2:
printf("请输入该查询的年份:\n");
scanf("%d",&year);
printf("请输入该查询的月份:\n");
scanf("%d",&month);
printf("请输入该查询的日期: \n");
scanf("%d",&day);
if(year<1 || year>9999)
{
printf("输入年份错误,请重新输入:");
scanf("%d",&year);
}
if(month<1 || month>12)
{
printf("输入月份错误,请重新输入:");
scanf("%d",&month);
}
if(day<1 || day>31)
{
printf("输入日期错误,请重新输入:");
scanf("%d",&day);
}
if(month<3)
{
year--;
month+=12;
}
if(year==1582 && month==10)
{
day_x=21;
if(day>=15)
{
k=year%100;j=year/100;l=day;m=month;
n=(l+(26*(m+1)/10)+k+(k/4)+(j/4)+5*j)%7;
switch(n)
{
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;
}
break;
}
else
{
l=day+10;
k=year%100;j=year/100;m=month;
n=(l+(26*(m+1)/10)+k+(k/4)+(j/4)+5*j)%7;
switch(n)
{
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;
}
}
break;
}
else
{
k=year%100;j=year/100;l=day;m=month;
n=(l+(26*(m+1)/10)+k+(k/4)+(j/4)+5*j)%7;
switch(n)
{
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;
}
}
break;
case 3:
printf("请输入年份:\n");
scanf("%d",&year);
if(year%4==0 && year%100!=0 || year%400==0)
{
printf("%d是闰年\n",year);
}
else
{
printf("%d不是闰年\n",year);
}
break;
case 4:
a=choice;
if(a==4)
{
return 0;
}
break;
default:
printf("无效的选择,请重新输入(1~4):\n");
scanf("%d",&choice);
do
{
if(choice>4 || choice==0)
{
printf("无效选择,请重新输入:");
continue;
}
else
{
break;
}
}
while(choice<=4 && choice!=0);
goto start;
}
return 0;
}