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