目录
int getWeekdayByYearday(int iY, int iM, int iD)
int MyYear(int year, int month)
int MyOutPut(int year, int month)
int getWeekdayByYearday(int iY, int iM, int iD)
功能:判断某天是周几
参数:年、月、日
返回值:0~6 周日-周6
int getWeekdayByYearday(int iY, int iM, int iD)
{
int iWeekDay = -1;
if (1 == iM || 2 == iM) {
iM += 12;
iY--;
}
iWeekDay = (iD + 1 + 2 * iM + 3 * (iM + 1) / 5 + iY + iY / 4 - iY / 100 + iY / 400) % 7;
return iWeekDay;
}
int MyYear(int year, int month)
功能:判断某年某月有几天(需判断闰年,平年)
参数:年、月
返回值:天数 28 29 30 31
int MyYear(int year, int month)
{
int day = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
case 2:
if ((0 == year % 4 && 0 != year % 400) || 0 == year % 400) {
day = 29;
} else {
day = 28;
}
break;
}
return day;
}
int MyOutPut(int year, int month)
功能:打印某年某月的万年历
参数:年、月
返回值:-1 传参错误,0打印成功
int MyOutPut(int year, int month)
{
int day = 0;
int week = 0;
if (year <= 0 && (month <= 0) || month > 13) {
printf("参数传递错误,请重新输入:");
return -1;
}
day = MyYear(year, month);
printf("[%d %d]:\n", year, month);
printf("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");
for (int i = 1; i <= day; i++) {
week = getWeekdayByYearday(year, month, i);
if (1 == i) {
switch (week) {
case 0:
printf("%-2d\t", i);
break;
case 1:
printf("\t%-2d\t", i);
break;
case 2:
printf("\t\t%-2d\t", i);
break;
case 3:
printf("\t\t\t%-2d\t", i);
break;
case 4:
printf("\t\t\t\t%-2d\t", i);
break;
case 5:
printf("\t\t\t\t\t%-2d\t", i);
break;
case 6:
printf("\t\t\t\t\t\t%-2d\n", i);
break;
}
} else {
switch (week) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
printf("%-2d\t", i);
break;
case 6:
printf("%-2d\n", i);
break;
}
}
}
printf("\n\n");
return 0;
}
主函数main
int main(int argc, char const* argv[])
{
printf("********************************\n");
printf("*****按year输出万年历*************\n");
printf("*****按month输出万年历************\n");
printf("********************************\n");
printf("point '1.year' or '2.month':");
int choose = 0;
int year = 0;
int month = 0;
int day = 0;
rester1:
scanf("%d", &choose);
if (1 != choose && 2 != choose) {
printf("输出错误!请重新输出 1 or 2:");
goto rester1;
}
if (1 == choose) {
rester2:
printf("请输出具体的年份,如2019:");
scanf("%d", &year);
if (year <= 0) {
printf("输出错误!请重新输入年份year>0:");
goto rester2;
}
for (int i = 1; i <= 12; i++) {
day = MyOutPut(year, i);
}
}
if (2 == choose) {
printf("请输出具体的年份,月份,如2019 10:");
scanf("%d%d", &year, &month);
if (year <= 0) {
printf("输出错误!请重新输入年份year>0,month>0且month<13:");
goto rester2;
}
day = MyOutPut(year, month);
}
return 0;
}