c++设计一个日期类 Date, 包括年year、月month.日day三个私有数据成员。要求实现日期的基本运算,包括日期加上天数或减去天数,两个日期相减得到的天数等。 2. 3. 上机考试给出了类的头文件分别为 Date.h及测试主程序main cpp, 要求同学们写出实现文件Dato cpp满足程序运行结果! 要求的测试程序的运行结果为: 现在是:2023.6.1 另一天是:2020.10.1 相差天数:972 距现在向前100天是:2023.9.9 距现在向后100天是:2023.2.21 提示 ①闰年及非闰年的天数不一样,可以定义如下的全局二维数据表示//数组存放每月天数 int day_month[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}//本行为闰年 (2)另外。程序可能需要把日期转换为天数或将天数转换为日期。它们都可以以固定的日期作为参考。 假设这里日期固定为2000年1月1日,也就是日期类Date只考虑2000年以后的日期
时间: 2024-02-28 16:55:22 浏览: 163
Date.h文件内容如下:
```c++
#ifndef DATE_H
#define DATE_H
class Date {
public:
Date(int y, int m, int d); // 构造函数
void addDays(int days); // 加上days天
void subDays(int days); // 减去days天
int diffDays(const Date& other) const; // 计算与另一个日期之间相差的天数
void forwardDays(int days); // 距离当前日期向前days天的日期
void backwardDays(int days); // 距离当前日期向后days天的日期
void printDate() const; // 输出日期
private:
int year, month, day; // 年、月、日
};
#endif // DATE_H
```
Date.cpp文件内容如下:
```c++
#include "Date.h"
#include <iostream>
// 数组存放每月天数,0为非闰年,1为闰年
int day_month[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}};
// 是否为闰年
bool isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 计算给定日期距离2000年1月1日的天数
int calcDays(int year, int month, int day) {
int days = 0;
for (int i = 2000; i < year; i++) {
days += isLeapYear(i) ? 366 : 365;
}
int leap = isLeapYear(year) ? 1 : 0;
for (int i = 0; i < month - 1; i++) {
days += day_month[leap][i];
}
days += day;
return days;
}
// 构造函数
Date::Date(int y, int m, int d) {
year = y;
month = m;
day = d;
}
// 加上days天
void Date::addDays(int days) {
int total_days = calcDays(year, month, day) + days;
int y = 2000, m = 1, d = 1;
while (total_days > (isLeapYear(y) ? 366 : 365)) {
total_days -= isLeapYear(y) ? 366 : 365;
y++;
}
int leap = isLeapYear(y) ? 1 : 0;
while (total_days > day_month[leap][m - 1]) {
total_days -= day_month[leap][m - 1];
m++;
}
d = total_days;
year = y;
month = m;
day = d;
}
// 减去days天
void Date::subDays(int days) {
int total_days = calcDays(year, month, day) - days;
int y = 2000, m = 1, d = 1;
while (total_days > (isLeapYear(y) ? 366 : 365)) {
total_days -= isLeapYear(y) ? 366 : 365;
y++;
}
int leap = isLeapYear(y) ? 1 : 0;
while (total_days > day_month[leap][m - 1]) {
total_days -= day_month[leap][m - 1];
m++;
}
d = total_days;
year = y;
month = m;
day = d;
}
// 计算与另一个日期之间相差的天数
int Date::diffDays(const Date& other) const {
int days1 = calcDays(year, month, day);
int days2 = calcDays(other.year, other.month, other.day);
return days1 - days2;
}
// 距离当前日期向前days天的日期
void Date::forwardDays(int days) {
subDays(days);
}
// 距离当前日期向后days天的日期
void Date::backwardDays(int days) {
addDays(days);
}
// 输出日期
void Date::printDate() const {
std::cout << year << "." << month << "." << day << std::endl;
}
```
main.cpp文件内容如下:
```c++
#include "Date.h"
#include <iostream>
int main() {
// 测试数据
Date now(2023, 6, 1);
Date other(2020, 10, 1);
// 相差天数
std::cout << "现在是:";
now.printDate();
std::cout << "另一天是:";
other.printDate();
std::cout << "相差天数:" << now.diffDays(other) << std::endl;
// 距离当前日期向前100天的日期
std::cout << "距现在向前100天是:";
now.forwardDays(100);
now.printDate();
// 距离当前日期向后100天的日期
std::cout << "距现在向后100天是:";
now.backwardDays(200);
now.printDate();
return 0;
}
```
阅读全文