日期类的应用

来源:互联网 发布:nginx 4层负载均衡 编辑:程序博客网 时间:2024/06/15 05:22

设计一个日期类date,包括年月日等私有数据成员,要求通过重载运算符实现日期的基本运算,如某一日期加上天数,某一日期减去天数和两日期相差的天数等。

 

 

 

 

 

#include<iostream.h>

const intday_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},

{31,29,31,30,31,31,30,31,30,31}};

//day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年

class date

{

private:

       intyear,month,day;

public:

       date(){};

       date(inty,int m,int d){year=y;month=m;day=d;}

       voidsetday(int d){day=d;}

       voidsetmomth(int m){month=m;}

       voidsetyear(int y){year=y;}

       intgetday(){return day;}

       intgetmonth(){return month;}

       intgetyear(){return year;}

       intleap(int);              //判定制定的年份是否为闰年

       intdton(date &);           //将制定的日期转换为从0年0月0日起的天数

       datentod(int);             //将制0年0月0日起的天数转换为对应的日期

       dateoperator+(int days)    //返回一日期加一天数得到的日期

       {

       datedate;

       intnumber=dton(*this)+days;

       date=ntod(number);

       returndate;

}

       dateoperator-(int days)//返回一日期减去天数得到的日期

       {

        date date;

       intnumber=dton(*this);

       number-=days;

       date=ntod(number);

       returndate;

      

       }

       intoperator-(date &b)//返回两日期相差的天数

       {

        int days=dton(*this)-dton(b)-1;

        return days;

      

       }

       voiddisp()

       {

        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)//将制定的日期转换为从0年0月0日起的天数

{

 inty,m,days=0;

 for(y=1;y<=d.year;y++)

        if(leap(d.year))

               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)//将制0年0月0日起的天数转换为对应的日期

{

 inty=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()

{

 datenow(2010,10,1),then(2009,10,1);

 cout<<"now:";now.disp();

cout<<"then:";then.disp();

cout<<"相差天数:"<<(then-now)<<endl;

date d1=now+100,d2=now-100;

cout<<"now+100:";d1.disp();

cout<<"now-100:";d2.disp();

 

}

原创粉丝点击