本文介紹利用有限狀態機原理開發計算器小程序的過程。
實現的功能
HSM狀態圖
計算器可以分為七種狀態:Start、Operand_1、Negate_1、Operator、Operand_2、Negate_2、Error。其中Start、Operand_1、Operand_1狀態又分了幾種子狀態。 下面簡要的介紹下狀態狀態轉換的過程:
在實際開發的過程中,我們只需要關心現在程序處在什么狀態,可以進行什么樣的操作。然后就是狀態轉換的條件要處理下。

代碼片段
下面是CalculatorDlg.cpp中的一段代碼,我們首先要獲得當前的狀態,然后進行相應的操作,操作完成之后設置好對應的狀態。
void CalculatorDlg::enterOperation(Calculator::CalcOp oper){ if (m_calculator.getCurrentState() == Calculator::CalcState::Error) { return; } if (m_calculator.getCurrentState() == Calculator::CalcState::Start || m_calculator.getCurrentState() == Calculator::CalcState::Negate_1 || m_calculator.getCurrentState() == Calculator::CalcState::Operand_1) { m_calculator.setOperand_1(_wtof(m_output)); } else if (m_calculator.getCurrentState() == Calculator::CalcState::Operand_2 || m_calculator.getCurrentState() == Calculator::CalcState::Negate_2) { m_calculator.setOperand_2(_wtof(m_output)); UpdateData(TRUE); std::stringstream ss; ss << m_calculator.getResult(); m_output = ss.str().c_str(); UpdateData(FALSE); m_calculator.setCurrentState(Calculator::CalcState::Start); m_calculator.setOperand_1(m_calculator.getResult()); } m_calculator.setCurrentState(Calculator::CalcState::Operator); m_calculator.setOperator(oper);}運行效果展示

源碼查看
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答
圖片精選