日期和时间课程设计报告.docx
《日期和时间课程设计报告.docx》由会员分享,可在线阅读,更多相关《日期和时间课程设计报告.docx(72页珍藏版)》请在冰豆网上搜索。
日期和时间课程设计报告
日期和时间课程设计报告
日期和时间课程设计报告
1.功能
1.1课程设计题目功能:
定义了日期类、时间类和日期时间综合类,重载了+、-、++、--、=、>=、<=、==、!
=等运算符,可以设置时间、日期,比较时间和日期的大小,可以进行时间、日期对象的运算(加减),并按多种格式输出结果。
1.2思想和方法:
通过重载运算符使运算符实现对对象的加减运算,并在结果输出时自动载入闰年判断程序,实现结果的智能化输出;将菜单输出和结果输出隔开,防止混淆;日期类中将星期五单独定义,实现对错误的处理;通过拷贝函数的运用,实现“+”、“-”的重载。
1.3增加的新功能:
增加了对运算起始日期时间的修改和各操作菜单的退出功能。
2.详细设计
2.1c_Time类:
重载了+、-、++、--、==、!
=、<、>、<=、>=运算符;将时间是否超过或少于当天设置为静态静态成员函数,设置了两个输出函数;“-”中,优化了结构,以四行将原程序代替,将少于一天的情况在后面列出;“+”中,将数值超过范围的情况的处理在后面列出。
2.2c_Date类:
重载了+、-、++、--、==、!
=、<、>、<=、>=运算符;设置了两个输出函数;简化了“+”运算符,同时修正了错误;“+”“-”中,将数值超过范围的情况的处理在后面列出;在第一个函数中,对当前时间日期进行了赋值,是起始日期时间的设定函数。
2.3TDmanage类:
重载了+、-、++、--、==、!
=、<、>、<=、>=运算符;设置为c_Time和c_Date的派生类,可以实现对时间和日期的混合加减比较。
2.4TDglobal类:
为输入输出的专门的类,重载了<<,>>运算符。
2.5error类:
为专门处理错误的类,包括对原日期时间少于1900的处理,以及在“+”、“-”中结果少于1900的处理,以及输出时日期时间少于1900的处理。
2.6main类:
以swith型进行菜单的输出,主要是对所有程序的综合处理,对菜单项的编辑,是最后的运行程序。
3.调试过程
3.1出现了编译时无问题,而调试时提示没有相关函数的问题,编译结束后载入相关文件解决了问题。
3.2无法有效退出,将函数改为swith型解决问题。
3.3出现了输出结果与预期不符的状况,更改了输出变量名解决问题。
3.4最开始时没有设置对“+”的错误类进行设置,由于不太可能遇到相关情况,没有注意,后来看课本才发现。
4.输入输出
开始界面
时间格式的更改与否
主操作菜单
时间类操作,以“+”为例
其后继续为主操作菜单
日期类操作,以“-”为例
综合类操作,以比较为例
5.总结
本程序大量运用了运算符的重载,并且用到了多文件的处理,对以后处理或创建大程序很有帮助。
而且运算符重载实际上是有很多技巧的,最一般的“+”“-”重载,需要考虑输入的数据的类型及对输出结果的要求。
另外错误处理也是个难关,即“error”类,不仅要考虑原日期时间的处理,还要考虑对运算符错误的处理,很有可能会落下某些情况,需要不断调试以保证每种情况都考虑到了。
这个程序对个人对类处理必须相当熟悉,几乎将所有可能的情况都涉及了,而且难度不算太大,对于刚接触c++没有太长时间的我们是个很好的练习课程。
6.附件
源程序:
//cTime_t.hBegin
#include
#include
#ifndefcTime_t_h
#definecTime_t_h
classcTime_t
{
staticintFlagMoreDay;
staticintFlagLessDay;
staticintformat;
intSeconds;
intMinutes;
intHours;
structtm*CurrentTime;
time_ttime_date;
public:
cTime_t();
cTime_t(constcTime_t&T);
cTime_t(inthour,intmin=0,intsec=0):
Seconds(sec),Minutes(min),Hours(hour){};
~cTime_t(){};
constcTime_t&operator=(constcTime_t&T);
inlinevoidSetSec(intsec){Seconds=sec;}
inlinevoidSetMin(intmin){Minutes=min;}
inlinevoidSetHour(inthour){Hours=hour;}
voidprint()const;
voidprint1()const;
inlineintGetSec()const{returnSeconds;}
inlineintGetMin()const{returnMinutes;}
inlineintGetHour()const{returnHours;}
intgetFlagMoreDay(){returnFlagMoreDay;}
intgetFlagLessDay(){returnFlagLessDay;}
voidresetFlagMoreDay(){FlagMoreDay=0;}
voidresetFlagLessDay(){FlagLessDay=0;}
booloperator<(constcTime_t&T)const;
booloperator<=(constcTime_t&T)const;
booloperator>(constcTime_t&T)const;
booloperator>=(constcTime_t&T)const;
booloperator==(constcTime_t&T)const;
booloperator!
=(constcTime_t&T)const;
constcTime_toperator+(constcTime_t&T)const;
intoperator-(cTime_t&T);
constcTime_toperator+(intNewMinutes);
constcTime_toperator-(intNewMinutes);
intgetformat1(){returnformat;}
voidoperator++();
voidoperator--();
staticvoidChangeFormat(){format=(format==1)?
2:
1;}//formatcanbeonly1or2
friendostream&operator<<(ostream&out,constcTime_t&T);
friendistream&operator>>(istream&in,cTime_t&T);
friendclasscTDmanage;
};
#endif
//cTime_t.hEnd
//cTime_t.cpp
//implementationofcTime_t
#include"cTime_t.h"
intcTime_t:
:
format=1;
intcTime_t:
:
FlagMoreDay=0;//defaultvaluesforstaticdatamembers
intcTime_t:
:
FlagLessDay=0;
//------------------------------------
cTime_t:
:
cTime_t()//emptyc'tor
{
time_date=time(0);
CurrentTime=localtime(&time_date);
Seconds=CurrentTime->tm_sec;
Minutes=CurrentTime->tm_min;
Hours=CurrentTime->tm_hour;
}
//------------------------------------
cTime_t:
:
cTime_t(constcTime_t&T)//copyc'tor
{
Seconds=T.Seconds;
Minutes=T.Minutes;
Hours=T.Hours;
}
//------------------------------------
constcTime_t&cTime_t:
:
operator=(constcTime_t&T)//operator=function
{
Seconds=T.Seconds;
Minutes=T.Minutes;//copyreleventfields
Hours=T.Hours;
return*this;
}
//------------------------------------
voidcTime_t:
:
print()const//printfunction
{
switch(format)
{
case1:
if(Seconds<10&&Minutes<10)
cout<<"Thetimeis:
"<0"<0"<elseif(Seconds<10)
cout<<"Thetimeis:
"<"<0"<elseif(Minutes<10)
cout<<"Thetimeis:
"<0"<"<else
cout<<"Thetimeis:
"<"<"<break;
case2:
if(Hours<=12)
{
if(Seconds<10&&Minutes<10)
cout<<"Thetimeis:
"<0"<0"<elseif(Minutes<10)
cout<<"Thetimeis:
"<0"<"<elseif(Seconds<10)
cout<<"Thetimeis:
"<"<0"<else
cout<<"Thetimeis:
"<"<"<}
else
{
if(Seconds<10&&Minutes<10)
cout<<"Thetimeis:
"<0"<0"<elseif(Minutes<10)
cout<<"Thetimeis:
"<0"<"<elseif(Seconds<10)
cout<<"Thetimeis:
"<"<0"<else
cout<<"Thetimeis:
"<"<"<}
break;
default:
cout<<"Theformatisnotok"<}
}
//------------------------------------
voidcTime_t:
:
print1()const//printfunction
{
switch(format)
{
case1:
if(Seconds<10&&Minutes<10)
cout<0"<0"<elseif(Seconds<10)
cout<"<0"<elseif(Minutes<10)
cout<0"<"<else
cout<"<"<break;
case2:
if(Hours<=12)
{
if(Seconds<10&&Minutes<10)
cout<0"<0"<elseif(Minutes<10)
cout<0"<"<elseif(Seconds<10)
cout<"<0"<else
cout<"<"<}
else
{
if(Seconds<10&&Minutes<10)
cout<0"<0"<elseif(Minutes<10)
cout<0"<"<elseif(Seconds<10)
cout<"<0"<else
cout<"<"<}
break;
default:
cout<<"Theformatisnotok"<}
}
//------------------------------------
boolcTime_t:
:
operator<(constcTime_t&T)const//operator{
if(Hoursif(Hours==T.Hours)
{
if(Minutesif(Minutes==T.Minutes)return(Seconds}
returnfalse;
}
//------------------------------------
boolcTime_t:
:
operator<=(constcTime_t&T)const//operator<=function
{
if(Hoursif(Hours==T.Hours)
{
if(Minutesif(Minutes==T.Minutes)return(Seconds<=T.Seconds);
}
returnfalse;
}
//------------------------------------
boolcTime_t:
:
operator>(constcTime_t&T)const//operator>function
{
if(Hours>T.Hours)returntrue;
if(Hours==T.Hours)
{
if(Minutes>T.Minutes)returntrue;
if(Minutes==T.Minutes)
return(Seconds>T.Seconds);
}
returnfalse;
}
//------------------------------------
boolcTime_t:
:
operator>=(constcTime_t&T)const//operator>=function
{
if(Hours>T.Hours)
returntrue;
if(Hours==T.Hours)
{
if(Minutes>T.Minutes)
returntrue;
if(Minutes==T.Minutes)
return(Seconds>=T.Seconds);
}
returnfalse;
}
//------------------------------------
boolcTime_t:
:
operator==(constcTime_t&T)const//operator==function
{
return((Hours==T.Hours)&&(Minutes==T.Minutes)&&(Seconds==T.Seconds));
}
//------------------------------------
boolcTime_t:
:
operator!
=(constcTime_t&T)const//operator!
=function
{
return!
((Hours==T.Hours)&&(Minutes==T.Minutes)&&(Seconds==T.Seconds));
}
//------------------------------------
constcTime_tcTime_t:
:
operator+(constcTime_t&T)const//operator+function
{
intHourTemp,MinuteTemp,SecondTemp;//define3tempvariablestogettimedata
SecondTemp=Seconds+T.Seconds;
if(SecondTemp>=60)//morethrn1minute
{
SecondTemp-=60;
MinuteTemp=Minutes+T.Minutes+1;//soaddtominute
}
else
MinuteTemp=Minutes+T.Minutes;
if(MinuteTemp>=60)//morethen1hour
{
MinuteTemp-=60;
HourTemp=Hours+T.Hours+1;//addtohour
}
else
HourTemp=Hours+T.Hours;
if(HourTemp>=24)
{
FlagMoreDay=1;//toadddaytodateclass
HourTemp-=24;
}
return(cTime_t(HourTemp,MinuteTemp,SecondTemp));//returnlocaltimeclass
}
//------------------------------------
intcTime_t:
:
operator-(cTime_t&T)
{
intnewhour,newminute;
newhour=Hours-T.Hours;
newminute=Minutes-T.Minutes;
returnnewhour*60+newminute;
}
/*constcTime_tcTime_t:
:
operator-(constcTime_t&T)const//operaor-function
{
intHourTemp,MinuteTemp,SecondTemp;//define3tempvariablestogettimedata
HourTemp=Hours-T.Hours;
if(HourTemp<0)//TclasshourwasbiggerthenTHISclass
{
FlagLessDay=1;//tocut1dayformdateclass
HourTemp+=24;//add24hourstopreviousday
}
MinuteTemp=Minutes-T.Minutes;
if(MinuteTemp<0)//sameforminutes
{
MinuteTemp+=60;
--HourTemp;
}
SecondTemp=Seconds-T.Seconds;
if(SecondTemp<0)//sameforseconds
{
SecondTemp+=60;
--MinuteTemp;
}
return(cTime_t(HourTemp,MinuteTemp,SecondTemp));//returnlocalclass
}*/
//------------------------------------
voidcTime_t:
:
operator++()//operator++function
{
if((Seconds=