UIT2024_Calendar/stu2024/计科2401侯维.cpp
2024-12-07 16:23:34 +08:00

389 lines
11 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}