![]() |
#2
爵爷2009-11-19 17:21
|

/*******************************************************************************************
2. 自定义一个简单的日期类DateType,它具有数据成员y、m、d,用来表示当前日期的年、月、日。
而后设计该类欲实现(完成)的功能,进而设计出相应的类成员函数。
例如,下面给出的"雏形"可用来实现对天的增加,比较两个日期是否相等,以及对日期的输出等操作。
请完成各类成员函数,并编制主函数,说明DateType类对象,对定义的各成员函数进行调用,
以验证它们的正确性。
class DateType { //自定义的日期类DateType
int y,m,d; //数据成员,表示当前日期的年、月、日
public:
DateType(int y0=1, int m0=1, int d0=1);
//构造函数,设定年、月、日;并设置参数默认值
void incrementDay(); //增加1天
bool equal(DateType dt2); //判断二日期是否相等
void printDate(); //屏幕输出日期对象的有关数据(年、月、日)
};
注意,当对日期增加1天后,也会涉及所谓的"进位"问题:首先算出本"日"所在的月份具有的天数N,
若加1之后的"日"数值超过所在的月份具有的天数N时,"进位"到月,而月份若超过12时还要"进位"到年。
***********************************************************************************************/
#include<iostream>
using namespace std;
class DateType
{
int y;
int m;
int d; //数据成员,表示当前日期的年、月、日
public:
DateType(int y0=1, int m0=1, int d0=1);
//构造函数,设定年、月、日;并设置参数默认值
void incrementDay(); //增加1天
bool equal(DateType dt2); //判断二日期是否相等
void printDate(); //屏幕输出日期对象的有关数据(年、月、日)
};
DateType::DateType(int y0, int m0, int d0)
{
y=y0;
m=m0;
d=d0;
}
void DateType::incrementDay()
{
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if((y%4==0&&y%100!=0)||(y%400==0))
a[1]++;
if(d==a[m-1]&&m==12)
{
y++;
m=1;
d=1;
}
else if(d==a[m-1]&&m!=12)
{
m++;
d=1;
}
else
d++;
}
void DateType::printDate()
{
cout<<"日期是"<<y<<"年"<<m<<"月"<<d<<"日"<<endl;
}
bool DateType::equal(DateType dt2)
{ DateType dt;
if(dt.y==dt2.y||dt.m==dt2.m||dt.d==dt2.d)
return true;
else
return false;
}
void main()
{
DateType dt1(1999,2,28),dt2(1999,2,28);
cout<<"dt1"; dt1.printDate();
cout<<"dt2"; dt2.printDate();
if(dt1.equal(dt2))
cout<<"两日期相等"<<endl;
else
cout<<"两日期不相等"<<endl;
dt2.incrementDay();
cout<<"dt2.incrementDay():dt2";
dt2.printDate();
}
2. 自定义一个简单的日期类DateType,它具有数据成员y、m、d,用来表示当前日期的年、月、日。
而后设计该类欲实现(完成)的功能,进而设计出相应的类成员函数。
例如,下面给出的"雏形"可用来实现对天的增加,比较两个日期是否相等,以及对日期的输出等操作。
请完成各类成员函数,并编制主函数,说明DateType类对象,对定义的各成员函数进行调用,
以验证它们的正确性。
class DateType { //自定义的日期类DateType
int y,m,d; //数据成员,表示当前日期的年、月、日
public:
DateType(int y0=1, int m0=1, int d0=1);
//构造函数,设定年、月、日;并设置参数默认值
void incrementDay(); //增加1天
bool equal(DateType dt2); //判断二日期是否相等
void printDate(); //屏幕输出日期对象的有关数据(年、月、日)
};
注意,当对日期增加1天后,也会涉及所谓的"进位"问题:首先算出本"日"所在的月份具有的天数N,
若加1之后的"日"数值超过所在的月份具有的天数N时,"进位"到月,而月份若超过12时还要"进位"到年。
***********************************************************************************************/
#include<iostream>
using namespace std;
class DateType
{
int y;
int m;
int d; //数据成员,表示当前日期的年、月、日
public:
DateType(int y0=1, int m0=1, int d0=1);
//构造函数,设定年、月、日;并设置参数默认值
void incrementDay(); //增加1天
bool equal(DateType dt2); //判断二日期是否相等
void printDate(); //屏幕输出日期对象的有关数据(年、月、日)
};
DateType::DateType(int y0, int m0, int d0)
{
y=y0;
m=m0;
d=d0;
}
void DateType::incrementDay()
{
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if((y%4==0&&y%100!=0)||(y%400==0))
a[1]++;
if(d==a[m-1]&&m==12)
{
y++;
m=1;
d=1;
}
else if(d==a[m-1]&&m!=12)
{
m++;
d=1;
}
else
d++;
}
void DateType::printDate()
{
cout<<"日期是"<<y<<"年"<<m<<"月"<<d<<"日"<<endl;
}
bool DateType::equal(DateType dt2)
{ DateType dt;
if(dt.y==dt2.y||dt.m==dt2.m||dt.d==dt2.d)
return true;
else
return false;
}
void main()
{
DateType dt1(1999,2,28),dt2(1999,2,28);
cout<<"dt1"; dt1.printDate();
cout<<"dt2"; dt2.printDate();
if(dt1.equal(dt2))
cout<<"两日期相等"<<endl;
else
cout<<"两日期不相等"<<endl;
dt2.incrementDay();
cout<<"dt2.incrementDay():dt2";
dt2.printDate();
}
只有本站会员才能查看附件,请 登录
为什么两日期不相等啊?晕......
[ 本帖最后由 爵爷 于 2009-11-19 17:20 编辑 ]