标题:请大神帮忙看看这道问题 实现日期类
只看楼主
Sopphhiiaa
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2020-12-7
结帖率:80%
已结贴  问题点数:20 回复次数:3 
请大神帮忙看看这道问题 实现日期类
设计一个日期类 Date,类的声明如下:
class Date{
public:
/* 默认构造函数,以fullyear的形式给出年月日,默认值为1990年1月1日,同时设置
日期分隔符为“-” */
Date(int year = 1990, int month = 1, int day = 1);
/* get、set方法 */
// 设置日期,如果有非法的月或日,将其置为1
void setDate(int year, int month, int day);
void setYear(int year);
int getYear();
void setMonth(int month);
int getMonth();
void setDay(int month);
int getDay();
void printFullYear(); // 以YYYY-MM-DD的形式打印,2011-01-08
void printStandardYear(); // 以YY-MM-DD的形式打印,比如11-01-08
/* 计算函数 */
// 计算当前日期与参数日期之间相差几个整年,仅考虑参数日期比当前日期晚的情况
int fullYearsTo(int year, int month, int day);
/* 计算当前日期与参数日期之间相差多少天(考虑闰年),如果参数日期在当前日期之前,返回负数。 */
int daysTo(int year, int month, int day);
private:
int year;
int month;
int day;
char separator; // 日期分隔符
};
请实现日期类,使得主函数输出如下:
void main(){
Date birthDate(1969, 8, 11);
birthDate.printFullYear(); // 打印:1969-08-11
birthDate.printStandardYear(); // 打印:69-08-11
cout << birthDate.fullYearsTo(2010, 4, 15); // 打印:40,满四十岁
cout << birthDate.daysTo(2010, 4, 15); // 打印14857,活了14857天了
// 打印-7254,共和国比我早诞生了7254天
cout << birthDate.daysTo(1949, 10, 1);
}
搜索更多相关主题的帖子: int year 日期 打印 void 
2021-03-28 12:46
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:20 
作业?

剑栈风樯各苦辛,别时冰雪到时春
2021-03-28 13:28
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
程序代码:
#include<iostream>
using namespace std;
class Date{
public:
/* 默认构造函数,以fullyear的形式给出年月日,默认值为1990年1月1日,同时设置
日期分隔符为“-” */
Date(int year = 1990, int month = 1, int day = 1){
    if(month == 2){
        if((year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)){
            day=day>29?1:day;
        }else if(day>28){
            day=1;
        }
    }else if(month>12||month<0){
        month=1;
    }
    if(day<0||day>31){
        day=1;
    }else if(month==4||month==6||month==9||month==11){
        day=day>30?1:day;
    }
    this->year=year;
    this->month=month;
    this->day=day;
}
/* get、set方法 */
// 设置日期,如果有非法的月或日,将其置为1
void setDate(int year, int month, int day){
    if(month == 2){
        if((year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)){
            day=day>29?1:day;
        }else if(day>28){
            day=1;
        }
    }else if(month>12||month<0){
        month=1;
    }
    if(day<0||day>31){
        day=1;
    }else if(month==4||month==6||month==9||month==11){
        day=day>30?1:day;
    }
    this->year=year;
    this->month=month;
    this->day=day;
}
void setYear(int year){
    this->year=year;
}
int getYear(){
    return this->year;
}
void setMonth(int month){
    this->month=month;
}
int getMonth(){
    return this->month;
}
void setDay(int month){
    this->month=month; 
} 
int getDay(){
    return this->day;
}
void printFullYear(){ // 以YYYY-MM-DD的形式打印,2011-01-08
    cout<<this->year<<'-'<<(this->month<10?"0":"")<<this->month<<'-'<<this->day<<endl;
} 
void printStandardYear(){ // 以YY-MM-DD的形式打印,比如11-01-08
    cout<<this->year%100<<'-'<<(this->month<10?"0":"")<<this->month<<'-'<<this->day<<endl;
}
/* 计算函数 */
// 计算当前日期与参数日期之间相差几个整年,仅考虑参数日期比当前日期晚的情况
int fullYearsTo(int year, int month, int day){
    return year-this->year-1;
}
/* 计算当前日期与参数日期之间相差多少天(考虑闰年),如果参数日期在当前日期之前,返回负数。 */
int daysTo(int year, int month, int day){
    int flag=1;
    if(year<this->year){
        flag=-1;
    }else if(year==this->year){
        if(month<this->month){
            flag=-1;
        }else if(month==this->month){
            if(day<this->day){
                flag=-1;
            }
        }
    }
    Date b2(this->year,this->month,this->day);
    if(flag==-1){
        int y=this->year;
        int m=this->month;
        int d=this->day; 
        b2.setDate(year,month,day);
        year=y;
        month=m;
        day=d;
    }
    int num=0;
    while(b2.getYear()!=year||b2.getMonth()!=month||day!=b2.getDay()){
        b2.addDay();
        num++;
    }
    return flag*num;
}
void addDay(){
    if(month==12){
        if(day==31){
            day=1;
            month=1;
            year++;
        }else{
            day++;
        }
    }else if(month==2){
        if((year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)){
            if(day<29)day++;
            else {
                day=1;
                month++;
            }
        }else{
            if(day<28)day++;
            else {
                day=1;
                month++;
            }
        }
    }else if(month==4||month==6||month==9||month==11){
        if(day<30)day++;
        else {
            day=1;
            month++;
        }
    }else{
        if(day<31)day++;
        else {
            day=1;
            month++;
        }
    }
}
private:
int year;
int month;
int day;
char separator; // 日期分隔符
};
int main(void){
Date birthDate(1969, 8, 11);
birthDate.printFullYear(); // 打印:1969-08-11
birthDate.printStandardYear(); // 打印:69-08-11
cout << birthDate.fullYearsTo(2010, 4, 15)<<endl; // 打印:40,满四十岁
cout << birthDate.daysTo(2010, 4, 15)<<endl; // 打印14857,活了14857天了
// 打印-7254,共和国比我早诞生了7254天
cout << birthDate.daysTo(1949, 10, 1);
return 0;
}

剑栈风樯各苦辛,别时冰雪到时春
2021-03-28 14:29
zbx_88
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-4-3
得分:0 
学习了
2021-04-22 23:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-505274-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016579 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved