06-B. Date(类与构造)

本文详细介绍了如何在日期类中实现构造函数、setDate方法,以及根据闰年规则计算明天日期的功能,包括对2月特殊情况的处理。通过实例展示了如何使用这些方法进行日期操作和测试。

06-构造和析构-

题目描述
下面是一个日期类的定义,请在类外实现其所有的方法,并在主函数中生成对象测试之。
在这里插入图片描述
注意,在判断明天日期时,要加入跨月、跨年、闰年的判断

例如9.月30日的明天是10月1日,12月31日的明天是第二年的1月1日

2月28日的明天要区分是否闰年,闰年则是2月29日,非闰年则是3月1日

输入
测试数据的组数t

第一组测试数据的年 月 日



要求第一个日期的年月日初始化采用构造函数,第二个日期的年月日初始化采用setDate方法,第三个日期又采用构造函数,第四个日期又采用setDate方法,以此类推。

输出
输出今天的日期

输出明天的日期

#include <iostream>
#include <iomanip>
using namespace std;

class date
{
    int year,month,day;
public:
    date()
    {year=0;month=0;day=0;}
    date(int y,int m,int d)
    {year=y;month=m;day=d;}
    int gety()
    {return year;}
    int getm()
    {return month;}
    int getd()
    {return day;}
    void setdate(int y,int m,int d)
    {year=y;month=m;day=d;}
    void print()
    {
        cout<<year<<"/";
        if(month<10)
            cout<<"0"<<month<<"/";
        else
            cout<<month<<"/";
        
        if(day<10)
            cout<<"0"<<day<<endl;
        else
            cout<<day<<endl;
    }
    void addoneday()
    {
        if(month==1||month==3||month==5||month==7||month==8||month==10)
        {
            if(day==31)
            {
                day=1;month++;
            }
            else
                day++;
        }
        else if(month==12)
        {
            if(day==31)
            {
                day=1;month=1;year++;
            }
            else
                day++;
        }
        else if(month==4||month==6||month==9||month==11)
        {
            if(day==30)
            {
                month++;day=1;
            }
            else
                day++;
        }
        else if(month==2)
        {
            if(year%4==0)
            {
                if(day==29)
                {
                    day=1;month++;
                }
                else
                    day++;
            }
            else
            {
                if(day==28)
                {
                    month++;day=1;
                }
                else
                    day++;
            }
        }
    }
};

int main()
{
    int t,i;
    cin>>t;
    for(i=1;i<=t;i++)
    {
        int y,m,d;
        cin>>y>>m>>d;
        if(i%2!=0)
        {
            date d1(y,m,d);
            cout<<"Today is ";
            d1.print();
            cout<<"Tomorrow is ";
            d1.addoneday();
            d1.print();
        }
        else
        {
            date d1;
            d1.setdate(y,m,d);
            cout<<"Today is ";
            d1.print();
            cout<<"Tomorrow is ";
            d1.addoneday();
            d1.print();
        }
    }
    return  0;
}
本实验要求根据书籍借阅的天数计算归还日期。 [源程序使用GBK编码] 1-1. 业务说明: 1-1.1. 本实验以图书馆借阅书籍为业务背景。 1-1.2. 图书馆书籍归还时间规定如下: 1)任何书籍自借阅日起, 20 天内必须归还(标准极限时间)。 2)用户也可以明确告知图书馆书籍的归还日期,例如: 10 天后归还。 3)用户自定义的书籍归还日期,不能超过图书馆规定的极限时间: 20天。 1-2. 创建工程并配置环境: 1-2.1. 限制 1. 工程取名: JIT_EXP_E24。 1-2.2. 限制 2. 创建包,取名: cn.jit.java.experiment。 1-3. 创建工具: 1-3.1. 限制 1. 在包 cn.jit.java.experiment 下创建工具DateUtils。 注释:1) 工具是系统开发中常见的组件,它用于提供各种计算函数。 2) 为方便在实际生产环境中调用, 工具内的计算函数均为静态函数。 1-3.2. 技术常识:本实验需确保工具 DateUtils 不可被继承。 提示:在 DateUtils 的定义处增加 final 关键字,防止被其他继 1-3.3. 技术常识:本实验需确保工具 DateUtils 不可被实例化。 提示:为 DateUtils 增加私有的 0 参构造函数,防止被实例化。 提示:在 DateUtils 中,定义极限归还日常量 1-4. 创建归还日期计算函数: 1-4.1. 限制 1. 函数名: getReturnDate。 1-4.2. 该函数以系统时间为基准,按用户自定义的归还日期计算书籍的归还日。 判断用户自定义的归还日期(divDate )是否有效: 如果divDate 大于极限归还日常量,那么函数返回 null。 计算归还日期: 1)假设借书时间为2024年5月5日0时0分0秒,将此值赋给一个Date日期变量。 提示:Date date = new Date(year-1900,month-1,day,hour,minute,second);(注:year,month,day,hou,rminute,second为传入整形变量) 2)通过 getTime()方法将系统时间转换为毫秒。 3)将用户自定义的归还天数(divDate) 转换成毫秒: divDate * 24 * 60 * 60 * 1000(天 * 小时 * 分钟 * 秒钟 * 毫秒) 4)实际归还日期 = 系统毫秒时间 + 用户自定义归还日毫秒时间。 1-4.3. 书籍归还日期虽可以由用户自定义,但是不能超过 20 天(提示:定义常量最长规划日期)。 1-5. 创建标准归还日期计算函数: 1-5.1. 限制 1. 函数名: getReturnDate。 1-5.2. 限制 2:该函数必须定义成函数重载形式。 1-5.3. 该函数以系统时间为基准,计算图书馆规定的书籍极限归还日期(20 天)。 1-6. 使用工具: 1-6.1. 限制 1. 在包 cn.campsg.java.experiment 下创建主: MainClass。 1-6.2. 调用标准归还日期计算函数,获得书籍的极限归还日期。 1-6.3.获取用户输入值(自定义归还日期(要求输入整数)): 输入:8 1-6.4. 调用归还日期计算函数,按用户输入的归还日期获得书籍归还日。 1)如函数返回 null,输出: "借阅时间过长" 2)否则,输出: "书籍实际归还日期:" + 书籍归还日。 针对输入:10 输出:书籍实际归还日期:2024-05-15
最新发布
08-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值