雪花缘 2019-06-20 19:27 采纳率: 50%
浏览 259
已结题

求此题的完整的程序设计,一定要完整!能在VC++6.0上运行。

图片说明

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-06-20 20:51
    关注

    先mark下,完整的代码稍后给你写

    #include<iostream>
    using namespace std;
    class Date
    {
    public:
        Date(int year = 1900, int month = 1, int day = 1)   //构造
        :_year(year)
        , _month(month)
        , _day(day)
        {
            if (!isInvalidDate(_year, _month, _day))
            {
                _year = 1900;
                _month = 1;
                _day = 1;
            }
        }
    
        Date operator+(int count)
        { 
            Date tmp(*this);
            tmp._day += count;
            ToCorrect(tmp);
            return tmp;
        }
        Date operator-(int count)
        {
            Date tmp(*this);
            tmp._day -= count;
            ToCorrect(tmp);
            return tmp;
        }
    
        Date& operator++()   //前置++
        {
            (*this)++;
            return *this;
        }
        Date operator++(int)    //后置++
        {
            Date tmp(*this);
            (*this)+=1;
            return tmp;
        }
        Date& operator--()
        {
            (*this)--;
            return *this;
        }
        Date operator--(int)
        {
            Date tmp(*this);
            (*this)--;
            return tmp;
        }
        int operator-(const Date &d)
        {
            int flag = 1;
            Date max = *this;
            Date min = d;
            if (*this<d)
            {
                max = d;
                min = *this;
                flag = -1;
            }
            int count=0;
            while (min != max)
            {
                ++min;
                count++;
            }
            return count*flag;
        }
        Date& operator+=(int day)
        {
            *this = *this + day;
            return *this;
        }
        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);
        }
        bool operator>(const Date &d)
        {
            return (_year > d._year
                || (_year == d._year && _month > d._month)
                || (_year == d._year && _month == d._month && _day > d._day));
        }
        bool operator==(const Date &d)
        {
            return ((_year == d._year) && (_month == d._month) && (_day == d._day));
        }
    
    public:    
        bool IsLeapYear(int year)
        {
            if(year % 400 || (year % 4 && year % 100))
                return true;
            return false;
        }
        int YearsOfMonth(int year, int month)
        {
            int day;
            int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            day = days[month];
            if (month == 2)
                day += IsLeapYear(year);
            return day;
        }
    
        Date ToCorrect(Date &d)
        {
            if (d._day>YearsOfMonth(d._year, d._month))
            {
                while (d._day > YearsOfMonth(d._year, d._month))
                {
                     d._day -= YearsOfMonth(d._year,d._month);
    
                    if (d._month == 12)
                    {
                        d._year++;
                        d._month = 1;
                    }
                    else
                    {
                        ++d._month;
                    }
                }
            }
            else
            {
                while (d._day <= 0)
                {
                    if (d._month == 1)
                    {
                        d._year--;
                        d._month = 12;
                    }
                    else
                    {
                        --d._month;
                    }
                    d._day += YearsOfMonth(d._year, d._month);
                }
            }
            return d;
        }
    
    
        bool isInvalidDate(int year, int month, int day)
        {
            if ((year < 1) || (month<0 || month>12) || (day<0 || day>YearsOfMonth(year,month)))
                return false;
            return true;
        }
        void Display()
        {
            cout << _year << "-" << _month << "-" << _day << endl;
        }
        friend istream& operator>>(istream& is, Date &d);
        friend ostream& operator<<(ostream& os, const Date &d);
    private:
        int _year;
        int _month;
        int _day;
    };
    istream& operator>>(istream& is, Date& d)
    {
        cout << "请输入一个日期" << endl;
        is >> d._year >> d._month >> d._day;
        return is;
    }
    
    ostream& operator<<(ostream& os, const Date &d)
    {
        cout << d._year << "-" <<d. _month << "-" << d._day << endl;
        return os;
    }
    int main()
    {
        /*Date d1(2016,8,18);
        //d1.Display();
    
        //d1 = d1++;
        cout << d1 << endl;*/
    
        //Date d1(2015, 12, 3);
        //(d1++).Display();  //d1.operator++(&d1, 0);
        //(++d1).Display(); //d1.operator++(&d1);
    
        Date d1(2015, 12, 3);
        Date d2(2015, 11, 1);
        cout << (d1 - d2) << endl;
    
        //Date d1(2015, 12, 3);
        //Date ret = d1 + 40; //operator+
        //ret.Display();
    
    
        /*Date d1(2015, 12, 3);
        Date ret = d1 + 40;
        d1 = ret;
        ret = d1 - 40;
        ret.Display();*/
    
        /*Date ret;
        Date d2(2015, 1, 1);
        ret = d2 - 1;
        ret.Display();*/
        return 0;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!