C++完成设计一个日期类(CDate),属性为年、月、日,成员函数为设置当前日期setDate(…)、当前日期加一天increaseDate()和显示日期showDate

C++完成设计一个日期类(CDate),属性为年、月、日,成员函数为设置当前日期setDate(…)、当前日期加一天increaseDate()和显示日期showDate,第1张

输入格式

年月日,空格隔开

输出格式

日期增加一天后斜线隔开输出。

请使用成员函数showDate()完成

输入样例 

2022 5 6
2022 12 31
2000 2 29
1982 8 31
1996 2 29
2010 12 23
2021 2 28

输出样例  

2022/5/7
2023/1/1
2000/3/1
1982/9/1
1996/3/1
2010/12/24
2021/3/1

对于 设置当前日期和显示日期是比较容易完成的,但是对于日期加一天这个函数,我们需要考虑较多的情况:

(1)一年的最后一天,即为12月31号,加一天为下一年的一月一号;

(2)除了第二月,一个月的最后一天,按照大小月分为30或者31天;

      [1] 如果日期为非12月的31号那么加一天,一定是下个月的一号;

      [2]如果日期为30天,那么根据大小月份,决定(日期加一)或者(月份加一且日期为一)

(3)讨论二月的情况,要根据闰年和平年来进行讨论;

      [1]年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年) 

         年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)

         即为:年份可以被4整除同时不被100整除 或者  年份被400整除;

      [2]闰年 讨论日期是否为29,若为29号则加一天为三月一号;

          平年 讨论日期是否为28,若为28号则加一天为三月一号;

(个人编写,仅供参考,自行理解,切勿搬运,若有错误可私信告知,谢谢)

具体示例:

# include
using namespace std;
class  CDate
{
private:
    int Year, Month, Day;
public:
    //构造函数进行初始化
    CDate()
    {
        Year = 1;
        Month = 1;
        Day = 1;
    }
    void setDate(int Y, int M, int D);
    void increaseDate(int Y, int M, int D);
    void showDate();
};

从这里开始是对函数体的实现,一共有三个函数
void CDate::setDate(int Y, int M, int D) { Year = Y; Month = M; Day = D; }
void CDate::showDate() { cout << Year << "/" << Month << "/" << Day << endl; }
//分析不同日期加一天的情况
void CDate::increaseDate(int Y, int M, int D)
{
    if (M == 2)//二月的最后一天比较特殊,单独分析
    {
        if (Y % 4 == 0 && Y % 100 != 0 || Y % 400 == 0)//闰年2月最后一天为29号
        {
            if (D == 29)//如果是29号,则后一天为三月一号
            {
                Day = 1;//月期加一
                Month += 1;//日期为一
            }
            else
            {
                Day += 1;//其他日期,天数加一
            }
        }
        else//非闰年
        {
            if (D == 28)//如果是28号,则后一天为四月一号
            {
                Day = 1;
                Month += 1;
            }
            else
            {
                Day += 1;//其他日期,天数加1
            }
        }
    }
    else if (M == 12 && D == 31)//12月31号后一天为一月一号
    {
        Year += 1;//年份加1
        Day = 1;//日期1
        Month = 1;//月期1

    }
    else if (D==30)//日期为30的分两种情况
    {
        if (M == 1||3||5||7||8||10||12)//大月有31天
        {
            Day+= 1;//日期加一天
        }
        else//除二月的小月
        {
            Month += 1;//月期加1
            Day = 1;//日期为1
        }
    }
    else if (M != 12 && D == 31)//非12月的第31天后一天是下个月1号
    {
        Day = 1;//日期1
        Month += 1;///月份加1
    }
    else
    {
        Day += 1;
    }
}

到这里为止函数体的实现完成


int main()
{
    CDate cdate1;
    int Y;
    int D;
    int M;
    while (cin >> Y >> M >> D)
    {
        cdate1.setDate(Y, M, D);
        cdate1.increaseDate(Y, M, D);
        cdate1.showDate();
    }
    return 0;
}

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/662218.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-18
下一篇 2022-04-18

发表评论

登录后才能评论

评论列表(0条)

保存