SimpleMLXG
2020-03-14 10:34
采纳率: 67.5%
浏览 375

c++日期类程序填空求大佬帮忙!

//自定义一个简单的日期类
#include <iostream
#include <cstdlib
#include <cstring
using namespace std;
const static int a[]={31,31,28,31,30,31,30,31,31,30,31,30,31};
//--------------------开始:日期类定义-------------------






......







//--------------------结束:日期类定义-------------------
//----------------开始:日期类成员函数定义---------------






......







//---------------结束:日期类成员函数定义----------------
//>>>>>>>>>>>>>>>>>>>>>主函数开始<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
int main() {
Date d1; //使用缺省值(200.1.1)构造函数定义一个日期对象
//用三个存取(访问)函数输出d1
cout<<"(Default Constructor)Date d1;----->"<<'{'< //用输出成员函数输出d1
cout"; d1.showDate();
cout< Date d2(2015,2,29);
//使用非法日期构造函数定义对象,日期对象将被置为默认值。
//合法日期:年>0,1<=月 cout"; d2.showDate(); cout< Date d3(2008,11,30); //使用普通构造函数定义对象
cout"; d3.showDate(); cout<<endl;

//设置日期(使用三个整数:年、月、日)
//如果给定的日期为非法日期则不修改原有的日期值
d3.setDate(2008,13,8);
cout<<"d3.setDate(2008,13,8);----->";
int y,m,d;
d3.getDate(y,m,d); //获得d3对应的日期值
cout<<'{'< //测试非法日期的几种典型情况。
d3.setDate(2016,2,29);
cout"; d3.showDate(); cout< d3.setDate(2016,2,0);
cout"; d3.showDate(); cout< d3.setDate(2016,11,-1);
cout"; d3.showDate(); cout< d3.setDate(2016,11,31);
cout"; d3.showDate(); cout< d3.setDate(2016,00,11);
cout"; d3.showDate(); cout< d3.setDate(2016,13,11);
cout"; d3.showDate(); cout< d3.setDate(0,11,11);
cout"; d3.showDate(); cout< d3.setDate(-123,11,11);
cout"; d3.showDate(); cout< d3.setDate(2016,12,0);
cout"; d3.showDate(); cout< d3.setDate(2016,12,32);
cout"; d3.showDate(); cout< d3.setDate(2008,8,8);
cout"; d3.showDate(); cout<<endl<<endl;

//用字符串构造日期,(类型)转换构造函数
//日期串可以指定也可以不指定世纪(默认为21世纪)
//日期分隔符可以是"."或"/"或"-"三者之一
//date_format(日期格式)="yyyy.mm.dd"或"dd.mm.yyyy"或"mm.dd.yyyy"
//日期默认格式为中国格式:"yyyy.mm.dd"
Date d4("10/27/06","mm/dd/yyyy");
cout<<"Date d4(\"10/27/06\",\"mm/dd/yyyy\");----->"; d4.showDate(); cout<<endl;

Date d5("6.3.3"); //日期串长度错误[6,10]!
cout<<"Date d5(\"6.3.3\");----->"; d5.showDate(); cout<<endl;

Date d6("06_3_3");
//日期分隔符只能是“.”或“/”或“-”三者之一!
cout<<"Date d6(\"06_3_3\");----->"; d6.showDate(); cout<<endl;

Date d7("06.3-3");
//两个日期分隔符必须一致!
cout<<"Date d7(\"06.3-3\");----->"; d7.showDate(); cout<<endl;

Date d8("06.3.3"); //默认为21世纪
cout<<"Date d8(\"06.3.3\");----->"; d8.showDate(); cout<<endl;

Date d9("10/28/1990","mm.dd.yyyy");
cout<<"Date d9(\"10/28/1990\",\"mm.dd.yyyy\");----->"; d9.showDate(); cout<<endl;

d9.setDate("10-31-1980","dd-mm-yyyy");
cout<<"d9.setDate(\"10-31-1980\",\"dd-mm-yyyy\");----->"; d9.showDate(); cout<<endl;

d9.setDate("10-31-1980","mm-dd-yyyy");
cout<<"d9.setDate(\"10-31-1980\",\"mm-dd-yyyy\");----->"; d9.showDate(); cout<<endl;

d9.setDate("06-3-19");
cout<<"d9.setDate(\"06-3-19\");----->"; d9.showDate(); cout< d9="1960.11.11";
cout"; d9.showDate(); cout< d9=Date("1980-12-12");
cout"; d9.showDate(); cout< Date d10("80/10/10");
cout"; d10.showDate(); cout< d2.setDate(1984,7,1);
cout"; d2.showDate(); cout< //计算日期+整数(值可为正、负和零)
d2.addDay(0);
cout"; d2.showDate(); cout< d2.addDay(-1390);
cout"; d2.showDate(); cout< d2.setDate(1990,2,5);
cout"; d2.showDate(); cout< d2.addDay(9488);
cout"; d2.showDate(); cout<<endl;

d2.setDate(1990,9,10);
cout<<"d2.setDate(1990,9,10);----->"; d2.showDate(); cout< d2.addDay(9271);
cout"; d2.showDate(); cout< d2.setDate(1984,7,1);
d3.setDate(1980,9,10);
cout cout cout d2.setDate(1990,2,5);
d3.setDate(2016,1,28);
cout cout //计算日期-日期的值(值可为正、负和零)
cout d2.setDate(1990,9,10);
d3.setDate(2016,1,28);
cout cout cout return 0;
}
//>>>>>>>>>>>>>>>>>>>>>主函数结束<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
输入

输出
见“参考输出”。
输入样例 1

输出样例 1
(Default Constructor)Date d1;----->{2000.1.1}

(Default Constructor)Date d1;----->{2000.1.1}

Date d2(2015,2,29);----->{2000.1.1}

Date d3(2008,11,30);----->{2008.11.30}

d3.setDate(2008,13,8);----->{2008.11.30}

d3.setDate(2016,2,29);----->{2016.2.29}

d3.setDate(2016,2,0);----->{2016.2.29}

d3.setDate(2016,11,-1);----->{2016.2.29}

d3.setDate(2016,11,31);----->{2016.2.29}

d3.setDate(2016,00,11);----->{2016.2.29}

d3.setDate(2016,13,11);----->{2016.2.29}

d3.setDate(0,11,11);----->{2016.2.29}

d3.setDate(-123,11,11);----->{2016.2.29}

d3.setDate(2016,12,0);----->{2016.2.29}

d3.setDate(2016,12,32);----->{2016.2.29}

d3.setDate(2008,8,8);----->{2008.8.8}

Date d4("10/27/06","mm/dd/yyyy");----->{2006.10.27}

Date d5("6.3.3");----->{2000.1.1}

Date d6("06_3_3");----->{2000.1.1}

Date d7("06.3-3");----->{2000.1.1}

Date d8("06.3.3");----->{2006.3.3}

Date d9("10/28/1990","mm.dd.yyyy");----->{1990.10.28}

d9.setDate("10-31-1980","dd-mm-yyyy");----->{1990.10.28}

d9.setDate("10-31-1980","mm-dd-yyyy");----->{1980.10.31}

d9.setDate("06-3-19");----->{2006.3.19}

d9="1960.11.11";----->{1960.11.11}

d9=Date("1980-12-12");----->{1980.12.12}

Date d10("80/10/10");----->{2080.10.10}

d2.setDate(1984,7,1);----->{1984.7.1}

d2.addDay(0);----->{1984.7.1}

d2.addDay(-1390);----->{1980.9.10}

d2.setDate(1990,2,5);----->{1990.2.5}

d2.addDay(9488);----->{2016.1.28}

d2.setDate(1990,9,10);----->{1990.9.10}

d2.addDay(9271);----->{2016.1.28}

d2:{1984.7.1},d3:{1980.9.10},d2-d3=1390

d2:{1990.2.5},d3:{2016.1.28},d2-d3=-9488

d2:{1990.9.10},d3:{2016.1.28},d2-d3=-9271

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • threenewbee 2020-03-14 12:30
    已采纳
    //--------------------开始:日期类定义-------------------
    class Date
    {
    private:
        int yyyy;
        int mm;
        int dd;
        bool isleap(int y);
        bool check(int y, int m, int d);
    public:
        Date(int y, int m, int d)
        {
            if (check(y, m, d))
                setDate(y, m, d);
            else
                setDate(200, 1, 1);
        }
        Date() { Date(200, 1, 1); }
        void setDate(int y, int m, int d);
        void getDate(int &y, int &m, int &d);
        void showDate();
    };
    //--------------------结束:日期类定义-------------------
    //----------------开始:日期类成员函数定义---------------
    bool Date::isleap(int y)
    {
        return (y % 4 == 0 && y % 100 != 0) || y % 400 == 0;
    }
    
    bool Date::check(int y, int m, int d)
    {
        if (y <= 0) return false;
        if (m < 1 || m > 12) return false;
        if (d < 1) return false;
        if ((m == 1 || m == 3 || m == 5 || m == 7 ||m == 8 ||m == 10 ||m == 12) && d > 31)
            return false;
        if ((m == 4 || m == 6 || m == 9 ||m == 11) && d > 30)
            return false;
        if (m == 2 && d > 29 && isleap(y))
            return false;
        if (m == 2 && d > 28 && !isleap(y))
            return false;
        return true;
    }
    
    void Date::setDate(int y, int m, int d)
    {
        if (check(y, m, d))
        {
            yyyy = y;
            mm = m;
            dd = d;
        }
    }
    void Date::getDate(int& y, int& m, int& d)
    {
        y = yyyy;
        m = mm;
        d = dd;
    }
    void Date::showDate()
    {
        cout << yyyy << "-" << mm << "-" << dd;
    }
    
    //---------------结束:日期类成员函数定义----------------
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题