237 lines
4.8 KiB
C
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;
|
|
}
|