施茂祺 魏旻
摘要:傳票翻打是財經工作者必備的一項基本功,也是部分財經類專業的必備技能,并被列入全國高職會計技能比賽的正式項目。為更好組織日常教學及訓練,該研究在分析專業教師和學生的實際需求的基礎上,采用客戶機/服務器模型,研發了傳票翻打測試軟件。經實證應用,效果良好,設計思路和采用的技術手段可行,具有一定的普遍性、適用性和較高的應用推廣價值。
關鍵詞:零配置分布式;傳票翻打;Client/Server
中圖分類號:TP3? ? ? 文獻標識碼:A? ? ? 文章編號:1009-3044(2018)36-0058-02
1 問題的提出
傳票翻打,或稱傳票算,是指在經濟核算過程中,對各類單據、發票或憑證進行匯總計算的一種方法。一般使用加減計算,它是加減運算在實際工作中的具體應用,可以為會計核算、財會分析、統計報表提供及時、準確、可靠的基礎數字,是財經工作者必備的一項基本功,并被列入全國高職會計技能比賽的正式項目。
傳票本分為兩種:
第一種是訂本式傳票,是在傳票的左上角裝訂成冊,一般在比賽中使用。
第二種活頁式,全國會計技能大賽采用。
筆者所在學院為財經類院校,傳票翻打是學院許多專業學生的必備技能,因此,亟需一款供日常教學及訓練用傳票翻打測試軟件。經與相關專業教師共同探討和分析,確定自己研發的傳票翻打測試系統必須具備的以下功能和特點:
1) 系統分為教師端和學生端兩部分;
2) 學生端供學生練習與測試,接受學生輸入的傳票上的數據并實時匯總,考慮到學生練習時要求手、腦、眼并用,故學生端應能提供學生一些提示信息,譬如翻打進度、速度、正確率等等;
3) 教師端是控制端,教師可在教師端批量導入、導出學生名單、試題,也可現場編撰題目并布置測試題,統一設置測試時間,實時監控每一名學生的測試情況,收集并導出學生考試成績;
4) 性能要求,參考本院實際班級人數以及合班上課的需求,要求系統至少能夠同時支持150人左右同時進行測試。
2 系統實現的關鍵重點、難點說明
根據上面系統需求分析, 筆者確定該系統的實現軟件為客戶機/服務器模型,又稱為Client/Server體系結構。服務器Server通常采用高性能的工作站或PC小型機,并采用Client/Server架構數據庫系統,如Sybase? Oracle或SQL? Server,負責供多個用戶共享其信息和功能??蛻舳薈lient部分通常負責執行前臺功能,如與用戶交互,數據處理等。這種架構由多臺計算機構成,它們有機地組合在一起,協同完成整個應用,并達到使系統中的軟件、硬件資源得到最大限度的利用。
本系統服務器端即為教師端,而客戶端即為學生端。但是一般Client/Server結構系統在應用前都需要進行系統部署、設置和調試工作,很多情況下,Client/Server架構數據庫也需要進行一系列參數設置和環境設置,譬如連接時數據庫就至少需要配置連接字符串。由于網絡環境不同,連接字符串并非固定不變的,因此往往專業人員上門進行部署和測試。
考慮到本系統用戶為會計類專業教師,讓他們去安裝和部署Client/Server架構數據庫存在諸多的困難,因此,本系統在總體架構為Client/Server模型的基礎上,后臺數據庫卻選擇了桌面模型數據庫Access。之所以選擇Access,是因為微軟公司已經將其數據庫引擎Jet內置到Windows操作系統之中,完全免安裝。但是桌面型數據庫應用于網絡環境,相比Client/Server架構的數據庫,如SQL? Server,由于整個數據庫都需要傳輸到客戶端進行處理,造成網絡帶寬的巨大浪費,使得性能低下,支持客戶端的數量有限。為此,筆者考慮研究實現一個分布式框架,該分布式框架可將桌面架構數據庫虛擬為Client/Server架構數據庫,并可實現零配置,其具備以下特點:
1) 該框架適用于小型分布式程序。
2) 原生框架,不依賴當前流行的Java、.Net虛擬機運行時環境,這樣才能保證無需任何配置,拷貝到電腦上即可使用。
3) 將桌面型或嵌入式數據庫轉換為Client/Server架構數據庫,服務器端無需安裝數據庫服務器,如SQL? Server,客戶端無需單獨安裝數據庫驅動,并且做到網絡線路上只有請求流和結果流,能更有效地利用網絡帶寬,從而達到高性能。
4) 程序員使用本框架開發軟件簡單易用,如同開發桌面型數據庫一樣簡單。
3 實現思路
3.1 整體結構
如圖1所示,Client通過自定義協議向Server發送請求,Server監測Client連接請求,為每一個Client連接請求生成一個服務線程,考慮到每一個連接都需要一定的系統開銷,所以Server自己維護連接歸入池中。因此,線程池負責分配管理和釋放Client連接,允許系統重復使用一個現有連接,而不是重新建立一個。
該線程是衍生的會話線程,其內封裝了客戶端IP、端口號、Client發送的數據包等大量信息。同樣,為提高性能,系統在啟動時一次性生成一定數量的數據訪問對象(ADO),并放入對象池中。當程序需要一個新的對象時,如果對象池中有空閑對象,則立即返回,否則才創建新的該類對象。當一個對象不再被使用時,應該將其放回對象池,以便程序后來使用。并提供了一組方法用于與客戶端通信,其原型形如:
class? CClientThread:CThread
private:
bool? FTS;
void*FChunkbuf;
bool? Fiskeepalive;
char*Fpeekbuffev;
string GlobalPeerIpAddress;
int? GlobalPeerPort;
public:
bool? Connect();
bool? Listen();
int? Sendbuf(const? void*buf,int? count);
int? Write(char? c);
int? Write(const? string? s);
int? Write(void *buf,int? len);
int? Read(void *buf,int? len);
int? ReadInt()
bool? SaveTo(CStream* stream,unsigned? timeout);
bool? SaveTo(File? handle, unsigned? timeout);
3.2 網絡協議的設計
Client/Server是一種請求-響應模型,在一次完整的通信過程中,Client與Server之間將完成以下步驟:
1) 建立TCP連接,通過socket建立Client與Server之間的TCP連接。
2) Client向Server端發送命令,與http協議類似,命令存放在協議報文頭信息中。
3) Client發送協議報文信息。Client在發送請求命令之后,還要以協議報文的形式向服務器發送請求的具體參數。
4) Server應答,Server會向Client返回響應,主要是響應狀態碼。
5) Server返回協議報文,發送Client所請求的實際數據。
本系統設計了如下,一些整數作為協議頭信息:
1) CTSLOGIN=1;成功登陸標記;
2) CRESPOK=1;返回狀態碼,‘1表示響應成功;
3) CRESPFAULT=2;返回狀態碼,‘2表示響應失敗;
4) CRESULTOK=0;返回結果正確;
5) CRESULTNO=0;返回結果錯誤;
6) DISONN=0;斷開連接;
7) EXESQL=1;執行SQL結句;
8) OPENSQL=2;打開SQL結句;
9) LINKTEST=2;連接測試;
10) ACTIVEPACK=4;激活包。
3.3 系統的運作流程
如圖2所示,Server和Client內部存在一個工作循環,Server是一個監聽循環,在循環內Server通過讀取客戶端請求協議頭信息得知請求意圖,這將觸發Server做出不同的響應動作,其邏輯通過偽碼說明如下:
switch(IHead) {? //對協議頭信息進行判斷
case? EXESQL:? // //執行一條SQL語句 更新或者執行
Llen = ClientThread→Socket→ReadInteger;
LSQl = ClientThread→Socket→ReadStr(Llen);
ADOQuery→SQL.Clear;
ADOQuery→SQL→Add(LSQl);
ADOQuery→Execute;
break;
case? OPENSQL:? //執行一個查詢語句
Llen = ClientThread→Socket→ReadInteger;
LSQl = ClientThread→Socket→ReadStr(Llen);
ADOQuery→SQL.Clear;
ADOQuery→SQL→Add(LSQl);
ADOQuery→Open();
break;
…
}
3.4 結果集的返回
Client/Server架構的數據庫,可根據Client查詢請求返回相應的結果集,避免了在網絡上傳播無效數據,有效地利用了網絡帶寬,提高了系統性能。本系統采用了流處理機制(Stream)對數據集對象(ADO)序列化和反序列化,利用AdoDataSet數據集SaveToFile方法將數據集保存到文件中,再通過內存流(MemoryStream)緩存在內存中,使用 ZIP壓縮算法在壓縮內存流中的數據后返回給Client,Client收到響應數據后進行反序列化即可還原出該數據集對象(ADO)。由于網絡上傳輸的數據是經過壓縮的,進一步提高了系統性能。
4 結束語
本系統開發完成后,一直應用于江西財經職業學院會計及相關專業教學之中,并選作了近幾年江西省大學生會計技能競賽軟件,效果良好,證明其設計思路和采用的技術手段是可行的,具有一定的普遍性和適用性以及較高的推廣價值。
參考文獻:
[1] 劉向東.基于Client/Server結構的數據庫系統設計[J].電腦知識與技術,2018,14(11):8-10.
[2] 孟繁榮.中職傳票翻打技能比賽有效訓練的實踐及研究[J].科教導刊:中旬刊,2016(04):42-43.
[3] 狄慶貴.基于Client/Server技術的質量信息管理系統[J].中國管理信息化,2017,20(10):50-51.
[通聯編輯:張薇]