关于将任意一个日期加1天得到一个新日期的实现!
如题将任意一个日期加一天得到一个新的日期的实现,下面是我的一个实现,各位还有更简洁的方法吗?日期类声明:
class Date{
int y;
int m;
int d;
public:
Date(int y=2000,int m=2 ,int d=29):y(y),m(m),d(d){}
void go(); //将日期加一天。
void show();
void input();
int weekday();
int difrence();
void printmonth();
int yearOfDay();
//判断一个月份是否为闰年
static bool isLeap(int year);
//判断一个月份是否为小月
static bool isMall(int mouth);
//判断一个月份是否二月份
static bool isFabruary(int mouth);
//求除了2月份的大小月天数
static int noMall(int mouth);
//求某个年份中的某一个月的天数
static int Days(int year,int mouth);
//判断一个数,是否在制定的范围内
static bool in(int x,int from,int to);
//判断一个日期是否有效
static bool isValid(Date& d);
friend void printDate(Date& d);
};
日期类部分实现:
//判断一个月份是否为闰年
bool Date::isLeap(int year)
{
return (year%4==0 && year%100!=0)|| year%400==0;
}
//判断一个月份是否为小月
bool Date::isMall(int mouth)
{
return (mouth==4 || mouth==6 || mouth==9 || mouth==11);
}
//判断一个月份是否二月份
bool Date::isFabruary(int mouth)
{
return mouth == 2;
}
//求除了2月份的大小月天数
int Date::noMall(int mouth)
{
return isMall(mouth)?30:31;
}
//求某个年份中的某一个月的天数
int Date::Days(int year,int mouth)
{
return mouth==2?28+isLeap(year):noMall(mouth);
}
//判断一个数,是否在制定的范围内
bool Date::in(int x,int from,int to)
{
return x>=from && x<=to;
}
//判断一个日期是否有效
bool Date::isValid(Date& d)
{
return (d.y>1600) && in(d.m, 1, 12)
&& in(d.d, 1, Days(d.y, d.m));
}
void printDate(Date& d)
{
cout << '(' <<d.y << "年" << d.m << "月" << d.d << "日)" << endl;
}
////////////////////////////////////////
void Date::go() //任意日期加1天
{
if (isMall(m)) { //如果当前月是小月
if (d==30) { //如果当天为30号
d = 0;
m++; //月份加1,不需要判断是否已超过12月份,因为小月最大也就11月。
}
d++;
}
else //否则即是大月或2月
{
if (isFabruary(m)) { //如果是2月
if (isLeap(y)) { //如果是闰年
if (d == 29) {
d = 0;
m++;
}
d++;
}else
{
if (d == 28) {
d = 0;
m++;
}
d++;
}
}
else{ //是大月
if (d == 31) {
d = 0;
if (m == 12) {
m = 0;
y++;
}
m++;
}
d++;
}
}
}
void Date::show()
{
cout << y << "年" << m << "月" << d << "日" << endl;
}
int Date::yearOfDay() //计算当天是这一年的第几天
{
int days=0;
if (m > 1) {
for (int i =1; i<=m-1; i++) {
days+=Days(y,i);
}
}
days+=d;
return days;
}
int Date::weekday() //计算当天是星期几
{
int s,w;
s = y-1+(y-1)/4-(y-1)/100+(y-1)/400+this->yearOfDay();
w=s%7;
return w;
}