大學生C++教程第九版 習題(9.8)

//頭文件  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();

private:
	

	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 % 400 == 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])
		return false;
	if (mm == 2 && leafYear(yy) && dd <= 29)
		return false;
	return true;
}

void Date::displayMessage()
{
	cout << "當前日期爲:" << m_month << "/" << m_day << "/" << m_year
		<< endl;
}

//main函數
#include "Date.h"

int main()
{
	Date date1(7,8,2019);
	int i = 0;


	date1.displayMessage();

	while (i < 200)
	{
		date1.nextday();
		date1.displayMessage();
		i++;
	}
		

	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章