目录
题目
输入今天的日期(年月日),计算明天的日期。要求进行输入日期合法性验证。
源码
#include <iostream>
using namespace std;
class Data
{
public:
void set_data();
void show_data();
void next_data();
private:
bool is_data(int, int, int);
int year;
int month;
int day;
};
void Data::set_data()
{
char c1, c2;
cout << "请输入今天的日期(格式year/month/data)" << endl;
while(1)
{
cin >> year >> c1 >> month >> c2 >> day;
if(c1 != '/' || c2 != '/')
cout << "格式不正确,请重新输入" << endl;
else if(!is_data(year, month, day))
cout << "日期非法,请重新输入" << endl;
else
break;
}
}
void Data::show_data()
{
cout << year << "/" << month << "/" << day << endl;
}
bool r_year(int year)
{
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) )
return true;
else
return false;
}
bool Data::is_data(int year, int month, int day)
{
if(year > 0)
{
if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
{
if(day >= 0 && day <= 31)
return true;
}
else if(month == 2)
{
if(r_year(year))//闰年
{
if(day <= 29 && day >= 1)
return true;
}
else
{
if(day >= 1 && day <= 28)//平年
return true;
}
}
else if(month == 4 || month == 6 || month == 9 || month == 11)
{
if(day >= 1 && day <= 30)
return true;
}
else
return false;
}
else
return false;
}
void Data::next_data()
{
if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
if(day == 31)
{
if(month == 12)
{
year += 1;
month = 1;
day = 1;
}
else
{
month += 1;
day = 1;
}
}
else day += 1;
if(month == 4 || month == 6 || month == 9 || month == 11)
if(day == 30)
{
month += 1;
day = 1;
}
else day += 1;
if(month == 2)
if(r_year(year))
{
if(day == 29)
{
month +=1;
day = 1;
}
else day += 1;
}
else if(day == 28)
{
month += 1;
day = 1;
}
else
day += 1;
}
int main()
{
Data d;
d.set_data();
cout << "今日日期为:" << endl;
d.show_data();
d.next_data();
cout << "明日日期为:" << endl;
d.show_data();
return 0;
}
结果示例