#include using namespace std; int year, month, day,allday,wannian,con,b,c=0,firstday; int wannain_month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; int arr[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; //判断闰年并返回一年的天数 int runyear(int year) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { return 366; } else { return 365; } } // 蔡勒公式 int week(int y, int m, int d) { if (y < 1582 || y == 1582) { if (m < 10 || (m == 10 && d < 5))d += 3; else if (m == 10 && (4 < d && d < 15))return -1; } if (m < 3) { y--; m += 12; }return ((d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7 + 1) % 7; } void clprintf(int year, int shuchu) { int yearfirstday, b, con = 0; int c = 0; int monthday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; yearfirstday = ((year - 1) * 365 + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + 1) % 7; if (year <= 1582) { yearfirstday = ((year - 1) * 365 + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + 11) % 7; } if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) monthday[2] = 29; if (shuchu == 1) { for (int i = 1; i < 13; i++) { printf("------------------------%2d-------------------------\n", i); printf("SUM\tMON\tTUE\tWEN\tTHU\tFRI\tSAT\n"); if (yearfirstday != 0){ for (int x = 1; x <= yearfirstday; x++) { printf("\t"); } } for (int j = 1; j <= monthday[i]; j++) { if (year == 1582 && i == 10 && (j > 4 && j < 15)) { continue; } con += 1; printf("%d\t", j); if ((con + yearfirstday) % 7 == 0 || j == monthday[i]) printf("\n"); } yearfirstday = (monthday[i] + yearfirstday) % 7; con = 0; printf("\n"); } } else if (shuchu == 2) { con = 0; int q, m; for (int i = 1; i < 13; i += 2) { printf("------------------------%d月------------------------\t", i); printf("------------------------%d月------------------------\n", i + 1); printf("SUM\tMON\tTUE\tWEN\tTHU\tFRI\tSAT\tSUM\tMON\tTUE\tWEN\tTHU\tFRI\tSAT\n"); b = (monthday[i] + yearfirstday) % 7; q = 7 - b + 1; m = 7 - yearfirstday + 1; if (yearfirstday != 0) { for (int x = 1; x <= yearfirstday; x++) { printf("\t"); } } for (int x = 1; x <= 7 - yearfirstday; x++) { printf("%d\t", x); } if (year == 1582 && i + 1 == 10) { printf("\t1\t2\t3\t4\t15\t16\t"); q = 17; } else { if (b != 0) { for (int x = 1; x <= b; x++) { printf("\t"); } } for (int y = 1; y <= 7 - b; y++) { printf("%d\t", y); } } printf("\n"); for (int j = m; j <= monthday[i]; j++) { printf("%d\t", j); if (j == monthday[i] && (j + yearfirstday) % 7 != 0) { for (int g = 0; g <= 7 - b - 1; g++) { printf("\t"); } } if ((j + yearfirstday) % 7 == 0 || j == monthday[i]) { for (int y = q; y <= monthday[i + 1]; y++) { printf("%d\t", y); if (year == 1582 && (i + 1) == 10) { if (y == 23 || y == 30 || y == 31) { q = y + 1; printf("\n"); break; } else continue; } else { if (((y + b) % 7 == 0 || y == monthday[i + 1]) && j!=monthday[i]) { q = y + 1; printf("\n"); break; } else if (j == monthday[i] && (y + b) % 7 == 0 && y != monthday[i + 1]) { q = y + 1; printf("\n\t\t\t\t\t\t\t"); continue; } } } } if (j == monthday[i] && q != monthday[i + 1]) { /*for (int flag = q; flag <= monthday[i + 1]; flag++) { printf("%d\t", flag); break; }*/ printf("\n"); } if (year == 1582 && i == 9 && j == 29) printf("\n"); } yearfirstday = (monthday[i + 1] + b) % 7; printf("\n"); } } } #include #include void checkFestival(int year, int month, int day) { // 元旦 if (month == 1 && day == 1) { printf("元旦\n"); return; } // 春节,简单假设大致在公历1月21日至1月27日(实际应根据农历准确判断) if (month == 1 && (21 <= day && day <= 27)) { printf("春节\n"); return; } // 清明节,一般在公历4月4日至4月6日之间,这里以4月5日为例 if (month == 4 && day == 5) { printf("清明节\n"); return; } // 劳动节,5月1日 if (month == 5 && day == 1) { printf("劳动节\n"); return; } // 端午节,简单假设大致在公历6月10日左右(实际应根据农历准确判断) if (month == 6 && day == 10) { printf("端午节\n"); return; } // 中秋节,简单假设大致在公历9月17日左右(实际应根据农历准确判断) if (month == 9 && day == 17) { printf("中秋节\n"); return; } // 国庆节,10月1日 if (month == 10 && day == 1) { printf("国庆节\n"); return; } printf("无\n"); } int main() { cout << "\033[1;31;47m输入1:查询输入天数的信息 \033[0m" << '\n' << "\033[1;32;47m输入2:查询输入年份的日历 \033[0m" << '\n' << "\033[1;30;47m输入3:查询输入年份是否为闰年 \033[0m" << '\n' << "\033[1;34;47m输入4:退出 \033[0m" << '\n'; int a; cin >> a; if (cin.fail() || a < 1 || a > 4) { cin.clear(); // 清除错误状态 cin.ignore(numeric_limits::max(), '\n'); // 忽略错误输入 cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n'; main(); } switch (a) { case 1: { cout << "输入查询的天数(年 月 日,例如:2024 11 11) :"; cin >> year >> month >> day; if (cin.fail() || month < 1 || month > 12) { cin.clear(); // 清除错误状态 cin.ignore(numeric_limits::max(), '\n'); // 忽略错误输入 cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n'; main(); } if (cin.fail() || day < 1 || (month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>31 || (month==4||month==6||month==9||month==11)&&day>30||(runyear(year)==366)&&(month==2)&&day>29|| (runyear(year) == 365) && (month == 2) && day > 28) { cin.clear(); // 清除错误状态 cin.ignore(numeric_limits::max(), '\n'); // 忽略错误输入 cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n'; main(); } if (cin.fail() || year==1582&&month==10&&(day>4&&day<15)) { cin.clear(); // 清除错误状态 cin.ignore(numeric_limits::max(), '\n'); // 忽略错误输入 cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n'; main(); } if (cin.fail() || year < 0 || year > 999999) { cin.clear(); // 清除错误状态 cin.ignore(numeric_limits::max(), '\n'); // 忽略错误输入 cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n'; main(); } int cinday; cinday = week(year, month, day); switch (cinday) { case 0: cout << year << "年" << month << "月" << day << "日是" << "星期日" << '\n' << '\n'; break; case 1: cout << year << "年" << month << "月" << day << "日是" << "星期一" << '\n' << '\n'; break; case 2: cout << year << "年" << month << "月" << day << "日是" << "星期二" << '\n' << '\n'; break; case 3: cout << year << "年" << month << "月" << day << "日是" << "星期三" << '\n' << '\n'; break; case 4: cout << year << "年" << month << "月" << day << "日是" << "星期四" << '\n' << '\n'; break; case 5: cout << year << "年" << month << "月" << day << "日是" << "星期五" << '\n' << '\n'; break; case 6: cout << year << "年" << month << "月" << day << "日是" << "星期六" << '\n' << '\n'; break; } cout << '\n' << '\n'; main(); } case 2: { cout << "1.单列输出" << '\n' << "2.双列输出" << '\n'; int b; cin >> b; if (cin.fail() || b < 1 || b > 2) { cin.clear(); // 清除错误状态 cin.ignore(numeric_limits::max(), '\n'); // 忽略错误输入 cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n'; main(); } switch (b) { case 1: { cout << "输入查询的年份 :"; cin >> wannian; if (cin.fail() || wannian < 0 || wannian > 99999) { cin.clear(); // 清除错误状态 cin.ignore(numeric_limits::max(), '\n'); // 忽略错误输入 cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n'; main(); } clprintf(wannian, 1); break; } case 2: { cout << "输入查询的年份 :"; cin >> wannian; if (cin.fail() || wannian < 0 || wannian > 10000) { cin.clear(); // 清除错误状态 cin.ignore(numeric_limits::max(), '\n'); // 忽略错误输入 cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n'; main(); } clprintf(wannian, 2); break; } } main(); } case 3: { cout << "输入查询的年份 :"; cin >> year; if (cin.fail() || year < 0 || year > 99999) { cin.clear(); // 清除错误状态 cin.ignore(numeric_limits::max(), '\n'); // 忽略错误输入 cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n'; main(); } if (runyear(year) == 366) cout << year << "年是闰年" << '\n' << '\n'; else cout << year << "年不是闰年" << '\n' << '\n'; } main(); case 4: { int y, m, d; cout << "查询节假日" << '\n'; cin >> y >> m >> d; checkFestival(y, m, d); } case 5: cout << "\033[31m退出请输出uit最帅的人的名字首字母\033[0m" << '\n'; string shuai; cin >> shuai; if (shuai == "lxm" || shuai == "tl" || shuai == "zsk") { cout << "\033[33m哈哈\033[0m" << '\n'; return 0; } else if (shuai == "gxk") { cout << "\033[33m我高哥就是帅怎么了\033[0m" << '\n'; return 0; } else if (shuai == "yxx") { cout << "\033[33m我小小哥就是帅怎么了\033[0m" << '\n'; return 0; } else if (shuai == "mzn") { cout << "\033[33m我马哥就是帅怎么了\033[0m" << '\n'; return 0; } else if (shuai == "lcm") { cout << "\033[33m我陆哥就是帅怎么了\033[0m" << '\n'; return 0; } else if (shuai == "djy") { cout << "\033[33m请输入他的真名(s开头)\033[0m" << '\n'; cin >> shuai; if (shuai == "sys") cout << "\033[33m哈哈\033[0m" << '\n'; return 0; } else { cout << "\033[33m再想想\033[0m" << '\n'; main(); } return 0; } return 0; }