头文件Ration.h
以下是Ration.cpp
- #ifndef RATION_H
- #define RATION_H
- #include <string>
- class CRation
- {
- public:
- CRation(void);
- CRation(std::string);
- CRation(const char*);
- CRation(int);
- CRation(const CRation&);
- ~CRation(void);
- CRation& operator=(const CRation&);
- CRation& operator=(const char*);
- CRation& operator+=(const CRation&);
- CRation& operator-=(const CRation&);
- CRation& operator*=(int count);
- void clear(void);
- int get_Minute() const;
- std::string get_Ration() const;
- private:
- int convert_Int(std::string);
- std::string convert_Str(int);
- int get_Hour(std::string);
- int get_Minute(std::string);
- int m_minutes;
- std::string m_ration;
- };
- CRation operator+(const CRation& lhs, const CRation& rhs);
- CRation operator-(const CRation& lhs, const CRation& rhs);
- CRation operator*(const CRation& lhs, int count);
- bool operator<=(const CRation& lhs, const CRation& rhs);
- bool operator>(const CRation& lhs, const CRation& rhs);
- bool operator>=(const CRation& lhs, const CRation& rhs);
- bool operator<(const CRation& lhs, const CRation& rhs);
- bool operator==(const CRation& lhs, const CRation& rhs);
- bool operator!=(const CRation& lhs, const CRation& rhs);
- #endif
- #include "ration.h"
- using namespace std;
- // 构造函数
- CRation::CRation() : m_minutes(0), m_ration("0:00")
- {
- }
- CRation::CRation(string str)
- {
- m_ration = str;
- m_minutes = convert_Int(str);
- }
- CRation::CRation(const char *pChar)
- {
- if(!pChar)
- {
- m_minutes = 0;
- m_ration = "0:00";
- }
- else
- {
- m_ration = pChar;
- m_minutes = convert_Int(pChar);
- }
- }
- CRation::CRation(int minutes)
- {
- m_minutes = minutes;
- m_ration = convert_Str(minutes);
- }
- // 拷贝构造函数
- CRation::CRation(const CRation &ration)
- {
- m_minutes = ration.get_Minute();
- m_ration = ration.get_Ration();
- }
- // 赋值构造函数
- CRation& CRation::operator =(const CRation &ration)
- {
- if(this == &ration)
- return *this;
- m_minutes = ration.get_Minute();
- m_ration = ration.get_Ration();
- return *this;
- }
- CRation& CRation::operator =(const char *pChar)
- {
- if(!pChar)
- {
- m_minutes = 0;
- m_ration = "0:00";
- return *this;
- }
- m_ration = pChar;
- m_minutes = convert_Int(pChar);
- return *this;
- }
- CRation::~CRation(void)
- {
- }
- void CRation::clear(void)
- {
- m_ration = "0:00";
- m_minutes = 0;
- }
- // 得到工时的小时数
- int CRation::get_Hour(string ration)
- {
- int nHour = 0;
- if(ration.empty())
- nHour = 0;
- else
- {
- string::size_type n = ration.find(':');
- ration.erase(ration.begin() + n, ration.end());
- nHour = atoi(ration.c_str());
- }
- return nHour;
- }
- // 获得工时的分钟数
- int CRation::get_Minute(string ration)
- {
- int nMinute = 0;
- if(ration.empty())
- nMinute = 0;
- else
- {
- string::size_type n = ration.find(':');
- ration.erase(ration.begin(), ration.begin() + n + 1);
- nMinute = atoi(ration.c_str());
- }
- return nMinute;
- }
- // 将输入的string类型转换成int
- int CRation::convert_Int(string ration)
- {
- int minutes(0);
- string::size_type n = ration.find('-');
- if(n != -1)
- {
- ration.erase(ration.begin(), ration.begin() + n + 1);
- minutes = get_Hour(ration) * -60 - get_Minute(ration);
- }
- else
- minutes = get_Hour(ration) * 60 + get_Minute(ration);
- return minutes;
- }
- // 将int类型分钟数换成String类型的工时
- string CRation::convert_Str(int minutes)
- {
- string strTemp;
- int nHour = 0,
- nMinute = 0;
- char buffer[10];
- memset(buffer, 0, 10);
- nHour = minutes / 60;
- nMinute = minutes % 60;
- nHour = nHour > 0 ? nHour * 1 : nHour * -1;
- nMinute = nMinute > 0 ? nMinute * 1 : nMinute * -1;
- ::itoa(nHour, buffer, 10);
- strTemp = minutes < 0 ? "-" : "";
- strTemp += buffer;
- // 如果分钟数>=0并且<10
- if(nMinute >= 0 && nMinute < 10)
- strTemp += ":0";
- else
- strTemp += ":";
- strTemp += itoa(nMinute, buffer, 10);
- return strTemp;
- }
- // operator +=
- CRation& CRation::operator +=(const CRation &ration)
- {
- m_minutes += ration.m_minutes;
- m_ration = convert_Str(m_minutes);
- return *this;
- }
- // operator -=
- CRation& CRation::operator -=(const CRation &ration)
- {
- m_minutes -= ration.m_minutes;
- m_ration = convert_Str(m_minutes);
- return *this;
- }
- // operator*=
- CRation& CRation::operator *=(int count)
- {
- m_minutes *= m_minutes * count;
- m_ration = convert_Str(m_minutes);
- return *this;
- }
- int CRation::get_Minute() const
- {
- return m_minutes;
- }
- string CRation::get_Ration() const
- {
- return m_ration;
- }
- // operator+
- CRation operator+(const CRation& lhs, const CRation& rhs)
- {
- CRation ration(lhs);
- ration += rhs;
- return ration;
- }
- // operator-
- CRation operator-(const CRation& lhs, const CRation& rhs)
- {
- CRation ration(lhs);
- ration -= rhs;
- return ration;
- }
- // operator*
- CRation operator*(const CRation& lhs, int count)
- {
- CRation ration(lhs);
- ration *= count;
- return ration;
- }
- // operator<=
- bool operator<=(const CRation& lhs, const CRation& rhs)
- {
- return lhs.get_Minute() <= rhs.get_Minute();
- }
- // operator>
- bool operator>(const CRation& lhs, const CRation& rhs)
- {
- return lhs.get_Minute() > rhs.get_Minute();
- }
- // operator>=
- bool operator>=(const CRation& lhs, const CRation& rhs)
- {
- return lhs.get_Minute() >= rhs.get_Minute();
- }
- // operator<
- bool operator<(const CRation& lhs, const CRation& rhs)
- {
- return lhs.get_Minute() < rhs.get_Minute();
- }
- // operator==
- bool operator==(const CRation& lhs, const CRation& rhs)
- {
- return lhs.get_Minute() == rhs.get_Minute();
- }
- // operator!=
- bool operator!=(const CRation& lhs, const CRation& rhs)
- {
- return lhs.get_Minute() != rhs.get_Minute();
- }