陳捷 南昌航空大學現(xiàn)代教育中心 南昌市 330063
在傳統(tǒng)的人工票務(wù)管理中,由于人工的因素,往往帶來成本大、處理速度特慢不足,同時出錯的幾率比較大,效率是很低的?,F(xiàn)在,在世界各國,長途客運票務(wù)管理使用的基本上都是員工操作計算機的模式,計算機主要是借助軟件用來存儲、更新數(shù)據(jù)的。嚴格的說,這并不是智能化,但是,這樣的處理模式比已往的人工處理的好處顯然還是很明顯的,所有的數(shù)據(jù)都由數(shù)據(jù)庫管理,可以隨時動態(tài)的提取、存儲數(shù)據(jù),并可以將修改后的數(shù)據(jù)覆蓋掉原有的數(shù)據(jù)。以計算機為工具,數(shù)據(jù)庫為核心,用計算機技術(shù)和方法,綜合應(yīng)用管理工程技術(shù),行為科學技術(shù)等現(xiàn)代化科學技術(shù),建立一個管理信息平臺,提高企業(yè)的工作效率,減輕勞動強度。最終為用戶(乘客)提供更快捷周到的服務(wù),提高客運站的服務(wù)質(zhì)量,使企業(yè)在現(xiàn)有的人、財、物條件下,獲得最佳的工作效率及社會、經(jīng)濟效益。
長途客運票務(wù)系統(tǒng)簡單易用,菜單簡潔,具有完善的操作,提示和初始化向?qū)?;查詢靈活、全面,統(tǒng)計數(shù)據(jù)清晰,簡明;有些還配圖形化顯示,一目了然。通過此票務(wù)系統(tǒng),能夠更好的協(xié)同好管理員、售票員和檢票員三者之間的工作,方便了長途客運站的管理。
本系統(tǒng)是基于C/S結(jié)構(gòu)所開發(fā)的管理軟件,實現(xiàn)了多個客戶端共用一個擁有數(shù)據(jù)庫的服務(wù)器,這樣使得車票信息可以同步更新。系統(tǒng)可以選擇三種不同的角色登錄,如管理員、售票員和檢票員。
系統(tǒng)中的售票查詢模塊可對日常售票情況進行統(tǒng)計分析,為管理員的生成車票和班次設(shè)置提供強有力的依據(jù),管理員可以根據(jù)當前情況進行調(diào)整,從而節(jié)約社會資源,同時提高了企業(yè)的經(jīng)濟效益。系統(tǒng)中的檢票查詢模塊可對班次的檢票情況進行統(tǒng)計分析,方便了管理員進行發(fā)車調(diào)度。
1.1、登錄
管理員、售票員和檢票員共用一個登錄界面,不同角色登錄后進入各自不同的操作界面。
1.2、用戶管理
選擇不同的用戶可以顯示出不同的用戶列表,并且可以添加、刪除用戶(售票員、管理員)。
1.3、票面設(shè)置
設(shè)置車票標題,可以通過復選框設(shè)置車票所要顯示的基本信息的選項,設(shè)置完成后可保存該票樣。
1.4、生成車票
管理員每天必須要生成第二天的車票,因為該系統(tǒng)發(fā)售兩日內(nèi)的車票;車票生成時可根據(jù)班次、路線或者全部來生成。
1.5、班次設(shè)置
管理員可根據(jù)實際情況來添加、刪除和修改具體班次信息。
1.6、票價調(diào)整、
管理員可根據(jù)當前情況調(diào)整票價,可單線調(diào)整,也可調(diào)整所有。
1.7、售票管理
售票員根據(jù)乘客需求,選擇班次或終點站和車票日期(只能是當天、第二天)聯(lián)合查詢所剩車票的詳細列表,雙擊具體車票可將車票添加到購票單中,付款后即可購票,并能產(chǎn)生出實體車票。
1.8、退票管理
售票員輸入退票的票號,選擇退款比例,系統(tǒng)自行計算出退款金額。
管理員登錄后,可以選擇修改密碼、人員管理、票面設(shè)置、生成車票、線路設(shè)置、班次設(shè)置、票價調(diào)整、退出系統(tǒng)等功能來進行具體操作;售票員登錄后,可以選擇修改密碼、售票、退票、售票查詢、退出系統(tǒng)等功能來進行具體操作;檢票員登錄后,可以選擇修改密碼、檢票、檢票查詢、退出系統(tǒng)等功能來進行具體操作。系統(tǒng)流程圖如圖1所示:
圖1 系統(tǒng)流程圖
本系統(tǒng)數(shù)據(jù)庫采用Microsoft公司設(shè)計的關(guān)系數(shù)據(jù)庫SQL Server2000。長途客運票務(wù)系統(tǒng)中所使用到的數(shù)據(jù)表有:管理員信息表、售票員信息表、檢票員信息表、班次信息表、線路信息表、車票信息表、售票信息表、檢票信息表、退票信息表。
2.1、管理員信息表:該數(shù)據(jù)表用于存儲管理員信息。包括管理員編號、管理員姓名、管理員密碼、管理員狀態(tài)、管理員最后登錄時間等。
2.2、售票員信息表:該數(shù)據(jù)表用于存儲售票員信息。包括售票員編號、售票員姓名、售票員密碼、售票員狀態(tài)、售票員最后登錄時間等。
2.3、檢票員信息表:該數(shù)據(jù)表用于存儲檢票員信息。包括檢票員編號、檢票員姓名、檢票員密碼、檢票員狀態(tài)、檢票員最后登錄時間等。
2.4、線路信息表:該數(shù)據(jù)表用于儲存線路信息。包括線路名稱、起點站、終點站、總里程、時長、原始票價、當前票價等。
2.5、班次信息表:該數(shù)據(jù)表用于存儲班次信息。包括班次名稱、線路名稱、發(fā)車時間、檢票口號、汽車類型、汽車牌照、座位總數(shù)、是否生成車票標識等。
2.6、車票信息表:該數(shù)據(jù)表用于儲存車票信息。包括車票編號、班次名稱、車票日期、發(fā)車時間、起點站、終點站、車票價格、座位號、檢票口號、是否售出標識、是否檢票表示等。
2.7、售票信息表:該數(shù)據(jù)表用于存儲售票信息,包括售票編號、車票編號、售票時間、售票員編號等。
2.8、檢票信息表:該數(shù)據(jù)表用于存儲檢票信息,包括檢票編號、車票編號、檢票時間、檢票員編號等。
2.9、退票信息表:該數(shù)據(jù)表用于存儲退票信息,包括退票編號、車票編號、退票時間、售票員編號等。
在系統(tǒng)的設(shè)計過程中,將系統(tǒng)設(shè)計分為服務(wù)器端和客戶端,服務(wù)器端負責接收客戶請求并完成對數(shù)據(jù)庫的操作后將操作結(jié)果返回客戶端;客戶端負責發(fā)出請求并將接收到服務(wù)器的操作結(jié)果以圖形化界面顯示出來。客戶端設(shè)計分成三大模塊:管理員模塊、售票員模塊、檢票員模塊,各大模塊完成各自所需功能。
客戶端與服務(wù)器端通過套接字來進行連接,套接字連接示意圖如圖2所示:
圖2 套接字連接示意圖
3.1、建立數(shù)據(jù)庫連接
編寫一個類DBPool來實現(xiàn)數(shù)據(jù)庫連接,這里采用連接池的方式來實現(xiàn),用到該連接池須引入c3p0-0.9.0.4.jar包和jtds-1.2.2.jar包。實現(xiàn)代碼如下:
public class DBPool{
private static DBPool dbPool;
private ComboPooledDataSource dataSource;
static{
dbPool = new DBPool();
}
public DBPool(){
try{
dataSource = new ComboPooledDataSource();
dataSource.setUser("sa"); //訪問數(shù)據(jù)用戶名
dataSource.setPassword("");//訪問數(shù)據(jù)庫密碼
dataSource.setJdbcUrl("jdbc:jtds:sqlserver://localhost/Coach"); //數(shù)據(jù)庫所在位置和數(shù)據(jù)庫名字
dataSource.setDriverClass("net.sourceforge.jtds.jdbc.Driver"); //驅(qū)動器名稱
dataSource.setInitialPoolSize(2);
//初始化連接數(shù)
dataSource.setMinPoolSize(1);
//最小連接數(shù)
dataSource.setMaxPoolSize(1000);
//最大連接數(shù)
dataSource.setMaxStatements(5000);
//連接到數(shù)據(jù)庫最多SQL語句數(shù)
dataSource.setMaxIdleTime(60);
}catch(PropertyVetoException e){
throw new RuntimeException(e);
}
}
public final static DBPool getInstance(){
return dbPool;
}
public final synchronized
Connection getConnection(){
//關(guān)鍵字實現(xiàn)同步
try {
return dataSource.getConnection();
}catch(SQLException e){
throw new RuntimeException( "無法從數(shù)據(jù)源獲取連接 ",e);
}
}
}
3.2、售票子模塊
3.2.1、功能介紹
售票員登錄后,通過本操作界面可以完成售票工作。售票員輸入乘客所需班次名稱或到站(終點站)名稱查詢出所有剩余車票,根據(jù)乘客所需票數(shù)將車票添加到售票單中,結(jié)帳后完成售票并打印出實體車票。界面如圖3所示:
圖3 售票界面
3.2.2、設(shè)計過程
a)可視化編程設(shè)計好售票界面,為各按鈕添加ActionEvent監(jiān)聽事件,分別為兩個JTable添加鼠標監(jiān)聽事件,這里事件監(jiān)聽分為單擊事件和雙擊事件兩種類型。為JSpinner添加監(jiān)聽。
b)兩個“查詢”按鈕默認設(shè)置無效,只有選擇日期后,通過監(jiān)聽該JSpinner對象得到所需購票日期后才可以進行剩余車票查詢,得到剩余車票列表。選擇車票日期用JSpinner來實現(xiàn),通過創(chuàng)建SpinnerDateModel時的參數(shù)設(shè)置來限定日期只能選擇當天和第二天,這樣就限制了所售車票的日期。并為其添加監(jiān)聽事件,以便獲得JSpinner中的時間對象,通過字符轉(zhuǎn)換后截取相應(yīng)字符串即可獲得日期。
c)鼠標選中剩余車票列表中的某數(shù)據(jù)行后,通過鼠標雙擊事件監(jiān)聽就可以將該車票添加到售票單列表中,不能添加重復的車票,進行此不合法操作彈出對話框進行警告。限定一次性售票張數(shù)不能超過5張,當售票單中數(shù)據(jù)行已為5張時,雙擊剩余車票中的某數(shù)據(jù)行時,彈出對話框提示已到售票上限。根據(jù)售票單中的數(shù)據(jù)項,系統(tǒng)自動計算所有已購車票價格總和,并將其顯示在應(yīng)收金額的JTextField中。監(jiān)聽鼠標雙擊事件代碼如下:
if(e.getClickCount() == 2) { //鼠標雙擊事件
String flag = "Added";
//設(shè)置標志位
mousePoint = e.getPoint(); //獲得鼠標位置
currentRow = table.rowAtPoint(mousePoint);
//獲得當期鼠標所在行
DefaultTableModel tableModel_1 =(DefaultTableModel)
table_1.getModel(); //創(chuàng)建售票單表格
Object[]obj_1 = new Object[3]; //創(chuàng)建對象數(shù)組,利用該對象創(chuàng)建售票單表格
.if(table_1.getRowCount()>4) {
//限定一次購票不超過5張
JOptionPane.showMessageDialog(this, "一次購票不能超過 5 張!","長途客運票務(wù)系統(tǒng)",
JOptionPane.WARNING_MESSAGE);
} else {
if(table_1.getRowCount() == 0) { //購票單中沒有車票
tableModel_1.addRow(obj_1); //將車票添加到購票單中
} else {
button_3.setEnabled(true);
for(int =0;i flag = "Added"; //該車票已添加 break; } else { flag = "NoAdd"; //該車票未添加 } } if(flag.equals("Added")) { JOptionPane.showMessageDialog(this, "此票已添加到購票單中,不能重復購票!", "長途客運票務(wù)系統(tǒng)", JOptionPane.WARNING_MESSAGE); } else if(flag.equals("NoAdd")) { tableModel_1.addRow(obj_1); } //將車票添加到購票單中 } } textField_3.setText(""+titprice*table_1.getRowCount()); //計算出所購票的總價格 } 本文介紹了使用Java和SQL Sever2000設(shè)計一個票務(wù)管理系統(tǒng)的過程,系統(tǒng)實現(xiàn)了票務(wù)管理系統(tǒng)中售票管理、票據(jù)生成等重要功能,具有良好的用戶界面。本系統(tǒng)可以應(yīng)用于長途客運票務(wù)管理的領(lǐng)域。 [1]耿祥義等.Java2實用教程.北京:清華大學出版社,2006. [2]蘇年樂等.Java+SQL Server項目開發(fā)實踐.北京:中國鐵道版社,2006. [3]王津濤等.Eclipse SWT/JFace開發(fā)實戰(zhàn)精解.北京:人民郵電出版社,2007. [4]王珊等.數(shù)據(jù)庫系統(tǒng)概論.北京:高等教育出版社,2006. [5]周緒等.SQL Server2000 中文版.北京:清華大學出版社,2002. [6]孫衛(wèi)琴.Java網(wǎng)絡(luò)編程精解.北京:電子工業(yè)出版社,2007. [7]林智揚等.深入淺出Java Swing 程序設(shè)計.北京:中國鐵道出版社,2005. [8]石志國等.JSP應(yīng)用教程.北京:清華大學出版社、北京交通大學出版社,2004.4、結(jié)束語