设计一个日期类Date.包括年year、月month、日day三个私有数据成员。要求实现日期的基本运算,包括日期加上天数或减去天数,两个日期相减得到的天数等。 上机考试给出了类的头文件分别为;Date h及测试主程序main.cpp,要求同学们写出类实现文件Date cpp满足程序运行要求! 要求的测试程序的运行结果为: 现在是:2023.6.1 另一天是:2020.10.1 相差天数:972 距现在向前100天是:2023.9.9 距现在向后100天是:2023.2.21 提示 (1)国年及非国年的天数不一样,可以定义如下的全局二维数据表示//数组存放每月天数 int day _month [21 [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}//本行为闰年 (②另外,程序可能需要把日期转换为天数或将天数转换为日期,它们都可以以固定的日期作为参考,假设这里日期固定为2000年1月1日,也就是日期类Date只考虑2000年以后的日期
时间: 2024-02-28 17:55:19 浏览: 260
好的,我来给你写一下Date类的实现文件Date.cpp:
```
#include "Date.h"
#include <iostream>
using namespace std;
//构造函数
Date::Date(int y, int m, int d)
{
year = y;
month = m;
day = d;
}
//判断是否为闰年
bool Date::isLeapYear(int y)
{
return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}
//获取某年某月的天数
int Date::getDaysOfMonth(int y, int m)
{
int days[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}};
return days[isLeapYear(y)][m - 1];
}
//日期加上天数或减去天数
Date Date::operator+(int days)
{
int y = year, m = month, d = day;
d += days;
while (d > getDaysOfMonth(y, m))
{
d -= getDaysOfMonth(y, m);
m++;
if (m > 12)
{
m = 1;
y++;
}
}
while (d < 1)
{
m--;
if (m < 1)
{
m = 12;
y--;
}
d += getDaysOfMonth(y, m);
}
return Date(y, m, d);
}
Date Date::operator-(int days)
{
return (*this) + (-days);
}
//两个日期相减得到的天数
int Date::operator-(const Date &d)
{
int days = 0;
if (*this < d)
{
for (int i = year; i < d.year; i++)
{
days -= isLeapYear(i) ? 366 : 365;
}
for (int i = 1; i < month; i++)
{
days -= getDaysOfMonth(year, i);
}
days -= day;
for (int i = d.year; i > year; i--)
{
days += isLeapYear(i) ? 366 : 365;
}
for (int i = 1; i < d.month; i++)
{
days += getDaysOfMonth(d.year, i);
}
days += d.day;
}
else
{
days = d - *this;
days = -days;
}
return days;
}
//距现在向前100天是哪一天
Date Date::before(int days)
{
return (*this) - days;
}
//距现在向后100天是哪一天
Date Date::after(int days)
{
return (*this) + days;
}
//重载小于号
bool Date::operator<(const Date &d)
{
if (year != d.year)
{
return year < d.year;
}
else if (month != d.month)
{
return month < d.month;
}
else
{
return day < d.day;
}
}
//输出日期
void Date::print()
{
cout << year << "." << month << "." << day;
}
```
在这里,我们实现了日期加上天数或减去天数、两个日期相减得到的天数、距现在向前100天是哪一天、距现在向后100天是哪一天等基本运算。
对于闰年的判断,我们定义了isLeapYear函数,对于每个月的天数,我们使用二维数组day\_month表示,通过isLeapYear函数判断是否是闰年,然后获取当月的天数。
在实现日期加减运算的时候,我们使用while循环来判断加减后的日期是否合法,如果不合法,就需要进位或借位。
最后在输出日期的时候,我们使用了print函数,方便测试程序的输出。
希望这份代码能够帮到你!
阅读全文