#include <iostream>
#include <cassert>
using namespace std;
class CTime
{
private:
int year;
int month;
int day;
int hour;
int minute;
int second;
public:
//Judging the input datas whether is validate.
void validate() const;
//input datas to the CTime's data members
void input();
//count the current time's next second time
void nextSecond();
//count the current time's next 100 days' time
void next100days();
//output datas
void output() const;
//carry bit for minute if minute is bigger than sixty
void minuteAdvance();
//carry bit for second if second is bigger than sixty
void secondAdvance();
//carry bit for hour if hour is bigger than twenty-four
void hourAdvance();
//carry bit for month if month can be added one
bool dayAdvance();
//carry bit for year if year can be added one
void monthAdvance();
//bool isLearYear() const;
};
///////////////////////////////////////
void CTime::secondAdvance()
{
if (second == 60)
{
second = 0;
minute += 1;
}
}
///////////////////////////////////////
void CTime::minuteAdvance()
{
if (minute == 60)
{
hour += 1;
minute = 0;
}
}
////////////////////////////////////////
void CTime::hourAdvance()
{
if (hour == 24)
{
day += 1;
hour = 0;
}
}
//////////////////////////////////////////
bool CTime::dayAdvance()
{
switch (month)
{
case 1: case 3: case 5: case 7:
case 8: case 10: case 12:
if (day > 31)
{
day -= 31;
month += 1;
return true;
}
case 4: case 6: case 9: case 11:
if (day > 30)
{
day -= 30;
month +=1;
return true;
}
case 2:
if ((year % 4 == 0 && year % 100) || (year % 400 == 0))
{
if (day > 29)
{
day -= 29;
month += 1;
return true;
}
}
else
{
if (day > 28)
{
day -= 28;
month += 1;
return true;
}
}
}
return false;
}
/////////////////////////////////////////
void CTime::monthAdvance()
{
if (month >= 12)
{
month -= 12;
year += 1;
}
}
/////////////////////////////////////////
void CTime::output() const
{
cout << year << "-" << month << "-" << day << ((hour >= 10) ? " " : " 0")
<< hour << ":" << ((minute >= 10) ? "" : "0") << minute << ":"
<< ((second >= 10) ? "" : "0") << second << endl;
}
void CTime::validate() const
{
assert(year >= 1);
assert(month >= 1 && month <= 12);
assert(day >= 1 && day <= 31);
assert(hour >= 0 && hour <= 23);
assert(minute >= 0 && minute <= 59);
assert(second >= 0 && second <= 59);
}
void CTime::input()
{
cout << "year month day hour minute second:" << endl;
cin >> year >> month >> day >> hour >> minute >> second;
validate();
}
void CTime::nextSecond()
{
second += 1;
secondAdvance(); //handle second
minuteAdvance();//
hourAdvance();
dayAdvance();
monthAdvance();
}
void CTime::next100days()
{
day += 100;
while (dayAdvance())
{
monthAdvance();
}
}
int main()
{
CTime time;
time.input();
cout << endl;
CTime temp(time);
///////////////////////////////////////////////
cout << "next second is :" << endl;
time.nextSecond();
time.output();
cout << endl;
CTime newTime(temp);
///////////////////////////////////////////////
newTime.next100days();
cout << "next 100 days is :" << endl;
newTime.output();
cout << endl;
return 0;
}