当前位置: 移动技术网 > IT编程>开发语言>C/C++ > 日期计数器:C++实现

日期计数器:C++实现

2018年12月26日  | 移动技术网IT编程  | 我要评论

电驴子播放器,ca4116,人体艺术林志玲

日期计数器实现:在程序中定义日期类: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"<

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网