您的位置:首页 > 其它

日期类的实现

2016-03-17 16:52 351 查看
#include<iostream>
using namespace std;
class Data
{
public:
Data(int year , int month, int day) ;
void Display();
bool IsInvalidData();
int DayOfMonth();
Data& operator=(Data const& d)
{
if (this != &d)
{
_year = d._year;
_month = d._month;
_day = d._day;
}
return *this;
}
Data& operator+(const int day)
{
int last;
if (day > 0)
{
_day += day;
while (_day > this->DayOfMonth())
{
last = _day - DayOfMonth();
if (_month < 12)
{
_month++;
}
else
{
_year++;
_month = 1;
}
_day = last;
}
}
return *this;
}
Data& operator-(const int day)
{
int last;
if (day >= 0)
{
_day -= day;
while (_day <=0)
{
last = _day + DayOfMonth();
if (_month > 1)
{
_month--;
}
else
{
_year -= 1;
_month = 12;
}
_day = last;
}
}
//else
//{
//Data& operator+ 3;
//}
return *this;
}
Data& operator++()
{
_day++;
if (_day > DayOfMonth())
{
if (_month < 12)
{
_month += 1;
_day = 1;
}
else
{
_year += 1;
_month = 1;
_day = 1;
}
}
return *this;
}
Data operator++(int)
{
Data tmp = *this;
_day++;
if (_day > DayOfMonth())
{
if (_month < 12)
{
_month += 1;
_day = 1;
}
else
{
_year += 1;
_month = 1;
_day = 1;
}
}
return tmp;
}
Data operator--(int)
{
Data tmp = *this;
_day--;
if (_day <1)
{
if (_month >1)
{
_month -= 1;
_day = DayOfMonth();
}
else
{
_year -= 1;
_month = 12;
_day = DayOfMonth();
}
}
return tmp;
}
int operator-(Data const& d)
{
int count = 0;
Data tmp = d;
if (*this > d)
{
while (tmp != *this)
{
++tmp;
count++;
}
return count;
}
}
bool operator!=(Data const& d)
{
return(!(_year == d._year && _month == d._month && _day == d._day));
}
bool operator==(Data const& d)
{
return(_year == d._year && _month == d._month && _day == d._day);
}
bool operator>(Data const& d)
{
return((_year > d._year || _year == d._year && _month > d._month) || ((_year == d._year) && (_month == d._month) && (_day > d._day)));
}
Data operator--()
{
_day--;
if (_day <1)
{
if (_month >1)
{
_month -= 1;
_day = DayOfMonth();
}
else
{
_year -= 1;
_month = 12;
_day = DayOfMonth();
}
}
return *this;
}
Data(Data const& d)
{
this->_year = d._year;
this->_month = d._month;
this->_day = d._day;
}
private:
int _year;
int _month;
int _day;
bool IsLeapYear(int year);
};
Data::Data(int year = 0, int month = 0, int day = 0)
{
_year = year;
_month = month;
_day = day;
if (IsInvalidData() == false)
{
_year = 1900;
_month = 1;
_day=1;
}
}
void Data::Display()
{
cout << this->_year << "-" << this->_month << "-" << this->_day << endl;
}
bool Data::IsLeapYear(int year)
{
if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
{
return true;
}
else
{
return false;
}
}
//Data&::Data operator=(Data const& d)
//{
//
//}
bool Data::IsInvalidData()
{
if (_year < 1900 || _month<1 || _month>12 || _day<1 || _day>DayOfMonth())
{
return false;
}
else
{
return true;
}
}
int Data::DayOfMonth()
{
int arr[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (IsLeapYear(_year) == true)
{
arr[2] += 1;
}
return arr[_month];
}
void test1()
{
Data d1(2016, 1, 1);
d1.Display();
Data d2;
d2= d1;
d2.Display();
}
void test2()
{
Data d1(2016, 1, 1);
d1.Display();
d1 = d1 + 30;
d1.Display();
d1 = d1 + 29;
d1.Display();
d1 = d1 + 400;
d1.Display();
}
void test3()
{
Data d1(2016, 1, 21);
d1.Display();
d1 = d1-(10);
d1.Display();
//d1 = d1-11;
//d1.Display();
//d1 = d1 - 365;
//d1.Display();
}
void test4()
{
Data d1(2016, 1, 1);
++d1;
d1.Display();
Data d2(2016, 12, 31);
++d2;
d2.Display();
Data d3(2016, 1, 31);
++d3;
d3.Display();
}
void test5()
{
Data d1(2016, 1, 1);
Data a;
a=d1++;
a.Display();
Data d2(2016, 12, 31);
a=d2++;
a.Display();
Data d3(2016, 1, 31);
a=d3++;
a.Display();
}
void test6()
{
Data d1(2016, 2, 1);
Data a;
a = d1--;
a.Display();
}
void test7()
{
Data d1(2016, 11, 10);
d1.Display();
Data d2(2016, 12, 31);
d2.Display();
int count = d2 - d1;
cout << count << endl;
}

int main()
{
//test1();
//test2();
//test3();
//test4();
//test5();
//test6();
test7();
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  日期类