Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "StopWatch.h"
- //hàm khởi tạo mặc định
- CStopWatch::CStopWatch(void)
- {
- m_Hour = m_Minute = m_Second = 0;//ban đầu khởi gán tất cả bằng 0
- }
- //hàm khởi tạo với tham số đầu vào
- CStopWatch::CStopWatch( int hour, int minute, int second )
- {
- m_Hour = hour;
- m_Minute = minute;
- m_Second = second;
- }
- //hàm khởi tạo sao chép
- CStopWatch::CStopWatch( const CStopWatch& watch )
- {
- m_Hour = watch.m_Hour;//copy giờ
- m_Minute = watch.m_Minute;//copy phút
- m_Second = watch.m_Second;//copy giây
- }
- CStopWatch& CStopWatch::ReSet()
- {
- m_Hour = m_Minute = m_Second = 0;
- return *this;
- }
- //hàm lấy trạng thái phím
- inline bool IsPressed( int presskey )
- {
- return GetAsyncKeyState( presskey );//lấy trạng thái phím nhập vào
- }
- //hàm bắt đầu chạy khi ấn phím ENTER
- void CStopWatch::Start()
- {
- bool state = false;//biến lưu tình trạng đồng hồ..dừng hay đang hoạt động
- while ( !IsPressed(VK_ESCAPE) )
- {
- Sleep(0);
- while ( CStopWatch::Resume(state) )//khi chưa nhấn SPACE
- {
- Sleep(970);//dừng chương trình gần 1s
- if ( m_Second == 59 )//khi được 1ph
- if ( m_Minute == 59 )//khi được 1h
- if ( m_Hour == 23 )
- {
- m_Second = 0;
- m_Minute = 0;
- m_Hour = 0;
- }
- else
- {
- m_Second = 0;//cập nhật lại giây ban đầu
- m_Minute = 0;//cập nhật lại số phút ban đầu
- m_Hour ++;//tăng số giờ
- }
- else//phút chưa đến 59
- {
- m_Second = 0;//cập nhật lại giây ban đầu
- m_Minute ++;//phút tăng 1
- }
- else//khi giây chưa đến 59
- m_Second ++;//giây tăng 1
- CStopWatch::OutputWatch();//xuất đồng hồ
- cout << "\n\n\n\t\t\t Nhan SPACE de tam dung!";
- cout << "\n\t\t\t Nhan ESC de dung han!";
- if ( IsPressed(VK_ESCAPE) )//nếu là phím ESC
- {
- getch();
- CStopWatch::Stop();//xuất đồng hồ và thoát
- }
- }
- Sleep(0);
- state = true;
- CStopWatch::Pause(state);//gọi hàm dừng chương trình
- }
- CStopWatch::Stop();//xuất đồng hồ và thoát
- }
- //hàm dừng khi nhấn SPACE
- void CStopWatch::Pause(bool& state)
- {
- fflush(stdin);
- //khi chưa dừng(state là false) thì thoát hàm
- if ( !state )
- return;
- while ( !IsPressed(VK_SPACE) )//khi chưa nhấn SPACE
- {
- Sleep(0);
- CStopWatch::OutputWatch();//xuất đồng hồ
- cout << "\n\n\n\t\t\t Nhan SPACE de tiep tuc!";
- getch();
- fflush(stdin);
- if ( IsPressed(VK_ESCAPE) )//khi nhấn ESC
- CStopWatch::Stop();//xuất đồng hồ và thoát chương trình
- }
- //cập nhật lại tình trạng state
- state = CStopWatch::Resume(state);
- }
- //hàm tiếp tục
- bool CStopWatch::Resume( bool& state )
- {
- if ( state )//nếu chương trình đã dừng
- return false;//cập nhật lại là chưa dừng
- else
- return !IsPressed(VK_SPACE);//cập nhật lại dựa vào phím trạng thái
- }
- //hàm xuất đồng hồ và thoát khi nhấn ESC
- void CStopWatch::Stop()
- {
- fflush(stdin);//xóa bộ đệm
- CStopWatch::OutputWatch();//xuất đồng hồ
- getch();
- exit(0);//thoát
- }
- //hàm xuất đồng hồ
- void CStopWatch::OutputWatch()
- {
- system("cls");
- if ( m_Hour < 10 )//khi giờ bé hơn 10
- cout << "\n\n\n\n\n\t\t\t\t" << "0" << m_Hour << ":";//xuất giờ ra 2 kí tự( 0 và số giờ )
- else
- 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ờ
- if ( m_Minute < 10 )//khi phút bé hơn 10
- cout << "0" << m_Minute << ":";//xuất phút ra 2 kí tự( 0 và số phút )
- else
- cout << m_Minute << ":";//nếu lớn hơn thì chỉ cần xuất phút
- if ( m_Second < 10 )//khi giây bé hơn 10
- cout << "0" << m_Second;//xuất giây ra 2 kí tự( 0 và số giây )
- else
- cout << m_Second;//nếu lớn hơn thì chỉ cần xuất giây
- }
- CStopWatch::~CStopWatch(void)
- {
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement