欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

日期计数器:C++实现

程序员文章站 2022-03-24 14:01:55
日期计数器实现:在程序中定义日期类:class date{};,主要运用操作符重载知识在其中实现:日期加或减一定天数,日期减日期相差天数,两日期的各种比较与日期输入输出等功能。 具体代码实现:...

日期计数器实现:在程序中定义日期类:class date{};,主要运用操作符重载知识在其中实现:日期加或减一定天数,日期减日期相差天数,两日期的各种比较与日期输入输出等功能。

具体代码实现:

#include 
#include 
using namespace std;
class data
{
	friend ostream& operator<<(ostream& _cout, const data& d);
	friend istream& operator>>(istream& _cin, data& d);
public:
	data(const int year=1900,const int month=1,const int day=1)
		:_year(year)
		,_month(month)
		,_day(day)
	{}
	data(const data& data)
	{
		_year=data._year;
		_month=data._month;
		_day=data._day;
	}
	~data()
	{}
	int getdaysinmonth(int year,int month);    //获取每个月的天数
	bool isleapyear(int year);       //判断闰年
	bool isvalidata();       //判断日期是否合法
	data & operator =(const data &d);    
	data operator+(int day);
	data operator -(int day);
	int operator -(const data &d);
	data &operator --();
	data operator --(int);
	data &operator ++();
	data operator ++(int);
	bool operator >(const data &d);
	bool operator <(const data &d);
	bool operator >=(const data &d);
	bool operator <=(const data &d);
	bool operator ==(const data &d);
	bool operator !=(const data &d);
private:
	int _year;
	int _month;
	int _day;
};

bool data::isleapyear(int year)     //判断闰年
{
	return ((year%4==0)&&(year%100!=0))||(year%400==0)?true:false;
}

bool data::isvalidata()      //判断日期是否合法     
{
	if((_year>=1900)&&((_month>0)&&(_month<13))&&
	  ((_day<=getdaysinmonth(_year,_month))&&(_day>0)))
	{
		return true;
	}
	return false;
}

int data::getdaysinmonth(int year,int month)  //获取每个月的天数
{
	int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	if(isleapyear(year)&&(month==2))
	{
		days[month]++;
	}
	return days[month];
}

ostream& operator<<(ostream& _cout, const data& d)
{
	_cout<>(istream& _cin, data& d)
{
	_cin>>d._year>>d._month>>d._day;
	return _cin;
}


data & data:: operator =(const data &d)
{
	if(this != &d)
	{
		_year=d._year;
		_month=d._month;
		_day=d._day;
	}
	return *this;
}

data data::operator+(int day)
{
	if(day<0)
	{
		day=0-day;
		return *this-day;
	}
	data tmp(*this);
	tmp._day+=day;
	while(tmp._day>getdaysinmonth(tmp._year,tmp._month))
	{
		tmp._day-=getdaysinmonth(tmp._year,tmp._month);
		tmp._month++;
		if(tmp._month==13)
		{
			tmp._month=1;
			tmp._year++;
		}
	}
	return tmp;
}

data data:: operator -(int day)
{
	if(day<0)
	{
		day=0-day;
		return *this+day;
	}
	data tmp(*this);
	tmp._day-=day;
	while(tmp._day<=0)
	{
		tmp._month--;
		if(tmp._month==0)
		{
			tmp._month=12;
			tmp._year--;
		}
		tmp._day+=getdaysinmonth(tmp._year,tmp._month);
	}
	return tmp;
}

int data::operator -(const data &d)
{
	int count=0;
	if(*this>d)
	{
		data tmp=d;
		while(tmp!=*this)
		{
			tmp++;
			count++;
		}
		return count;
	}
	else
	{
		data tmp=*this;
		while(tmp!=d)
		{
			tmp++;
			count++;
		}
		return count;
	}
}

data & data::operator ++()      //前置++
{
	_day+=1;
	if(_day>getdaysinmonth(_year,_month))
	{
		_month++;
		if(_month==13)
		{
			_year++;
			_month=1;
		}
		_day=1;
	}
	return *this;
}

data data::operator ++(int)     //后置++
{
	data tmp=*this;
	_day+=1;
	if(_day>getdaysinmonth(_year,_month))
	{
		_month++;
		if(_month==13)
		{
			_year++;
			_month=1;
		}
		_day=1;
	}
	return tmp;
}

data & data::operator --()    //前置--
{
	_day-=1;
	if(_day==0)
	{
		_month--;
		if(_month==0)
		{
			_year--;
			_month=12;
		}
		_day=getdaysinmonth(_year,_month);
	}
	return *this;
}

data data::operator --(int)     //后置--
{
	data tmp=*this;
	_day-=1;
	if(_day==0)
	{
		_month--;
		if(_month==0)
		{
			_year--;
			_month=12;
		}
		_day=getdaysinmonth(_year,_month);
	}
	return tmp;
}

bool data::operator >(const data &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 data::operator <(const data &d)
{
	if(_year=(const data &d)
{
	return !(*thisd);
}

bool data::operator ==(const data &d)
{
	return (_year==d._year)&&(_month==d._month)&&(_day==d._day);
}

bool data::operator !=(const data &d)
{
	return !(*this==d);
}
//测试函数
void test1()
{
	data d1(2016,9,30);
	data d2(2016,10,6);
	d1=d2;
	d2=d2+999;
	d1=d1-999;
	data d=--d2;
	d=d2--;
	data d3(2016,9,30);
	data d4(2001,10,6);
	int ret=d3-d4;
	cout<d2)
	{cout<<"d1>d2"<=d6)
	{cout<<"d5>=d6"<