Код реализации класса представления даты и времени

//-------------------------------------------------------------------------------------------

// файл DateTime.h с  определением интерфейса класса DateTime

//-------------------------------------------------------------------------------------------

 

#pragma once

#include <string>

#include <sstream>

#include "Date.h"

#include "Time.h"

using namespace std;

 

class DateTime

{

public:

           DateTime();

           DateTime(const Date& dt, Time tm);

           DateTime(const DateTime& dt);

 

           const Date& GetDate() const;

           Time GetTime() const;

           void SetDate(const Date& dt);

           void SetTime(Time tm);

 

           DateTime& operator=(const DateTime&);

           bool operator==(const DateTime& dt) const;

           bool operator!=(const DateTime& dt) const;

           bool operator>(const DateTime& dt) const;

           bool operator<(const DateTime& dt) const;

           friend DateTime operator+ (const DateTime& dt, Time tm);

           friend DateTime operator- (const DateTime& dt, Time tm);

           DateTime& operator+=(const Time tm);

           DateTime& operator-=(const Time tm);

           static const Time MAX_TIME_IN_DAY;

 

           static DateTime GetRandomDateTime(const Date& fromD,

                          const Date& toD, const Time from, const Time to);

           wstring ToString() const;

private:

           Date _date;

           Time _time;

};


//-------------------------------------------------------------------------------------------

// файл DateTime.cpp с реализацией методов класса Date Time

//-------------------------------------------------------------------------------------------

 

#include "StdAfx.h"

#include "DateTime.h"

 

const Time DateTime::MAX_TIME_IN_DAY = Time(24,0);

 

DateTime::DateTime(): _date(), _time() {}

 

DateTime::DateTime(const Date& dt, Time tm): _date(dt), _time(tm) {}

 

DateTime::DateTime(const DateTime& dt): _date(dt._date), _time(dt._time)

{}

 

const Date& DateTime::GetDate() const

{         return _date;}

 

Time DateTime::GetTime() const

{         return _time;}

 

void DateTime::SetDate(const Date &dt)

{         _date = dt;}

 

void DateTime::SetTime(Time tm)

{

           if (tm<DateTime::MAX_TIME_IN_DAY) _time = tm;

}

 

DateTime& DateTime::operator =(const DateTime & dt)

{

           _date = dt._date;

           _time = dt._time;

           return *this;

}

 

bool DateTime::operator ==(const DateTime &dt) const

{

           if (_date == dt._date && _time == dt._time) return true;

           return false;

}

bool DateTime::operator!=(const DateTime &dt) const

{

           if (_date!= dt._date || _time!= dt._time) return true;

           return false;

}

 

bool DateTime::operator >(const DateTime &dt) const

{

           if ((_date > dt._date) || (_date == dt._date && _time>dt._time))

                          return true;

           return false;

}

 

bool DateTime::operator <(const DateTime &dt) const

{

           if ((_date < dt._date) || (_date == dt._date && _time<dt._time))

                          return true;

           return false;

}

 

DateTime operator+(const DateTime& dt, Time tm)

{

           int days = Time::GetDaysAndTime(tm);

           Time thisTime = dt._time + tm;

           if (!Time::GetDaysAndTime(thisTime)) days++;

           Date thisDate = dt._date + days;

           return DateTime(thisDate,thisTime);

}

 

DateTime operator-(const DateTime& dt, Time tm)

{

           int days = Time::GetDaysAndTime(tm);

           Time thisTime;

           if (dt._time < tm)

           {

                          days++;

                          thisTime = dt._time + Time(24,0) - tm;

           }

           else thisTime = dt._time - tm;

           Date thisDate = dt._date + (-days);

           return DateTime(thisDate,thisTime);

}

 

DateTime& DateTime::operator +=(const Time tm)

{

           DateTime temp = (*this) + tm;

           _date = temp._date;

           _time = temp._time;

           return *this;

}

 

DateTime& DateTime::operator -=(const Time tm)

{

           DateTime temp = (*this) - tm;

           _date = temp._date;

           _time = temp._time;

           return *this;

}

 

DateTime DateTime::GetRandomDateTime(const Date &fromD,

                          const Date &toD, const Time from, const Time to)

{

           Date dt = Date::GetRandomDate(fromD, toD);

           Time tm;

           if (from<DateTime::MAX_TIME_IN_DAY &&

                                                          to<DateTime::MAX_TIME_IN_DAY)

                          tm = Time::GetRandomTime(from,to);

           return DateTime(dt,tm);

}

 

wstring DateTime::ToString() const

{

           wostringstream os;

           os<<L"Дата: "<<_date.ToString()<<

           L" Время: "<<_time.ToString();

           if (os) return os.str();

           return wstring();

}




ЛИТЕРАТУРА

1.          Лаптев В. С++.Экспресс-курс - СПб.: БХВ-Петербург, 2004. - 511 с.

2.          Подбельский Вадим Валериевич Язык Си++: учеб. пособие для стуентов вузов/ Подбельский Вадим Валериевич. — М.: Финансы и статистика, 1996-2003.-559с.

3.          Павловская Т.А. C/C++. Программирование на языке высокого уровня: учебник для вузов/ Т.А. Павловская. - СПб.: Питер, 2004. - 460 с.

4.          Лафоре Р. Объектно-ориентированное программирование в C++. Классика Computer Science. 4-ое издание. — СПБ: Питер.2003.

5.          Фаулер М., Скотт К. UML. Основы. - Пер. с англ. - СПб., 2002. - 192 с

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: