Advertisement
thienlang

Time

Apr 9th, 2014
319
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.95 KB | None | 0 0
  1. #include "StopWatch.h"
  2.  
  3. //hàm khởi tạo mặc định
  4. CStopWatch::CStopWatch(void)
  5. {
  6.     m_Hour = m_Minute = m_Second = 0;//ban đầu khởi gán tất cả bằng 0
  7. }
  8.  
  9. //hàm khởi tạo với tham số đầu vào
  10. CStopWatch::CStopWatch( int hour, int minute, int second )
  11. {
  12.     m_Hour = hour;
  13.     m_Minute = minute;
  14.     m_Second = second;
  15. }
  16.  
  17. //hàm khởi tạo sao chép
  18. CStopWatch::CStopWatch( const CStopWatch& watch )
  19. {
  20.     m_Hour = watch.m_Hour;//copy giờ
  21.     m_Minute = watch.m_Minute;//copy phút
  22.     m_Second = watch.m_Second;//copy giây
  23. }
  24.  
  25.  
  26. CStopWatch& CStopWatch::ReSet()
  27. {
  28.     m_Hour = m_Minute = m_Second = 0;
  29.     return *this;
  30. }
  31.  
  32.  
  33. //hàm lấy trạng thái phím
  34. inline bool IsPressed( int presskey )
  35. {
  36.     return GetAsyncKeyState( presskey );//lấy trạng thái phím nhập vào
  37. }
  38.  
  39.  
  40. //hàm bắt đầu chạy khi ấn phím ENTER
  41. void CStopWatch::Start()
  42. {
  43.     bool state = false;//biến lưu tình trạng đồng hồ..dừng hay đang hoạt động
  44.     while ( !IsPressed(VK_ESCAPE) )
  45.     {
  46.         Sleep(0);  
  47.         while ( CStopWatch::Resume(state) )//khi chưa nhấn SPACE
  48.         {
  49.             Sleep(970);//dừng chương trình gần 1s
  50.             if ( m_Second == 59 )//khi được 1ph
  51.                 if ( m_Minute == 59 )//khi được 1h
  52.                     if ( m_Hour == 23 )
  53.                     {
  54.                         m_Second = 0;
  55.                         m_Minute = 0;
  56.                         m_Hour = 0;
  57.  
  58.                     }
  59.                     else
  60.                     {
  61.                         m_Second = 0;//cập nhật lại giây ban đầu
  62.                         m_Minute = 0;//cập nhật lại số phút ban đầu
  63.                         m_Hour ++;//tăng số giờ
  64.                     }
  65.                 else//phút chưa đến 59
  66.                 {
  67.                     m_Second = 0;//cập nhật lại giây ban đầu
  68.                     m_Minute ++;//phút tăng 1
  69.                 }
  70.             else//khi giây chưa đến 59
  71.                 m_Second ++;//giây tăng 1
  72.             CStopWatch::OutputWatch();//xuất đồng hồ
  73.             cout << "\n\n\n\t\t\t Nhan SPACE de tam dung!";
  74.             cout << "\n\t\t\t Nhan ESC de dung han!";
  75.             if ( IsPressed(VK_ESCAPE) )//nếu là phím ESC
  76.             {
  77.                 getch();
  78.                 CStopWatch::Stop();//xuất đồng hồ và thoát
  79.             }
  80.         }
  81.         Sleep(0);
  82.         state = true;
  83.         CStopWatch::Pause(state);//gọi hàm dừng chương trình
  84.     }
  85.     CStopWatch::Stop();//xuất đồng hồ và thoát
  86. }
  87.  
  88.  
  89. //hàm dừng khi nhấn SPACE
  90. void CStopWatch::Pause(bool& state)
  91. {
  92.     fflush(stdin);
  93.     //khi chưa dừng(state là false) thì thoát hàm
  94.     if ( !state )
  95.         return;
  96.  
  97.     while ( !IsPressed(VK_SPACE) )//khi chưa nhấn SPACE
  98.     {
  99.         Sleep(0);
  100.         CStopWatch::OutputWatch();//xuất đồng hồ
  101.         cout << "\n\n\n\t\t\t Nhan SPACE de tiep tuc!";
  102.         getch();
  103.         fflush(stdin);
  104.         if ( IsPressed(VK_ESCAPE) )//khi nhấn ESC
  105.             CStopWatch::Stop();//xuất đồng hồ và thoát chương trình
  106.     }
  107.     //cập nhật lại tình trạng state
  108.     state = CStopWatch::Resume(state);
  109.    
  110. }
  111.  
  112.  
  113. //hàm tiếp tục
  114. bool CStopWatch::Resume( bool& state )
  115. {
  116.     if ( state )//nếu chương trình đã dừng
  117.         return false;//cập nhật lại là chưa dừng
  118.     else
  119.         return !IsPressed(VK_SPACE);//cập nhật lại dựa vào phím trạng thái
  120. }
  121.  
  122.  
  123. //hàm xuất đồng hồ và thoát khi nhấn ESC
  124. void CStopWatch::Stop()
  125. {
  126.     fflush(stdin);//xóa bộ đệm
  127.     CStopWatch::OutputWatch();//xuất đồng hồ
  128.     getch();
  129.     exit(0);//thoát
  130. }
  131.  
  132.  
  133. //hàm xuất đồng hồ
  134. void CStopWatch::OutputWatch()
  135. {
  136.     system("cls");
  137.     if ( m_Hour < 10 )//khi giờ bé hơn 10
  138.         cout << "\n\n\n\n\n\t\t\t\t" << "0" << m_Hour << ":";//xuất giờ ra 2 kí tự( 0 và số giờ )
  139.     else
  140.         cout << "\n\n\n\n\n\t\t\t\t" << m_Hour << ":";//nếu lớn hơn thì chỉ cần xuất giờ
  141.     if ( m_Minute < 10 )//khi phút bé hơn 10
  142.         cout << "0" << m_Minute << ":";//xuất phút ra 2 kí tự( 0 và số phút )
  143.     else
  144.         cout << m_Minute << ":";//nếu lớn hơn thì chỉ cần xuất phút
  145.     if ( m_Second < 10 )//khi giây bé hơn 10
  146.         cout << "0" << m_Second;//xuất giây ra 2 kí tự( 0 và số giây )
  147.     else
  148.         cout << m_Second;//nếu lớn hơn thì chỉ cần xuất giây
  149. }
  150.  
  151.  
  152. CStopWatch::~CStopWatch(void)
  153. {
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement