|
|
|
@ -0,0 +1,230 @@
|
|
|
|
|
#include "wudi.h"
|
|
|
|
|
void printBlank(int n);
|
|
|
|
|
void printYearCalendar();
|
|
|
|
|
void createMonthCalendar(int year,int month);
|
|
|
|
|
void printMonthCalendar();
|
|
|
|
|
int getWeekDay(int year,int month,int day);
|
|
|
|
|
int getDays(int year,int month);
|
|
|
|
|
int menu();
|
|
|
|
|
void third();
|
|
|
|
|
int getDays(int year,int month)// 得到该月有多少天
|
|
|
|
|
{
|
|
|
|
|
switch(month)
|
|
|
|
|
{
|
|
|
|
|
case 1:case 3:case 5:case 7:case 8:case 10:case 12:// 这些月份有31日
|
|
|
|
|
return 31;
|
|
|
|
|
break;
|
|
|
|
|
case 4:case 6:case 9:case 11:// 这些月份有30日
|
|
|
|
|
return 30;
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
return isLeapYear(year)?29:28;// 如果该年为闰年,2月有29日,否则2月只有28日
|
|
|
|
|
default:
|
|
|
|
|
return 0;// 如果月份输入有误,返回0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
int getWeekDay(int year,int month,int day)// 得到该日期是星期几
|
|
|
|
|
{
|
|
|
|
|
// 基姆拉尔森计算公式
|
|
|
|
|
int w;// 代表星期
|
|
|
|
|
if(month<3)
|
|
|
|
|
{
|
|
|
|
|
month+=12;
|
|
|
|
|
year-=1;
|
|
|
|
|
}
|
|
|
|
|
w=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400+1)%7;// w的取值范围为0到6,0为星期日,1为星期一
|
|
|
|
|
return w;
|
|
|
|
|
}
|
|
|
|
|
void printMonthCalendar()// 得到某年某月的日历
|
|
|
|
|
{
|
|
|
|
|
int year,month,day,m,i;
|
|
|
|
|
loop:system("cls");
|
|
|
|
|
while(1)
|
|
|
|
|
{
|
|
|
|
|
printf("\n请输入年月来查询您要的月份的日历:");
|
|
|
|
|
scanf("%d%d",&year,&month);
|
|
|
|
|
if(year>=1900&&year<=2100&&month>0&&month<13)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
printf("\n输入的年月不合规,请重新输入。");
|
|
|
|
|
}
|
|
|
|
|
int firstDay=getWeekDay(year,month,1);
|
|
|
|
|
int daysMonth=getDays(year,month);
|
|
|
|
|
printf(" %d年%d月 \n",year,month);
|
|
|
|
|
printf(" SUN MON TUE WED THU FRI SAT \n");
|
|
|
|
|
|
|
|
|
|
for(i=0;i<firstDay;i++)
|
|
|
|
|
{
|
|
|
|
|
printf(" ");
|
|
|
|
|
}
|
|
|
|
|
for(day=1;day<=daysMonth;day++)
|
|
|
|
|
{
|
|
|
|
|
printf("%4d",day);
|
|
|
|
|
if((day+firstDay)%7==0)// 为星期六时,从下一行输出
|
|
|
|
|
{
|
|
|
|
|
printf(" \n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
printf("\n");
|
|
|
|
|
printf("继续查询请输入[1]:");
|
|
|
|
|
printf("返回菜单请输入[0]:");
|
|
|
|
|
while(1)
|
|
|
|
|
{
|
|
|
|
|
scanf("%d",&m);
|
|
|
|
|
if(m==1||m==0)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
printf("\n输入数字无对应选项,请重新输入。\n");
|
|
|
|
|
}
|
|
|
|
|
if(m==0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(m==1)
|
|
|
|
|
{
|
|
|
|
|
goto loop;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void createMonthCalendar(int year,int month)// 得到确定的年份的日历
|
|
|
|
|
{
|
|
|
|
|
int daysMonth=getDays(year,month);
|
|
|
|
|
int firstDay=getWeekDay(year,month,1);
|
|
|
|
|
int day,i;
|
|
|
|
|
printf(" %d年%d月 \n",year,month);
|
|
|
|
|
printf(" SUN MON TUE WED THU FRI SAT \n");
|
|
|
|
|
for(i=0;i<firstDay;i++)
|
|
|
|
|
{
|
|
|
|
|
printf(" ");
|
|
|
|
|
}
|
|
|
|
|
for(day=1;day<=daysMonth;day++)
|
|
|
|
|
{
|
|
|
|
|
printf("%4d",day);
|
|
|
|
|
if((firstDay+day)%7==0&&(day!=daysMonth))
|
|
|
|
|
{
|
|
|
|
|
printf("\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
printf("\n\n");
|
|
|
|
|
}
|
|
|
|
|
void printYearCalendar()// 得到某年的日历
|
|
|
|
|
{
|
|
|
|
|
int year,n,month;
|
|
|
|
|
loop:system("cls");
|
|
|
|
|
printf("\n请输入年份来查询您要的年份的日历:");
|
|
|
|
|
scanf("%d",&year);
|
|
|
|
|
for(month=1;month<=12;month++)
|
|
|
|
|
{
|
|
|
|
|
createMonthCalendar(year,month);
|
|
|
|
|
}
|
|
|
|
|
printf("\n");
|
|
|
|
|
printf("继续查询请输入[1],");
|
|
|
|
|
printf("返回菜单请输入[0]:");
|
|
|
|
|
while(1)
|
|
|
|
|
{
|
|
|
|
|
scanf("%d",&n);
|
|
|
|
|
if(n==1||n==0)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
printf("\n输入数字无对应选项,请重新输入。");
|
|
|
|
|
}
|
|
|
|
|
if(n==1)
|
|
|
|
|
{
|
|
|
|
|
goto loop;
|
|
|
|
|
}
|
|
|
|
|
if(n==0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void printBlank(int n)// 输出空格
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
for(i=1;i<=n;i++)
|
|
|
|
|
{
|
|
|
|
|
putchar(' ');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
int menu()
|
|
|
|
|
{
|
|
|
|
|
int select;
|
|
|
|
|
system("cls");
|
|
|
|
|
printBlank(45);
|
|
|
|
|
printf("日历\n");
|
|
|
|
|
printBlank(20);
|
|
|
|
|
printf("******************************************************\n");
|
|
|
|
|
printBlank(20);
|
|
|
|
|
printf("[1]年日历查询\n");
|
|
|
|
|
printBlank(20);
|
|
|
|
|
printf("[2]月日历查询\n");
|
|
|
|
|
printBlank(20);
|
|
|
|
|
printf("[3]目标日期距今还有多少天,是星期几,是否为节日查询\n");
|
|
|
|
|
printBlank(20);
|
|
|
|
|
printf("[4]进入备忘录\n");
|
|
|
|
|
printBlank(20);
|
|
|
|
|
printf("[0]退出程序\n");
|
|
|
|
|
printBlank(20);
|
|
|
|
|
printf("******************************************************\n");
|
|
|
|
|
printBlank(20);
|
|
|
|
|
printf("请输入:");
|
|
|
|
|
scanf("%d",&select);
|
|
|
|
|
return select;
|
|
|
|
|
}
|
|
|
|
|
void third()
|
|
|
|
|
{
|
|
|
|
|
int year,month,day,n;
|
|
|
|
|
loop:system("cls");
|
|
|
|
|
printf("\n请输入年月日:");
|
|
|
|
|
scanf("%d%d%d",&year,&month,&day);
|
|
|
|
|
printf("\n距今天有%d天,",-daysBetweenGivenDateAndNow(year,month,day));
|
|
|
|
|
switch(getWeekDay(year,month,day))
|
|
|
|
|
{
|
|
|
|
|
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;
|
|
|
|
|
default:
|
|
|
|
|
printf("不存在,");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
wang(year,month,day);
|
|
|
|
|
printf("\n");
|
|
|
|
|
printf("继续查询请输入[1],");
|
|
|
|
|
printf("返回菜单请输入[0]:");
|
|
|
|
|
while(1)
|
|
|
|
|
{
|
|
|
|
|
scanf("%d",&n);
|
|
|
|
|
if(n==1||n==0)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
printf("\n输入数字无对应选项,请重新输入。\n");
|
|
|
|
|
}
|
|
|
|
|
if(n==0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(n==1)
|
|
|
|
|
{
|
|
|
|
|
goto loop;
|
|
|
|
|
}
|
|
|
|
|
}
|