吳秀敏,王小蘭,陳世斌, 方巍
ATM 機(jī)的出現(xiàn)方便了人們的生活,但售票領(lǐng)域至今未出現(xiàn)相似的系統(tǒng)和設(shè)備。然而這種系統(tǒng)和設(shè)備在生活中卻有很大的需求?,F(xiàn)實(shí)生活中的售票系統(tǒng)的售票過(guò)程耗費(fèi)了大量的人力,但是其效果并不能另人滿意,幾乎每次買票都需要排很長(zhǎng)的隊(duì),不管是在車站還是在各個(gè)售票點(diǎn)。如果現(xiàn)實(shí)生活中有類似ATM機(jī)的售票機(jī)器,那么購(gòu)票過(guò)程也就不再那么困難了。
整個(gè)系統(tǒng)可以設(shè)計(jì)為一個(gè)星形網(wǎng)絡(luò),即一個(gè)主控機(jī)作為服務(wù)器連接著多個(gè)客戶機(jī)。客戶機(jī)運(yùn)行相同的程序,硬件的配置也基本相同。
系統(tǒng)拓?fù)浣Y(jié)構(gòu)如圖(1)所示
圖1 系統(tǒng)總體結(jié)構(gòu)框圖
主控機(jī)功能:與客戶端進(jìn)行數(shù)據(jù)交換,建立數(shù)據(jù)庫(kù),進(jìn)行數(shù)據(jù)檢索,處理和更新等。
客戶端功能:與主控機(jī)通信,監(jiān)控客戶的操作需求。
主控機(jī)程序:串口通信程序,數(shù)據(jù)檢索和處理程序等。
客戶端程序:串口通信程序,客戶需求處理程序等。
本系統(tǒng)模擬自動(dòng)購(gòu)票的過(guò)程是:
(1)客戶端獲取輸入的學(xué)號(hào)和乘車方向信息發(fā)送給主控端;
(2)主控端獲取學(xué)號(hào)和乘車方向信息,并通過(guò)學(xué)生信息中心查詢學(xué)生的信息,將乘車區(qū)間(起點(diǎn)站—終點(diǎn)站)傳送給票務(wù)中心,票務(wù)中心查詢相關(guān)乘車信息將車次路線信息發(fā)送給客戶端;
(3)客戶端顯示車次路線信息;
(4)客戶端獲取選擇的記錄號(hào),從車次列表中讀取相應(yīng)車次信息并發(fā)送給主控機(jī);
(5)主控機(jī)收到車次信息后向客戶端發(fā)送完整的車票信息(車次、起點(diǎn)站、終點(diǎn)站、發(fā)車時(shí)間、票價(jià)),并發(fā)出出票指令;
(6)客戶端接收到車票信息和出票指令后,打印車票。
考慮到實(shí)際情況的復(fù)雜性,本系統(tǒng)主控機(jī)和客戶端的通信比較復(fù)雜。為了方便程序的編寫,增加系統(tǒng)的容錯(cuò)性和穩(wěn)定性,我們?cè)O(shè)計(jì)了主控機(jī)和客戶端的狀態(tài)機(jī)。
主要工作過(guò)程及狀態(tài)變化是:(1)啟動(dòng)程序,開啟通信服務(wù),主控機(jī)狀態(tài)初始化為“等待接收學(xué)生學(xué)號(hào)和乘車方向”狀態(tài);(2)等待串口接收數(shù)據(jù);(3)串口接收到數(shù)據(jù)后根據(jù)串口協(xié)議的設(shè)置對(duì)接收到的數(shù)據(jù)進(jìn)行處理;(4)如果收到學(xué)號(hào)和乘車方向信息,則查詢學(xué)生信息數(shù)據(jù)庫(kù)得到乘車路線,然后根據(jù)乘車路線查詢車票信息數(shù)據(jù)庫(kù)得到所有包含該乘車路線車次,并將車次信息發(fā)給客戶端;主控機(jī)的狀態(tài)轉(zhuǎn)到“等待接收車次選擇”狀態(tài);如果當(dāng)前狀態(tài)為“等待接收車次選擇”,并且收到了客戶端的車次選擇信息,則查詢車票信息數(shù)據(jù)庫(kù)獲取對(duì)應(yīng)車次更詳細(xì)的數(shù)據(jù),并將詳細(xì)信息封裝為出票命令發(fā)送給客戶端,主控機(jī)狀態(tài)轉(zhuǎn)到“等待交易完成”狀態(tài);如果當(dāng)前狀態(tài)為“等待交易完成”,并且收到了客戶端的交易完成信息;則更新車票信息數(shù)據(jù)庫(kù),主控機(jī)的狀態(tài)轉(zhuǎn)到“等待接收學(xué)生學(xué)號(hào)和乘車方向”狀態(tài)。
1.2.1 主控機(jī)的狀態(tài)機(jī)
圖(2)所示的狀態(tài)機(jī)形象直觀地描述了主控機(jī)的工作狀態(tài)處理過(guò)程。
圖2 主控機(jī)的狀態(tài)機(jī)描述
1.2.2 客戶端的狀態(tài)機(jī)
圖(3)示出的狀態(tài)機(jī)直觀地描述了客戶機(jī)監(jiān)控過(guò)程。
圖3 客戶端的狀態(tài)機(jī)描述
系統(tǒng)程序的設(shè)計(jì)主要體現(xiàn)在主控機(jī)和客戶機(jī)兩個(gè)方面,下面分別設(shè)計(jì)主控機(jī)和客戶機(jī)的工作流程。
1.3.1 主控機(jī)的程序設(shè)計(jì)
主控機(jī)作為服務(wù)器主要負(fù)責(zé)數(shù)據(jù)庫(kù)的管理,并提供查詢接口,將查詢結(jié)果通過(guò)串口發(fā)送給客戶端。程序流程圖如圖(4)所示。
主控機(jī)程序采用MFC單文檔形式,程序由MFC函數(shù)框架自動(dòng)完成消息循環(huán),需要編寫實(shí)現(xiàn)相關(guān)功能的消息響應(yīng)函數(shù)的代碼,程序中主要的工作是編寫菜單的響應(yīng)函數(shù)和串口通信模塊的相關(guān)代碼。
圖4 主控機(jī)程序流程圖
1.3.2 客戶機(jī)的程序設(shè)計(jì)
客戶機(jī)主要負(fù)責(zé)從客戶界面獲取輸入信息,并將其轉(zhuǎn)換為相應(yīng)消息格式通過(guò)串口發(fā)送給主控機(jī),并將主控機(jī)的回復(fù)信息以一定的方式顯示在界面上,可以采用對(duì)話框形式。其程序流程圖如圖(5)所示。
圖 5 客戶端程序流程圖
現(xiàn)在網(wǎng)上銷售如此火爆,如果該系統(tǒng)擴(kuò)展到支持 Web形式,那么可使用網(wǎng)上銀行進(jìn)行網(wǎng)上交易,減少了硬設(shè)備的投入,使系統(tǒng)的投資進(jìn)一步減少。若限制一個(gè)賬號(hào)(學(xué)號(hào),工作證號(hào),或身份證號(hào))購(gòu)票的數(shù)目,那么本系統(tǒng)還能夠在一定程度上能減少黃牛票,實(shí)現(xiàn)公平交易。
[1] 周功業(yè),黃文蘭,盧建華.現(xiàn)代微機(jī)系統(tǒng)與接口技術(shù),[M] 中山大學(xué)出版社,
[2] 王珊,薩斯煊.數(shù)據(jù)庫(kù)系統(tǒng)原理概論,[M] 高等教育出版社
[3] 王超龍,陳志華.VC++ 6.0入門與提高,[M] 人民郵電出版社.
[4] 深入淺出VC++串口編程,宋寶華.來(lái)自網(wǎng)絡(luò).