已有140人关注
-858993460/-858993460/-858993460
发表在C语言答疑区 2016-12-11
是否精华
版块置顶:

定义一个满足如下要求的Date类。
1,用下面的格式输出日期;
日、月、年
2,可运行在日期上加一天操作;
3,设置日期。
我的答案如下。结果是-858993460/-858993460/-858993460
                                     Press any key to continue
为什么会出错,如何满足2 3条件的输出。

#include <iostream.h>
class Date
{
public:
  void Display();  
  void AddOneDay();  
  void SetDay(int y,int m,int d);
protected:  
 bool Legal(int y, int m, int d);  
 bool IsLeapYear(int y);  
 int year;  
 int month;  
 int day;
};
 
void Date::Display()
{
  cout <<day <<"/" <<month <<"/" <<year <<endl;
}
 
void Date::AddOneDay()
{
if(Legal(year,month,day+1))   
   day++;
else if(Legal(year,month+1,1))
    month++,day=1;
else if(Legal(year+1,1,1))
    day=1,month=1,year++;
}
 
void Date::SetDay(int y, int m, int d)
{  
 if(Legal(y,m,d))
    day=d, month=m, year=y;
}
 
bool Date::Legal(int y, int m, int d)
{
  if(y>9999||y<1||d<1||m<1||m>12)    
   return false;  
  int dayLimit=31;
  switch(m)
  case 4:
  case 6:
  case 9:
  case 11:
   dayLimit--;  
   if(m==2)
    dayLimit = IsLeapYear(y) ? 29 : 28;
  return (d>dayLimit)?
   false : true;
}
 
bool Date::IsLeapYear(int y)
{
  return !(y%4)&&(y%100)||!(y%400);
}

int main()
{
 Date a;
 a.SetDay(10,13,1998);
 a.Display();
 a.AddOneDay();


 

分享到:
精彩评论 2
again
学分:250 LV4
2016-12-12
沙发

哪本书上的练习?
书名,第几版,第几页。

again
学分:250 LV4
2016-12-12
板凳

setDay 调用时,传的参数有问题。
仔细看一下参数的意思。

首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照