#define _CRT_SECURE_NO_WARNINGS #pragma warning(disable:6031) #include #include void one(int year);//查询对应年份的日历,要求可双列输出可单列输出 void two(int year, int month, int day);//查询对应日期的星期 void three(int year);//查询对应年份是否为闰年 int main() { printf("1.查询对应年份的日历\n"); printf("2.查询对应日期的星期\n"); printf("3.查询对应年份是否为闰年\n"); printf("4.退出\n"); int a; int year, month, day; while (scanf("%d", &a) != EOF) { system("cls"); if (a == 1) { printf("请输入年份:"); while (scanf("%d", &year) != EOF) { system("cls"); if (year > 0) { one(year); break; } else { printf("请重新输入:"); } } } else if (a == 2) { printf("请输入日期(年 月 日):"); while (scanf("%d %d %d", &year, &month, &day) != EOF) { system("cls"); if (year > 0 && month > 0 && month < 13) { if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { if (day > 0 && day <= 31) { two(year, month, day); break; } else printf("请重新输入日期(年 月 日):"); } else if (month == 4 || month == 6 || month == 9 || month == 11) { if (day > 0 && day <= 30) { two(year, month, day); break; } else printf("请重新输入日期(年 月 日):"); } else if (month == 2) { if (!(year % 4) && (year % 100)) { if (day > 0 && day <= 29) { two(year, month, day); break; } else printf("请重新输入日期(年 月 日):"); } else { if (day > 0 && day <= 28) { two(year, month, day); break; } else printf("请重新输入日期(年 月 日):"); } } } else { printf("请重新输入日期(年 月 日):"); } } } else if (a == 3) { printf("请输入年份:"); while (scanf("%d", &year) != EOF) { system("cls"); if (year > 0) { three(year); break; } else { printf("请重新输入:"); } } } else if (a == 4) { return 0; } else { printf("请重新输入:"); } } } void one(int year) { int a[13] = { 0,31,0,31,30,31,30,31,31,30,31,30,31 }; if (!(year % 4) && (year % 100)) { a[2] = 29; } else { a[2] = 28; } int g = ((year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7; g++; printf("1.单列输出\n"); printf("2.双列输出\n"); int q; while (scanf("%d", &q) != EOF) { system("cls"); if (q == 1 || q == 2) { break; } else { printf("请重新输入:"); } } if (q == 1) { if (year != 1582) { if (year < 1582) g += 5; if (g >= 7) g %= 7; printf("\n%d年\n", year); int m = 1; while (m <= 12) { printf("\n%d月\n", m); printf("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n"); for (int j = 0, k = 1;k <= a[m];j) { if (j == g) { g++; j++; printf("%d\t", k++); if (j == 7) { j = 0; g = 0; printf("\n"); } } else { j++; printf("\t"); } } printf("\n"); m++; } } else { printf("\n%d年", year); int m = 1; while (m <= 12) { printf("\n%d月\n", m); printf("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n"); for (int j = 0, k = 1;k <= a[m];j) { if (j == g) { g++; j++; if (m == 10 && k == 5) k = 15; printf("%d\t", k++); if (j == 7) { j = 0; g = 0; printf("\n"); } } else { j++; printf(" \t"); } } printf("\n"); m++; } } } else { if (year < 1582) { g += 5; } if (g >= 7) { g %= 7; } int f = (g + 31) % 7; int y = f; printf("%d年\n", year); int m = 1; while (m <= 12) { int n = m + 1; printf("%d月\t\t\t\t\t\t\t\t%d月\n", m, n); printf("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t\t星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n"); int i = 1, j = 1; for (i = 1, j = 1;i <= a[m] || j <= a[n];i, j) { for (int k = 0;1;k) { if (k == g) { k++, g++; if (i <= a[m]) printf("%d\t", i++); else printf("\t"); if (k == 7) { k = 0, g = 0; break; } } else { printf("\t"); k++; } } printf("\t"); for (int k = 0;1;k) { if (k == f) { k++, f++; if (year == 1582 && n == 10 && j == 5) { j = 15; } if (j <= a[n]) printf("%d\t", j++); else printf("\t"); if (k == 7) { k = 0, f = 0; break; } } else { printf("\t"); k++; } } printf("\n"); } if (year == 1582 && m == 9) { g = (y + a[n] - 10) % 7; f = (g + a[n + 1]) % 7; y = f; } else { g = (y + a[n]) % 7; f = (g + a[n + 1]) % 7; y = f; } m += 2; } } system("pause"); system("cls"); printf("1.查询对应年份的日历\n"); printf("2.查询对应日期的星期\n"); printf("3.查询对应年份是否为闰年\n"); printf("4.退出\n"); printf("\n\n请输入您接下来想要进行的操作:"); } void two(int year, int month, int day) { char n[7]; char a[7]; int g, i, k, r = 0; g = ((year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7; if (year != 1582) { if (year < 1582) g += 5; if (g >= 7) g %= 7; } if (year == 1582 && month == 10) { if (day > 4 && day < 15) { system("cls"); printf("由于一些特殊原因从1582年10月5日到1582年10月14日这十天被删去,所以请重新输入\n"); system("Pause"); system("cls"); printf("1.查询对应年份的日历\n"); printf("2.查询对应日期的星期\n"); printf("3.查询对应年份是否为闰年\n"); printf("4.退出\n"); printf("\n\n请输入您接下来想要进行的操作:"); return ; } } switch (0) { case 0:a[0] = 's'; case 1:a[1] = 'm'; case 2:a[2] = 't'; case 3:a[3] = 'w'; case 4:a[4] = 'x'; case 5:a[5] = 'f'; case 6:a[6] = 'a'; } for (i = 0, k = g;i < 7;i++, g++) { if (g == 7) g = 0; n[i] = a[g]; } switch (month - 1) { case 12:r += 31; case 11:r += 30; case 10:r += 31; case 9:r += 30; case 8:r += 31; case 7:r += 31; case 6:r += 30; case 5:r += 31; case 4:r += 30; case 3:r += 31; case 2:r += 28; case 1:r += 31; } if (!(year % 4) && (year % 100) && (month > 2)) r++; r += day; k = r % 7; printf("%d年%d月%d日是", year, month, day); switch (n[k]) { case 's':printf("星期日\n");break; case 'm':printf("星期一\n");break; case 't':printf("星期二\n");break; case 'w':printf("星期三\n");break; case 'x':printf("星期四\n");break; case 'f':printf("星期五\n");break; case 'a':printf("星期六\n");break; } system("pause"); system("cls"); printf("1.查询对应年份的日历\n"); printf("2.查询对应日期的星期\n"); printf("3.查询对应年份是否为闰年\n"); printf("4.退出\n"); printf("\n\n请输入您接下来想要进行的操作:"); } void three(int year) { if ((year % 4 == 0) && (year % 100) != 0) { printf("\n%d年是闰年\n\n", year); } else { printf("\n%d年不是闰年\n\n", year); } system("pause"); system("cls"); printf("1.查询对应年份的日历\n"); printf("2.查询对应日期的星期\n"); printf("3.查询对应年份是否为闰年\n"); printf("4.退出\n"); printf("请输入您接下来想要进行的操作:"); }