針對旅遊景區售票高峰期「排隊久、人工錯、統計難」三大痛點,採用 Delphi + SQL Server 6.5 + Windows NT 4.0 星型區域網架構,實現自動化售票、即時統計、管理報表。本文詳細記錄系統總體設計、資料庫結構、核心模組代碼與關鍵技術選型心得。
| 欄位 | 說明 |
| SeqNo | 流水號:操作員標識+隨機碼+起始票號 (如 GK006662) |
| AdultNum | 成人票數量 |
| ChildNum | 兒童/學生票數量 |
| CarNum | 車輛數 (大/中/小型分欄) |
| TotalMoney | 總金額 (自動計算) |
| SellTime | 售票時間 (取系統時間) |
| OperatorID | 操作員 ID (登入驗證關聯) |
| IsVoid | 退票標記:1=有效, 0=退票作廢 |
核心模組實作
1. 登入驗證 (密碼表查詢)
function TFormPswd.GetHandlerName(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
Name := Query2.FieldByName('handlename').AsString;
Query2.Close;
Result := Name;
end;
- 三次失敗自動退出。
- 登入成功取得操作員姓名,後續售票記錄自動關聯。
2. 主售票介面 — 只輸入數量,其餘自動
- 輸入:成人數、兒童數、車輛數 (大/中/小)。
- 自動:票價啟動時從資料庫讀取、時間取系統、總價自動計算。
- 防呆:TEdit
OnKeyPress 僅允許數字鍵與 Backspace。
3. 統計查詢報表 — QuickReport 元件
- 內嵌 SQL 靈活篩選:日期區間、操作員、票種、退票狀態。
- QuickReport 控件 (QRBand、QRDBText、QRExpr) 快速構建分組報表、彙總統計。
4. 門票高速列印 — 直接繪製 Printer.Canvas
procedure PrintTicket(SeqNo, TotalPeople, AdultNum, ChildNum,
TotalCar, BigCar, MidCar, MiniCar, TotalMoney, PrtDate: String);
begin
Printer.Canvas.Font.Charset := GB2312_CHARSET;
Printer.BeginDoc;
Printer.Canvas.Font.Size := 14;
// 依票面設計座標精確繪製
Printer.Canvas.TextOut(X + 2370, Y, SeqNo); // 流水號
Printer.Canvas.TextOut(X + 1200, Y + 300, TotalPeople); // 總人數
// ... 其他欄位 ...
Printer.EndDoc;
end;
- 繞過報表引擎,直接用 GDI 繪製,速度極快,符合高峰期連續打印需求。
- 座標微調即可適應不同票面版型,無需重新設計報表模板。
5. 退票管理 — 解決金額不符
- 退票時將對應記錄
IsVoid := 0,不刪除資料保留稽核軌跡。
- 統計查詢自動過濾
IsVoid = 1,確保操作員實收與系統一致。
技術選型心得
| 決策點 | 選擇 | 理由 |
| 開發語言 | Delphi | RAD 開發快、編譯速度最快、Printer.Canvas 列印高效、BDE/ADO 靈活切換 |
| 資料庫 | SQL Server 6.5 | C/S 架構、Transact-SQL 高效、支援預存程序、穩定成熟 |
| 網路協議 | Named Pipes / TCP-IP | 區域網低延遲、SQL Server 原生支援 |
| 列印方式 | Printer.Canvas 直接繪製 | 無報表引擎開銷、毫秒級出票、座標控制精確 |
| 操作介面 | 下拉框/選擇框為主 | 操作員電腦水平參差不齊,最小化輸入、防呆優先 |
部署與維運建議
- 售票機磁碟寫保護或還原卡,防病毒/誤刪。
- 每日自動備份 SQL Server 資料庫至異地。
- 票據格式變更僅需調整 PrintTicket 座標參數,無需重新編譯安裝 (可外置 INI)。
- 網路中斷時售票機可離線暫存 (本地臨時表),恢復後自動上傳合併。
此系統於秦皇島野生動物園實際上線運行,有效解決高峰期售票擁堵,將平均出票時間從 30 秒壓縮至 5 秒內,管理層獲得即時經營數據,決策效率大幅提升。
- 上一篇文章: Delphi 介面程式設計入門:IInterface、GUID、引用計數、委派與 RTTI 完整指南
- 下一篇文章: Delphi ICMP Ping 實作:呼叫系統 icmp.dll 實現無元件跨平台主機存活檢測
Copyright ©
程式碼之家 All Rights Reserved