面向对象程序设计:日期问题(聚合二)

1.设计如下几个类:DateUtil、Year、Month、Day,其中年、月、日的取值范围依然为:year∈[1820,2020] ,month∈[1,12] ,day∈[1,31] , 设计类图如下:
在这里插入图片描述
2.应用程序共测试三个功能:
求下n天
求前n天
求两个日期相差的天数

3.输入格式:
有三种输入方式(以输入的第一个数字划分[1,3]):

1 year month day n //测试输入日期的下n天
2 year month day n //测试输入日期的前n天
3 year1 month1 day1 year2 month2 day2 //测试两个日期之间相差的天数

输出格式:
当输入有误时,输出格式如下: Wrong Format
当第一个数字为1且输入均有效,输出格式如下:
year1-month1-day1 next n days is:year2-month2-day2
当第一个数字为2且输入均有效,输出格式如下:
year1-month1-day1 previous n days is:year2-month2-day2
当第一个数字为3且输入均有效,输出格式如下:
The days between year1-month1-day1 and year2-month2-day2 are:值

输入样例1:
在这里给出一组输入。例如:

3 2014 2 14 2020 6 14
输出样例1:
在这里给出相应的输出。例如:

The days between 2014-2-14 and 2020-6-14 are:2312
输入样例2:
在这里给出一组输入。例如:

2 1834 2 17 7821
输出样例2:
在这里给出相应的输出。例如:

1834-2-17 previous 7821 days is:1812-9-19
输入样例3:
在这里给出一组输入。例如:

1 1999 3 28 6543
输出样例3:
在这里给出相应的输出。例如:

1999-3-28 next 6543 days is:2017-2-24
输入样例4:
在这里给出一组输入。例如:

0 2000 5 12 30
输出样例4:
在这里给出相应的输出。例如:

Wrong Format


import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner on=new Scanner(System.in);
        int xuanze=on.nextInt();
        switch(xuanze)
        {
            case(1):{
                Year nian1=new Year(on.nextInt());
                Month  yue1=new Month(on.nextInt());
                Day ri1=new Day(on.nextInt());
                int nii=on.nextInt();
                Date zzz=new Date(nian1,yue1,ri1);
                if(zzz.jianyanhefaxing()==false)
                    System.out.println("Wrong Format");
                else {
                    System.out.printf("%d-%d-%d next %d days is:",nian1.getValue(),yue1.getValue(),ri1.getValue(),nii);
                    zzz.qiuqiantian(nii);
                }
                break;
            }
            case(2):{
                Year nian2=new Year(on.nextInt());
                Month yue2=new Month(on.nextInt());
                Day ri2=new Day(on.nextInt());
                int nii2=on.nextInt();
                Date zzz2=new Date(nian2,yue2,ri2);
                if(zzz2.jianyanhefaxing()==false)
                    System.out.println("Wrong Format");
                else {
                    System.out.printf("%d-%d-%d previous %d days is:",nian2.getValue(),yue2.getValue(),ri2.getValue(),nii2);
                    zzz2.qiuxiantian(nii2);
                }
                break;
            }
            case(3):{
                Year nian3=new Year(on.nextInt());
                Month yue3=new Month(on.nextInt());
                Day ri3=new Day(on.nextInt());
                Year nian4=new Year(on.nextInt());
                Month yue4=new Month(on.nextInt());
                Day ri4=new Day(on.nextInt());
                Date zz3=new Date(nian3,yue3,ri3);
                Date zz4=new Date(nian4,yue4,ri4);
                if((zz3.jianyanhefaxing()==false)||(zz4.jianyanhefaxing()==false))
                {
                    System.out.println("Wrong Format");     System.exit(0);
                }//对两次输入的年月日都做合法性检验
                else
                    zz3.getDaySub(nian3.getValue(),yue3.getValue(),ri3.getValue(),nian4.getValue(),yue4.getValue(),ri4.getValue());
                break;
            }
            default:{
                System.out.println("Wrong Format");
                System.exit(0);
            }
        }
    }
}
class Date{
    private Year year;
    private Month month;
    private Day day;
    private int an[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    public Date() {
    }
    public Date(Year year, Month month, Day day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public Year getYear() {
        return year;
    }

    public void setYear(Year year) {
        this.year = year;
    }

    public Month getMonth() {
        return month;
    }

    public void setMonth(Month month) {
        this.month = month;
    }

    public Day getDay() {
        return day;
    }

    public void setDay(Day day) {
        this.day = day;
    }
    void setDayMin(){
        day.setValue(1);
    }
    void setDayMax(){
        if(year.isrunnian()==true) {
            if (month.getValue() == 1 || month.getValue() == 3 || month.getValue() == 5 || month.getValue() == 7 || month.getValue() == 8 || month.getValue() == 10 || month.getValue() == 12)
                day.setValue(31);
            else if (month.getValue() == 4 || month.getValue() == 6 || month.getValue() == 9 || month.getValue() == 11)
                day.setValue(30);
            else
                day.setValue(29);
        }
        else
        {
            if (month.getValue() == 1 || month.getValue() == 3 || month.getValue() == 5 || month.getValue() == 7 || month.getValue() == 8 || month.getValue() == 10 || month.getValue() == 12)
                day.setValue(31);
            else if (month.getValue() == 4 || month.getValue() == 6 || month.getValue() == 9 || month.getValue() == 11)
                day.setValue(30);
            else
                day.setValue(28);
        }
    }
    boolean jianyanhefaxing() {

        boolean p=false;
        if(year.getValue()<1820||year.getValue()>2020)
        {
            return false;
        }
        if(month.getValue()<1||month.getValue()>12)
        {
            return false;
        }
        else if(month.getValue()==1||month.getValue()==3||month.getValue()==5||month.getValue()==7||month.getValue()==8||month.getValue()==10||month.getValue()==12) {
            if (day.getValue() <= 31) {
                p = true;
            } else {
                p = false;
            }
        }
        else if(month.getValue()==2) {
            if(year.getValue()%400==0||(year.getValue()%4==0&&year.getValue()%100!=0)) {
                if(day.getValue()<=29) {
                    p=true;
                }
                else {
                    p=false;
                }
            }
            else {
                if(day.getValue()<=28){
                    p=true;
                }
                else {
                    p=false;
                }
            }
        }
        else {
            if(day.getValue()<=30){
                p=true;
            }
            else {
                p=false;
            }
        }
        return p;
    }
    void qiuqiantian(int n){
        int a[]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
        day.setValue(day.getValue()+n);
        if(isLeapYear(year.getValue()))
            a[2]=29;
        else
            a[2]=28;
        while (day.getValue()>a[month.getValue()]) {
            day.setValue(day.getValue()-a[month.getValue()]);
            month.setValue(month.getValue()+1);
            if (month.getValue()==13)
            {
                month.setValue(month.getValue()-12);
                year.setValue(year.getValue()+1);
            }
                if(isLeapYear(year.getValue()))
                    a[2]=29;
                else
                    a[2]=28;
        }
        System.out.printf("%d-%d-%d",year.getValue(),month.getValue(),day.getValue());
    }
    void qiuxiantian(int n){
        int a[]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
        day.setValue(day.getValue()-n);
        if(isLeapYear( year.getValue()))
            a[2]=29;
        else
            a[2]=28;
        while (day.getValue()<=0)
        {
            month.setValue(month.getValue()-1);
            if (month.getValue()==0){
                month.setValue(month.getValue()+12);
                year.setValue(year.getValue()-1);
            }
            day.setValue(day.getValue()+a[month.getValue()]);
            if(isLeapYear( year.getValue()))
                a[2]=29;
            else
                a[2]=28;
        }
        System.out.printf("%d-%d-%d", year.getValue(), month.getValue(),day.getValue());
    }


    void getDaySub(int startYear, int startMonth, int startDay, int endYear, int endMonth, int endDay) {
        int days=0;
        int dayss=0;
        int i ;
        int []aa = new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
        for(i=1;i<startYear;i++){
            if(i%4==0&&i%100!=0||i%400==0) {
                days+=366;}
            else
                days+=365;
        }
        if((startYear % 4 == 0 && startYear% 100 !=0 )||startYear % 400 == 0)
            aa[2]=29;
        for(i = 1;i<startMonth;i++){
            days+=aa[i];}
        days+=startDay;
        for(i=1;i<endYear;i++){
            if(i%4==0&&i%100!=0||i%400==0) {
                dayss+=366;}
            else
                dayss+=365;
        }
        if((endYear % 4 == 0 && endYear% 100 !=0 )||endYear % 400 == 0)
            aa[2]=29;
        for(i = 1;i<endMonth;i++){
            dayss+=aa[i];}
        dayss+=endDay;
        System.out.printf("The days between %d-%d-%d and %d-%d-%d are:%d",startYear,startMonth,startDay,endYear,endMonth,endDay,Math.abs(days-dayss));
    }
    public boolean isLeapYear(int year) {
        return (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0) ? true : false;
    }
}

class Year{
    private int value;
    public Year() {
    }
    public Year(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }
    boolean isrunnian(){
        if(value%400==0||(value%4==0&&value%100!=0))
            return true;
        else return false;
    }
    boolean yearhefa(){
        if(value>=1820&&value<=2020)
            return true;
        else return false;
    }
    void nianzengjia1(){
        value+=1;
    }
    void nianjianshao1(){
        value-=1;
    }

}
class Month{
    private int value;

    public Month() {
    }

    public Month(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }
    void resetMin(){
        value=1;
    }
    void resetMax(){
        value=12;
    }
    boolean jiancehefayue(){
        if(value>=1&&value<=12)
            return true;
        else return false;
    }
    void yuezengjia1(){
        value+=1;
    }
    void yuejianshao1(){
        value-=1;
    }
}
class Day{
    private int value;

    public Day() {
    }

    public Day(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }
    void dayzengjia1(){
        value+=1;
    }
    void dayjianshao1(){
        value-=1;
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江景.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值