#include <iostream>
class Tools
{
public:
//用于重置输入流
void Recovery();
};
void Tools::Recovery()
{
//清空键盘缓冲区
std::cin.sync();
std::cin.clear();
};
void main()
{
//闰年的月份天数
const int Leap_Year_month[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
//非闰年的月份天数
const int mon[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
//临时变量,用于存放月份天数的累加和
int temp = 0;
//闰年标志
bool LeapYear = false;
//创建工具类对象
Tools t;
//for循环变量
int i;
int year,month,day;
std::cout << "请输入年份:";
std::cin >> year;
//输入不为数字
while(! std::cin)
{
std::cout << "错误:只能输入数字\n 请重新输入:" << std::endl;
t.Recovery();
std::cin >> year;
}
//限定年份范围
while(year <=0 || year > 5000)
{
std::cout <<"错误:年份输入不正确 \n 请重新输入:" << std::endl;
t.Recovery();
std::cin >> year;
}
//判断是否闰年
if(year % 4 == 0 && year % 100 != 0)
{
LeapYear = true;
}
else
{
LeapYear = false;
}
std::cout << "请输入月份:";
std::cin >> month;
while(!std::cin)
{
std::cout << "错误:只能输入数字\n 请重新输入:";
t.Recovery();
std::cin >> month;
}
//限定月份输入范围
while(month <=0 || month >= 13)
{
std::cout << "错误:月份只能在1-12之间 \n 请重新输入:";
t.Recovery();
std::cin >> month;
}
std::cout << "请输入日期:";
std::cin >> day;
while(! std::cin)
{
std::cout << "错误:只能输入数字\n 请重新输入:";
t.Recovery();
std::cin >> day;
}
//限定天数输入范围
while(day <= 0 || day >=32)
{
std::cout << "错误:天数只能在1-31之间 \n 请重新输入:";
t.Recovery();
std::cin >> day;
}
//如果不为闰年
if(!LeapYear)
{
while(day > mon[month-1] )
{
std::cout << "\n天数输入错误:"<< year << "年" << month << "月没有" << day << "天" << std::endl;
std::cout << "请重新输入:";
t.Recovery();
std::cin >> day;
}
}
//闰年版本的天数累加
if(LeapYear)
{
switch(month)
{
case 1:
{
std::cout << "\n这是一年中的第" << day << "天" << std::endl;
break;
}
case 2:
{
for(i=0;i<month-1;i++)
{
temp += Leap_Year_month[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 3:
{
for(i=0;i<month-1;i++)
{
temp += Leap_Year_month[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 4:
{
for(i=0;i<month-1;i++)
{
temp += Leap_Year_month[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 5:
{
for(i=0;i<month-1;i++)
{
temp += Leap_Year_month[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 6:
{
for(i=0;i<month-1;i++)
{
temp += Leap_Year_month[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 7:
{
for(i=0;i<month-1;i++)
{
temp += Leap_Year_month[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 8:
{
for(i=0;i<month-1;i++)
{
temp += Leap_Year_month[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 9:
{
for(i=0;i<month-1;i++)
{
temp += Leap_Year_month[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 10:
{
for(i=0;i<month-1;i++)
{
temp += Leap_Year_month[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 11:
{
for(i=0;i<month-1;i++)
{
temp += Leap_Year_month[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 12:
{
for(i=0;i<month-1;i++)
{
temp += Leap_Year_month[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
}
}
//非闰年版本的天数累加
else
{
switch(month)
{
case 1:
{
std::cout << "\n这是一年中的第" << day << "天" << std::endl;
break;
}
case 2:
{
for(i=0;i<month-1;i++)
{
temp +=mon[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 3:
{
for(i=0;i<month-1;i++)
{
temp +=mon[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 4:
{
for(i=0;i<month-1;i++)
{
temp +=mon[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 5:
{
for(i=0;i<month-1;i++)
{
temp +=mon[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 6:
{
for(i=0;i<month-1;i++)
{
temp +=mon[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 7:
{
for(i=0;i<month-1;i++)
{
temp +=mon[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 8:
{
for(i=0;i<month-1;i++)
{
temp +=mon[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 9:
{
for(i=0;i<month-1;i++)
{
temp +=mon[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 10:
{
for(i=0;i<month-1;i++)
{
temp +=mon[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 11:
{
for(i=0;i<month-1;i++)
{
temp +=mon[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
case 12:
{
for(i=0;i<month-1;i++)
{
temp +=mon[i];
}
std::cout << "\n这是一年中的第" << temp + day << "天" << std::endl;
break;
}
}
}
}