您的位置:首页 > 编程语言 > C语言/C++

C++ 实现 Data类(简单的日期计算器)

2015-12-13 15:02 393 查看
#include <iostream>
#include <assert.h>
using namespace std;

//int Month1[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//int Month2[13] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

////闰年判断函数
//    int Data::Leep_year(int year)
//    {
//        if ((year % 400) || ((year % 4) && !(year % 100)))
//        {
//            return 1;
//        }
//        else
//        {
//            return -1;
//        }
//    }

//返回x月份的天数
int GetMonthDay(int year, int month)
{
assert(month > 0 && month < 13);
static int monthArray[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int day = monthArray[month];
if ((month == 2) && (year % 400) || (year % 4 && year % 100))
{
day += 1;
}
return day;
}

class Date
{
public:
//声明display函数
void display();

//Data 构造函数
Date(int year = 1900, int month = 1, int day = 1)
:_year(year)
,_month(month)
,_day(day)
{}

//重载 - 运算符
Date operator-(int n)
{
Date tmp(*this);
tmp._day = tmp._day - n;
if (n < 0)
{
return *this + (-n);
}
while (tmp._day <= 0)
{
if (tmp._month == 1)
{
tmp._month = 12;
tmp._year = tmp._year - 1;
}
else
{
tmp._month = tmp._month - 1;
}
tmp._day = tmp._day + GetMonthDay(tmp._year, tmp._month);
}
return tmp;
}
//重载+运算符
Date operator+(int n)
{
Date tmp(*this);
if (n >= 0)                    //n>=0的情况
{
tmp._day = tmp._day + n;

while (tmp._day > GetMonthDay(tmp._year,tmp._month))
{
tmp._day = tmp._day - GetMonthDay(tmp._year, tmp._month);
if (tmp._month == 12)            //tmp.month=12,则tmp.month+1为1
{
tmp._month = 1;
tmp._year = tmp._year + 1;
}
else
{
tmp._month = tmp._month + 1;
}
}
}
else                    //n<0的情况
{
return (*this - (-n));
}
return tmp;
}

//重载+=运算符
Date& operator+=(int n)
{
*this = *this + n;
return *this;
}

//重载-=运算符
Date& operator-=(int day)
{
*this = *this - day;
return *this;
}

//重载前置++运算符
Date& operator++()
{
*this = *this + 1;
return *this;
}

//重载后置++运算符
Date operator++(int)
{
Date tmp(*this);
*this = *this + 1;
return tmp;
}

//Date operator++(int)
//{
//    Date tmp(*this);
//    ++(*this);
//    return tmp;
//}

//重载前置--运算符
Date& operator--()
{
*this = *this - 1;
return *this;
}

//重载后置--运算符
Date operator--(int)
{
Date tmp(*this);
*this = *this - 1;
return tmp;
}

//Date operator--(int)
//{
//    Date tmp(*this);
//    --(*this);
//    return tmp;
//}

//重载>运算符
bool operator>(const Date& d)
{
return (_year > d._year
|| (_year == d._year&&_month > d._month)
|| _year == d._year&&_month == d._month&&_day > d._day);
}

//bool operator>(const Date& d)
//{
//    if (_year > d._year)
//    {
//        return true;
//    }
//    else if (_year == d._year)
//    {
//        if (_month > d._month)
//        {
//            return true;
//        }
//        else if(_month == d._month)
//        {
//            if (_day > d._day)
//            {
//                return true;
//            }
//        }
//    }
//    return false;
//}

//重载==运算符
bool operator==(const Date& d)
{
return _year==d._year
&&_month==d._month
&&_day==d._day;
}

//重载<运算符
bool operator<(const Date& d)
{
return !(*this>d || *this == d);
}

//重载!=运算符
bool operator!=(Date& d)
{
return !(*this == d);
}

//重载<=运算符
bool operator<=(const Date& d)
{
return *this<d || *this==d;
}

//两个日期进行相减求值
int operator-(const Date& d)
{
int flag = 1;
Date max = *this;
Date min = d;
if (*this < d)
{
min = *this;
max = d;
flag = -1;
}

int days = 0;

while (min != max)
{
++min;
days++;        //累加法
}

return flag*days;
}

friend istream& operator>>(istream& is, Date& d); //声明友元函数
friend ostream& operator<<(ostream& os, const Date& d); //声明友元函数

private:
int _year;
int _month;
int _day;
};

//定义display函数
void Date::display()
{
cout << _year << "-" << _month << "-" << _day << endl;
}

//重载>>运算符
istream& operator>>(istream& is, Date& d)
{
cout<<"请输入一个日期的年月日:";
is>>d._year>>d._month>>d._day;

return is;
}

//重载<<运算符
ostream& operator<<(ostream& os, const Date& d)
{
cout<<d._year<<"-"<<d._month<<"-"<<d._day<<endl;
return os;
}

int main()
{
int year = 1900, month = 1, day = 1;
while (1)
{
cout << "请输入起点日期: " << endl;
cin >> year >> month >> day;
Date d1(year, month, day);
cout << "请输入天数:";
cin >> day;
cout << "距离"<<day<<"天的日期是:" << endl;
d1 = d1 + day;
d1.display();
}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Data C++ 日期计算器