◆任曉萌 李海濤 王妍肖 及京京 陳 晨 王 波
?
基于微信平臺的反饋式訂票系統
◆任曉萌 李海濤 王妍肖 及京京 陳 晨 王 波
(華北理工大學建筑工程學院 河北 063000)
系統針對郊區學校與市中心區間的班車運行情況,在B/S架設下,使用Python語言,采用MTV模型組織下的Django框架,以Nginx+Uwsgi+Django組合作為后臺服務器構架,實現了用戶的登錄、查詢車次、預訂車票、進行支付、加車反饋、退票等功能,提供了一種可有效緩解班車運行壓力的新型的購票系統,開發了基于微信平臺的反饋式訂票系統,有效解決了學校師生候車時間長的問題。
微信;反饋式;訂票;系統
隨著網絡的快速發展,網上訂票作為一種簡便快捷的購票手段,受到了越來越多用戶的認可。目前華北理工大學已順利整體搬遷至曹妃甸,學校開通了校區——唐山西站的大巴以便利師生的出行。但學校師生仍面臨等車時間過長,等車隊伍過長的現狀。為解決上述問題,開發了基于微信平臺的反饋式訂票系統,該系統基于用戶提供的出行時間段,反饋給用戶車次、乘車時間等具體信息,有效調整班車班次,合理安排班車發車時間和數量,提高師生出行效率。
反饋式訂票系統包括前臺用戶頁面、后臺管理頁面兩個方面。
前臺用戶頁面包括以下5個模塊:
(1)查詢功能模塊:用戶查詢班次,發車時間,車票記錄等基本信息;
(2)訂票功能模塊:用戶按照自身需求用于預訂車票,進行支付并更新數據庫信息;
(3)退票功能模塊:用戶按照自身需求用于退票和返款處理并更新數據庫信息;
(4)申請加車模塊:如果已有班次座位已滿,用戶可以根據自身情況進行申請加車;
(5)個人信息模塊:用戶可以查看本人的賬號信息、預訂信息以及加車信息。用戶能夠通過輸入出發地、目的地、發車時間,在前端訂票頁面查詢并根據自身需要選擇班次。若班次座位已滿,則用戶可以通過加車選項來申請具體時間的班次來進行加車預訂。微信支付成功以后,系統為用戶生成訂單信息,用戶可以在個人中心頁面查看他們的訂票記錄,且可以向系統發出退款請求。系統將針對詳細狀況做出相應的退款處理。
后臺管理頁面包括以下4個模塊:
(1)班次信息管理:對于班次信息,系統設計了增減編輯和檢查班次滿座率等管理工作;
(2)乘客信息管理:統計并記錄用戶的預訂信息以及申請加車信息,針對退票用戶及時地進行返款處理,對數據庫信息實時更新;
(3)加車信息管理:對乘客申請加車情況重新添加班次;
(4)財務信息管理:能夠記錄唐曹客運的周、月、年運營收入狀況。管理員可以在后臺管理用戶、對班車的相關信息進行錄入和修改、按照乘客申請加車的具體情況重新添加班次并合理調度車輛安排發車。
微信訂票系統主要由用戶模塊和管理員模塊構成:
(1)用戶模塊有查詢、訂票、退票、申請加車、個人信息5個功能模塊,如圖1所示。其中,用戶可以通過“查詢”功能,查看車票預訂詳情。若無滿意的車票顯示,可以在此界面重新輸入出發地、到達地以及出發日期,并再次進行查詢。也可以點擊“加車”按鈕進行加車,對班次不足的車次進行加車反饋。通過系統的“預訂”功能可以檢查車票信息。
(2)管理員模塊有班次、乘客、加車、財務4個信息模塊,管理員的站點管理界面可進行具體車輛信息參數的更改,以及增加或減少具體日期的車次,如圖2所示。

圖1 用戶模塊界面圖
圖2 管理員模塊界面圖
微信訂票系統實體屬性:
(1)用戶信息實體屬性包含ID、登錄名和密碼;
(2)班次信息實體屬性包含始發地、目的地、發車時間、到達時間、和價格;
(3)加車信息實體屬性包含登錄名、發車日期和車次;
(4)訂單信息實體屬性包含登錄名、班次、票數和支付狀態;
(5)財務信息實體屬性包含周收入、月收入、年收入和訂單列表;
(6)管理員信息實體屬性包含ID、登錄名和密碼。
在User類的使用中,對象創建完成后Django自動生成表auth_user,乘客信息表繼承User類,并繼承id,username,password字段。通過在班次信息表(booksystem_bus)和乘客信息表(auth_user)之間增加一張新表booksystem_bus_user,以及在加車信息表(choice_choice)和乘客信息表(auth_user)之間增加一張新表choice_choice_user,由此實現多對多關系。
考慮到本系統Nginx對靜態文件的處理能力,設計構建了Nginx+Uwsgi+Django的服務器用來動態分離和反向代理。HTTP的請求由Nginx做解包與分析,其中,Nginx對靜態文件進行靜態的處理返回。Nginx會將動態文件的請求輸出給Uwsgi,調用Django的文件函數后將數據傳送回Uwsgi,將數據輸出到Nginx,最終輸出到客戶端。
微信服務器采用Django的服務器構架,使用wechatpy的SDK進行不同API的接口接入。在微信項目APP下,引入check_signature Invalid Signature Exception、parse_message等函數,解析XML的消息,驗證接入微信請求的有效性;引入WeChatMenu自定義下的view,引導用戶進入客戶端;在項目APP下增加wechatpay下的WeChatJSAPI、WeChatOrder、WeChatRefund,統一下單接口,公眾號網頁JS支付接口以及退款接口,進行微信支付的配置。用戶發送支付請求,系統會通過Ajax輸送數據,后臺把前臺數據合成XML完成統一下單接口的調用。前臺提取prepay_id通過微信瀏覽器內置JS調用JSAPI支付。在退款接口中,通過雙向證書的驗證,調用WeChatRefundAPI,即可實現申請退款功能。
MTV模式的主要特點體現在全部組件的松耦合形式。Django驅動的Web運用都有精確目標并能獨立修改。當重新命名數據表時,管理員的任務可簡化為只更改模型。
該反饋式訂票系統設計采用了Python2.7語言,利用Django1.8.3框架,其自帶的SQLite作為數據庫,HTML、CSS與JavaScript作為Web前臺設計,以VMware工作站虛擬機中的Ubuntu作為開發環境,為開發者在Windows系統中順利運行Linux Ubuntu系統提供了必要條件。
(1)班次信息代碼分析:班次信息屬于Django模型,繼承了models.Model,Django默認的后臺管理界面使進度管理得以實現。
(2)乘客信息代碼分析:乘客繼承了Django.contrib.認證。除了auth_user需要輸入的對象,其他的默認字段不需要考慮。
(3)URL映射代碼分析:當用戶在訂票系統中發起一個網頁的請求時,Django控制器會接管通過url.py文件來尋找相應的視圖,然后返回HTML響應或如果沒有找到則返回404未找到錯誤,其中最重要的是“相符”元組,這是URL和視圖之間映射的定義。
(4)登錄判定代碼分析:當管理員和普通用戶共享登錄窗口時,可以在顯示登錄者信息前確定登錄者的身份并顯示相應的內容。
(5)訂票流程代碼分析:在整個訂票的過程中,第一要明確用戶是否登錄,假如未登錄,就加載登錄頁面;假如用戶已經登錄了,則將其確定的班次傳入bus.id;第二判斷,如果用戶已經預訂了該班次,則沖突信息將被反饋,否則,預訂成功并顯示更新后的預訂成功界面。
(6)退票信息代碼分析:當用戶退款時,后臺需要更新數據庫,更新飛行(能力,book_sum,收入)領域,并在booksystem_bus_user刪除順序表。
(7)后臺增加加車信息代碼分析:后臺管理系統具有對加車信息增減修改的功能,具體操作如圖3,可添加加車日期并選擇一個或多個該日期的加車時間點,為前臺提供了供用戶進行反饋操作的加車信息選項。

圖3 增加加車信息代碼
系統設計應用了Django框架,以Nginx+Uwsgi+Django組合作為后臺服務器構架,使用了Python語言,實現了班車查詢、購票、退票以及加車等功能,可以用于緩解學校班車運行壓力,方便師生出行,且具有可自助管理后臺、方便運行與維護和運行穩定的優點,對于新區開發初期的通勤班車運行管理有一定的參考和應用價值。
[1]馬強,肖俊生.大學校車調度系統模型研究[J].科技風, 2012.
[2]王冉陽.基于Django和Python的Web開發[J].電腦編程技巧與維護,2009.
[3]李舜,王輝.基于WAP的手機上網訂票系統的設計與實現[J].計算機工程與設計,2008.
[4]黃耿生.利用虛擬機搭建Linux操作系統的實踐環境[J].福建電腦,2013.
[5]梁永恩,萬世明,翟敏換.SQLite數據庫在嵌入式系統中的應用研究[J].現代計算機(專業版),2015.
[6]邱鵬,萬懷宇,林友芳等.基于用戶行為分析的在線訂票系統緩存優化策略研究[J].計算機與現代化,2017.
[7]商恩福.網上訂票系統分析與設計[J].電腦編程技巧與維護,2009.
[8]張霞,張志強,呂曉艷等.鐵路學生團體票訂票系統的設計與實現[J].鐵路計算機應用,2013.
華北理工大學2017大學生創新訓練項目“基于微信平臺的反饋式訂票系統”,項目編號:X2017143;華北理工大學校內科技項目,項目編號:25398899。