Dựa vào biểu đồ trạng thái quá trình thực hiện giao dịch của hệ thống (hình 5.4), chúng ta xây dựng được mô hình bằng ngôn ngữ SMV như sau:
MODULE main VAR
state_transaction: {LAY_THONG_TIN, -- lay thong
tin
GUI_THONG_TIN_DEN_NGAN_HANG, -- gui thong tin
XU_LY_SAI_MA_PIN, -- chosing transaction
HOAN_THANH_GIAO_DICH, -- hoan thanh giao
dich
THUC_HIEN_GIAO_DICH_KHAC_HAY_KHONG, -- thuc hien giao dich khac hay khong
IN_HOA_DON, -- in hoa don
KET_THUC}; -- ket thuc
VAR
action_session: {
BO_QUA, -- an nut bo qua
THONG_TIN_DUOC_NHAP_VAO, -- thong tin duoc nhap vao hop
le
NGAN_HANG_KHONG_PHE_DUYET, -- ngan hang khong phe duyet
NGAN_HANG_PHE_DUYET, -- ngan hang phe duyet
MA_PIN_KHONG_DUNG, -- ma PIN khong dung
NHAP_SAI_MA_PIN_NHIEU_LAN, -- nhap sai ma PIN nhieu lan
MA_PIN_DUOC_PHE_DUYET, -- ma PIN duoc phe duyet
CHON_IN_HOA_DON, -- chon in hoa don
BO_QUA_IN_HOA_DON}; -- bo qua in hoa don
ASSIGN
init(state_transaction) := LAY_THONG_TIN; next(state_transaction) :=
case
-- lay thong tin
(state_transaction = LAY_THONG_TIN) & (action_session = BO_QUA): THUC_HIEN_GIAO_DICH_KHAC_HAY_KHONG;
(state_transaction = LAY_THONG_TIN) & (action_session = THONG_TIN_DUOC_NHAP_VAO): GUI_THONG_TIN_DEN_NGAN_HANG;
-- gui thong tin den ngan hang
(state_transaction = GUI_THONG_TIN_DEN_NGAN_HANG) &
(action_session = NGAN_HANG_KHONG_PHE_DUYET):
THUC_HIEN_GIAO_DICH_KHAC_HAY_KHONG;
(action_session = NGAN_HANG_PHE_DUYET): HOAN_THANH_GIAO_DICH;
(state_transaction = GUI_THONG_TIN_DEN_NGAN_HANG) &
(action_session = MA_PIN_KHONG_DUNG): XU_LY_SAI_MA_PIN; -- xu ly sai ma PIN
(state_transaction = XU_LY_SAI_MA_PIN) & (action_session = NHAP_SAI_MA_PIN_NHIEU_LAN): KET_THUC;
(state_transaction = XU_LY_SAI_MA_PIN) & (action_session = BO_QUA): THUC_HIEN_GIAO_DICH_KHAC_HAY_KHONG;
(state_transaction = XU_LY_SAI_MA_PIN) & (action_session = MA_PIN_DUOC_PHE_DUYET): HOAN_THANH_GIAO_DICH;
-- hoan thanh giao dich
(state_transaction = HOAN_THANH_GIAO_DICH) & (action_session = CHON_IN_HOA_DON): IN_HOA_DON;
(state_transaction = HOAN_THANH_GIAO_DICH) & (action_session = BO_QUA_IN_HOA_DON): THUC_HIEN_GIAO_DICH_KHAC_HAY_KHONG;
-- in hoa don
(state_transaction = IN_HOA_DON) :
THUC_HIEN_GIAO_DICH_KHAC_HAY_KHONG;
-- hoi nguoi dung co thuc hien giao dich khac hay khong
(state_transaction = THUC_HIEN_GIAO_DICH_KHAC_HAY_KHONG) : KET_THUC;
1: state_transaction; esac;
Hình 5.7. Mô hình quá trình thực hiện giao dịch của hệ thống ATM bằng ngôn ngữ SMV.
Trong mô hình này, chúng ta muốn đảm bảo rằng không có giao dịch nào được thực hiện mà trước đó dữ liệu không được gửi đến ngân hàng để phê duyệt:
!AG (!(state_transaction = GUI_THONG_TIN_DEN_NGAN_HANG) -> EF(state_transaction = HOAN_THANH_GIAO_DICH))