算出某日是这一年的第几天

来源:互联网 发布:曲靖市罗平县经济数据 编辑:程序博客网 时间:2024/05/16 20:35

/*
算出某日是这一年的第几天.
算法:
1.定义变量,年月日,计算天数
2.输入年月日
3.构造一个年的类。判断是否闰年,算出各月份天数,及当前月份天数
4.返回当前天数

by adengou 
2011.08.10

win7平台 dev c++5.0,vs 2010  编译通过
*/
#include <iostream>
using namespace std;

//3.
class count_Date
{
private:
int year,month,day,Feb_day;
int sum_day;//计算天数
bool ly;//判断闰平年

public:
int YN;
count_Date(int y, int m,int d);//构造函数
bool leap_year(void);//判断润平年
int count_year(void);//这一年的天数,与题目问题关系不大,可省
int count_month(void);//计算月份天数
int count_day(void);//计算当前天数
};
count_Date::count_Date(int y, int m,int d):sum_day(0),YN(0)//变量初始化
{
   year=y;month=m;day=d;
}
bool count_Date::leap_year(void)
{
if(year%400==0||(year%4==0&&year%100!=0)) /*判断是不是闰年*/
{ly=1;} else{ ly=0;  }
  return ly;
}
int count_Date::count_year(void)
{
if(ly){return 366;}else{return 365;}
}
int count_Date::count_month(void)
{
int i;
for(i=1;i<month;i++)
{
switch(i)
{
case 1:sum_day+=31;break;
case 2:if(ly){sum_day+=29;}else{sum_day+=28;}break;
case 3:sum_day+=31;break;
case 4:sum_day+=30;break;
case 5:sum_day+=31;break;
case 6:sum_day+=30;break;
case 7:sum_day+=31;break;
case 8:sum_day+=31;break;
case 9:sum_day+=30;break;
case 10:sum_day+=31;break;
case 11:sum_day+=30;break;
case 12:sum_day+=31;break;
default:break;
}
}
if(month<1||month>12){cout<<"日期月份不正确"<<endl;return YN-=1;} else{return sum_day;}
}
int count_Date::count_day(void)
{
   if (month==2)
    {
    if(ly){
     if(day>0&&day<30){ return sum_day+=day;;}else{cout<<"日期号数不正确"<<endl;return YN-=1;}
         }
    if(!ly){
     if(day>0&&day<29){ return sum_day+=day;}else{cout<<"日期号数不正确"<<endl;return YN-=1;}
    }
    }
   if(month==1 ||month==3 || month==5 || month==7&& month==8 || month==10 ||month==12)
  {
   if (day>0&&day<32){ return sum_day+=day;}else{cout<<"日期号数不正确"<<endl;return YN-=1;}
     }
  if( month==4 ||month==6 || month==9 || month==11)
    {
   if (day>0&&day<31){ return sum_day+=day;}else{cout<<"日期号数不正确"<<endl;return YN-=1;}
     } 
}

int main(void)
{
//1.
int i,y,m,d,countDay,countYear;
//2.
cout<<"请输入年,月,日:" ;
cin>>y>>m>>d;
cin.ignore();
//3.
count_Date this_day(y,m,d);
this_day.leap_year();
countYear=this_day.count_year();
countDay=this_day.count_month();
countDay=this_day.count_day();
//4.

cout<<y<<"-"<<m<<"-"<<d<<" 是 ";
switch(countYear)
{
case 365:cout<<"平年 ";break;
case 366:cout<<"润年 ";break;
default:break;
}
if(this_day.YN==0)
{
cout<<" 这天是这一年的第"<<countDay<<"天"<<endl;
}
system("pause");
return 0;
}

 

原创粉丝点击