论域 2016-04-03 01:57 采纳率: 25%
浏览 2169
已结题

c++ 日期类 求大神指教

描述

给定日期类的声明
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条回答 默认 最新

  • threenewbee 2016-04-03 21: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;
    
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题