DATE類

#include<iostream>
using namespace std;
int mdays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//月份所含日期數組 
class Date//日期類 
{
	public:
	int year,month,day;
	Date(int x,int y,int z) {year=x,month=y,day=z;}//構造日期 
	Date() {}//構造空 
	~Date(){}//釋放 
	int days(Date v);//求這一年的第幾天 
	
	int operator-(Date v);//求兩個日期的間隔天數 
	bool operator>(Date v);//判斷日期是否更早 
	bool operator<(Date v);//判斷日期是否更晚 
	void operator/=(Date &v);//交換兩個日期  
	void operator=(Date v);//日期賦值 
	
	void print();//輸出日期 
};
bool leapyear(int x)//判斷閏年的函數 
{
	return (x%100==0&&x%400==0||x%100!=0&&x%4==0);//判斷閏年的方法 
}
bool Date::operator>(Date v)//判斷日期更早的運算符 
{
	return (year<v.year||year==v.year&&month<v.month||year==v.year&&month==v.month&&day<v.day);//這個日期更早的三種情況 
}
bool Date::operator<(Date v)//判斷日期更晚的運算符 
{
	return (year>v.year||year==v.year&&month>v.month||year==v.year&&month==v.month&&day>v.day);//這個日期更晚的三種情況 
}
void Date::operator/=(Date &v)//交換日期的運算符 
{
	swap(year,v.year);//交換年 
	swap(month,v.month);//交換月 
	swap(day,v.day);//交換日 
}
int Date::days(Date u)//求日期是本年的第多少天 
{
	int s=u.day;//加上最後一個月的日期 
	for(int i=1;i<u.month;i++)//累加前幾個月的日子 
	{
		s+=mdays[i];
		if(i==2)//判斷是否閏年,二月28/29天 
		{
			if(leapyear(u.year)) s++;
		}
	}
	return s;
}
void Date::operator=(Date v)//日期賦值 
{
	(*this).year=v.year;
	(*this).month=v.month;
	(*this).day=v.day;
}
int Date::operator-(Date v)//求算間隔 
{
	Date u=(*this);
	if((*this)<v) u/=v; //保證日期更早的在前,爲u,日期較小的在後,爲v 
	//u.print();
	//v.print();
	int day1=days(u),day2=days(v);//計算公式爲u.year~z.year-1完整年度所包含天數-u在本年的第多少天+v在本年的第多少天+1 
	//cout<<day1<<' '<<day2<<endl;
	for(int i=u.year;i<v.year;i++)//計算整年天數 
	{
		if(leapyear(i)) day2+=366;
		else day2+=365;
		//cout<<i<<' '<<day2<<endl;
	}
	day2-=day1;//減掉u在本年的第多少天 
	return day2+1;//+1 
}
void Date::print()//輸出日期 
{
	printf("%d.%d.%d\n",year,month,day);//格式爲XX.X.X 
}
int main()
{
	Date AO(2000,7,1);//AO的生日爲2000.7.1 
	Date XIANG(1983,7,21);//XIANG的生日爲1983.7.21 
	AO/=XIANG;//交換AO和XIANG的生日 
	AO.print();//輸出AO的生日 
	XIANG.print();//輸出XIANG的生日 
	printf("%d",AO-XIANG);//輸出間隔多少天 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章