2 qq 32554019 qq_32554019 于 2016.04.03 09:57 提问

c++ 日期类 求大神指教 1C

描述

给定日期类的声明
class Date{
public:
Date(int d = 0, int m = 0, int y = 0); //构造函数
int get_day() const; // 返回day
int get_month() const; //返回month
int get_year() const; // 返回year
static void set_default(int, int, int);
static int get_default_day(); //返回缺省day
static int get_default_month(); //返回缺省month
static int get_default_year(); //返回缺省year
Date & add_year(int n); //加n年
Date & add_month(int n); //加n月,考虑超过12月,考虑闰年
Date & add_day(int n); //加n天,考虑进位月和年,考虑闰年
private:
int day, month, year;
static Date default_date; //初始化为 1901年1月1日
};
实现这个类并用以下的main函数测试它。

int main(){

char type[110];

int day,mon,year;

int addday,addmon,addyear;

while(cin>>type){

  if(strcmp(type,"Date") == 0){

          cin>>day>>mon>>year;

          Date mydate(day,mon,year);

          cin>>addday>>addmon>>addyear;

          mydate.add_day(addday).add_month(addmon).add_year(addyear);

          cout << mydate.get_day() << " " << mydate.get_month() << " " << mydate.get_year() << endl;

  }else if(strcmp(type,"defalutDate") == 0){

          cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;

  }else if(strcmp(type,"setdefaultDate") == 0){

          cin>>day>>mon>>year;

          Date::set_default(day,mon,year);

        cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;

  }

}

return 0;

}
输入

多组输入,每一组输入以一个 type来判断输入类型,如果是'Date',那么就输入当前设置的日期以及要加的天数;如果是'defaultDate',那么就是直接输出默认日期;如果是'setdefaultDate',那么就输入要设置的默认日期。

输出

输出计算后得到的日期。

5个回答

caozhy
caozhy   Ds   Rxr 2016.04.04 05:34
 #include <iostream>
using namespace std;

int maxd(int y, int m)
{
    switch (m)
    {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        return 31;
    case 2:
        if (y % 4 != 0)
            return 28;
        if (y % 100 == 0 && y % 400 != 0)
            return 28;
        return 29;
    default:
        return 30;
    }
}

class Date{
private:
 int day, month, year;
 static Date default_date; //初始化为 1901年1月1日

public:
 Date(){ day=month=year=0; }
 Date(int d, int m, int y); //构造函数
 int get_day() const; // 返回day
 int get_month() const; //返回month
 int get_year() const; // 返回year
 static void set_default(int, int, int){Date::default_date = Date(1, 1, 1901);} 
 static int get_default_day() {return Date::default_date.get_day();} //返回缺省day
 static int get_default_month(){return Date::default_date.get_month();} //返回缺省month
 static int get_default_year(){return Date::default_date.get_year();} //返回缺省year
 Date& add_year(int n); //加n年
 Date& add_month(int n); //加n月,考虑超过12月,考虑闰年
 Date& add_day(int n); //加n天,考虑进位月和年,考虑闰年
};

Date::Date(int d, int m, int y)
{
    day = d;
    month = m;
    year = y;
}

int Date::get_day() const
{
    return day;
}

int Date::get_month() const
{
    return month;
}

int Date::get_year() const
{
    return year;
}

Date& Date::add_year(int n)
{
    year += n;
    return *this;
}

Date& Date::add_month(int n)
{
    if (month + n <= 12)
    {
        month += n;
        return *this;
    }
    add_year(1);
    n = n - 12 + month;
    month = 1;
    while (n >= 12)
    {
        add_year(1);
        n -= 12;
    }
    month += n;
    return *this;
}

Date& Date::add_day(int n)
{
    if (day + n <= maxd(year, month))
    {
        day += n;
        return *this;
    }
    add_month(1);
    n = n - (maxd(year, month), day) + day;
    day = 1;
    while (n >= maxd(year, month))
    {
        add_month(1);
        n -= maxd(year, month);
    }
    day += n;
    return *this;
}

int main(){

  char type[110];

  int day,mon,year;

  int addday,addmon,addyear;

  while(cin>>type){

      if(strcmp(type,"Date") == 0){

              cin>>day>>mon>>year;

              Date mydate(day,mon,year);

              cin>>addday>>addmon>>addyear;

              mydate.add_day(addday).add_month(addmon).add_year(addyear);

              cout << mydate.get_day() << " " << mydate.get_month() << " " << mydate.get_year() << endl;

      }else if(strcmp(type,"defalutDate") == 0){

              cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;

      }else if(strcmp(type,"setdefaultDate") == 0){

              cin>>day>>mon>>year;

              Date::set_default(day,mon,year);

            cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;

      }

  }

 return 0;

}
qq_32554019
qq_32554019 这个运行时出现错误
2 年多之前 回复
qq_32554019
qq_32554019 这个运行时出现错误
2 年多之前 回复
sLSmaJDKDLla
sLSmaJDKDLla   2018.05.29 22:06

#include

using namespace std;
class Date {
private:

int day, month, year;

static Date default_date; //初始化为 1901年1月1日

public:

Date(int d = 0, int m = 0, int y = 0); //构造函数
int get_day() const; // 返回day

int get_month() const; //返回month

int get_year() const; // 返回year
static void set_default(int , int , int);

static int get_default_day(); //返回缺省day

static int get_default_month(); //返回缺省month

static int get_default_year(); //返回缺省year

Date & add_year(int n); //加n年

Date & add_month(int n); //加n月,考虑超过12月,考虑闰年

Date & add_day(int n); //加n天,考虑进位月和年,考虑闰年

};
Date::Date(int d, int m, int y) //构造函数
{
if(d!=0 && m != 0 && y != 0)
day = d;
month = m;
year = y;
}
int Date::get_day() const { return day; } // 返回day
int Date::get_month() const { return month; } //返回month

int Date::get_year() const { return year; } // 返回
Date Date::default_date(1,1,1901);
void Date::set_default(int x, int y, int z)
{
Date::default_date = Date(x,y,z);
}

int Date::get_default_day()//返回缺省day
{
return default_date.get_day();
}

int Date::get_default_month() //返回缺省month
{
return default_date.get_month();
}

int Date::get_default_year()//返回缺省year
{
return default_date.get_year();
}

Date &Date::add_year(int n) //加n年
{
this->year += n;
return *this;
}

Date & Date::add_month(int n) //加n月,考虑超过12月,考虑闰年
{
month += n;
while (month > 12)
{
/*if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
{
this->year += 1;
this->month -= 13;
}
else
{
this->year += 1;
this->month -= 12;
}*/
this->year += 1;
this->month -= 12;
}
return *this;
}

int PerMonDay(int yy, int mm)
{
switch (mm)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
if((yy%100 != 0 && yy%4 == 0) ||(yy%400 == 0))
return 29;
else
return 28;
}
}
Date &Date::add_day(int n) //加n天,考虑进位月和年,考虑闰年
{
day += n;
while(day > PerMonDay(year,month))
{
day -= PerMonDay(year,month);
Date::add_month(1);
}
return *this;
}
//实现这个类并用以下的main函数测试它。
int main() {

string type;

while (cin >> type) {

    if (type == "Date") {

        int day, mon, year;

        cin >> day >> mon >> year;

        Date mydate(day, mon, year);

        int addday, addmon, addyear;

        cin >> addday >> addmon >> addyear;

        mydate.add_day(addday).add_month(addmon).add_year(addyear);

        cout << mydate.get_day() << " " << mydate.get_month() << " " << mydate.get_year() << endl;

    }

    else if (type == "defaultDate") {

        cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;

    }

    else if (type == "setdefaultDate") {

        int day, mon, year;

        cin >> day >> mon >> year;

        Date::set_default(day, mon, year);

        cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;

    }

}

return 0;

}

sLSmaJDKDLla
sLSmaJDKDLla   2018.05.30 12:47

上面这个有个问题,但是oj系统过了,可能是样例错误吧,2008 1 30 + 0 1 0 = 2008 2 30 显然不对,所以改进后的
#include

using namespace std;
class Date {
private:

int day, month, year;

static Date default_date; //初始化为 1901年1月1日

public:

Date(int d = 0, int m = 0, int y = 0); //构造函数
int get_day() const; // 返回day

int get_month() const; //返回month

int get_year() const; // 返回year
static void set_default(int , int , int);

static int get_default_day(); //返回缺省day

static int get_default_month(); //返回缺省month

static int get_default_year(); //返回缺省year

Date & add_year(int n); //加n年

Date & add_month(int n); //加n月,考虑超过12月,考虑闰年

Date & add_day(int n); //加n天,考虑进位月和年,考虑闰年

};
Date::Date(int d, int m, int y) //构造函数
{
if(d!=0 && m != 0 && y != 0)
day = d;
month = m;
year = y;
}
int Date::get_day() const { return day; } // 返回day
int Date::get_month() const { return month; } //返回month

int Date::get_year() const { return year; } // 返回
Date Date::default_date(1,1,1901);
void Date::set_default(int x, int y, int z)
{
Date::default_date = Date(x,y,z);
}

int Date::get_default_day()//返回缺省day
{
return default_date.get_day();
}

int Date::get_default_month() //返回缺省month
{
return default_date.get_month();
}

int Date::get_default_year()//返回缺省year
{
return default_date.get_year();
}

Date &Date::add_year(int n) //加n年
{
this->year += n;
return *this;
}
int PerMonDay(int yy, int mm);
Date & Date::add_month(int n) //加n月,考虑超过12月,考虑闰年
{
month += n;
while (month > 12)
{
this->year += 1;
this->month -= 12;
}
if((day-PerMonDay(year,month))>0)
{
day -= PerMonDay(year,month);
month += 1;
}
return *this;
}

int PerMonDay(int yy, int mm)
{
switch (mm)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
if((yy%100 != 0 && yy%4 == 0) ||(yy%400 == 0))
return 29;
else
return 28;
}
}
Date &Date::add_day(int n) //加n天,考虑进位月和年,考虑闰年
{
day += n;
while(day > PerMonDay(year,month))
{
day -= PerMonDay(year,month);
Date::add_month(1);
}
return *this;
}
//实现这个类并用以下的main函数测试它。
int main() {

string type;

while (cin >> type) {

    if (type == "Date") {

        int day, mon, year;

        cin >> day >> mon >> year;

        Date mydate(day, mon, year);

        int addday, addmon, addyear;

        cin >> addday >> addmon >> addyear;

        mydate.add_day(addday).add_month(addmon).add_year(addyear);

        cout << mydate.get_day() << " " << mydate.get_month() << " " << mydate.get_year() << endl;

    }

    else if (type == "defaultDate") {

        cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;

    }

    else if (type == "setdefaultDate") {

        int day, mon, year;

        cin >> day >> mon >> year;

        Date::set_default(day, mon, year);

        cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;

    }

}

return 0;

}

sLSmaJDKDLla
sLSmaJDKDLla   2018.05.30 12:49

如果再出现问题,可以@我

sLSmaJDKDLla
sLSmaJDKDLla   2018.05.30 15:35

忽然想起来还有 29 2 2008 + 0 0 1 = 29 2 2009 的问题
#include

using namespace std;
class Date {
private:

int day, month, year;

static Date default_date; //初始化为 1901年1月1日

public:

Date(int d = 0, int m = 0, int y = 0); //构造函数
int get_day() const; // 返回day

int get_month() const; //返回month

int get_year() const; // 返回year
static void set_default(int , int , int);

static int get_default_day(); //返回缺省day

static int get_default_month(); //返回缺省month

static int get_default_year(); //返回缺省year

Date & add_year(int n); //加n年

Date & add_month(int n); //加n月,考虑超过12月,考虑闰年

Date & add_day(int n); //加n天,考虑进位月和年,考虑闰年

};
Date::Date(int d, int m, int y) //构造函数
{
if(d!=0 && m != 0 && y != 0)
day = d;
month = m;
year = y;
}
int Date::get_day() const { return day; } // 返回day
int Date::get_month() const { return month; } //返回month

int Date::get_year() const { return year; } // 返回
Date Date::default_date(1,1,1901);
void Date::set_default(int x, int y, int z)
{
Date::default_date = Date(x,y,z);
}

int Date::get_default_day()//返回缺省day
{
return default_date.get_day();
}

int Date::get_default_month() //返回缺省month
{
return default_date.get_month();
}

int Date::get_default_year()//返回缺省year
{
return default_date.get_year();
}
int PerMonDay(int yy, int mm);
Date &Date::add_year(int n) //加n年
{
this->year += n;
if((day-PerMonDay(year,month))>0)
{
day -= PerMonDay(year,month);
month += 1;
}
return *this;
}
Date & Date::add_month(int n) //加n月,考虑超过12月,考虑闰年
{
month += n;
while (month > 12)
{
this->year += 1;
this->month -= 12;
}
if((day-PerMonDay(year,month))>0)
{
day -= PerMonDay(year,month);
month += 1;
}
return *this;
}

int PerMonDay(int yy, int mm)
{
switch (mm)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
if((yy%100 != 0 && yy%4 == 0) ||(yy%400 == 0))
return 29;
else
return 28;
}
}
Date &Date::add_day(int n) //加n天,考虑进位月和年,考虑闰年
{
day += n;
while(day > PerMonDay(year,month))
{
day -= PerMonDay(year,month);
Date::add_month(1);
}
return *this;
}
//实现这个类并用以下的main函数测试它。
int main() {

string type;

while (cin >> type) {

    if (type == "Date") {

        int day, mon, year;

        cin >> day >> mon >> year;

        Date mydate(day, mon, year);

        int addday, addmon, addyear;

        cin >> addday >> addmon >> addyear;

        mydate.add_day(addday).add_month(addmon).add_year(addyear);

        cout << mydate.get_day() << " " << mydate.get_month() << " " << mydate.get_year() << endl;

    }

    else if (type == "defaultDate") {

        cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;

    }

    else if (type == "setdefaultDate") {

        int day, mon, year;

        cin >> day >> mon >> year;

        Date::set_default(day, mon, year);

        cout << Date::get_default_day() << " " << Date::get_default_month() << " " << Date::get_default_year() << endl;

    }

}

return 0;

}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
第一种解法: [cpp] view plaincopyprint? /*  *copyright@nciaebupt 转载请注明出处  *问题:有两个序列a,b,大小都为n,序列元素的值任意整数,无序;  *要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。  *比如 a=[100 ,99 ,98
计算器小型应用
小型计算器功能不太完善 求各位大神指教
大神们,求指教!!!
大神们!求指教!!    面、向、对、象、 怎么学啊, 谢谢,请留言........ 面、向、对、象
求大神们指教
都已经定义了,为什么出现如下错误,求大神们指教。 1>main.obj : error LNK2019: 无法解析的外部符号 "public: char __thiscall LinkStack::Pop(void)" (?Pop@?$LinkStack@D@@QAEDXZ),该符号在函数 _main 中被引用 1>main.obj : error LNK2019: 无法解析的外部符号 "
求大神指教
#ifndef RATIONAL_H_INCLUDED #define RATIONAL_H_INCLUDED #include using namespace std; int gy(int x,int y) {     int k;     if(x>y)     {         k=x;         x=y;         y=k;     }     w
求大神指教!!!
菜单 为什么window.top.frames仅仅兼容IE 火狐 ,而欧朋谷歌不支持???
一个用C++写的求最短路径的代码
一个一个用C++写的求最短路径的代码,可以直接使用,若有不足的地方,请各位大神指教
文件权限问题 求大神指教
求大神指教、、、在做项目时使用php  move_uploaded_file函数 但是因为文件权限不够所以导致图片移动失败。更改文件权限后,上传第一张图片是成功的但是文件权限会自动发生改变。那么在上传第二张图片就不行了 又得去改文件权限 。求大神指点一二,本人第一次遇到这种问题!在线等很急。...
一个悖论,求大神指教!!!
如果你去看望一个很久不见的朋友,你知道她生了两个孩子,你想买一份礼物给他们,但是你不知道他们的性别,这时候恰好有另外一个朋友告诉你,其中有一个是男孩,这种情况下你会如何买礼物呢? 这个问题的答案其实很简单:你肯定会先买一份男孩的礼物,问题就是另外一个是女孩的概率不是1/2,而是2/3,原因是生两胎孩子一男一女的概率为1/2,而全是男孩的概率为1/4,所以另外一个是女孩的概率为2/3. 新的问题
图书管理系统源码
学校的作业,自己认真编写的也加入了自己的想法,用VC6编写的,供大家交流 初学者,求大神指教