C++判断閏年

14215 ワード

#include<iostream>
using namespace std;

#define YEARERROR -1
#define MONTHERROR -2
#define DAYERROR -3

int day[13] = { 29,31,28,31,30,31,30,31,31,30,31,30,31 }; //       

int Judgmentinput(int const Year, int Month, int const Day);
bool Leapyear(int const Year);
void Calculateddays(int const Year,int Month, int const Day);
void Subject();
int main()
{
	Subject();
	return 0;
}

bool Leapyear(int const Year)
{
	return ((0 == Year % 4 && 0 != Year % 100) || 0 == Year % 400);

}

void Calculateddays(int const Year,int  Month, int const Day)
{
	if (Leapyear(Year))
	{
		int count = 0;
		for (int i = 1; i < Month; ++i)
		{
			if (2 == i)
			{
				i = 0;
			}
			count += day[i];
		}
		count += Day;
		cout << count;
	}
	else
	{
		int count = 0;
		for (int i = 0; i < Month; ++i)
		{
			count += day[i];
		}
		count += Day;
		cout << count;
	}
}
int Judgmentinput(int const Year, int Month, int const Day)
{
	if (2==Month&&Leapyear)
	{
		Month = 0;
	}
	if (Year < 1)
	{
		return YEARERROR;
	}
	if (Month < 1 || Month>12)
	{
		return MONTHERROR;
	}
	if (Day<1 || Day>day[Month])
	{
		return DAYERROR;
	}
}

void Subject()
{
	int Year;
	int Month;
	int Day;
	int flag;
	char ch;

	do
	{
		cout << "      ";
		cin >> Year >> Month >> Day;
		flag = Judgmentinput(Year, Month, Day);
		switch (flag)
		{
		case -1:cout << "YEARERRPR" << endl;
			break;
		case -2:cout << "MONTHERROR" << endl;
			break;
		case -3:cout << "DAYERROR" << endl;
			break;
		default:
			Calculateddays(Year, Month, Day);
			break;
		}
		cout << "        Y  " << endl;
		getchar();
		cin >> ch;
	} while ('Y' == ch || 'y' == ch);
}