c++日期时间课程设计TimeDate派生出DateTime类.docx
- 文档编号:12915665
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:28
- 大小:79.09KB
c++日期时间课程设计TimeDate派生出DateTime类.docx
《c++日期时间课程设计TimeDate派生出DateTime类.docx》由会员分享,可在线阅读,更多相关《c++日期时间课程设计TimeDate派生出DateTime类.docx(28页珍藏版)》请在冰点文库上搜索。
c++日期时间课程设计TimeDate派生出DateTime类
实验要求:
问题描述:
(1)定义一个时间类Time,能提供时、分、秒组成的时间,并提供时间增加的方法(按秒)。
(2)定义一个日期类Date,记录年、月、日,并提供日期增加的方法(按天)。
(3)由类Time和日期类Date,派生出DateTime类,除具有年、月、日、时、分、秒外,还增加国名和与格林威治时间的差。
编一应用程序,输入年、月、日、时、分、秒,在屏幕上模拟显示一电子计时器,不断输出下一秒的时间和日期,以及格林威治的日期和时间。
注意,当对日期增加1天后,会涉及所谓的“进位”问题:
首先
算出本“日”所在的月份具有的天数N,若加1之后的“日”数值超过所在的月份具有的天数N时,“进位”到月,而月份若超过12时还要“进位”到年。
思考:
可对该类增加你所考虑到的其他功能,如,对日期进行输入,计算二日期的间隔天数,计算某日期为星期几,打印对象当前数据的y年m月的月历,一次增加若干天,对两个日期进行其他比较运算等。
题目分析:
定义时钟的相关属性,包括time,date,datetime类型的year、month、day、hour、minute、second,week等信息。
在计算时间日期的时候,每达到1秒的时候对second进行加1,然后判断是
否达到60秒,达到的话minute就加1,同样的方法对hour、day、month和year
进行计算,在对day计数时,考虑到大小月和闰年,对day进行加1时,判断是哪一月和是否为闰年。
在确定年、月、日之后,使用函数Week()进行对星期几的计算,根据1901年每月1号是星期几可以得出现在是星期几。
在这个程序中,还使用了一个对话框类,使用对话框来对时间日期的设置。
在菜单栏里添加一个“设置时间”的选项和一个菜单消息,当点击这个选项就会弹出设置时间日期的对话框,对话框中编辑控件设定了每个值的取值范围,从而对输入错误进行排除。
实验思路:
先判断年份是否是闰年,而计算出一年的天数,在定义出time和date类,派生出datetime类。
在进行实现赋值。
同时根据函数的重载推算出年份的二月天数,而得到这天在这年的具体位置。
然后根据voidstuation1(datetime&t)计算两日期相差天数。
用voidtimers(datetime&dtime)模拟电子计时器,用gotol;//exit();//退出系统。
实验过程:
#include
#include
#include
#include
usingnamespacestd;
intmon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
boolisleapyear(intyear)//判断是否是闰年
{return(year%4==0&&year%100!
=0)||(year%400==0);
}
intmon_day(intyear,intmonth)//判断月份对应的天数
{
if(isleapyear(year)&&month==2)
{
return29;
}
elsereturnmon[month];
}
intgetyearday(intyear)//返回一年天数
{
if(isleapyear(year))return366;
elsereturn365;
}
classtime
{
private:
inthour;
intminute;
intsecond;
public:
time();
time(intnhour,intnminute,intnsecond);time(time&c);
~time();
intgethour(){returnhour;};
intgetminute(){returnminute;};
intgetsecond(){returnsecond;};
voidsethour(intnhour){hour=nhour;};
voidsetminute(intnminute){minute=nminute;};voidsetsecond(intnsecond){second=nsecond;};
};
classdate
{
private:
intyear;
intmonth;
intday;
stringweek;
public:
date();
date(inty,intm,intd);
date(date&t);
~date();
intgetyear(){returnyear;};
intgetmonth(){returnmonth;};
intgetday(){returnday;};
stringgetweek(){returnweek;};
voidsetyear(intnyear){year=nyear;};
voidsetmonth(intnmonth){month=nmonth;};
voidsetday(intnday){day=nday;};
voidsetweek(stringc){week=c;};
voidreset(inty=0,intm=0,intd=0);
dateoperator+(constdate&t);
dateoperator-(constdate&t);
};
classdatetime:
publicdate,publictime
{
private:
public:
datetime();
datetime(intnyear,intnmonth,intnday,intnhour,intnminute,intnsecond);datetime(intnyear,intnmonth,intnday,time&c);datetime(date&t,intnhour,intnminute,intnsecond);
datetimeaddbysecond();
datetimeoperator=(datetime&t);
datetimeoperator+(datetime&t);
};
time:
:
time()
{
hour=0;
minute=0;
second=0;
}
time:
:
time(intnhour,intnminute,intnsecond)
{
if(nhour>24||nhour<0)
{hour=0;
}
elsehour=nhour;
if(nminute>59||nminute<0)
{
minute=0;}
elseminute=nminute;
if(nsecond>59||nsecond<0)
{
second=0;}
elsesecond=nsecond;
}
time:
:
time(time&c)
{
hour=c.hour;
minute=c.minute;
second=c.second;
}
time:
:
~time()
{}
date:
:
date()
{
year=0;
month=0;
day=0;
}
date:
:
date(inty,intm,intd)
{
if(y<1900)
{
y=1900;
}
elseyear=y;
if(m>12||m<=0)
{
m=1;
}
elsemonth=m;
intmaxday=0;
if(m==2)
{
if(isleapyear(year))
{
maxday=29;
}
else
{
maxday=28;
}
}
else
{
maxday=mon[m];
}
if(d>maxday||d<=0)
{
d=1;
}
day=d;
}
date:
:
date(date&t)
{
year=t.year;
month=t.year;
day=t.day;
}
date:
:
~date(){};
voiddate:
:
reset(inty,intm,intd){
this->year=y;this->month=m;this->day=d;
}
nday,intnhour,intnminute,int
datetime:
:
datetime():
date(),time(){};
datetime:
:
datetime(intnyear,intnmonth,intnsecond):
date(nyear,nmonth,nday),time(nhour,nminute,nsecond)
{}
datetime:
:
datetime(int
c):
time(c),date(nyear,nmonth,nday)
{}
datetime:
:
datetime(date
nyear,int
nmonth,intnday,time&
&t,intnhour,int
nminute,int
nsecond):
date(t),time(nhour,nminute,nsecond)
{}
datetimedatetime:
:
addbysecond()
{
this->setsecond(this->getsecond()+1);
if(this->getsecond()>59)
{
this->setsecond(0);
this->setminute(this->getminute()+1);
if(this->getminute()>59)
{
this->setminute(0);
this->sethour(this->gethour()+1);
if(this->gethour()>23)
{
this->sethour(0);
this->setday(this->getday()+1);
if(this->getday()>mon_day(this->getyear(),this->getmonth()))
this->setday
(1);
this->setmonth(this->getmonth()+1);
if(this->getmonth()>12)
{
this->setmonth
(1);
this->setyear(this->getyear()+1);
}
}
}
}
return*this;
}
datetimedatetime:
:
operator=(datetime&t)
{
this->setyear(t.getyear());
this->setmonth(t.getmonth());this->setday(t.getday());this->sethour(t.gethour());this->setminute(t.getminute());this->setsecond(t.getsecond());return*this;
}
datetimedatetime:
:
operator+(datetime&t)
{
if((this->getyear()+t.getyear())<1900)
{
this->setyear(1900);
}
elsethis->setyear((this->getyear()+t.getyear()));
if((this->getmonth()+t.getmonth())>12||(this->getmonth()+t.getmonth())<=0){
this->setmonth
(1);
}
elsethis->setmonth((this->getmonth()+t.getmonth()));
intmaxday=0;
if((this->getyear()+t.getyear())==2)
{
if(isleapyear((this->getyear()+t.getyear())))
{
maxday=29;
}
else
maxday=28;
}
}
else
{maxday=mon[this->getmonth()+t.getmonth()];
}
if((this->getday()+t.getday())>maxday||(this->getday()+t.getday())<=0){
this->setday
(1);
}
this->setday((this->getday()+t.getday()));
return*this;
}
intdayinyear(datetime&t)//日期在年中的天数{
inti=0,day=0;for(i=1;i {day+=mon_day(t.getyear(),i); }day+=t.getday();returnday; } voidgetweek(datetime&t)//判断天数对应星期{ intweek=0; intdiffday; if(t.getyear()==1900) { if(t.getmonth()==1) {diffday=t.getday()-1; } else {diffday=dayinyear(t)-1; } } else { intd1=getyearday(1900)-1; intd2=dayinyear(t); intd3=0; intyear=0;for(year=1901;year {d3+=getyearday(year); }diffday=d1+d2+d3; }week=diffday%7; switch(week) { case0: t.setweek("星期一");break; case1: t.setweek("星期二");break; case2: t.setweek("星期三");break; case3: t.setweek("星期四");break; case4: t.setweek("星期五");break; case5: t.setweek("星期六");break; case6: t.setweek("星期天");break; } cout< } intgetmonthfirst(datetime&t)//返回对应月的第一天星期数 { datetimetemp(t.getyear(),t.getmonth(),1,t.gethour(),t.getminute(),t.getsecond()); getweek(temp);//判断对应星期数 if(temp.getweek()=="星期一") return1; elseif(temp.getweek()=="星期二") return2; elseif(temp.getweek()=="星期三") return3; elseif(temp.getweek()=="星期四") return4; elseif(temp.getweek()=="星期五")return5; elseif(temp.getweek()=="星期六")return6; else return7; } voidcalendar(datetime&t)//打印特殊节日 { if(t.getmonth()==2) { if(t.getday()==3) cout<<"立春。 "< } if(t.getmonth()==3) { if(t.getday()==5)cout<<"惊蛰。 "< if(t.getday()==8) cout<<"今天妇女节! "< cout<<"今天植树节! "< cout<<"春分。 "< } if(t.getmonth()==4) { if(t.getday()==4)cout<<"清明。 "< if(t.getday()==19) cout<<"谷雨。 "< } if(t.getmonth()==5) { if(t.getday()==1) cout<<"今天劳动节! "< cout<<"立夏。 "< cout<<"小满。 "< } if(t.getmonth()==6) { if(t.getday()==1) cout<<"今天儿童节! "< if(t.getday()==5) cout<<"芒种。 "< if(t.getday()==21) cout<<"夏至。 "< } if(t.getmonth()==7) { if(t.getday()==1)cout<<"今天建党日! "< if(t.getday()==6) if(t.getday()==7) cout<<"今天七夕节! "< cout<<"小暑。 "< if(t.getday()==22) cout<<"大暑。 "< } if(t.getmonth()==8) { if(t.getday()==1) cout<<"建军节! "< if(t.getday()==7) cout<<"立秋。 "< if(t.getday()==22) cout<<"处暑。 "< } if(t.getmonth()==9) { if(t.getday()==7) cout<<"白露。 "< if(t.getday()==22) cout<<"秋分。 "< }if(t.getmonth()==10) { if(t.getday()==1) cout<<"国庆节! "< if(t.getday()==8) cout<<"寒露。 "< if(t.getday()==23) cout<<"霜降。 "< } if(t.getmonth()==11) if(t.getday()==7) cout<<"立冬。 "< if(t.getmonth()==22) cout<<"小雪。 "< } if(t.getmonth()==12) { if(t.getday()==6) cout<<"大雪。 "< if(t.getday()==21) cout<<"冬至。 "< } if(t.getmonth()==1) { if(t.getday()==1) cout<<"今天元旦! "< if(t.getday()==5) cout<<"小寒。 "< if(t.getday()==20) cout<<"大寒。 "< } } voidprintspace()//打印空格 { cout<<""; } voidshowmonth(datetime&t)//打印当前月日历 { inti=0; "<<"Friday"<<" cout<<"Monday"<<""<<"Tusday"<<""<<"Wedday"<<""<<"Thuday"<<""<<"Satday"<<""<<"Sunday"< intj=0; intk=1; intnum=getmonthfirst(t);cout<<""; for(j=1;j cout< for(i=k;i<=mon_day(t.getyear(),t.getmonth());i++) intflag=1; intfirst=k; if(i<10){cout<<""< } elsecout< {cout< k=i+1; } } } voidstuation1(datetime&t)//计算两日期相差天数 { intnyear=0;intnmonth=0;intnday=0; intnhour=0;intnminute=0;intnsecond;cout<<"请输入年月日: "< cout<<"请输入时分秒: "< datetimetemp(nyear,nmonth,nday,nhour,nminute,nsecond);intdiffday=0; if(t.getyear()==nyear) {if(t.getmonth()==nmonth) {diffday=abs(t.getday()-nday); } else {diffday=abs(dayinyear(t)-dayinyear(temp)); } } elseif(nyear { intd1=getyearday(temp.getyear())-dayinyear(temp);intd2=dayinyear(t); intd3=0; intyear=0;for(year=nyear;year { d3+=getyearday(year); diffday=d1+d2+d3; } else { intd1=getyearday(t.getyear())-dayinyear(t); intd2=dayinyear(temp); intd3=0; intyear=0; for(year=t.getyear();year { d3+=getyearday(year); } diff
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 日期 时间 课程设计 TimeDate 派生 DateTime