C/C++实现日期计算器的示例代码分享

—-想了解C/C++实现日期计算器的示例代码分享的全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

问题介绍:

今天突然看到一个问题看起来蛮有趣的,跟大家分享一下. 给定任意日期对该日期进行加减天数,最后得出加减后出现的日期.以及给两个日期你可以得出他们两个之间相隔多少天.(需要考虑闰年,每个月天数不同,我们需要写一个我们直接可以使用的日期加减器)因为时间比较仓促,我也没有写界面,只有其中几个主要的函数的架构思想以及简单的调试就发出来了.

代码实现:

  #include<iostream>   #include<Windows.h>   #include<assert.h>   using namespace std;      class Date   {      public:        Date(int year = 1997,int month = 1,int day = 1)     :years(year)     , months(month)     , days(day)     {       assert(IScorrect());     }        Date& operator=(const Date& d)     {       if (this != &d)       {         years = d.years;         months = d.months;         days = d.days;       }       return *this;     }        Date& operator + (int day)     {       while (day > 365)       {         if (ISleapyear() && day > 366)         {           years++;           day = day - 366;         }         else         {           years++;           day = day - 365;         }       }       while (day >= Getmonthsday())       {           //注意这里的次序问题,一定先减 再加 最后再判断. 如果顺序错了会出BUG的.         day = day - Getmonthsday();          months++;         if (months > 12)         {           years++;           months = 1;         }       }          while (day > 0)       {           DateAdvance();         day = day - 1;         days++;       }       return *this;     }        Date& operator - (int day) //先减去一年,然后在使用加的重载,所以你只需要写一个无懈可击的加算法就够了.     {       while (day > 365)       {         if (ISleapyear() && day > 366)         {                 day = day - 366;           years--;         }         else         {           day = day - 365;           years--;         }       }       if (ISleapyear())       {         day = 366 - day;         years--;       }       else       {         day = 365 - day;         years--;       }       operator+(day);       return *this;     }        void DateAdvance() //用于出现可以进化的情况     {       if (days > Getmonthsday())       {         months++;         days = 1;       }       if (months > 12)       {         years++;         months = 1;       }     }          int operator - (Date D)     {       int count = 0;       if (*this > D)       {         while (*this != D)         {           D.operator+(1);           count++;         }       }       else       {         while (*this != D)         {           operator+(1);           count++;         }       }       return count;     }        bool ISleapyear()     {       if ((years % 4 == 0 && years % 100 != 0) || (years % 400 == 0))       {         return true;       }       return false;     }     int Getmonthsday()     {       int monthDays[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };       if (ISleapyear() && months == 2)       {         return 29;       }       return monthDays[months];     }        void print()     {       cout << "目前的时间为";       cout << years << "." << months << "." <<days<< endl;     }        bool IScorrect()     {       if (years > 0 && ((years % 4 == 0 && years % 100 != 0) || (years % 400 == 0)) && days < 367)//闰年       {         if (months >0 && months < 13)         {           if (days > 0 && days <= Getmonthsday())           {             return true;           }         }       }       else if (years >0 && days < 366) //非闰年       {         if (months >0 && months < 13)         {           if (days > 0 && days <= Getmonthsday())           {             return true;           }         }       }       return false;     }        Date operator += (int day)     {       *this = *this + 100;       return *this;     }     Date operator -= (int day)     {       return *this = *this - day;     }     inline Date& operator++()     {       *this += 1;       return *this;     }     inline Date operator++(int)     {       Date tmp(*this);       *this = *this + 1;       return tmp;     }        bool operator == (const Date& d)     {       return (years == d.years&& months == d.months&&days == d.days);     }        bool operator != (const Date& d)     {       return !(*this == d);     }        bool operator >(const Date& d)     {       if (years > d.years ||         (years == d.years&&months > d.months)         || (years == d.years&&months == d.months && days > d.days))       {         return true;       }       return false;     }        bool operator < (const Date& d)     {       return !(*this > d);     }        bool operator >= (const Date& d)     {       return (*this == d) && (*this > d);     }        bool operator <= (const Date& d)     {       return (*this == d) && (*this < d);     }      private:     int years;     int months;     int days;   };      void Test()   {     Date d1(2012, 4, 5);     Date d2(2013, 4, 5);     d1.print();     /*d1 = d1 - 400;*/     d1.print();     cout << d1 - d2 << endl;     d1.print();     system("pause");   }     

总结:

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/488515.html

(0)
上一篇 2020年11月12日
下一篇 2020年11月12日

精彩推荐