国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C/C++實(shí)現(xiàn)日期計(jì)算器的示例代碼

2020-01-26 13:56:03
字體:
供稿:網(wǎng)友

問題介紹:

今天突然看到一個(gè)問題看起來蠻有趣的,跟大家分享一下. 給定任意日期對該日期進(jìn)行加減天數(shù),最后得出加減后出現(xiàn)的日期.以及給兩個(gè)日期你可以得出他們兩個(gè)之間相隔多少天.(需要考慮閏年,每個(gè)月天數(shù)不同,我們需要寫一個(gè)我們直接可以使用的日期加減器)因?yàn)闀r(shí)間比較倉促,我也沒有寫界面,只有其中幾個(gè)主要的函數(shù)的架構(gòu)思想以及簡單的調(diào)試就發(fā)出來了.

代碼實(shí)現(xiàn):

#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())     {         //注意這里的次序問題,一定先減 再加 最后再判斷. 如果順序錯(cuò)了會出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) //先減去一年,然后在使用加的重載,所以你只需要寫一個(gè)無懈可擊的加算法就夠了.   {     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() //用于出現(xiàn)可以進(jìn)化的情況   {     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 << "目前的時(shí)間為";     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"); } 

總結(jié):

日期類對我們掌握面向?qū)ο筮@里還是一個(gè)蠻重要的知識,你至少要能很熟練很正確地自己快速寫出這個(gè)整個(gè)框架,然后一個(gè)一個(gè)實(shí)現(xiàn)函數(shù),我只能說很重要,很重要,很重要大家一定要掌握.

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 固原市| 平罗县| 元阳县| 呼图壁县| 灵山县| 屏边| 喀喇沁旗| 泾阳县| 旌德县| 富裕县| 贡觉县| 玉林市| 江华| 宁津县| 北碚区| 论坛| 平安县| 湘西| 亳州市| 镇赉县| 鞍山市| 怀宁县| 浦东新区| 达拉特旗| 吉木乃县| 高平市| 博客| 遂昌县| 万山特区| 司法| 酒泉市| 永登县| 新野县| 大渡口区| 抚远县| 上栗县| 盐池县| 松江区| 中山市| 浮山县| 望谟县|