【c++】万年历

上部分为日期之间的简单运算,下部分为日期类写的万年历

int month_days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
#include
#include
#include
using namespace std;
class Date
{
public:
	Date(int year=0,int month=0,int day=0)
	{
		_year=year;
		_month=month;
		_day=day;
	}
	Date(Date& p)
	{
		_year=p._year;
		_month=p._month;
		_day=p._day;
	}
	//~Date();
	void Set_date(int y,int m,int d);
	void Print();
	int Sum_days();
	void Input();//进行操作选择
    void SetDays();//如果输入某年,进行'3'操作处理
    void SetMonth();//如果选输入某年某月,进行'2'操作处理
    void SetYear();//如果输入某年某月某日,进行'1'操作处理
    bool IsLeap(int year);//判断是否是闰年
    bool IsRight(int year,int month,int day);//判断输入是否合法
    int GetDays(int year,int month,int day);//得到此日期前的天数
    void Print(int year,int month);//输出到界面上
	void operator+(const int days)
	{
		_day+=days;
		while(_day>=365)
		{
			if(IsLeap(_year)&&_day>365)
			{
				_year++;
				_day-=366;
			}
			else
			{
				_year++;
				_day-=365;
			}
		}
		while(_day>31)
		{
			if(_month==1 ||_month==3 ||_month==5 ||_month==7 ||_month==8 || _month==10 || _month==12)
				{
	          _month++;
	            _day-=31;
	             }
			if(_month==4||_month==6||_month==9||_month==11)
						{
          _month++;
		  _day-=30;
				}
			else if(_month==2&&IsLeap(_year))
			{
				_month++;
				_day-=29;
			}
			else
			{
				_month++;
				_day-=28;
			}
		}
	}
	void operator-(const int days)
	{
	_day-=days;

while(_day<=0)
{

	if((_month-1)==1 ||(_month-1)==3 ||(_month-1)==5 ||(_month-1)==7 ||(_month-1)==8 || (_month-1)==10 || (_month-1)==12)
				{
	          _month--;
	            _day+=31;
	             }
			if((_month-1)==4||(_month-1)==6||(_month-1)==9||(_month-1)==11)
						{
          _month--;
		  _day+=30;
				}
			else if((_month-1)==2&&IsLeap(_year))
			{
				_month--;
				_day+=29;
			}
			else
			{
				_month--;
				_day+=28;
			}
		}
}
		
	

	Date operator-(const Date& c)
	{
		_year-=c._year;
		_month-=c._month;
		_day-=c._day;
		if(_month<0)
			{
				_year--;
				_month+=12;
			}
while(_day<=0)
{
	if((_month-1)==1 ||(_month-1)==3 ||(_month-1)==5 ||(_month-1)==7 ||(_month-1)==8 || (_month-1)==10 || (_month-1)==12)
				{
	          _month--;
	            _day+=31;
	             }
			if((_month-1)==4||(_month-1)==6||(_month-1)==9||(_month-1)==11)
						{
          _month--;
		  _day+=30;
				}
			else if((_month-1)==2&&IsLeap(_year))
			{
				_month--;
				_day+=29;
			}
			else
			{
				_month--;
				_day+=28;
			}
}
return *this;

	}

private:
	int _year;
	int _month;
	int _day;
};
void Date::Set_date(int year,int month,int day)
{
	    _year=year;
		_month=month;
		_day=day;
}
void Date::Print()
{
	cout<<"("<<_year<<","<<_month<<","<<_day<<")"<2)
		return _year*365+sum+_day+k;
	else
		return _year*365+sum+_day;

}
void Date::Input()
{
     char choose;
     bool flag=true;
     while(flag)
    {
    	cout<>choose;
          switch(choose)
          {
                   case '1':SetYear();break;
                   case '2':SetMonth();break;
                   case '3':SetDays();break;
                   case '4':flag=false;break;
                  default:cout<<"输入错误,请重新输入";
          }
    }
}
     
bool Date::IsRight(int year,int month,int day) //判断日期输入是否正确
{
       if(year<1 || month<1 || month>12)//年月是否正确
          return false;
 //日期是否正确
       if(day<0)return false;
       else if( day==29)
           return((month==2 && IsLeap(year))|| month!=2);
       else if(day==31)return(month==1 ||month==3 ||month==5 ||month==7 ||month==8 || month==10 || month==12);
       else if(day>31) return false;
       else return true;
 }  
       
void Date::SetDays()//如果输入某年某月某日,进行'1'操作处理
{
     int weekDay;
     int year,month,day;
     cout<<"           请输入年_月_日:";
     cin>>year>>month>>day;
     
     while(!IsRight(year,month,day))
     {
         cout<<"输入错误,请重新输入年_月_日:";
         
          cin>>year>>month>>day;
     }
         
     weekDay=GetDays(year, month,day)%7;
     
     switch(weekDay)
     {
              case 0: cout<>year>>month;
     day=1;
     
      while(!IsRight(year,month,day))//判断输入是否正确,设置day=1
     {
         cout<<"输入错误,请重新输入年_月:";
          cin>>year>>month;
     }      
     weekDay=GetDays(year, month,day)%7;
     Print(year,month);
}

void Date::SetYear()
{
     int year,month,day;
     cout<<"           请输入年:";
     cin>>year;
     month=1;day=1;
     
     while(!IsRight(year,month,day))//判断是否输入正确,若错误,请重新输入 .设置day=1,month=1,
     {
         cout<<"输入错误,请重新输入年:";
         cin>>year;
     }
     
    for(int k=1;k<=12;k++)//将12个月的万年历在界面上输出
      Print(year,k);
}    
     void Date:: Print(int year,int month)//打印到界面上
{    
     int weekday,day=1;
     cout<<"            公元"<


你可能感兴趣的:(C++)