7-2 定义日期类 (28 分)

**

7-2 定义日期类 (28 分)

**
定义一个类Date,包含三个私有属性年(year)、月(month)、日(day),均为整型数,其中:年份的合法取值范围为[1900,2000] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。 注意:不允许使用Java中和日期相关的类和方法,否则按0分处理。
要求:Date类结构如下图所示:
在这里插入图片描述
解题报告
必须实现类的封装性、否则本题不得分。

输入格式:

在一行内输入年月日的值,均为整型数,可以用一到多个空格或回车分隔。

输出格式:

当输入数据非法及输入日期不存在时,输出“Date Format is Wrong”;
当输入日期合法,输出下一天,格式如下:Next day is:年-月-日

输入样例1:

1912 12 25

输出样例1:

Next day is:1912-12-26

输入样例2:

2001 2 30

输出样例2:

Date Format is Wrong


import java.util.Scanner;
//Date类
class Date{
    static int year;
    static int month;
    static int day;
    int[] maxnum=new int[]{0,31,29,31,30,31,30,31,31,30,31,30,31};
    //创建年月日的构造方法
    public Date(int year,int month,int day){
        this.year=year;
        this.month=month;
        this.day=day;
    }

    public Date() {
        int year,month,day;
    }

    //getter
    public int getYear(){
        return year;
    }
    public int getMonth() {
        return month;
    }
    public int getDay() {
        return day;
    }
    //setter
    public void setYear(int year) {
        this.year = year;
    }
    public void setMonth(int month) {
        this.month = month;
    }
    public void setDay(int day) {
        this.day = day;
    }
    //判断year是否为闰年
    public static boolean isLeapYear(int year) {
        boolean isLeapYear;
        isLeapYear = ((year % 4 == 0 && year % 100 !=0 )||year % 400 == 0);
        return isLeapYear;
    }
    //判断输入日期是否合法
    public static boolean checkInputValidity(int year, int month, int day) {
        boolean checkInputValidity;
        int[] a=new int[]{0,31,29,31,30,31,30,31,31,30,31,30,31};
        if(!isLeapYear(year))
            a[2] = 28;
        checkInputValidity = (year>=1900&&year<=2000&&month>0&&month<=12&&day<=a[month]&&day>0);
        return checkInputValidity;
    }
    //得到下一天
    public static void getnextDate(int year,int month,int day) {
        int[] a=new int[]{0,31,29,31,30,31,30,31,31,30,31,30,31};
        int d=0,m=0;
        if(!isLeapYear(year))//如果不是闰年
            a[2] = 28;
        if(checkInputValidity(year,month,day)) {//如果输入的数字合法
            if(month==12) {//如果是12月
                if(day==a[month]) {//如果是12月的最后一天
                    year = year+1;
                    m = 1;
                    d=1;
                }
                else{//如果不是12月的最后一天
                    m=month;
                    d =day +1;
                }
            }
            else {//如果不是12月
                if(day==a[month]) {//如果是该月的最后一天
                    m = month + 1;
                    d = 1;
                }
                else{//如果不是该月的最后一天
                    m=month;
                    d = day+1;
                }
            }
            System.out.println("Next day is:"+year+"-"+m+"-"+d);
        }
        else//如果输入的数字非法
            System.out.println("Date Format is Wrong");
    }
}
//主类
public class Main {
    //主函数
    public static void main(String[] args) {
        Scanner x=new Scanner(System.in);
        Date rq=new Date();
        rq.setYear(x.nextInt());//得到年份
        rq.setMonth(x.nextInt());//得到月份
        rq.setDay(x.nextInt());//得到天

        rq.getnextDate(rq.getYear(), rq.getMonth(),rq.getDay());

    }

}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 C++ 中,可以通过定义一个来实现日期类的功能。下面是一个简单的日期类定义示例: ```c++ class Date { private: int year, month, day; public: // 构造函数 Date(int y, int m, int d) { year = y; month = m; day = d; } // 获取年份 int getYear() const { return year; } // 获取月份 int getMonth() const { return month; } // 获取日期 int getDay() const { return day; } // 设置日期 void setDate(int y, int m, int d) { year = y; month = m; day = d; } // 判断是否为闰年 bool isLeapYear() const { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) return true; else return false; } // 计算该月份的天数 int getDaysInMonth() const { if (month == 2) { if (isLeapYear()) return 29; else return 28; } else if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } else { return 31; } } // 计算该日期是星期几 int getWeekday() const { int y = year; int m = month; if (m == 1 || m == 2) { m += 12; y--; } int d = day; int w = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7; return w; } // 输出日期 void print() const { cout << year << "-" << month << "-" << day; } }; ``` 这个日期类包含了以下功能: - 构造函数:用于初始化日期的年份、月份和日期。 - 获取年份、月份和日期:用于获取日期的年份、月份和日期。 - 设置日期:用于修改日期的年份、月份和日期。 - 判断是否为闰年:用于判断该日期所在的年份是否为闰年。 - 计算该月份的天数:用于计算该日期所在月份的天数。 - 计算该日期是星期几:用于计算该日期是星期几。 - 输出日期:用于将日期输出到屏幕上。 可以根据实际需求对日期类进行扩展,例如添加日期加减、日期比较等功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值