一、引言
隨著計算機局域網和廣域網的出現,網絡產品(包括軟、硬件)質量不斷提高;品種、數量迅速增長和發展;以及數據庫技術的成熟和軟件工程方法的發展,各種計算機網絡管理系統越來越完善。旅游景點微機售票系統是計算機技術與網絡技術相結合的產物。方便快捷的查詢統計使管理者能准確地掌握景點的經營情況並對售票人員進行監督、管理,並為其提供准確、可信的決策依據。其成功實現提高了旅游景點的售票效率和管理水平,使一直由人工售票的局面劃上句號,從而進入智能化售票的新階段。
二、系統總體方案設計
微機售票系統采用星形拓撲局域網結構,由服務器、集線器、計算機、打印機組成,見圖1。服務器上運行數據庫及系統管理程序,實現查詢、統計、報表打印、系統維護等功能。各售票微機與相應的打印機放置在售票窗口,運行售票程序,完成界面輸入、門票打印及售票員個人信息查詢統計等功能。
對於售票系統來說,打印機的速度和數據通過網絡的傳輸速度是非常關鍵的指標。如秦皇島野生動物園在其高峰期,每天有大約2萬人入園游覽,要求使用三台微機進行售票,而入園客人大都集中在同一段時間,如早晨剛開園到上午10點左右,下午2點~3點之間等,所以減少游客排隊等候時間、加快售票速度就是微機售票系統必須解決的問題。影響售票速度有兩方面因素,一是硬件打印機的打印速度,二是打印程序啟動打印和傳輸數據的速度。經實際測試,EPSON stylus color 850彩色噴墨打印機,其打印速度為A4紙8頁/分鐘,能夠滿足要求。
在程序方面為了滿足打印速度的要求,經過測試和精心選擇,確定用Delphi 4.0做為程序設計語言。Delphi把強大的對象Pascal語言和快捷便利的RAD相結合,是一個通用的圖形用戶界面(GUI)開發工具,它是基於可視化和組件的概念而設計出來的,而且能非常方便地操縱數據庫及實現各種報表,使得編程迅速,且是目前調試編譯速度最快的編程語言之一。在門票打印時直接調用Delphi的類Printers中的各種過程和函數,如Printers.Canvas.Textout(x:integer;y:integer;const Text:string)再結合其他的過程和函數即可實現快速打印,解決了程序打印速度的問題。
系統選擇SQL Sever做為數據庫,SQL Sever是一個客戶機/服務器關系型數據管理系統(RDBMS),使用Transact-SQl在客戶機和SQL Sever之間發送請求,能夠滿足系統的網絡傳輸要求。Delphi中可以通過BDE(數據庫引擎)和ODBC進行數據庫訪問,或者通過ADO直接進行數據庫訪問。
另外在總的程序設計時,考慮到使用本系統的操作員素質參差不齊,計算機操作水平相對較低,所涉及的操作要盡可能簡單,盡量少輸入信息,盡量使用下拉框和選擇框,避免出錯。本系統操作員要輸入的只有游客人數(成人和小孩或學生)和車輛數。其他信息如票價,程序啟動時從數據庫中自動調出,時間取自系統時間,總價由計算機自動生成,界面簡單、操作容易、易學易用。
三、系統軟件總體設計
1.數據庫表設計
系統數據庫中共有零售票信息表、密碼表、操作員信息表、票價信息表,以及為統計查詢建造的視圖等。以零售票信息表為例介紹表的結構。其字段定義如表1所示。
序列號:由售票員的標識符號,隨機號和微機售票開始的票數記錄組成。如GK006662,代表標識號為G的售票員,隨機號為K,第6662張票。
退票否:此字段用來標識票是否有效,若有效,則為1,無效為0。
2.軟件結構設計
系統軟件設計遵循模塊化程序設計的思想,自頂向下,步步求精。系統程序由系統管理模塊和售票模塊組成。售票模塊運行在售票微機上,系統管理模塊運行在服務器上。
四、系統主要功能特性及實現方法
系統主要模塊:登錄及密碼輸入模塊;系統主界面輸入模塊;統計、查詢、報表、打印模塊;門票打印模塊。下面分述各模塊的功能以及關鍵部分的實現。
1.登錄及密碼輸入模塊
登錄及密碼輸入模塊用於限制操作員的權限,程序完成的功能:從界面上取出密碼,查詢數據庫密碼表,有相同密碼操作員有權進入下一界面,三次輸入失敗,程序自動退出。另外在售票模塊中,根據密碼要取出對應的操作員的名字,以便將售票信息與操作員相關聯。從數據庫中根據輸入密碼取相應的操作員函數如下,其中handletbl為密碼表名稱,id、handlename、handlecode為表中字段,代表編號、操作員姓名、操作員密碼。
function TFormPswd.gethandlename(code:String):String;
var name:String;
begin
name:='';
Query2.Close;
Query2.SQL.Clear;
Query2.DisableControls;
Query2.SQL.Add('Select id,handlename,handlecode from handletbl');
Query2.Open;
if Query2.locate('handlecode',code,[]) then
begin
name:=query2.FIEldByName('handlename').AsString;
end;
Query2.close;
Result:=name;
end;
2.系統主界面輸入模塊
系統的主界面輸入模塊用於輸入和顯示售票信息,根據其信息和票價自動計算出游客的總人數以及票價。在此模塊中要求操作員只輸入游客人數,按“確定”,即可自動計算和顯示總價,按“打印”則打印門票。為了防止操作員誤輸入除整型數據以外的其他字符如A、B等而導致程序出錯,程序中在需要數據輸入的Tedit位置,設置判斷條件,只允許整型數據輸入。
3.統計與查詢、報表打印模塊
統計與查詢、報表打印模塊用於實現售票信息的統計與查詢,可以設定起止日期等信息,並可生成報表打印。統計與查詢用內嵌的SQL查詢語言實現,報表使用Delphi的快速報表組件Qreport部件組中的各種控件。
4.門票打印模塊
門票打印模塊實現門票的打印輸出功能。在門票打印中需根據門票的樣式確定輸出的位置,為了實現快速打印,在打印時直接調用printers的過程和函數。
打印的過程如下:
procedure printmsg(thesyqo,Totalpeople,adultNum, childNum,Totalcar,bigcar,middlecar,minicar,totalmoney, prtdate:String);
begin
Printer.Canvas.Font.Charset := GB2312_CHARSET;
Printer.BeginDoc;
Printer.PageHeight;
Printer.PageWidth;
Printer.Canvas.Font.Size :=14;//字體設置
……//根據用戶需要插入要打印的內容
Printer.Canvas.TextOut(x+2370,y,thesyqo);//打印內容
Printer.EndDoc;
end;
5.退票管理模塊
實際的售票過程中涉及到由於各種原因游客退票的情況,而計算機打印售出的門票及相關信息已經存入數據庫中,當有退票情況發生時,必然存在操作員售票金額與數據庫查詢結果不一致的現象,為了解決這一現象,增加了退票管理模塊。