一个完整的C++工时类

头文件Ration.h
  1. #ifndef RATION_H
  2. #define RATION_H
  3. #include <string>
  4. class CRation
  5. {
  6. public:
  7.     CRation(void);
  8.     CRation(std::string);
  9.     CRation(const char*);   
  10.     CRation(int);
  11.     CRation(const CRation&);
  12.     ~CRation(void);
  13.     CRation& operator=(const CRation&);
  14.     CRation& operator=(const char*);
  15.     
  16.     CRation& operator+=(const CRation&);
  17.     CRation& operator-=(const CRation&);
  18.     CRation& operator*=(int count);
  19.     void        clear(void);
  20.     int     get_Minute() const;
  21.     std::string get_Ration() const
  22. private:
  23.     int     convert_Int(std::string);
  24.     std::string convert_Str(int);
  25.     int     get_Hour(std::string);
  26.     int     get_Minute(std::string);    
  27.     int     m_minutes;
  28.     std::string m_ration;
  29. };
  30. CRation operator+(const CRation& lhs, const CRation& rhs);
  31. CRation operator-(const CRation& lhs, const CRation& rhs);
  32. CRation operator*(const CRation& lhs, int count);
  33. bool    operator<=(const CRation& lhs, const CRation& rhs);
  34. bool    operator>(const CRation& lhs, const CRation& rhs);
  35. bool    operator>=(const CRation& lhs, const CRation& rhs);
  36. bool    operator<(const CRation& lhs, const CRation& rhs);
  37. bool    operator==(const CRation& lhs, const CRation& rhs);
  38. bool    operator!=(const CRation& lhs, const CRation& rhs);
  39. #endif
以下是Ration.cpp
  1. #include "ration.h"
  2. using namespace std;
  3. // 构造函数
  4. CRation::CRation() : m_minutes(0), m_ration("0:00")
  5. {
  6. }
  7. CRation::CRation(string str)
  8. {
  9.         m_ration = str;
  10.     m_minutes = convert_Int(str);
  11. }
  12. CRation::CRation(const char *pChar)
  13. {
  14.     if(!pChar)
  15.     {
  16.         m_minutes = 0;
  17.         m_ration = "0:00";
  18.     }
  19.     else
  20.     {
  21.         m_ration = pChar;
  22.         m_minutes = convert_Int(pChar);
  23.     }
  24. }
  25. CRation::CRation(int minutes)
  26. {
  27.     m_minutes = minutes;
  28.     m_ration = convert_Str(minutes);
  29. }
  30. // 拷贝构造函数
  31. CRation::CRation(const CRation &ration)
  32. {
  33.     m_minutes = ration.get_Minute();
  34.     m_ration = ration.get_Ration();
  35. }
  36. // 赋值构造函数
  37. CRation& CRation::operator =(const CRation &ration)
  38. {
  39.     if(this == &ration)
  40.         return *this;
  41.     m_minutes = ration.get_Minute();
  42.     m_ration = ration.get_Ration();
  43.     return *this;
  44. }
  45. CRation& CRation::operator =(const char *pChar)
  46. {
  47.     if(!pChar)
  48.     {
  49.         m_minutes = 0;
  50.         m_ration = "0:00";
  51.         return *this;
  52.     }
  53.     m_ration = pChar;
  54.     m_minutes = convert_Int(pChar);
  55.     return *this;
  56. }
  57. CRation::~CRation(void)
  58. {
  59. }
  60. void CRation::clear(void)
  61. {
  62.     m_ration = "0:00";
  63.     m_minutes = 0;
  64. }
  65. // 得到工时的小时数
  66. int CRation::get_Hour(string ration)
  67. {
  68.     int nHour = 0;  
  69.     if(ration.empty())
  70.         nHour = 0;
  71.     else
  72.     {
  73.         string::size_type n = ration.find(':');
  74.         ration.erase(ration.begin() + n, ration.end());
  75.         nHour = atoi(ration.c_str());
  76.     }
  77.     return nHour;
  78. }
  79. // 获得工时的分钟数
  80. int CRation::get_Minute(string ration)
  81. {
  82.     int nMinute = 0;
  83.     if(ration.empty())
  84.         nMinute = 0;
  85.     else
  86.     {
  87.         string::size_type n = ration.find(':');
  88.         ration.erase(ration.begin(), ration.begin() + n + 1);
  89.         nMinute = atoi(ration.c_str());
  90.     }
  91.     return nMinute;
  92. }
  93. // 将输入的string类型转换成int
  94. int CRation::convert_Int(string ration)
  95. {
  96.     int minutes(0);
  97.     string::size_type n = ration.find('-');
  98.     if(n != -1)
  99.     {
  100.         ration.erase(ration.begin(), ration.begin() + n + 1);
  101.         minutes = get_Hour(ration) * -60 - get_Minute(ration);
  102.     }
  103.     else
  104.         minutes = get_Hour(ration) * 60 + get_Minute(ration);
  105.     return minutes;
  106. }
  107. // 将int类型分钟数换成String类型的工时
  108. string CRation::convert_Str(int minutes)
  109. {
  110.     string  strTemp;
  111.     int     nHour = 0,
  112.             nMinute = 0;
  113.     char buffer[10];
  114.     memset(buffer, 0, 10);
  115.     nHour = minutes / 60;
  116.     nMinute = minutes % 60;
  117.     nHour = nHour > 0 ? nHour * 1 : nHour * -1;
  118.     nMinute = nMinute > 0 ? nMinute * 1 : nMinute * -1;
  119.     ::itoa(nHour, buffer, 10);
  120.     strTemp = minutes < 0 ? "-" : "";
  121.     strTemp += buffer;
  122.     // 如果分钟数>=0并且<10
  123.     if(nMinute >= 0 && nMinute < 10)
  124.         strTemp += ":0";
  125.     else
  126.         strTemp += ":";
  127.     strTemp += itoa(nMinute, buffer, 10);
  128.     return strTemp;
  129. }
  130. // operator +=
  131. CRation& CRation::operator +=(const CRation &ration)
  132. {
  133.     m_minutes += ration.m_minutes;
  134.     m_ration = convert_Str(m_minutes);
  135.     return *this;
  136. }
  137. // operator -=
  138. CRation& CRation::operator -=(const CRation &ration)
  139. {
  140.     m_minutes -= ration.m_minutes;
  141.     m_ration = convert_Str(m_minutes);
  142.     return *this;
  143. }
  144. // operator*=
  145. CRation& CRation::operator *=(int count)
  146. {
  147.     m_minutes *= m_minutes * count;
  148.     m_ration = convert_Str(m_minutes);
  149.     return *this;
  150. }
  151. int CRation::get_Minute() const
  152. {
  153.     return m_minutes;
  154. }
  155. string CRation::get_Ration() const
  156. {
  157.     return m_ration;
  158. }
  159. // operator+
  160. CRation operator+(const CRation& lhs, const CRation& rhs)
  161. {
  162.     CRation ration(lhs);
  163.     ration += rhs;
  164.     return ration;
  165. }
  166. // operator-
  167. CRation operator-(const CRation& lhs, const CRation& rhs)
  168. {
  169.     CRation ration(lhs);
  170.     ration -= rhs;
  171.     return ration;
  172. }
  173. // operator*
  174. CRation operator*(const CRation& lhs, int count)
  175. {
  176.     CRation ration(lhs);
  177.     ration *= count;
  178.     return ration;
  179. }
  180. // operator<=
  181. bool operator<=(const CRation& lhs, const CRation& rhs)
  182. {
  183.     return lhs.get_Minute() <= rhs.get_Minute();
  184. }
  185. // operator>
  186. bool operator>(const CRation& lhs, const CRation& rhs)
  187. {
  188.     return lhs.get_Minute() > rhs.get_Minute();
  189. }
  190. // operator>=
  191. bool operator>=(const CRation& lhs, const CRation& rhs)
  192. {
  193.     return lhs.get_Minute() >= rhs.get_Minute();
  194. }
  195. // operator<
  196. bool operator<(const CRation& lhs, const CRation& rhs)
  197. {
  198.     return lhs.get_Minute() < rhs.get_Minute();
  199. }
  200. // operator==
  201. bool operator==(const CRation& lhs, const CRation& rhs)
  202. {
  203.     return lhs.get_Minute() == rhs.get_Minute();
  204. }
  205. // operator!=
  206. bool operator!=(const CRation& lhs, const CRation& rhs)
  207. {
  208.     return lhs.get_Minute() != rhs.get_Minute();
  209. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值