10-8和课后题

#include<iostream>
#include<cmath>
using namespace std;
int sum;
class Date
{
private:
 int day,month,year,hour,minute,second;
  void IncDay();
  int DayCalc();
public:
 Date(int y=1900,int n=1,int d=1);
 void SetDate(int  yy,int mm,int dd);
 void Settime(int a=1,int b=1,int c=1);
 bool IsLeapYear();
 bool IsEndofMonth();
 void print_ymdhsm();
 void print_mdy();
 void AddDay(int );
 int Daysof2Date(Date ymd);
  void plussecond(int w);
};
void Date::Settime(int a,int b,int c)
{
 hour=a;
 minute=b;
 second=c;
}
Date::Date(int y,int m,int d)
{
 SetDate(y,m,d);
}
void Date::SetDate(int yy,int mm,int dd)
{
 month=(mm>=1&&mm<=12)?mm:1;
 year=(yy>=1900&&yy<=2100)?yy:1900;
 switch(month)
 {
case 4:
case 6:
case 9:
case 10:
case 11:
 day=(dd>=1&&dd<=30)?dd:1;break;
case 2:
 if(IsLeapYear())
  day=(dd>=1&&dd<=29)?dd:1;
 else 
  day=(dd>=1&&dd<=28)?dd:1;
 break;
default:
 day=(dd>=1&&dd<=31)?dd:1;
 }
}
void Date::AddDay(int days)
{
 for(int i=0;i<days;i++)
{
  IncDay();
}
}
bool Date::IsLeapYear()
{
 if(year%400==0||(year%100!=0&&year%4==0))
  return true;
 else 
  return false;
}
bool Date::IsEndofMonth()
{
 switch(month)
 {
 case 4:
 case 6:
 case 9:
 case 11:return day==30;
 case 2:
  if(IsLeapYear())
   return day==29;
  else 
   return day==28;
default: return day==31;
 }
}
void Date::IncDay()
{
 if(IsEndofMonth())
  if(month==12)
 {
  day=1;
  month=1;
  year++;
 }
  else 
  {
   day=1;
   month++;
  }
  else day++;
}
void Date::print_ymdhsm()
{
 cout<<year<<" "<<month<<" "<<day<<" "<<hour<<" "<<second<<" "<<minute<<endl;
}
int Date::DayCalc()
{
 int days;
 int yy=year-1900;
   days=yy*365;
   if(yy)
    days+=(yy-1)/4;
   switch(month)
   {
   case 12:days+=30;
   case 11: days+=31;
   case 10: days+=30;
   case 9: days+=31;
   case 8:days+=31;
   case 7:days+=30;
   case 6:days+=31;
   case 5:days+=30;
   case 4:days+=31;
   case 3:if(IsLeapYear())
     days+=29;
   case 2:days+=31;
default:break;
   }
   days+=day;
   return days;
}
int Date::Daysof2Date(Date ymd)
{
int days;
 days=abs(DayCalc()-ymd.DayCalc());
return days;
}
void Date::plussecond(int w)
{
second+=w;
minute+=second/60;
second=second%60;
hour+=minute/60;
minute=minute%60;
AddDay(hour/24);
hour=hour%24;
}
int main()
{
 Date date1;
 date1.SetDate(2006,4,8);
 date1.Settime(1,1,1);
 int h,m,s;
 cin>>h>>m>>s;
 sum=h*3600+m*60+s;
  date1.plussecond(sum);
cout<<endl;
  date1.print_ymdhsm();
  cout<<endl;
  return 0;
}
 
 
 

猜你喜欢

转载自blog.csdn.net/let_life_stop/article/details/79764714
今日推荐