陳湘瑾 祖子帥 于孔亮 修 昂
(山東科技大學(xué),山東 濟(jì)南250000)
隨著網(wǎng)絡(luò)技術(shù)的持續(xù)性發(fā)展,同時(shí)為了適應(yīng)現(xiàn)今社會(huì)的變革需要,設(shè)計(jì)一個(gè)線上火車售票系統(tǒng)來(lái)方便人們購(gòu)買火車票,節(jié)約時(shí)間及其他成本顯得極其重要。該基于數(shù)據(jù)結(jié)構(gòu)和Java 的火車售票系統(tǒng)操作方便,用戶登錄該系統(tǒng)后可實(shí)現(xiàn)線上查票、購(gòu)票、退票等目的。
本系統(tǒng)主要針對(duì)具有線上購(gòu)票需求的用戶而設(shè)定,購(gòu)票人員基本信息包括:姓名、性別、身份證號(hào)碼、職業(yè);車票信息包括:車次、車廂、出發(fā)地點(diǎn)、到達(dá)地點(diǎn)、發(fā)車時(shí)間、票價(jià)等。系統(tǒng)采用順序循環(huán)優(yōu)先級(jí)隊(duì)列實(shí)現(xiàn)如下功能:(1)車票基本信息錄入。(2)售票。(3)退票。(4)查詢輸出。(5)當(dāng)某班次車票售空,允許乘客排隊(duì)等待退票,排隊(duì)乘客帶有優(yōu)先級(jí)(如:現(xiàn)役軍人>大學(xué)生>普通乘客)。
此部分設(shè)計(jì)可以彈出用戶名與密碼對(duì)話框,若用戶輸入的信息匹配都正確即可進(jìn)入主界面,對(duì)界面標(biāo)簽、文本框等組件進(jìn)行屬性(位置,大小)設(shè)計(jì)。為登錄按鈕添加事件監(jiān)聽器,主要是通過(guò)比較方法equals()將用戶輸入的賬戶及密碼與原有固定的正確文本信息進(jìn)行比對(duì)實(shí)現(xiàn)登錄功能。
此界面通過(guò)Swing 開發(fā),添加各種組件,通過(guò)二維數(shù)組的創(chuàng)建實(shí)現(xiàn)提取車票信息、全局?jǐn)?shù)據(jù)的提取和存儲(chǔ),對(duì)主界面按鈕添加監(jiān)聽,實(shí)現(xiàn)分別傳入一個(gè)車次參數(shù)并跳轉(zhuǎn)到其他各界面,通過(guò)比較實(shí)際改變的車票列表(文件流里文件的信息)和彈出界面顯示還未改變的車位,聲明改變了某個(gè)位置的值后再次賦值并顯示改變后的數(shù)據(jù)信息,以此實(shí)現(xiàn)刷新功能并最終顯示修改后車位。
購(gòu)票用戶鎖定車次進(jìn)行購(gòu)票而進(jìn)行個(gè)人信息輸入后,比較判斷用戶輸入信息判斷是否為空,只有都不為空時(shí)才彈出“進(jìn)入買票隊(duì)列!”窗口,否則彈出“請(qǐng)輸入完整信息!”窗口。然后購(gòu)買成功的用戶的數(shù)據(jù)被獲取并被添加到Main 中全局?jǐn)?shù)據(jù)里,用戶列表List 中添加數(shù)據(jù)。最后實(shí)現(xiàn)頁(yè)面交互:將買票成功的用戶的信息加入到查看列表里,購(gòu)買狀態(tài)默認(rèn)為0。
此界面實(shí)現(xiàn)查看進(jìn)入買票隊(duì)列中的用戶的等待狀態(tài)等信息。通過(guò)循環(huán)、判斷語(yǔ)句實(shí)現(xiàn)比對(duì)和人數(shù)累加的算法,將選中車次和選中此車次的查看列表比對(duì),查看有多少人選中該車次(得h),創(chuàng)建h 行3 列的數(shù)組顯示查看列表中的數(shù)據(jù)信息,再通過(guò)二維數(shù)組、讀取文件流比對(duì)存儲(chǔ)在文件中的車次和選中車次是否相等,若相等輸出文件中信息到查看列表框。通過(guò)row 獲取選中一行數(shù)據(jù)信息,若沒(méi)選中則row=-1 顯示“沒(méi)有選擇人!”。點(diǎn)擊退票按鈕時(shí),通過(guò)比較判斷,若數(shù)組w【row】【1】.equals(“1”)則判斷該退票用戶曾購(gòu)票成功并可退票;找到車次后把對(duì)應(yīng)車位位置數(shù)加1,表示有空余位可搶票。將原存儲(chǔ)文件中的用戶姓名和選中列表中的用戶姓名比對(duì),找到退票人名字后進(jìn)行刪除操作。即Main 中buylist 里移除那一行數(shù)據(jù),后刪除選中的那一行數(shù)據(jù)。
此界面顯示當(dāng)前車次還未搶到票的h 個(gè)用戶的信息,通過(guò)h 行4 列的二維數(shù)組將上述用戶信息放入優(yōu)先級(jí)隊(duì)列中存儲(chǔ)起來(lái),并將他們?nèi)腙?duì)列,現(xiàn)役軍人優(yōu)先級(jí)設(shè)為1,學(xué)生優(yōu)先級(jí)設(shè)為2,普通乘客優(yōu)先級(jí)設(shè)為3,以此為后面比較優(yōu)先級(jí)并先出隊(duì)最高優(yōu)先級(jí)做準(zhǔn)備。若點(diǎn)擊“搶車票”按鈕則實(shí)行以下操作:若搶票成功則將ticketlist 中的車位數(shù)減一,后SeqPQueue 優(yōu)先級(jí)隊(duì)列實(shí)現(xiàn)獲取優(yōu)先級(jí)最高的人,找到購(gòu)票成功的人并將其數(shù)據(jù)從buylist 中刪除,然后新建一行車次,姓名和等待狀態(tài)為1 的數(shù)據(jù)。若getSeat()<0 則彈出“沒(méi)有車位!”提示框。
將等待搶票隊(duì)列列表中(即未搶票且無(wú)車位)的用戶通過(guò)append()方法入隊(duì),由于是順序優(yōu)先級(jí)隊(duì)列,隊(duì)列入隊(duì)都是從隊(duì)尾插入(入隊(duì))此處無(wú)需考慮假溢出問(wèn)題。隊(duì)尾rear=rear+1 即可。對(duì)于出隊(duì)要考慮優(yōu)先級(jí)問(wèn)題現(xiàn)役軍人(優(yōu)先級(jí)為1)先出隊(duì),其次是學(xué)生(優(yōu)先級(jí)為2),最后是普通人。利用getPriority()方法得到的1、2、3 數(shù)字進(jìn)行比較,數(shù)越小,優(yōu)先級(jí)就越大。找到優(yōu)先級(jí)最高元素的位置并出隊(duì)后,這個(gè)元素后面的元素下標(biāo)都要減1,補(bǔ)齊空缺。最后返回輸出優(yōu)先級(jí)最大的用戶的信息(即該用戶搶票成功)。
輸入用戶:“admin”及密碼:“123”即可登入該火車售票系統(tǒng)。登錄后跳轉(zhuǎn)到車票信息顯示界面,如圖1。
圖1 車票信息顯示界面
用戶選中圖1 中顯示的任意一行車次數(shù)據(jù)并點(diǎn)擊“購(gòu)買”按鈕,即可出現(xiàn)購(gòu)票用戶信息為鎖定該車次進(jìn)行購(gòu)票而進(jìn)行的個(gè)人信息輸入錄入界面,如圖2 輸入的名為“小芳”的用戶相關(guān)信息。
圖2 購(gòu)票用戶信息錄入界面
購(gòu)票之后點(diǎn)擊主界面并點(diǎn)擊“查看”按鈕則出現(xiàn)該車次用戶購(gòu)票狀態(tài):“1”表示搶票成功、“0”表示還未搶票(在隊(duì)列中等待搶票的用戶)。如圖3。
圖3 查看及退票
用戶點(diǎn)擊主界面“隊(duì)列”按鈕查看在等待購(gòu)票隊(duì)列中的個(gè)人信息如圖4,點(diǎn)擊“搶車票后”若該車次還有空位則顯示“購(gòu)票成功”,反之則“沒(méi)有車位”。
圖4 等待搶票隊(duì)列
該火車售票系統(tǒng)基于Java 編程語(yǔ)言,依據(jù)圖形用戶界面設(shè)計(jì)及面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念,該系統(tǒng)可滿足用戶實(shí)現(xiàn)一體化線上查票、購(gòu)票、退票等,使購(gòu)票管理體系更加智能化、高效化,為購(gòu)票者帶來(lái)更大的便利,極大提高了用戶的體驗(yàn)感。