設計模式的C語言應用 編碼實踐 狀態機模式2

2021-10-02 18:03:56 字數 2013 閱讀 2733

#include "stdafx.h"

/*基於state_mode_******1

**上的 示例2:

有乙個燈,按下開按鈕,就會開燈,按下關按鈕就會關燈。

和一般等不同的是,兩次開之間的燈的明暗不一樣。

也就是說,第一次開的時候,是高亮,關燈後,再開是低亮,下次再開是高亮,迴圈往復。

這就是乙個很典型的簡單的有限狀態機。

簡單的描述有3個狀態,關燈[state_off],

高亮[state_high_light],低亮[state_low_light]。

大型一點的專案,比如複雜協議的實現,

乙個狀態轉移到下乙個狀態的情況是比較複雜的,

無法用當前狀態和事件簡單確定,所以一般需要函式。

*/#define state_depend 4

#define state_off 0

#define state_high_light 1

#define state_low_light 2

#define state_max 3

#define event_btn_off 0

#define event_btn_on 1

#define event_max 2

int last_state = state_low_light;

int last_light_state = state_low_light;

int lfsm_ignore(int cur_stat, int event);

int lfsm_btn_on(int cur_stat, int event);

int lfsm_btn_off(int cur_stat, int event);

struct light_fsm[state_max][event_max] =

, /*evetn_btn_off*/

, /*evetn_btn_on*/

}, //state_high_light

, /*evetn_btn_off*/

, /*evetn_btn_on*/

}, //state_low_light

, /*evetn_btn_off*/

, /*evetn_btn_on*/

},};

int lfsm_ignore(int cur_stat, int event)

int lfsm_btn_on(int cur_stat, int event)

else if (last_light_state == state_low_light)

else }

int lfsm_btn_off(int cur_stat, int event)

int light_change_state(int cur_stat, int next_state, int event)

else if (next_state == state_low_light)

//other state change related handlings, maybe use curent state and next

//next state,or event type

last_state = cur_stat;

cur_stat = next_state;

return 0;

} //other event type related handlings

return 0;

}int ******2_light_fsm_event(int cur_stat, int event)

if (light_fsm[cur_stat][event].next_state == state_depend)

else

light_change_state(cur_stat, next_state, event);

return 0;

}int main()

C語言程式設計實踐 C語言應用實踐

閱讀2 下面的鏈結中,是銀行系統的原始碼,請閱讀並執行 需要的檔案請自行建立 銀行系統 第一版 原始碼 第10周實踐 請完成下面的專案,併發部落格作為解題報告 專案1 編寫選擇結構程式,輸入個人月收入總額,計算出他本月應繳稅款和稅後收入 計算辦法見附 關於個人所得稅的有關背景知識 可以在下面程式的基...

設計模式 策略模式的實踐和應用(下)

工欲善其事必先利其器,如果還不了解策略設計模式的,可以先學習一下策略設計模式 設計模式 策略模式的實踐和應用 上 在生活中,我們也常常會遇到類似的情況,實現某乙個功能有多種方法,每種方法對應一種演算法,此時我們可以使用一種設計模式來實現不同的解決方案,同時也利於後期擴充套件,這就是今天要介紹的策略設...

C語言設計模式

專案的成功是偶然的,但是專案的失敗卻有很多原因,管理混亂 需求混亂 設計低劣 質量差 測試不到位等等。就軟體企業而言,沒有比優秀的文化和出色的企業人才更重要的了。從軟體設計層面來說,一般來說主要包括三個方面 1 軟體的設計受眾,是小孩子 老人 女性,還是專業人士等等 2 軟體的基本設計原則,以人為本...