C++程式設計_簡易計時器(Timer)的控制檯實現
求打賞求收藏求轉發!
提供PDF資源
https://download.csdn.net/download/weixin_43781565/12429047
(稽核後可供下載)
Peace and love
簡易計時器(Timer)的控制檯實現
目錄
簡易計時器(Timer)的控制檯指令實現
本次實驗旨在對課上學習的有關C++物件導向模組相關知識進行實際操作,將理論聯絡實際,提升物件導向部分的程式碼實現能力。
在理論方面主要:
- 對問題的初步抽象;
- 瞭解類(Class)和物件(Object)的基本概念;
- 學會類的定義方法;
- 瞭解類成員函式(Member Function)的定義和實現方法;
- 能夠編寫出初步的建構函式(Constructor);
在實際操作方面,本次試驗重點訓練了:
- 類(class)的建立
- 類中建構函式和解構函式的實現;
- 資料成員和成員函式的宣告,建立和呼叫;
IDE :CodeBlocks16.1 (Core:VC++6.0)
Language Standard : C++14
計時器(Timer),是一個功能十分簡單的計時工具,也是各種高階語言中幾乎都有內建的模組之一,本次實驗通過設計一個簡易計時器,來對“物件導向”的概念進行理解,並對剛剛學習的類與成員函式吧等相關的概念進行實踐。
一個簡易計時器的執行程式需要的常用功能如下:
從需求分析可知,我們可以使用一個抽象類Timer,將所有的功能函式和資料成員包括進來並封裝起來,而對於相關的功能,我們需要對應的成員函式進行實現:
- Show()用來實現顯示時間功能;
- Start()用來實現開始計時功能;
- Pause()用來實現暫停計時功能;
- Stop()用來實現停止清零計時功能;
另外,我們還需要必須的建構函式Timer()用來初始化計時器的值。與此同時使用了C++的預製函式SetConsoleCursorPosition()游標控制和GetStdHandle()獲取標準輸出的控制程式碼等去優化程式的相關操作。
根據需求的分析,首先得到ATM機的大致操作流程,用流程圖表示如下:
- class Timer //計時器類
- {
- private:
- long start_time; //初始時間
- long pause_time; //暫停時間
- //兩個bool值標記四種狀態
- bool is_pause; //記錄計時器的狀態 (是否處於暫停狀態)
- bool is_stop;//是否處於停止狀態
- public:
- Timer();
- bool isPause(); //返回計時器狀態
- bool isStop();
- //計時器的三種動作(功能)
- void Start();
- void Pause();
- void Stop();
- inline long getStartTime()
- {
- return start_time;
- }
- void Show();
- };
bool Timer::isPause()判斷是否處於暫停狀態
bool Timer::isStop()判斷是否處於停止狀態
- void Timer::Start() //開始計時
- {
- if(is_stop)
- {
- start_time = time(0);
- is_stop = false;
- }
- else if(is_pause)
- {
- is_pause = false;
- //更新開始時間:用此時的時間 - 暫停時所用的時間 + 上一次開始的時間 = 此時的開始時間
- start_time += time(0)-pause_time;
- }
- }
- void Timer::Pause() //暫停計時
- {
- if(is_stop||is_pause) //如果處於停止/暫停狀態,此動作不做任何處理,直接返回
- return;
- else //否則設定為暫停狀態
- {
- is_pause = true;
- pause_time = time(0); //獲取暫停時間
- }
- }
- void Timer::Stop() //停止計時
- {
- if(is_stop) //如果正處於停止狀態(不是暫停狀態),不做任何處理
- return ;
- else if(is_pause) //改變計時器狀態
- {
- is_pause = false;
- is_stop = true;
- }
- else if(!is_stop)
- {
- is_stop = true;
- }
- }
- void Timer::Show() //列印時間
- {
- char ch;//控制程式選項
- hidden();//隱藏游標
- system("color 7");
- //設定位置列印專案
- location(35,12);
- cout<<"00:00:00";
- location(20,18);
- cout<<" 按a開始,按空格暫停,按s停止";
- while(1) //程式開始
- {
- if(kbhit())
- {
- ch = getch();
- switch (ch)
- {
- case 'a':
- Start();
- break;
- case 's':
- Stop();
- break;
- case ' ':
- Pause();
- break;
- default :
- break;
- }
- }
- if(!isStop()&&!isPause())
- {
- long t = time(0) - start_time;
- location(35,12);
- //輸出同時調整時間格式
- cout<<setw(2)<<setfill('0')<<t/60/60<<":"
- <<setw(2)<<setfill('0')<<t/60<<":"
- <<setw(2)<<setfill('0')<<t%60<<endl;
- }
- }
- }
void location(int x, int y)//定位顯示位置,x為行座標,y為列座標
- void location(int x, int y)//定位顯示位置,x為行座標,y為列座標
- {
- COORD pos = {x,y};//(座標 位置)
- HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //進行標準輸出處理
- SetConsoleCursorPosition(hOut, pos);//設定控制檯游標位置
- }
- void hidden()//隱藏游標
- {
- HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
- CONSOLE_CURSOR_INFO i;
- GetConsoleCursorInfo(hOut,&i);
- i.bVisible=0; //賦1為顯示,賦0為隱藏
- SetConsoleCursorInfo(hOut,&i);
- }
以下為實驗結果截圖:
圖1-1 初始化頁面
圖1-6清零(停止後按下a)
1.在本次實驗中,成功的實現了簡易計時器的程式設計,實踐了對類的定義和實現,並對剛剛學習到的問題抽象進行了一定的訓練,從功能和需求的分析,到後面的問題抽象,再到最後的函式實現,一步一步的從面相過程的思路向物件導向進行轉化;
2.程式碼方面,對成員函式的書寫有了一定的訓練,從最初的無參函式無返回值進行重新思考,一步一步分析程式的返回型別和傳遞引數,如本次在實驗中採用的bool isPause()和bool isStop()來判斷時間目前的狀態,採用了布林型別進行處理;
3.在設定游標函式和顯示位置函式部分,在網上查閱了有關游標控制SetConsoleCursorPosition()和GetStdHandle()獲取標準輸出控制程式碼的知識,並在實驗中的“顯示時間”部分進行了應用,在接下來的實驗中可以在合適的地方繼續使用相關的知識。
總的來說,本次的簡易計時器只是面相物件的一個簡單的開始,接下來還要繼續學習相關的更高一級的操作,需要認真學習,多多實踐,做好每一次實驗。
附:程式原始碼
#include <cstdlib>
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
#include <iomanip>
#include <windows.h>
using namespace std;
void location(int x, int y)//定位顯示位置,x為行座標,y為列座標
{
COORD pos = {x,y};//(座標 位置)
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //進行標準輸出處理
SetConsoleCursorPosition(hOut, pos);//設定控制檯游標位置
}
void hidden()//隱藏游標
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO i;
GetConsoleCursorInfo(hOut,&i);
i.bVisible=0; //賦1為顯示,賦0為隱藏
SetConsoleCursorInfo(hOut,&i);
}
class Timer //計時器類
{
private:
long start_time; //初始時間
long pause_time; //暫停時間
//兩個bool值標記四種狀態
bool is_pause; //記錄計時器的狀態 (是否處於暫停狀態)
bool is_stop;//是否處於停止狀態
public:
Timer();
bool isPause(); //返回計時器狀態
bool isStop();
//計時器的三種動作(功能)
void Start();
void Pause();
void Stop();
inline long getStartTime()
{
return start_time;
}
void Show();
};
Timer::Timer() //建構函式:初始化計時器狀態
{
is_pause = false;
is_stop = true;
}
bool Timer::isPause() //判斷是否處於暫停狀態
{
if(is_pause)
return true;
else
return false;
}
bool Timer::isStop() //判斷是否處於停止狀態
{
if(is_stop)
return true;
return false;
}
void Timer::Start() //開始計時
{
if(is_stop)
{
start_time = time(0);
is_stop = false;
}
else if(is_pause)
{
is_pause = false;
//更新開始時間:用此時的時間 - 暫停時所用的時間 + 上一次開始的時間 = 此時的開始時間
start_time += time(0)-pause_time;
}
}
void Timer::Pause() //暫停計時
{
if(is_stop||is_pause) //如果處於停止/暫停狀態,此動作不做任何處理,直接返回
return;
else //否則設定為暫停狀態
{
is_pause = true;
pause_time = time(0); //獲取暫停時間
}
}
void Timer::Stop() //停止計時
{
if(is_stop) //如果正處於停止狀態(不是暫停狀態),不做任何處理
return ;
else if(is_pause) //改變計時器狀態
{
is_pause = false;
is_stop = true;
}
else if(!is_stop)
{
is_stop = true;
}
}
void Timer::Show() //列印時間
{
char ch;//控制程式選項
hidden();//隱藏游標
system("color 7");
//設定位置列印專案
location(35,12);
cout<<"00:00:00";
location(20,18);
cout<<" 按a開始,按空格暫停,按s停止";
while(1) //程式開始
{
if(kbhit())
{
ch = getch();
switch (ch)
{
case 'a':
Start();
break;
case 's':
Stop();
break;
case ' ':
Pause();
break;
default :
break;
}
}
if(!isStop()&&!isPause())
{
long t = time(0) - start_time;
location(35,12);
//輸出同時調整時間格式
cout<<setw(2)<<setfill('0')<<t/60/60<<":"
<<setw(2)<<setfill('0')<<t/60<<":"
<<setw(2)<<setfill('0')<<t%60<<endl;
}
}
}
int main() //主函式
{
Timer t;//建立一個物件
t.Show();//呼叫展示函式
}
相關文章
- c++控制檯寫一個計時器C++
- C++實現簡易計算器C++
- C++程式設計實現C++程式設計
- C++ 實現簡略計算π的程式C++
- Mac簡易計時器Mac
- 【Linux系統程式設計】libevent庫實現簡易tcp伺服器Linux程式設計TCP伺服器
- 可程式設計作息時間控制器設計程式設計
- 編寫一個簡易計時器程式(edu)
- socket程式設計實現tcp伺服器_C/C++程式設計TCP伺服器C++
- 快捷簡易統計圖表模型設計與實現模型
- 前端 JavaScript 實現一個簡易計算器前端JavaScript
- 計時器軟體:Chain Timer for macAIMac
- 多功能計時器Chain Timer for MacAIMac
- C++簡易計算器自寫棧版C++
- c++簡單程式設計-3C++程式設計
- 程式設計師程式設計時的簡單方法與技巧程式設計師
- 定時器控制元件 Timer 1130定時器控制元件
- Rust 程式設計,實現簡單的佇列Rust程式設計佇列
- Windows 程式設計簡介從C/C++到Windows程式設計Windows程式設計C++
- Flutter倒數計時/計時器的實現Flutter
- C++實現控制檯學生學籍管理系統C++
- 併發程式設計 —— Timer 原始碼分析程式設計原始碼
- C++ concurrency::task實現非同步程式設計(WindowsC++非同步程式設計Windows
- 控制檯實時檢視 sqlSQL
- python簡易計算器Python
- Java介面程式設計實戰(一)——簡易QQ登入介面Java程式設計
- 實驗1 現代C++程式設計初體驗C++程式設計
- 簡易的工廠設計模式設計模式
- Proteus實現簡單51程式的設計與模擬
- [C++]常用的windows控制檯操作C++Windows
- C++物件導向程式設計——遞迴實現字串的反序C++物件程式設計遞迴字串
- 可程式設計序控制器(PLC)程式設計
- 深入 Java Timer 定時排程器實現原理Java
- TCP併發伺服器的程式設計實現TCP伺服器程式設計
- Java網路程式設計----透過實現簡易聊天工具來聊聊BIOJava程式設計
- 微控制器C語言程式設計實踐pdfC語言程式設計
- 一個簡單的時間視窗設計與實現
- [譯] 使用響應式程式設計來實現簡易版的無限滾動載入程式設計