1 功
11课程设计题目功:定义日期类时间类日期时间综合类重载+++><等运算符设置时间日期较时间日期进行时间日期象运算(加减)种格式输出结果
12思想方法:通重载运算符运算符实现象加减运算结果输出时动载入闰年判断程序实现结果智化输出菜单输出结果输出隔开防止混淆日期类中星期五单独定义实现错误处理通拷贝函数运实现+重载
13增加新功:增加运算起始日期时间修改操作菜单退出功
2 详细设计
21 c_Time类:重载+++<><>运算符时间否超少天设置静态静态成员函数设置两输出函数中优化结构四行原程序代少天情况面列出+中数值超范围情况处理面列出
22 c_Date类:重载+++<><>运算符设置两输出函数简化+运算符时修正错误+中数值超范围情况处理面列出第函数中前时间日期进行赋值起始日期时间设定函数
23 TDmanage类:重载+++<><>运算符设置c_Timec_Date派生类实现时间日期混合加减较
24 TDglobal类:输入输出专门类重载<<>>运算符
25 error类:专门处理错误类包括原日期时间少1900处理+中结果少1900处理输出时日期时间少1900处理
26 main类:swith型进行菜单输出程序综合处理菜单项编辑运行程序
3 调试程
31出现编译时问题调试时提示没相关函数问题编译结束载入相关文件解决问题
32法效退出函数改swith型解决问题
33出现输出结果预期符状况更改输出变量名解决问题
34开始时没设置+错误类进行设置太遇相关情况没注意课发现
4 输入输出
开始界面
时间格式更改否
操作菜单
时间类操作+例
继续操作菜单
日期类操作例
综合类操作较例
5 总结
程序量运运算符重载文件处理处理创建程序帮助运算符重载实际技巧般+重载需考虑输入数类型输出结果求外错误处理难关error类仅考虑原日期时间处理考虑运算符错误处理会落某情况需断调试保证种情况考虑程序类处理必须相熟悉情况涉难度算太刚接触c++没太长时间练课程
6 附件
源程序:
cTime_th Begin
#include
#include
#ifndef cTime_t_h
#define cTime_t_h
class cTime_t
{
static int FlagMoreDay
static int FlagLessDay
static int format
int Seconds
int Minutes
int Hours
struct tm *CurrentTime
time_t time_date
public
cTime_t()
cTime_t(const cTime_t &T)
cTime_t(int hourint min0int sec0)Seconds(sec)Minutes(min)Hours(hour) {}
~cTime_t(){}
const cTime_t& operator (const cTime_t& T)
inline void SetSec (int sec) {Secondssec}
inline void SetMin (int min) {Minutesmin}
inline void SetHour (int hour) {Hourshour}
void print() const
void print1() const
inline int GetSec () const {return Seconds}
inline int GetMin () const {return Minutes}
inline int GetHour () const {return Hours}
int getFlagMoreDay(){return FlagMoreDay}
int getFlagLessDay(){return FlagLessDay}
void resetFlagMoreDay(){FlagMoreDay0}
void resetFlagLessDay(){FlagLessDay0}
bool operator < (const cTime_t& T)const
bool operator < (const cTime_t& T)const
bool operator > (const cTime_t& T)const
bool operator > (const cTime_t& T)const
bool operator (const cTime_t& T)const
bool operator (const cTime_t& T)const
const cTime_t operator + (const cTime_t& T) const
int operator (cTime_t& T)
const cTime_t operator + (int NewMinutes)
const cTime_t operator (int NewMinutes)
int getformat1(){return format}
void operator ++ ()
void operator ()
static void ChangeFormat() { format (format1) 2 1 } format can be only 1 or 2
friend ostream& operator << (ostream &outconst cTime_t &T)
friend istream& operator >> (istream &in cTime_t &T)
friend class cTDmanage
}
#endif
cTime_th End
cTime_tcpp
implementation of cTime_t
#include cTime_th
int cTime_tformat1
int cTime_tFlagMoreDay0 default values for static data members
int cTime_tFlagLessDay0
cTime_tcTime_t() empty c'tor
{
time_datetime(0)
CurrentTimelocaltime(&time_date)
SecondsCurrentTime>tm_sec
MinutesCurrentTime>tm_min
HoursCurrentTime>tm_hour
}
cTime_tcTime_t(const cTime_t &T) copy c'tor
{
SecondsTSeconds
MinutesTMinutes
HoursTHours
}
const cTime_t& cTime_toperator (const cTime_t& T) operator function
{
SecondsTSeconds
MinutesTMinutes copy relevent fields
HoursTHours
return *this
}
void cTime_tprint() const print function
{
switch(format)
{
case 1
if(Seconds<10 && Minutes<10)
cout<
cout<
cout<
cout<
case 2
if(Hours<12)
{
if(Seconds<10 && Minutes<10)
cout<
cout<
cout<
cout<
else
{
if (Seconds<10 && Minutes<10)
cout<
cout<
cout<
cout<
break
default
cout<
}
void cTime_tprint1() const print function
{
switch(format)
{
case 1
if(Seconds<10 && Minutes<10)
cout<< Hours<<0<
cout<< Hours<<<
cout<< Hours<<0<
cout<< Hours<<<
case 2
if(Hours<12)
{
if(Seconds<10 && Minutes<10)
cout<
cout<
cout<
cout<
else
{
if (Seconds<10 && Minutes<10)
cout<
cout<
cout<
cout<
break
default
cout<
}
bool cTime_toperator < (const cTime_t& T)const operator < function
{
if (Hours
{
if(Minutes
return false
}
bool cTime_toperator < (const cTime_t &T)const operator < function
{
if (Hours
{
if(Minutes
return false
}
bool cTime_toperator > (const cTime_t& T)const operator > function
{
if (Hours>THours) return true
if(HoursTHours)
{
if(Minutes>TMinutes) return true
if(MinutesTMinutes)
return (Seconds>TSeconds)
}
return false
}
bool cTime_toperator > (const cTime_t& T)const operator > function
{
if (Hours>THours)
return true
if(HoursTHours)
{
if(Minutes>TMinutes)
return true
if(MinutesTMinutes)
return (Seconds>TSeconds)
}
return false
}
bool cTime_toperator (const cTime_t &T)const operator function
{
return ( (HoursTHours) && (MinutesTMinutes) && (SecondsTSeconds) )
}
bool cTime_toperator (const cTime_t &T)constoperator function
{
return ( (HoursTHours) && (MinutesTMinutes) && (SecondsTSeconds) )
}
const cTime_t cTime_toperator + (const cTime_t &T) const operator + function
{
int HourTempMinuteTempSecondTempdefine 3 temp variables to get time data
SecondTempSeconds+TSeconds
if(SecondTemp>60)more thrn 1 minute
{
SecondTemp60
MinuteTempMinutes+TMinutes+1so add to minute
}
else
MinuteTempMinutes+TMinutes
if(MinuteTemp>60)more then 1 hour
{
MinuteTemp60
HourTempHours+THours+1add to hour
}
else
HourTempHours+THours
if(HourTemp>24)
{
FlagMoreDay1 to add day to date class
HourTemp24
}
return (cTime_t (HourTempMinuteTempSecondTemp) ) return local time class
}
int cTime_toperator (cTime_t &T)
{
int newhournewminute
newhourHoursTHours
newminuteMinutesTMinutes
return newhour*60+newminute
}
*const cTime_t cTime_toperator (const cTime_t &T) const operaor function
{
int HourTempMinuteTempSecondTempdefine 3 temp variables to get time data
HourTemp HoursTHours
if(HourTemp<0)T class hour was bigger then THIS class
{
FlagLessDay1 to cut 1 day form date class
HourTemp+24 add 24 hours to previous day
}
MinuteTempMinutesTMinutes
if(MinuteTemp<0)same for minutes
{
MinuteTemp+60
HourTemp
}
SecondTempSecondsTSeconds
if(SecondTemp<0)same for seconds
{
SecondTemp+60
MinuteTemp
}
return ( cTime_t ( HourTempMinuteTempSecondTemp) )return local class
}*
void cTime_toperator ++ () operator ++ function
{
if ( (Seconds59) && (Minutes59) && (Hours23) ) end of a day
{
FlagMoreDay1to add day to day class
Seconds0
Minutes0
Hours0
}
else if( (Seconds59) && (Minutes59) )end of hour
{
Seconds0
Minutes0
++Hours
}
else if( Seconds59 )end of minute
{
Seconds0
++Minutes
}
else
++Seconds
}
void cTime_toperator () operator function
{
if ( (Seconds0) && (Minutes0) && (Hours0) )start of day
{
FlagLessDay1to substruct 1 day from day class
Seconds59
Minutes59
Hours23
}
else if( (Seconds0) && (Minutes0) )start of hour
{
Seconds59
Minutes59
Hours
}
else if( Seconds0 )start of minute
{
Seconds59
Minutes
}
else
Seconds
}
const cTime_t cTime_toperator + (int NewMinutes)
{
int HourTempMinuteTempSecondTemp
SecondTempSeconds
HourTempHours
MinuteTempMinutes+NewMinutes
while(MinuteTemp>60)
{
MinuteTemp60
HourTemp+1
while(HourTemp>24)
{
HourTemp24
FlagMoreDay+1
}
}
return (cTime_t (HourTempMinuteTempSecondTemp) )
}
const cTime_t cTime_toperator (int NewMinutes)
{
int HourTempMinuteTempSecondTemp
SecondTempSeconds
HourTempHours
MinuteTempMinutesNewMinutes
while(MinuteTemp<0)
{
MinuteTemp+60
HourTemp1
while(HourTemp<0)
{
HourTemp+24
FlagLessDay1
}
}
return (cTime_t (HourTempMinuteTempSecondTemp) )
}
cTime_tcpp end
cDate_th Begin
#include
#include
#ifndef cDate_t_h
#define cDate_t_h
#define N 3
class cDate_t
{
enum Days {SaturdaySundayMondayTuesdayWensdayThursdayFriday }
enum Months {NoneJanuaryFebruaryMarsAprilMayJuneJulyAugust
SeptemberOctoberNovemberDecember }
static int format
static char Mon[][10]
static char DDays[][10]
int Day
int Month
int Year
struct tm *CurrentTime
time_t time_date
public
bool Error
cDate_t()
cDate_t(const cDate_t &D)
cDate_t(int yearint monthint day)
~cDate_t(){}
const cDate_t& operator (const cDate_t& D)
inline void SetDay (int day) {Dayday}
inline void SetMon (int mon) {Monthmon}
inline void SetYear (int year) {Yearyear}
void print()
void print1()
inline int GetDayOfMonth () const {return Day}
inline int GetMonth () const {return Month}
inline int GetYear () const {return Year}
int GetDayOfYear(int yearint monthint day)
int GetDaysInMonth(int monthint year)
int GetDayOfWeek()
bool IsLeapYear(int year)
char* GetDayOfWeekName()
char* GetNameOfMonth()
int RetriveDay(int Daysint year)
int RetriveMonth(int Daysint year)
bool operator < (const cDate_t& D)const
bool operator < (const cDate_t& D)const
bool operator > (const cDate_t& D)const
bool operator > (const cDate_t& D)const
bool operator (const cDate_t& D)const
bool operator (const cDate_t& D)const
const cDate_t operator + (const cDate_t& D)
int operator (cDate_t& D)
const cDate_t operator + (int Days)
const cDate_t operator (int Days)
int getformat2(){return format}
void operator ++ ()
void operator ()
static void cDate_tChangeFormat() implementation of static function must be in header
{
switch(format)
{
case 1 format2 break
case 2 format3 break
case 3 format1
}
}
friend ostream& operator << (ostream &outconst cDate_t &D)
friend istream& operator >> (istream &in cDate_t &D)
void SetError() {Errorfalse}
friend class cTDmanage
}
#endif
cDate_th End
cDate_tcpp Begin
implementation of cDate_th
#include cDate_th
#include errorh
#include
#define max(a b) (((a) > (b)) (a) (b))
#define min(a b) (((a) < (b)) (a) (b))
int cDate_tformat1静态成员变量
char cDate_tMon[][10] {JanauryFebruaryMarsAprilMay
JunyJulyAugustSeptemberOctoberNovemberDecember }
char cDate_tDDays[][10] {SaturdaySundayMondayTuesday
WensdayThursdayFriday }
cDate_tcDate_t() 构造函数赋值前时间
{
SetError()
time_datetime(0)
CurrentTimelocaltime(&time_date)
DayCurrentTime>tm_mday
MonthCurrentTime>tm_mon+1
YearCurrentTime>tm_year+1900
}
cDate_tcDate_t(int yearint monthint day)Year(year)Month(month)Day(day) c'tor
{
SetError()
if (Year<1900) 错误数字
{
Error1()
Errortrue
}
}
cDate_tcDate_t(const cDate_t &D) 拷贝构造函数
{
SetError()
DayDDay
MonthDMonth
YearDYear
if (Year<1900)错误数字
{
Error1()
Errortrue
}
}
const cDate_t& cDate_toperator (const cDate_t& D) 重载运算符
{
DayDDay
MonthDMonth
YearDYear
if (Year<1900)bad data from the other object
{
Error1()
Errortrue置错误标志
}
else
SetError()正确
return *this
}
void cDate_tprint() 输出
{
char str[N]
for(int i0i
str[i]'\0'
if(Error)果日期出错输出提示信息
{
Error2()
return
}
switch(format) 判断什形式输出
{
case 1 欧洲格式
cout<
case 2 美国格式
cout<
case 3 英文月份形式代数字
cout<
default
cout<
}
void cDate_tprint1() 输出
{
char str[N]
for(int i0i
str[i]'\0'
if(Error)果日期出错输出提示信息
{
Error2()
return
}
switch(format) 判断什形式输出
{
case 1 欧洲格式
cout<
case 2 美国格式
cout<
case 3 英文月份形式代数字
cout<
default
cout<
}
bool cDate_toperator < (const cDate_t& D)const 重载<运算符
return true if THIS object is < then the second
{
if (Year
if(Month
return false
}
bool cDate_toperator < (const cDate_t &D)const 重载<运算符
return true if THIS object is < then the second
{
if (Year
{
if(Month
return false
}
bool cDate_toperator > (const cDate_t& D)const 重载>运算符
return true if THIS object is > then the second
{
if (Year>DYear) return true
if(YearDYear) {
if(Month>DMonth) return true
if(MonthDMonth) return (Day>DDay)
}
return false
}
bool cDate_toperator > (const cDate_t &D)const 重载>运算符
return true if THIS object is > then the second
{
if (Year>DYear) return true
if(YearDYear){
if(Month>DMonth) return true
if(MonthDMonth) return (Day>DDay)
}
return false
}
bool cDate_toperator (const cDate_t &D)const重载运算符
return true if THIS object and the second one are equal in all their date data member
{
return ( (YearDYear) && (MonthDMonth) && (DayDDay) )
}
bool cDate_toperator (const cDate_t &D)const重载运算符
return true if THIS object and the second one are not equal in all their date data member
{
return ( (YearDYear) && (MonthDMonth) && (DayDDay) )
}
const cDate_t cDate_toperator + (const cDate_t &D)重载+运算符
{
int YearTempMonthTempDayTempNewDays 存储结果
if(Error || DError) 日期象错
{
Error3() 输出信息
return (cDate_t (111) )
}
YearTempYear+DYear 求年总数
NewDaysGetDayOfYear(YearMonthDay) + GetDayOfYear(DYearDMonthDDay)
get sum of days
if(NewDays > ((IsLeapYear(YearTemp)) 366 365)) 果月日相加结果1年
{
NewDaysNewDays ((IsLeapYear(YearTemp)) 366 365)
YearTemp+1年份加1知道1年
}
DayTempRetriveDay(NewDaysYearTemp) retrive the current day in the specific month
MonthTempRetriveMonth(NewDaysYearTemp)same with month
return (cDate_t (YearTempMonthTempDayTemp) )
}
int cDate_toperator (cDate_t &D)
{
int Temp1Temp2NewDays0
Temp1GetDayOfYear(YearMonthDay)
Temp2DGetDayOfYear(DYearDMonthDDay)
if(YearDYear)
{
NewDaysmax(Temp1Temp2)min(Temp1Temp2)
}
else
{
for(int Temp3min(YearDYear)Temp3
NewDays+((IsLeapYear(Temp3)) 366 365)
}
if(Year>DYear)
NewDaysNewDays+Temp1Temp2
else
NewDays(NewDays+Temp2Temp1)
}
return NewDays
}
*const cDate_t cDate_toperator (const cDate_t &D) operator function
{
int YearTempMonthTempDayTempNewDaysTemp1Temp2
variables to store to new date object
if(Error || DError) if no less then 1 object have orror data
{
Error4() print orror messege
return (cDate_t (111) ) return error class
}
YearTempYearDYearsubstraction of THIS and second year
if(YearTemp<1900) error
{
Error1()print error messege
return (cDate_t (111) ) return error class
}
Temp1GetDayOfYear(YearMonthDay) get days of year of THIS object
if(Temp1<0) error
{
Error5()print error messege
return (cDate_t (111) )return error class
}
Temp2GetDayOfYear(DYearDMonthDDay) get days of year of second object
if(Temp2<0)error
{
Error5()print error messege
return (cDate_t (111) )return error class
}
NewDays Temp1 Temp2 if the data ok get their substraction
if(NewDays<0) the substraction is less then zero
{
NewDays NewDays + ((IsLeapYear(YearTemp)) 366 365)
set days for previous year
YearTemp1 sub 1 year
}
DayTempRetriveDay(NewDaysYearTemp) retrive the current day in the specific month
MonthTempRetriveMonth(NewDaysYearTemp)same with month
return (cDate_t (YearTempMonthTempDayTemp) )return local class
}*
int cDate_tGetDayOfYear(int yearint monthint day) 取日期年1月1日起天数
{
int NumOfDay0 结果清零
int DaysIn1Month0 月天数
while(month1 && DaysIn1Month1) 循环累加月天数
{
DaysIn1MonthGetDaysInMonth(monthyear)
NumOfDay+DaysIn1Month
month
}
if(DaysIn1Month1) return 1 出错
else
return NumOfDay+day 返回结果
}
int cDate_tGetDaysInMonth(int monthint year) 取月天数
{
switch(month)
{
case Januarycase Mars case May case July case August case October
case December return 31
case April case June case September case November return 30
case February if(IsLeapYear(year)) return 29
else return 28
}
return 1
}
int cDate_tGetDayOfWeek() 111900星期根日期推断前日期星期
{
int weekday2 in 111900(saturday0sunday1)
for(int TheYear1900TheYear
if(IsLeapYear(TheYear))
weekday(weekday+366)7
else
weekday(weekday+365)7
}
for(int TheMonth1TheMonth
if((weekday+Day)70)
return 6
else
return((weekday+Day)71)
}
bool cDate_tIsLeapYear(int year) 判断否闰年
{
return ((year4)) && (year100) || ((year400))
}
char* cDate_tGetDayOfWeekName() 转换成星期英文名
{
int WeekdayGetDayOfWeek()
return DDays[Weekday]
}
char* cDate_tGetNameOfMonth() 转换成月份英文名
{
return Mon[Month1]
}
int cDate_tRetriveDay(int Daysint year) 日期象天数换算真实日期
{
int dayDays
int leap(IsLeapYear(year)) 判断改年否闰年
int M (leap) 29 28
for(int mon1mon<12++mon)
{
if ( (day<31 && (mon1 || mon3 || mon5 || mon7 || mon8 || mon10 || mon12))|| (day<30 && (mon4 || mon6 || mon9 || mon11))
|| (day
else月天数次减剩真实天数
dayGetDaysInMonth(monyear)
}
return 1
}
int cDate_tRetriveMonth(int Daysint year) 日期象天数换算真实月份
{
int dayDays
int leap(IsLeapYear(year))
int M (leap) 29 28
for(int mon1mon<12++mon)
{
if( (day<31 && (mon1 || mon3 || mon5 || mon7 || mon8 || mon10 || mon12 ))|| (day<30 && (mon4 || mon6 || mon9 || mon11))
|| (day
else
dayGetDaysInMonth(monyear)
}
return 1
}
void cDate_toperator ++ () 重载++运算符
{
if( (DayGetDaysInMonth(MonthYear)) && (Month12) ) 1年结束
{
Day1
Month1
++Year
}
else if( (DayGetDaysInMonth(MonthYear)) ) 1月结束
{
Day1
++Month
}
else
++Day
}
void cDate_toperator () 重载运算符
{
if( (Day1) && (Month1) ) 1年开始
{
Day31 12月份31天
Month12
Year
}
else if( Day1 ) 1月开始
{
Month
DayGetDaysInMonth(MonthYear)
}
else
Day
}
const cDate_t cDate_toperator + (int Days)重载+运算符
{
int YearTempDayTempMonthTempNewDays
int dayDays
YearTempYear
NewDaysGetDayOfYear(YearMonthDay)+day
while(NewDays>((IsLeapYear(YearTemp)) 366 365))
{
NewDaysNewDays((IsLeapYear(YearTemp)) 366 365)
YearTemp+1
}
DayTempRetriveDay(NewDaysYearTemp)
MonthTempRetriveMonth(NewDaysYearTemp)
return(cDate_t(YearTempMonthTempDayTemp))
}
const cDate_t cDate_toperator (int Days)
{
int YearTempDayTempMonthTempNewDays
int dayDays
int TempGetDayOfYear(YearMonthDay)
YearTempYear
NewDaysTempday
while(NewDays<0)
{
NewDaysNewDays+((IsLeapYear(YearTemp)) 366 365)
}
DayTempRetriveDay(NewDaysYearTemp)
MonthTempRetriveMonth(NewDaysYearTemp)
return(cDate_t(YearTempMonthTempDayTemp))
}
cDate_tcpp end
errorh Begin
#include
#ifndef _error_h
#define _error_h
void Error1()
void Error2()
void Error3()
void Error4()
void Error5()
#endif
errorh End
errorcpp
implementation of errorh
#include errorh
void Error1() used for setting class with c'tor or operator
{
cout<
void Error2() used for trying to print an error class
{
cout<
void Error3() used for operator +
{
cout<
void Error4() used for operaor
{
cout<
void Error5() used for operator and GetDayOfYear function
{
cout<
errorcpp end
TDmanageh Begin
#include
#include
#include cDate_th
#include cTime_th
#include
#ifndef TDmanage_h
#define TDmanage_h
class cTDmanagepublic cTime_tpublic cDate_t
{
public
cTDmanage ()cTime_t()cDate_t()
{}
cTDmanage (int yearint monthint dayint hourint minuteint second)cDate_t(yearmonthday)cTime_t(hourminutesecond){}
cTDmanage (int hourint minuteint second)cTime_t(hourminutesecond) {}
void operator (const cTDmanage& M)OK
option to put all get and set function of date and time class
void print()
operator
bool operator < (const cTDmanage& M)const
bool operator < (const cTDmanage& M)const
bool operator > (const cTDmanage& M)const
bool operator > (const cTDmanage& M)const
bool operator (const cTDmanage& M)const
bool operator (const cTDmanage& M)const
const cTDmanage operator + (const cTDmanage& M)
int operator (const cTDmanage& M)
const cTDmanage operator + (int MINUTE)
const cTDmanage operator (int MINUTE)
using Date and Time ++ operator
void operator ++ () { AddDay() AddSecond() }
void AddDay()
void AddSecond()
void ChangeDateFormat() { cDate_tChangeFormat() }
void ChangeTimeFormat() { cTime_tChangeFormat() }
friend ostream& operator << (ostream &outcTDmanage &M)
friend istream& operator >> (istream &in cTDmanage &M)
}
#endif
TDmanageh End
TDmanagecpp
#include TDmanageh
#include stdlibh
#define max(a b) (((a) > (b)) (a) (b))
#define min(a b) (((a) < (b)) (a) (b))
void cTDmanageprint()
{
cDate_tprint()
cTime_tprint()
}
const cTDmanage cTDmanageoperator + (const cTDmanage& M)
{
int HourTempMinuteTempSecondTempdefine 3 temp variables to get time data
SecondTempGetSec()+MGetSec()
if(SecondTemp>60)more than 1 minute
{
SecondTemp60
MinuteTempGetMin ()+MGetMin ()+1so add to minute
}
else
MinuteTempGetMin ()+MGetMin ()
if(MinuteTemp>60)more than 1 hour
{
MinuteTemp60
HourTempGetHour ()+MGetHour ()+1add to hour
}
else
HourTempGetHour ()+MGetHour ()
if(HourTemp>24)
{
FlagMoreDay1 to add day to date class
HourTemp24
}
int YearTempMonthTempDayTempNewDays
YearTempGetYear ()+MGetYear ()
NewDaysGetDayOfYear(GetYear ()GetMonth ()GetDayOfMonth ()) + GetDayOfYear(MGetYear ()MGetMonth ()MGetDayOfMonth ())
if(NewDays > ((IsLeapYear(YearTemp)) 366 365)) if the sum is more than in 1 year
{
NewDaysNewDays ((IsLeapYear(YearTemp)) 366 365)cut 1 year days
YearTemp+1and add a year
}
MonthTempRetriveMonth(NewDaysYearTemp)same with month
DayTempRetriveDay(NewDaysYearTemp) retrive the current day in the specific month
DayTemp+(cTime_tFlagMoreDay)
DayTempRetriveDay(NewDaysYearTemp) retrive the current day in the specific month
return cTDmanage(YearTempMonthTempDayTempHourTempMinuteTempSecondTemp)
}
int cTDmanageoperator (const cTDmanage& M)
{
int NewDaysTemp1Temp2
Temp1GetDayOfYear(GetYear ()GetMonth ()GetDayOfMonth ())
Temp2GetDayOfYear(MGetYear ()MGetMonth ()MGetDayOfMonth ())
if(GetYear ()MGetYear ())
{
NewDaysmax(Temp1Temp2)min(Temp1Temp2)
}
else
{
for(int Temp3min(GetYear ()MGetYear ())Temp3
NewDays+((IsLeapYear(Temp3)) 366 365)
}
if(GetYear ()>MGetYear ())
NewDaysNewDays+Temp1Temp2
else
NewDays(NewDays+Temp2Temp1)
}
int newhournewminute
newhourGetHour ()MGetHour ()
newminuteGetMin ()MGetMin ()
newminutenewminute+60*newhour+24*60*NewDays
return newminute
}
void cTDmanageoperator (const cTDmanage& M)
{
SetSec(MGetSec())
SetMin(MGetMin ())
SetHour (MGetHour ())
SetDay(MGetDayOfMonth ())
SetMon(MGetMonth ())
SetYear(MGetYear ())
}
bool cTDmanageoperator < (const cTDmanage& M)const
{
if (Year
{
if(GetMonth ()
if(GetMonth ()MGetMonth ())
{
if(GetDayOfMonth ()
{
if (GetHour ()
{
if(GetMin ()
if(GetMin ()MGetMin ())
{
return (GetSec()
return false
}
return false
}
return false
}
return false
}
return false
}
bool cTDmanageoperator < (const cTDmanage& M)const
{
if (Year
{
if(GetMonth ()
if(GetMonth ()MGetMonth ())
{
if(GetDayOfMonth ()
{
if (GetHour ()
{
if(GetMin ()
if(GetMin ()MGetMin ())
{
return (GetSec()
return false
}
return false
}
return false
}
return false
}
return false
}
bool cTDmanageoperator > (const cTDmanage& M)const
{
if (Year>MGetYear ()) return true
if(YearMGetYear ())
{
if(GetMonth ()>MGetMonth ())
return true
if(GetMonth ()MGetMonth ())
{
if(GetDayOfMonth ()>MGetDayOfMonth ()) return true
if(GetDayOfMonth ()MGetDayOfMonth ())
{
if (GetHour ()>MGetHour ()) return true
if(GetHour ()MGetHour ())
{
if(GetMin ()>MGetMin ())
return true
if(GetMin ()MGetMin ())
{
return (GetSec()>MGetSec())
}
return false
}
return false
}
return false
}
return false
}
return false
}
bool cTDmanageoperator > (const cTDmanage& M)const
{
if (Year>MGetYear ()) return true
if(YearMGetYear ())
{
if(GetMonth ()>MGetMonth ())
return true
if(GetMonth ()MGetMonth ())
{
if(GetDayOfMonth ()>MGetDayOfMonth ()) return true
if(GetDayOfMonth ()MGetDayOfMonth ())
{
if (GetHour ()>MGetHour ()) return true
if(GetHour ()MGetHour ())
{
if(GetMin ()>MGetMin ())
return true
if(GetMin ()MGetMin ())
{
return (GetSec()>MGetSec())
}
return false
}
return false
}
return false
}
return false
}
return false
}
bool cTDmanageoperator (const cTDmanage& M)const
{
return ((GetSec()MGetSec())&&(GetMin ()MGetMin ())&&(GetHour ()MGetHour ())&&
(GetDayOfMonth ()MGetDayOfMonth ())&&(GetMonth ()MGetMonth ())&&(GetYear ()MGetYear ()))
}
bool cTDmanageoperator (const cTDmanage& M)const
{
return ((GetSec()MGetSec())||(GetMin ()MGetMin ())||(GetHour ()MGetHour ())||(
GetDayOfMonth ()MGetDayOfMonth ())||(GetMonth ()MGetMonth ())||(GetYear ()MGetYear ()))
}
const cTDmanage cTDmanageoperator + (int MINUTE) 综合类分钟加运算符重载
{
int HourTempMinuteTempSecondTemp
SecondTempGetSec()
HourTempGetHour()
MinuteTempGetMin ()+MINUTE
while(MinuteTemp>60)
{
MinuteTemp60
HourTemp+1
}
while(HourTemp>24)
{
HourTemp24
FlagMoreDay+1
}
int YearTempDayTempMonthTempNewDays
YearTempGetYear ()
MonthTempGetMonth ()
NewDaysGetDayOfYear(GetYear ()GetMonth ()GetDayOfMonth ())+FlagMoreDay
while(NewDays>((IsLeapYear(YearTemp)) 366 365))
{
NewDaysNewDays((IsLeapYear(YearTemp)) 366 365)
YearTemp+1
}
DayTempRetriveDay(NewDaysYearTemp)
MonthTempRetriveMonth(NewDaysYearTemp)
FlagMoreDay0
return cTDmanage(YearTempMonthTempDayTempHourTempMinuteTempSecondTemp)
}
const cTDmanage cTDmanageoperator (int MINUTE) 综合类分钟减运算符重载
{
int HourTempMinuteTempSecondTemp
SecondTempGetSec()
HourTempGetHour()
MinuteTempGetMin()MINUTE
while(MinuteTemp<0)
{
MinuteTemp+60
HourTemp1
while(HourTemp<0)
{
HourTemp+24
FlagLessDay+1
}
}
int YearTempDayTempMonthTempNewDays
int TempGetDayOfYear(GetYear ()GetMonth ()GetDayOfMonth ())
YearTempGetYear ()
NewDaysTempFlagLessDay
while(NewDays<0)
{
NewDaysNewDays+((IsLeapYear(YearTemp)) 366 365)
}
DayTempRetriveDay(NewDaysYearTemp)+1
MonthTempRetriveMonth(NewDaysYearTemp)
FlagLessDay0
return cTDmanage(YearTempMonthTempDayTempHourTempMinuteTempSecondTemp)
}
void cTDmanageAddDay()
{
if( (GetDayOfMonth()GetDaysInMonth(GetMonth()GetYear())) && (GetMonth()12) )
if reached the end of the year
{
SetDay(1)
SetMon(1)
SetYear(GetYear()+1)
}
else if( (GetDayOfMonth()GetDaysInMonth(GetMonth()GetYear())) )
if reached the end of the month (but not year)
{
SetDay(1)
SetMon(GetMonth()+1)
}
else
SetDay(GetDayOfMonth()+1) add 1 day
}
void cTDmanageAddSecond()
{
if ( (GetSec()59) && (GetMin()59) && (GetHour()23) ) end of a day
{
FlagMoreDay1to add day to day class
SetSec(0)
SetMin(0)
SetHour(0)
}
else if( (GetSec()59) && (GetMin()59) )end of hour
{
SetSec(0)
SetMin(0)
SetHour(GetHour()+1)
}
else if( GetSec()59 )end of minute
{
SetSec(0)
SetMin(GetMin()+1)
}
else
SetSec(GetSec()+1)
}
TDmanagecpp End
TDglobalscpp Begin
#include
#include cTime_th
#include cDate_th
#include TDmanageh
#include errorh
global functions
cTime_t global functions
ostream& operator << (ostream &outconst cTime_t &T) operator << for class time function
{
switch(cTime_tformat)
{
case 1
if(TSeconds<10 && TMinutes<10)
out<
out<
out<
out<
case 2
if(THours<12)
{
if(TSeconds<10 && TMinutes<10)
out<
out<
out<
out<
else
{
if(TSeconds<10 && TMinutes<10)
out<
out<
out<
out<
break
default
out<
return out
}
istream& operator >> (istream &in cTime_t &T)operator >> for class time function
{
cout<
cout<
cout<
return in
}
cDate_t global functions
ostream& operator << (ostream &outconst cDate_t &D)operator << for class date function
{
if(DError)
{
Error2() return out
}
switch(cDate_tformat)
{
case 1 European
out<
case 2 American
out<
case 3 with string instead of month
out<
default
out<
return out
}
istream& operator >> (istream &in cDate_t &D)operator >> for class date function
{
cout<
cout<
cout<
if (DYear<1900)
{
Error1()
DErrortrue
}
else
DErrorfalse
return in
}
ostream& operator << (ostream &outcTDmanage &M)operator << for class cTDmanage function
{
switch(Mgetformat1())
{
case 1
if(MGetSec()<10 && MGetMin()<10)
out<
out<
out<
out<
case 2
if(MGetHour()<12)
{
if(MGetSec()<10 && MGetMin()<10)
out<
out<
out<
out<
else
{
if(MGetSec()<10 && MGetMin()<10)
out<
out<
out<
out<
break
default
out<
switch(Mgetformat2())
{
case 1 European
out<
case 2 American
out<
case 3 with string instead of month
out<
default
out<
return out
}
istream& operator >> (istream &in cTDmanage &M)operator >> for class cTDmanage function
{
int yeartempmonthtempdaytemphourtempminutetempsecondtemp
cout<
MSetYear(yeartemp)
cout<
MSetMon(monthtemp)
cout<
MSetDay(daytemp)
cout<
MSetHour(hourtemp)
cout<
MSetMin(minutetemp)
cout<
MSetSec(secondtemp)
if (MGetYear ()<1900)
{
Error1()
MErrortrue
}
else
MErrorfalse
return in
}
TDglobalscpp End
#includecDate_th
#includecTime_th
#includeerrorh
#includeTDmanageh
#includeiostreamh
#include
void timeselect(intcTime_tcDate_tcTDmanage)
void manuselect(cTime_tcDate_tcTDmanage)
void dateselect(intcTime_tcDate_tcTDmanage)
void manageselect(intcTime_tcDate_tcTDmanage)
void questionmark(cDate_t)
void manuselect(cTime_t TcDate_t DcTDmanage L)
{
cout<<\n***********************************建议菜单***********************************<
<<3综合类操作\n<< <<4退出\n
int select1select20select30select40
cout<<请选择:\n
cin>>select1
switch(select1)
{
case 1
cout<<\n\n
<<时间类操作\n
cout<<1时间加分钟\n<<2时间减分钟\n<<3时间减时间\n<<4两时间较\n<<5返回层\n
cout<<请选择
cin>>select2
timeselect(select2TDL)
break
case 2
cout<<\n<<日期类操作\n
cout<<1日期加天数\n<<2日期减天数\n<<3日期减日期\n<<4两日期较\n<<5返回层\n
cout<<请选择
cin>>select3
dateselect(select3TDL)
break
case 3
cout<<\n<<综合类操作\n
cout<<1时间日期加分钟\n<<2时间日期减分钟\n<<3时间日期减时间日期(结果分钟)\n<<4两时间日期较\n<<5返回层\n
cout<<请选择
cin>>select4
manageselect(select4TDL)
break
case 4
break
}
}
void timeselect(int acTime_t TcDate_t DcTDmanage L)
{
int newminanswer_min0
cTime_t T1(T)T2(T)T3(T)T4(T)
switch(a)
{
case 0
break
case 1
cout<
cin>>newmin
T2T+newmin
if(T2getFlagMoreDay()>0)
{
cout<<前时间:
Tprint1()
cout<
cout<
T2T
}
else
{
cout<<前时间:
Tprint1()
cout<
T2print()
}
cout<<<
break
case 2
cout<
cin>>newmin
T3Tnewmin
if(TgetFlagLessDay()>0)
{
cout<<前时间:
Tprint1()
cout<
cout<
T3T
}
else
{
cout<<前时间:
Tprint1()
cout<
T3print()
}
cout<<<
break
case 3
cout<
answer_minTT1
if(answer_min>0)
{
cout<<前时间:
Tprint1()
cout<<输入时间:
T1print1()
cout<<前时间输入时间晚<<(answer_min)<<分\n
}
else
{
cout<<前时间:
Tprint1()
cout<<输入时间:
T1print1()
cout<<前时间输入时间早<<(answer_min)<<分\n
}
cout<<<
break
case 4
cout<
if(TT1)
cout<<两时间相等<
cout<<前时间输入时间\n
else
cout<<前时间输入时间\n
cout<<<
break
case 5
cout<<<
break
}
}
void dateselect(int acTime_t TcDate_t DcTDmanage L)
{
int newdayanswer_day0
cDate_t D1(D)D2(D)D3(D)D4(D)
switch(a)
{
case 0
break
case 1
cout<
cin>>newday
D2D+newday
cout<<前日期:
Dprint1()
cout<
D2print1()
D2D
cout<
break
case 2
cout<
cin>>newday
D3Dnewday
cout<<前日期:
Dprint1()
cout<
D3print1()
D3D
cout<
cout<<<
break
case 3
cout<
answer_dayDD1
if(answer_day>0)
cout<<前日期输入日期晚<<(answer_day)<<天\n
else
cout<<前日期输入日期早<<(answer_day)<<天\n
cout<<<
break
case 4
cout<
if(DD1)
{
cout<<前日期:
Dprint1()
cout<
cout<<输入日期:
D1print1()
cout<
else if(D>D1)
{
cout<<前日期:
Dprint1()
cout<
cout<<输入日期:
D1print1()
cout<
cout<<前日期输入日期\n
}
else
{
cout<<前日期:
Dprint1()
cout<
cout<<输入日期:
D1print1()
cout<
cout<<<
break
case 5
cout<<<
break
}
}
void manageselect(int acTime_t TcDate_t DcTDmanage M)
{
int newminanswer_min0
cTDmanage PP1P2P3
switch(a)
{
case 0
break
case 1
cout<
cin>>newmin
P1M+newmin
cout<<前日期:\n<
cout<<<
break
case 2
cout<
cin>>newmin
P2Mnewmin
cout<<前日期:\n<
cout<<<
break
case 3
cout<
answer_minMP
if(answer_min>0)
{
cout<<前日期:\n<
cout<<两时间日期相等< cout<<两时间日期相等< cout<<前时间日期输入时间日期早<<(answer_min)<<分\n
cout<<前时间日期输入时间日期晚<<(answer_min)<<分\n
}
else if(answer_min0)
{
cout<<前日期:\n<
else
{
cout<<前日期:\n<
} cout<<<
break
case 4
cout<
if(MP3)
{
cout<<前日期:\n<
else if(M>P3)
{
cout<<前日期:\n<
}
else
{
cout<<前日期:\n<
}
cout<<<
break
case 5
cout<<<
break
}
}
void changetimeformat(cTime_t T)
{
cout<<否改动时间格式?12否<
cin>>change1
switch(change1)
{
case 1
TChangeFormat()
Tprint()
cout<<<
break
case 2
Tprint()
cout<<<
default
cout<
}
}
void changedateformat(cDate_t D)
{
int change2
cout<<请选择需日期格式?\n<<1欧洲格式\n<<2美国格式\n<<3英文月份形式代数字\n<<4默认退出<
switch(change2)
{
case 1
while(Dgetformat2()1) continue changing until the formatspecific value
{
DChangeFormat()
}
Dprint()
cout<<<
questionmark(D)
break
case 2
while(Dgetformat2()2)
{
DChangeFormat()
}
Dprint()
cout<<否继续修改(1y2n)
questionmark(D)
cout<<<
case 3
while(Dgetformat2()3)
{
DChangeFormat()
}
Dprint()
cout<<否继续修改(1y2n)
questionmark(D)
cout<<<
case 4
cout<