孫朝云 陳寧寧 趙 軻
摘 要:基于影院售票科學化管理要求,設計影院自動售票系統,給出系統設計的主體結構。系統以Delphi 7.0為前端開發工具,采用模塊化設計方法,遵循使用的方便性、安全性和靈活性原則,完成售票系統現代化、可視化管理功能的要求,很好地實現了售票功能。給出了系統開發中遇到的問題及具體解決方法。對于采用Delphi開發系統的使用者具有重要的參考價值。
關鍵詞:售票系統;數據安全;組合列表框;Rave 5.0計算機
中圖分類號:TP311
0 引 言
隨著現代計算機技術和網絡技術的飛速發展,設計可靠、便捷、高效的計算機管理售票系統代替傳統的售票方式越來越受到人們的重視。方便、可視、快捷的查詢、統計能使管理者實時準確地掌握影院的經營狀況,并對售票人員進行監督和管理,亦為高級管理人員提供了準確、科學的決策依據。采用智能化售票提高了電影院的售票效率和管理水平。在此針對影院售票工作、管理與發展要求,給出了影院售票系統設計結構及主要完成功能。Delphi是基于窗口和面向對象的編程方法,與Windows操作系統結合,具有強大的數據庫技術支持和快速的編譯速度。在數據庫技術方面,其功能尤為突出。因此使用Delphi設計影院售票系統不僅可視性好,而且使用方便,易于操作。
1 影院售票系統總體設計與主要功能模塊設計
影院售票系統的總體設計思路采用樹狀結構。在整個售票系統中實現了不同用戶登陸、管理和影院售票廳的仿真。可以實現售票、打印及各個電影售出票價信息查詢、統計等功能。該系統采用模塊化設計思想,主要由6個功能模塊組成,分別為用戶登陸模塊、主窗體模塊、售票窗體模塊、統計模塊、查詢模塊、報表打印模塊。本文僅給出主要模塊的功能及其關鍵部分設計的實現方法。
1.1 用戶登錄及密碼輸入模塊
程序啟動后,管理員通過輸入密碼登陸系統。登錄及密碼輸入模塊用于限制操作員的權限,完成的主要功能有程序啟動、輸入用戶名和密碼,若輸入正確則進入系統主窗體界面,輸入錯誤則彈出錯誤提示窗口,以保證用戶的合法性及系統的安全性。系統登陸界面設計如圖1所示。
1.2 系統主窗體設計
系統主窗體模塊是程序設計中主要窗體設計之一。它包括用戶對影院售票要求的所有信息的錄入及售票廳仿真、售票統計、報表預覽三大功能模塊。主窗體設計是供一般管理人員進行操作。一般管理人員需依據高級管理者的要求輸入相關信息,如電影名稱及票價、開場時間、日期等,預先進行參數設置。在影院售票廳仿真設計中,用按鈕模擬影院中的實際座位,用戶可以實時點擊座位進行選擇售票,并且可以與主窗體之間切換。統計模塊可通過輸入相關信息統計出某部電影在某段時間售出的總票數和相應價錢。同樣通過報表預覽按鈕便可以查到該段時間的售票情況。總之,系統的主窗體是所有模塊互動的中心,主窗體設計如┩2所示。
2 影院售票系統開發過程中遇到的問題及解決方法
2.1 系統開發中遇到的問題
采用Delphi完成售票系統的開發,并對Delphi整個開發環境和關鍵組件的使用技巧進行了探索應用,在設計中遇到了一些實際問題。
(1) 在修改數據表中字段電影信息值后,Combo〣ox控件的下拉列表內容沒有顯示修改后的數據,要使表中修改后的字段數據在ComboBox控件中得以更新,必須先重啟售票系統,然后才可以將ComboBox下拉列表中的內容更新為表中修改后的數據;
(2) 用于顯示表中字段“電影院名稱”及“電影名稱”的方法,使用ComboBox控件和使用DBCombobox控件結果是不同的;
(3) DBComboBox只顯示數據表中的第一條記錄;
(4) ComboBox控件下拉列表內容有重復,如圖3所示;
5) Rave報表設計中的問題。
2.2 問題解決方法
2.2.1 解決修改數據表里的某一字段數據
當修改了數據表中的某一字段數據后,售票窗口卻不能馬上更新相應的數據,它需要重新啟動系統后,方可實現數據的更新,這無疑會大大降低使用人員的工作效率,給用戶帶來很大的不變。要解決這一問題,首先要知道創建窗體的FormCreate事件以及顯示窗體的FormShow事件這兩者各自的功能及其區別。〧ormCreate事件代碼是在應用系統啟動時就已經被加載,而FormShow事件代碼是在該窗體顯示時才被調用。
如果把更新數據的代碼放在FormCreate事件中,那么當數據表修改以后,由于該窗體在應用系統啟動時就已經創建,也就是說它對應的事件代碼已經執行過了,所以當數據表中的數據被修改后,在ComboBox列表框中的數據就不能實時刷新,必須重啟售票系統,才能執行放在FormCreate中的更新數據事件代碼。售票窗體數據才能得以更新。
解決的方法是將更新數據的代碼添加到Form㏒how事件代碼中,用以更新顯示數據。運行結果表明,添加到FormShow事件代碼后的系統能夠完全解決該問題。從而實現了ComboBox列表框中數據的動態實時刷新。代碼編寫如下:
2.2.2 [ZK(]顯示表中字段DBComboBox與ComboBox不同方法
DBComboBox控件是繼承了ComboBox屬性的控件,并添加了屬性DataSource,增加了數據庫的連接。使用DBComboBox控件可以省去大量的代碼,使用時更加方便,因此設計系統時,首先想到使用DBComboBox控件來選擇“電影院名稱”及“電影名稱”。然而設計過程中發現,使用DBComboBox控件來選擇售票的“電影院名稱”和“電影名稱”時,當用戶選擇了DBComboBox下拉列表中某一項時,數據表中的內容會隨著選擇的內容而變化,這與設計要求不符。
為了滿足設計要求,選擇使用ComboBox控件的下拉列表顯示表中的字段數據“電影院名稱”及“電影名稱”,通過編寫事件代碼可以讀出數據表中相應字段的數據,并寫入到ComboBox的下拉列表中,完成動態添加其下拉列表內容。具體實現代碼如下:
在程序開發過程中,有時出現選用的DBComboBox組件與數據表連接后,在程序運行過程中發現它只顯示數據表中的第一條記錄,無法顯示對應數據表中相應字段的所有記錄。這是因為DBComboBox下拉列表中的內容要通過遍歷數據表的記錄來獲得所有記錄。該情況可以通過在FormCreate中添加以下代碼予以解決[4]。但是這種解決方法不能使數據實時更新。若將其添加到FormShow中,可以實現數據的實時刷新。
2.2.4 動態添加ComboBox控件下拉列表內容
動態添加ComboBox控件下拉列表內容時,內容出現重復問題,可以使用SQL語句中限制字distinct來篩選掉重復選項。具體實現代碼如下:
這樣可以將“table”表中“name”字段數據不重復出現的記錄篩選出來。
2.2.5 Rave 5.0報表設計器使用中問題與解決方法
(1) Rave 5.0報表設計器是Delphi 7.0版本新加入的組件。
報表設計是數據庫應用程序中的重要組成部分,報表格式復雜多樣,報表的生成也是數據庫應用系統開發中較煩瑣的一項工作。Delphi 7.0版本新加入的Rave 5.0報表設計器是可視化報表設計工具。它能夠在許多環境中創建各種報表,給開發帶來很大的方便。Rave報表組件位于Delphi 7組件面版的Rave頁面上,它們都是非可視化的組件。這些組件分為四種類型:引擎類組件、格式轉換類組件、數據連接類組件和RvProject組件。
(2) Rave報表的字段名不能輸入中文及解決方法。
在報表設計中,如果所連接的數據表中字段名為中文時,在創建報表中就會出現字段名不能出現在字段列表框中供選擇的問題。因為Rave到目前為止,還不能支持字段名為非英文。所以必須給每一個中文字段設置一個對應的英文別名,通過其別名對其進行管理。
打開報表設計器主界面,新建一個New Date Object,完成之后在項目樹中打開數據視圖條目,選擇剛被創建的DateView1,見圖4。通過屬性面板,在Name重新命名數據表中的中文字段輸入對應的英文名,然后在點擊鼠標右鍵選Refresh,依次類推,如圖5所示,即可加入所有字段,如圖6所示。
[HT5”K][JZ]圖6 界面(三)[HT5]
(3) Rave report報表設計中如何獲取當前頁數和總頁數。
在完成報表設計后,為了信息顯示更完整,通常在報表打印時給出所打印的當前頁數和總頁數。該問題可以通過報表組件Report頁面上的DataText獲得。DataText顯示了數據集中的字段。打開Rave report報表設計器,選取報表組件Report頁面上的DataText放于報表中頁數和總頁數的相應位置,并將其DataView屬性設為DataView1;在DataField屬性窗口中的report variables選項中,選currentPage后點Insert Report Var按鈕后,再點OK按鈕確定,完成頁數的設置。同樣通過DataField屬性窗口中的report variables選項,選TotalPage后,先點Insert Report Var按鈕,之后點OK按鈕確定。