正文

计算日期2008-12-07 13:19:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/zhaoyg/39819.html

分享到:

// 给定一个天数,查询该天之后的日期
//例如
//当前日期是 2008 11 10 则5050天后是 2022 9 8

#include <iostream>

using namespace std;

class DAY
{
private:
 int y;
 int m;
 int d;
 int days[12];

public:
 DAY()
 {
  cout<<"请输入当前日期"<<endl;
  cout <<"year"<<endl;
  cin >> y;
  cout << "mouth"<<endl;
  cin >>m;
  cout << "day"<<endl;
  cin >> d;

  int i;

  for( i = 1 ; i <= 12 ; i++)
  {
   switch(i)
   {

   case 2:
    days[i-1] = isLeapYear() ? 29:28; //设置2月天数
    break;

   case 4:
   case 6:
   case 9:
   case 11:
    days[i-1] = 30;
    break;

   default :
    days[i-1] = 31;
   }
  }
 }

 void show()
 {
  cout <<"year:"<<y<<endl;
  cout <<"mouth:"<<m<<endl;
  cout <<"day:"<<d<<endl;
 }

 int judge_day(int mouth)
 {
  return days[mouth-1];
 }

 void calculate(int increase)
 {
  if(d + increase <= days[m-1])
   d += increase;
  else
  {
   increase -= days[m-1] - d;
   m++;

   if(m>12) 
   {
    //if m is greater than 12 , and increase is less than days[m-1]
    //,then the following while statement will not be executed,
    //so must reset m and year++

    m = 1;
    y++;
   }

   while(increase -days[m-1] >0)
   {
    increase -= days[m-1];
    m++;

    if(m > 12)
    {
     y++;
     m = 1;

     days[1] = isLeapYear() ? 29 : 28;
    }
   }

   d = increase;
  }
 }

 bool isLeapYear()
 {
  return ( y%4 == 0 && y%100 != 0 ) || (y%400 == 0);
 }
};

int main()
{
 DAY test;
 int increase;

 test.show();

 cout <<"请输入天数,以查询该天之后的日期"<<endl;
 cin >> increase;

 test.calculate(increase);
 cout <<"\n"<<increase<<"天以后是:"<<endl;
 test.show();

 return 0;
}

阅读(2088) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册