📄 +
字号:
/*22.自定义一个简单的日期类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时还要"进位"到年。
思考:可对该类增加你所考虑到的其他功能,如,对日期进行输入,计算二日期的间隔天数,
计算某日期为星期几,打印对象当前数据的y年m月的月历,一次增加若干天,对两个日期进行其他比较运算等。*/
#include<iostream.h>
#include<iomanip.h>
class DateType //自定义的日期类DateType
{ //数据成员,表示当前日期的年、月、日
public:
DateType(){y=m=d=1;} //构造函数,设定年、月、日;并设置参数默认值
DateType(int a,int b,int c)
{
y=a;m=b;d=c;
}
int IsLeapYear()
{
return(y%4==0&&y%100!=0||y%400==0);
//判断是否为闰年
}
void incrementDay(); //增加1天
bool equal(DateType dt2)
{
if(dt2.d==d&&dt2.m==m&&dt2.y==y)
return true;
else return false; //判断二日期是否相等
}
void printDate()
{
cout<<setw(4)<<y<<"年"<<setw(2)<<m<<"月"<<setw(2)<<d<<"日"<<endl;
} //屏幕输出日期对象的有关数据(年、月、日)
private:
int y,m,d;
};
void DateType::incrementDay()
{
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(m==2&&IsLeapYear()==1)
{
if(d==29)
{d=1;m++;}
else
d++;
}
else
{
if(d<days[m-1])
d++;
else
{
if(m==12)
{d=1;m=1;y++;}
else
{d=1;m++;}
}
}
}
void main()
{
int a,b,c,n;
cout<<"输入年、月、日,设定为当前日期:"<<endl;
cin>>a>>b>>c;
DateType date(a,b,c);
cout<<"屏幕输出当前日期:"<<endl;
date.printDate();
cout<<"输入待比较的日期:"<<endl;
cin>>a>>b>>c;
DateType date2(a,b,c);
cout<<"屏幕输出待比较的日期:"<<endl;
date2.printDate();
if(date.equal(date2))
cout<<"此日期与当前日期相等!"<<endl;
else
cout<<"此日期与当前日期不等!"<<endl;
cout<<"输入在当前日期之上要增加的天数:"<<endl;
cin>>n;
for(int i=0;i<n;i++)
{
date.incrementDay();
}
cout<<"增加"<<n<<"天后的日期是:"<<endl;
date.printDate();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -