*要求:
设计一个日期类 date。类体内需包含描述年、月、日等信息的数据成员,以及用于设置与读取这些数据成员的成员函数。10在类体内定义用于初始化对象的构造函数,包含一个重载默认值方式。5在 date 类中定义成员函数,用于处理月、日的进位的改变问题,特别注意不同月份天数的问题,判断闰年问题。15在 date 类中重载 + 或 -,++ 或 – 运算符重载,用于实现对日期对象进行加或减 n天,加或减1天操作。20设计一个双计时器界面,提供人工设定起始日期,人工加、减日期操作,测试 date 类中各成员函数是否能正确运行,并给出测试结果的运行截图。* #include<iostream> using namespace std; /*要求: 1. 设计一个日期类 date。类体内需包含描述年、月、日等信息的数据成员,以及用于设置与读取这些数据成员的成员函数。10 2. 在类体内定义用于初始化对象的构造函数,包含一个重载默认值方式。5 3. 在 date 类中定义成员函数,用于处理月、日的进位的改变问题,特别注意不同月份天数的问题,判断闰年问题。15 4. 在 date 类中重载 + 或 -,++ 或 -- 运算符重载,用于实现对日期对象进行加或减 n天,加或减1天操作。20 5. 设计一个双计时器界面,提供人工设定起始日期,人工加、减日期操作,测试 date 类中各成员函数是否能正确运行,并给出测试结果的运行截图。15 */ class Date { int y, m, d;//年//月//日 public: Date(int y0 = 1, int m0 = 1, int d0 = 1); //构造函数,设定年、月、日;并设置参数默认值 void PrintDate(); //屏幕输出日期对象的有关数据(年、月、日) Date operator +(int);//运算符+ Date operator -(int); Date operator ++(int); Date operator --(int); void Tianshu(Date dt2);//判断距离高考天数 int Leijiqi(Date dt1, Date dt3);//累积器界面 }; Date :: Date(int y0, int m0, int d0) { y = y0; m = m0; d = d0; }; void Date :: PrintDate() { cout << y << ":" << m << ":" << d << endl; } static int M[2][12] = { { 31,28,31,30,31,30,31,31,30,31,30,31 },{ 31,29,31,30,31,30,31,31,30,31,30,31 } }; int isleap(int y)//判断瑞年 { if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) return 1; else return 0; } Date Date::operator+(int n) { int leap; leap = 0; leap = isleap(this->y); n += this->d; while (n > M[leap][this->m - 1]) { n -= M[leap][this->m - 1]; if (++(this->m) == 13) { this->m = 1; (this->y)++; leap = isleap(this->y); } } this->d = n; return *this; } Date Date:: operator -(int n) { int leap = 0; leap = isleap(this->y); n = this->d - n; while (n > M[leap][this->m - 2]) { n -= M[leap][this->m - 2]; if (--(this->m) == 1) { this->m = 12; (this->y)--; leap = isleap(this->y); } } this->d = n; return *this; } Date Date:: operator ++(int n) { int leap = 0; leap = isleap(this->y); n = this->d + 1; while (n > M[leap][this->m - 1]) { n -= M[leap][this->m - 1]; if (++(this->m) == 13) { this->m = 1; (this->y)++; leap = isleap(this->y); } } this->d = n; return *this; } Date Date:: operator --(int n) { int leap = 0; leap = isleap(this->y); n = this->d - 1; while (n > M[leap][this->m - 2]) { n -= M[leap][this->m - 2]; if (--(this->m) == 1) { this->m = 12; (this->y)--; leap = isleap(this->y); } } this->d = n; return *this; } void Date :: Tianshu(Date dt2) { int t;//距离高考的天数 if ((m == 7 && d == 7) || (m == 7 && d == 8)) { cout << "今天高考!"; } else if (m > dt2.m) { cout << "今年高考已经结束" << endl; } else if (m == 7 && d > 8) { cout << "今年高考已经结束" << endl; } else if (m == 7 && d < 7) { t = 7 - d; cout << "距离高考还有" << t << "天" << endl; } else if (m == 6) { t = 30 - d + 7; cout << "距离高考还有" << t << "天" << endl; } else if (m == 5) { t = 30 + 31 - d + 7; cout << "距离高考还有" << t << "天" << endl; } else if (m == 4) { t = 30 + 31 + 30 - d + 7; cout << "距离高考还有" << t << "天" << endl; } else if (m == 3) { t = 31 + 30 + 31 + 30 - d + 7; cout << "距离高考还有" << t << "天" << endl; } else cout << "距离高考还有大量时间加油" << endl; }; int Date :: Leijiqi(Date dt1, Date dt3) { cout << "欢迎进入备考时间累积器,请输入你的选择:\n1:增加一个时间\n2:减少一个时间\n3:明天的时间\n4:昨天的时间\n0:退出\n" << endl; int d; cin >> d; switch (d) { case 0: { exit(0); break; } case 1: { cout << "请输入你想添加的天数" << endl; int n; cin >> n; dt3 = dt1 + n; //return dt1.y, dt1.m, dt1.d; cout << "增减后的时间为:" << endl; dt3.PrintDate(); break; } case 2: { cout << "请输入你想减少的天数" << endl; int n; cin >> n; dt3 = dt1 - n; //return dt1.y, dt1.m, dt1.d; cout << "增减后的时间为:" << endl; dt3.PrintDate(); break; } case3: { // int n = 1; dt3 = dt1++; cout << "明天的日期是:" << endl; dt3.PrintDate(); break; } case 4: { // int n = 1; dt3 = dt1--; cout << "昨天的日期是:" << endl; dt3.PrintDate(); break; } } return 0; } int main() { int d1_y, d1_m, d1_d;//用于输入的时间 int d2_y, d2_m, d2_d = 7;//高考日期 int d3_y = 0, d3_m = 0, d3_d = 0;//更改后的时间 cout << "请输入今天的日期:年月日(中间空格键隔开)" << endl; cin >> d1_y >> d1_m >> d1_d;//手动输入开始时间 d2_y = d1_y;//将高考的时间年份设置为输入年份 if (d2_y == 2020) { d2_m = 7; } else { d2_m = 6; } Date dt1(d1_y, d1_m, d1_d), dt2(d2_y, d2_m, d2_d), dt3(d3_y, d3_m, d3_d); cout << "你输入的时间是:" << endl; dt1.PrintDate(); cout << "今年的高考日期是:" << endl; dt2.PrintDate(); cout << "******欢迎进入双计时器,有以下两个功能:******\n1:高考倒计时器;\n2:备考时间累积器;\n0:退出\n请输入你的选项:" << endl; int op; cin >> op; switch (op) { case 0: { exit(0); break; } case 1: { dt1.Tianshu(dt2); break; } case 2: { dt1.Leijiqi(dt1, dt3); dt1.Tianshu(dt2); break; } } }