void GiveInstructions(void);
void PrintCalendar(int Year, int Month, int Day);
char *MonthName(int Month);
void IndenFirstLine(int weekday);
int MonthDays(int Month,int Year);
bool IsLeapYear(int Year);
int FirstDayOfMonth(int Month,int Year);
bool Right(int Year,int Month, int Day);
void main()
{
int Data, Year, Month, Day;//定义变量
GiveInstructions();
while (true)
{
printf("Enter the data like the xxxxxxxx");
scanf("%d", &Data); //输入8位日期格式
Day = Data % 100; // 日期
Data = Data / 100;
Month = Data % 100;//月份
Year = Data / 100;// 年份
if ( Right(Year, Month, Day))//Right函数判断日期的格式是否正确
{
PrintCalendar(Year, Month, Day); //打印日历
break;
}
else
{}
}
getchar();
getchar();
}
void GiveInstructions() //提示信息
{
printf("This program display a calender \n");
}
void PrintCalendar(int Year, int Month, int Day)
{
int nDays,weekday,day;
printf(" %s %d\n",MonthName(Month),Year);
printf(" Su Mo Tu We Th Fr Sa\n");
nDays=MonthDays(Month,Year); //那一年,那一月的天数
weekday=FirstDayOfMonth(Month,Year);// 那一年,那一月的第一天是星期几
IndenFirstLine(weekday); //找到第一天在日历中的位置
char *MonthName(int Month) //返回月份的英文表示
{
switch(Month)
{
case 1:return "January";
case 2:return "February";
case 3:return "March";
case 4:return "April";
case 5:return "May";
case 6:return "June";
case 7:return "July";
case 8:return "August";
case 9:return "September";
case 10:return "October";
case 11:return "November";
case 12:return "December";
default: "Error";
}
}
void IndenFirstLine(int weekday)//找到第一天在日历中的位置
{
int i;
for (i=0;i<weekday;i++)
{
printf(" ");
}
}
int MonthDays(int Month,int Year) //返回某一月份的天数
{
switch (Month)
{
case 2:
{
if(IsLeapYear(Year))return (29);
return (28);
}
case 4:
case 6:
case 9:
case 11:
{
return (30);
}
default:
{
return (31);
}
}
}