//頭文件 Date.h
#ifndef DATE_H
#define DATE_H
#include <iostream>
#include <array>
using namespace std;
class Date
{
public:
explicit Date(int, int, int);
~Date();
void setDate(int, int, int);
void nextday();
bool endOfDay(int, int, int);
bool leafYear(int);
void displayMessage();
protected:
int m_year;
int m_month;
int m_day;
};
#endif
//Date.cpp
#include "Date.h"
Date::Date(int day, int month, int year)
{
setDate(day, month, year);
}
Date::~Date()
{
}
void Date::setDate(int day, int month, int year)
{
static array<int, 12> ArrayMonth =
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (year > 0)
m_year = year;
if (month > 0 && month <= 12)
m_month = month;
if (day > 0 && day < ArrayMonth[month])
m_day = day;
if (month == 2 && leafYear(year) && day <= 29)
m_day = day;
}
bool Date::leafYear(int yy)
{
if (yy % 400 == 0 ||(yy % 100 != 0 || yy % 4 == 0))
return true;
return false;
}
void Date::nextday()
{
if (endOfDay(m_day, m_month, m_year))
++m_day;
else if (m_month < 12)
{
++m_month;
m_day = 1;
}
else
{
++m_year;
m_month = 1;
m_day = 1;
}
}
bool Date::endOfDay(int dd, int mm, int yy)
{
static array<int, 12> ArrayMonth =
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (dd > 0 && dd < ArrayMonth[mm-1])
return false;
if (mm == 2 && leafYear(yy) && dd <= 29)
return false;
return true;
}
void Date::displayMessage()
{
cout << "當前日期爲:" << m_month << "/" << m_day << "/" << m_year
<< endl;
}
//頭文件
#ifndef TIME_H
#define TIME_H
#include "Date.h"
#include <iostream>
#include <iomanip>
#include <array>
using namespace std;
class Time :public Date
{
public:
Time(int, int, int, int, int, int);
~Time();
void setTime(int, int, int);
void printStandard();
void tick();
private:
int hour;
int minute;
int second;
};
#endif
#include "Date.h"
#include "Time.h"
//初始化這裏需要補全
Time::Time(int hh, int min, int sec,int day,int month,int year) :Date(day,month,year)
{
setTime(hh, min, sec);
}
Time::~Time()
{
}
void Time::setTime(int hh, int min, int sec)
{
if (hh >= 0 && hh <24)
hour = hh;
if (min >= 0 && min < 60)
minute = min;
if (sec >= 0 && sec < 60)
second = sec;
}
void Time::printStandard()
{
cout << setw(2) << setfill('0') << ((hour % 12 == 0 && hour >= 12) ? 12 : hour % 12) << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second << ' '
<< ((hour >= 12) ? "PM" : "AM") << endl;
cout << m_day << "/" << m_month << "/" << m_year << endl;
}
void Time::tick()
{
if (second < 59)
++second;
else if (minute < 59)
{
++minute;
second = 0;
}
else if (hour < 23)
{
++hour;
minute = 0;
second = 0;
}
else
{
nextday();
hour = 0;
minute = 0;
second = 0;
}
}
//驅動程序
#include "Date.h"
#include "Time.h"
#include <iostream>
using namespace std;
int main()
{
Time date1(23,59,59,29,2,2004);
date1.tick();
date1.printStandard();
return 0;
}