exam5.cpp

来自「C++语言程序设计题典」· C++ 代码 · 共 125 行

CPP
125
字号
#include <iostream.h>
int day_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
	       {31,29,31,30,31,30,31,31,30,31,30,31}};  
           //day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年
class Date
{
	int year,month,day;
    int leap(int);
	int dton(Date &);
	Date ntod(int);
public:
	Date() {}
	Date(int y,int m,int d)
	{
		year=y;month=m;day=d;
	}
	void setday(int d) { day=d; }
	void setmonth(int m) { month=m; }
	void setyear(int y) { year=y; }
	int getday() { return day; }
	int getmonth() { return month; }
	int getyear() { return year; }
	Date operator+(int days)
	{
		static Date date;
	    int number=dton(*this)+days;
	    date=ntod(number);
	    return date;
	}
	Date operator-(int days)
	{
		static Date date;
	    int number=dton(*this);
	    number-=days;
	    date=ntod(number);
	    return date;
	}
	int operator-(Date &b)
	{
		int days=dton(*this)-dton(b)-1;
		return days;
	}
	void disp()
	{
		cout << year << "." << month << "." << day << endl;
	}
};
int Date::leap(int year)
{
    if (year%4==0 && year%100!=0 || year%400==0)  //是闰年
		return 1;
    else                                          //不是闰年
	    return 0;
}
int Date::dton(Date &d)
{
    int y,m,days=0;
    for (y=1;y<=d.year;y++)
		if (leap(y))
			days+=366;
        else        
            days+=365;
	for (m=0;m<d.month-1;m++)
		if (leap(d.year))
			days+=day_tab[1][m];
        else
			days+=day_tab[0][m];
    days+=d.day;
	return days;
}
Date Date::ntod(int n)
{
	int y=1,m=1,d,rest=n,lp;
	while (1)
	{
		if (leap(y))
		{
			if (rest<=366)
				break;
			else
			    rest-=366;
		}
		else
		{
			if (rest<=365)
				break;
			else
				rest-=365;
		}
		y++;
	}
	y--;
    lp=leap(y);
	while (1)
	{
		if (lp)
		{
			if (rest>day_tab[1][m-1])
				rest-=day_tab[1][m-1];
			else
				break;
		}
		else
		{
			if (rest>day_tab[0][m-1])
				rest-=day_tab[0][m-1];
			else
				break;
		}
		m++;
	}
	d=rest;
	return Date(y,m,d);
}
void main()
{
	Date now(2002,6,12),then(2003,2,10);
	cout << "now:";now.disp();
	cout << "the:";then.disp();
	cout << "相差天数:" << (then-now) << endl;
	Date d1=now+100,d2=now-100;
	cout << "now+100:";d1.disp();
	cout << "now-100:";d2.disp();
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?