389 lines
11 KiB
C++
389 lines
11 KiB
C++
#include<iostream>
|
||
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 <stdio.h>
|
||
#include <stdbool.h>
|
||
|
||
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<streamsize>::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<streamsize>::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<streamsize>::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<streamsize>::max(), '\n'); // 忽略错误输入
|
||
cout << "\033[31m输入非法,请重新输入!\033[0m" << '\n';
|
||
main();
|
||
}
|
||
if (cin.fail() || year < 0 || year > 999999)
|
||
{
|
||
|
||
cin.clear(); // 清除错误状态
|
||
cin.ignore(numeric_limits<streamsize>::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<streamsize>::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<streamsize>::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<streamsize>::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<streamsize>::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;
|
||
} |