【C++】日期类+日期万年历+日期计算器

原创 2016年05月30日 15:04:15

    对于日期类,我们主要实现一下日期类的基本函数,构造,拷贝构造,运算符的重载,析构。当然这里运算符的重载需要实现的还是挺多的,如:=、<、>、<=、>=、等

#include <iostream>
using namespace std;

class Date
{
public:
    Date(int year = 1990, int month = 1, int day = 1)
    {
        _year = year;
        _month = month;
        _day = day;
    }

    Date(const Date& d)
    {
        _year = d._year;
        _month = d._month;
        _day = d._day;
    }

    ~Date()
    {}

    //万年历
    bool operator == (const Date& d)
    {
        return this->_year == d._year
            && this->_month == d._month
            && this->_day == d._day;
    }

    bool operator <(const Date& d)
    {
        if (_year<d._year)
        {
            return true;
        }
        else
        {
            if (_year == d._year)
            {
                if (_month < d._month)
                {
                    return true;
                }
                else
                {
                    if (_month == d._month)
                    {
                        if (_day < d._day)
                        {
                            return true;
                        }
                    }
                }
            }
        }
        return false;
    }

    bool operator <=(const Date& d)
    {
        return !(*this > d);
    }

    bool operator >(const Date& d)
    {
        if (_year>d._year)
        {
            return true;
        }
        else
        {
            if (_year == d._year)
            {
                if (_month > d._month)
                {
                    return true;
                }
                else
                {
                    if (_month == d._month)
                    {
                        if (_day > d._day)
                        {
                            return true;
                        }
                    }
                }
            }
        }
        return false;
    }
    bool operator >=(const Date& d)
    {
        return !(*this < d);
    }

    

    对于实现日期计算器,我们主要考虑的是加天数和减天数,那么问题就来了,对于加法,如果加的日期超过当前月的天数就需要考虑月的进位,对于年来说,如果月份大于12就需要重置为1,年进位。还需要考虑的一个问题就是,是否为闰年的2月份天数不同,那么应该如何解决呢?我们用一个数组把每个月的天数给保存起来,然后写一个判断闰年的函数,如果是闰年就在数组对应的2月上加上1天。对于减法,就相当于加上一个负天数,问题和加法一样。

// 日期计算器
    Date operator+ (int day);
    Date operator+= (int day);

    Date operator- (int day)
    {
        this->_day -= day;
        while (_day < 0)
        {
            _day += GetMonthDay(2016, 3);
            _month -= 1;
            if (_month < 1)
            {
                _month = 12;
                _year -= 1;
            }
        }
        return *this;
    }
    Date operator-= (int day);

    Date operator++();
    Date operator++(int);

    Date operator--();
    Date operator--(int);

    int operator-(const Date& d);

    //计算器
    Date& calendar(int day = 0)
    {
        if (day > 0)//加正天数
        {

            this->_day += day;

            while (_day > GetMonthDay(2016, 2))
            {
                _day -= GetMonthDay(2016, 2);
                _month += 1;
                if (_month > 12)
                {
                    _month = 1;
                    _year += 1;
                }
            }
        }
        else//加负天数
        {
            this->_day -= day;
            while (_day < 0)
            {
                _day += GetMonthDay(2016, 3);
                _month -= 1;
                if (_month < 1)
                {
                    _month = 12;
                    _year -= 1;
                }
            }
        }

        return *this;
    }

private:
    bool IsLeapYear(int year)
    {
        if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
        {
            return true;
        }
        return false;
    }

    int GetMonthDay(int year, int month)
    {
        int monthArray[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

        int day = monthArray[month];

        if (month == 2 && IsLeapYear(year))
        {
            day += 1;
        }

        return day;
    }

private:
    int _year;
    int _month;
    int _day;


本文出自 “滴水” 博客,请务必保留此出处http://10740329.blog.51cto.com/10730329/1765067

版权声明:本文为博主原创文章,未经博主允许不得转载。

【c++巩固练习】c++实现日期计算器、日期万年历(日期类)

日期计算器的功能: 1.可以计算两个日期之间相距多少天。例:2016.5.1-2016.4.1 =  30 2.可以计算一个日期经过n天后的那个日期是什么。例:2016.5.1+40 = 2016.6...
  • XHfight
  • XHfight
  • 2016年07月08日 17:00
  • 1617

C++日期计算器的实现

test.h#include using namespace std;class Date { friend void print_date(int year, int month);//打印...
  • m0_37968340
  • m0_37968340
  • 2017年07月06日 14:28
  • 872

C++【类:日期类】

实 现 日期类 的基本功能
  • My_heart_
  • My_heart_
  • 2016年06月16日 23:07
  • 1207

【C++】c++日期类Date

c++日期类Date
  • SuLiJuan66
  • SuLiJuan66
  • 2015年10月03日 14:49
  • 2196

C++:运算符重载3(单目:日期自增)

运算符重载3(单目:日期自增)Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByte Total Submit:...
  • liangzhaoyang1
  • liangzhaoyang1
  • 2016年01月22日 14:23
  • 644

实现日期类(日期计算器)

在日常生活中,需要我们计算一些日期,如果一些小的数字相加的话,我们便可以很方便的就计算出来,然而如果需要加上一些特别大的数字的时候,则会很浪费我们的时间,因此,日期计算机的出现,极大的方便了我们的生活...
  • aaronlanni
  • aaronlanni
  • 2017年09月25日 18:37
  • 180

日期类——日期计算器

"date.h" #pragma once class Date { public: Date(int year = 1990,int month = 1,int day = 1) ...
  • poison_biti
  • poison_biti
  • 2016年07月11日 17:37
  • 226

日期类->日期计算器

date.h#pragma once #include using namespace std; class Date { friend ostream& operator(istream& ...
  • Quinn0918
  • Quinn0918
  • 2017年07月13日 00:32
  • 799

C++ 声明并实现一个日期类(运算符重载)

/****************************************************************************************** date.hpp...
  • ZhongQi0808
  • ZhongQi0808
  • 2015年05月10日 15:31
  • 1266

Java 日期类及其处理

转载:http://blog.csdn.net/jacobvv/article/details/42023419 Date类 1. 概述 Date类是表示特定时间点的对象,精确到毫秒。 A...
  • kl28978113
  • kl28978113
  • 2016年11月01日 09:52
  • 727
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【C++】日期类+日期万年历+日期计算器
举报原因:
原因补充:

(最多只允许输入30个字)