一、軟件結構特點
1.1設計模式
在工程實踐中,我們選用MVC架構座位本次設計的架構。MVC中M、V和C所代表的含義如下:
- Model(模型)代表一個存取數據的對象及其數據模型。在MVC架構下,模型用來封裝核心數據和功能,它獨立於特定的輸出表示和輸入行為,是執行某些任務的代碼,至於這些任務以什么形式顯示給用戶,並不是模型所關注的問題。模型只有純粹的功能性接口,也就是一系列的公開方法,這些方法有的是取值方法,讓系統其它部分可以得到模型的內部狀態,有的則是寫入更新數據的方法,允許系統的其它部分修改模型的內部狀態。
- View(視圖)代表模型包含的數據的表達方式,一般表達為可視化的界面接口。在MVC架構下,視圖用來向用戶顯示信息,它獲得來自模型的數據,決定模型以什么樣的方式展示給用戶。同一個模型可以對應於多個視圖,這樣對於視圖而言,模型就是可重用的代碼。一般來說,模型內部必須保留所有對應視圖的相關信息,以便在模型的狀態發生改變時,可以通知所有的視圖進行更新。
- Controller(控制器)作用於模型和視圖上,控制數據流向模型對象,並在數據變化時更新視圖。控制器可以使視圖與模型分離開解耦合。在MVC架構下,控制器是和視圖聯合使用的,它捕捉鼠標移動、鼠標點擊和鍵盤輸入等事件,將其轉化成服務請求,然后再傳給模型或者視圖。軟件的用戶是通過控制器來與系統交互的,他通過控制器來操縱模型,從而向模型傳遞數據,改變模型的狀態,並最后導致視圖的更新。
在售票系統中,Model層中存儲着用戶的個人信息,訂票信息,列車調度信息和出售信息等等;View層中是售票系統的前端部分;Controller層中控制着車票的售票管理等信息。在這種架構下,前后端可以很好地分離出來,通過控制器鏈接模型和視圖,讓模型層能專注於處理數據的存儲,視圖層能專注於處理前端方面的業務,讓控制器專注於處理數據,並通過制定的方式傳輸到視圖。
1.2軟件架構風格與策略
在工程實踐中,我們選用B/S風格,即瀏覽器/服務器模式。

B/S的優點如下:
1)客戶端無需安裝,有Web瀏覽器即可。
2)BS架構可以直接放在廣域網上,通過一定的權限控制實現多客戶訪問的目的,交互性較強。
3)BS架構無需升級多個客戶端,升級服務器即可。
二、接口設計
1、注冊接口:
{
"username":"",
"password":""
}
{
"code":"", // 消息代碼
"msg": "", // 消息 說明是否注冊成功
"data":{} // 這里是無
}
2、登錄接口:
{
"username":"",
"password":""
}
返回:
{
"code":"", // 消息代碼
"msg": "", // 消息
"data":{
"token":""
}
}
3、查詢余票請求:
{
"startCity":"", // 城市名或站名
"endCity":"",
"date":"",
"type":"" // 0 全類, 1高鐵動車票
}
返回:
{
"code":"",
"msg":"",
"data":{
"list": [
{
"train_number":"", // 列次 字符串
"start_station":"",
"end_station":"",
"start_time":"", // 出發時間
"arrival_time":"", // 達到時間
"start_station_type":"", //起始站類型, 是否始發站還是過站, 0, 1
"end_station_type":"", //到達站類型, 是否是過站還是終點站, 1,2
"train_type":"", // 列車類型,
"business_seats_number": , // 商務座余數
"first_seats_number": , // 一等座
"second_seats_number": , // 二等座
"no_seats_number": , //無座
"hard_seats_number": , // 硬座數量
"hard_berth_number": ,// 硬卧
"soft_berth_number": ,// 軟卧
"senior_soft_berth_number": , // 高軟
}
]
}
}
4、購票請求:
{
"username":"",//用戶名
"token":"",//驗證信息
"date":"",//發車日期
"train_number":"",//車次
"start_station":"",//上車站
"end_station":"",//下車站
"passengers":{//乘客數據
"passenger_seq":"",//乘客序號
"seat_class":"",//座位等級
"seat_type":""//座位類型
}
}
返回:
{
"code":"",//返回代碼
"msg":"",//返回的消息
"data":{//返回的數據
"order_outer_id":"",//訂單外部
"train_number":"",//車次號
"start_station":"",//上車站
"start_time":"",//列車在上車站發出時間
"end_station":"",//下車站
"arrival_time":"",//列車到達下車站時間
"duration":"",//中間用時
"start_time":"",//發車日期
"total_money":"",//總金額
"tickets":{//乘客的票據信息
"passenger_name":"",//乘車人姓名
"passenger_id":"",//乘車人身份證號
"carriage_number":"",//車廂號
"seat":"",//座位號
"money":"",//票價
}
}
}
三、軟件系統概念原型的各類視圖
1、分解視圖

2、執行視圖

3、用例視圖
用戶用例視圖:

管理員用例視圖:

4、UML圖

5、實現視圖
我們的項目根據模塊進行分包,最終的實現視圖如下:

四、數據庫設計
1、用戶表:
| 變量名稱 | 變量類型 | 備注 |
| id | varchar | 賬戶名 |
| password | varchar | 密碼 |
| name | varchar | 姓名 |
| nickname | varchar | 昵稱 |
| credential_type | varchar | 證件類型 |
| credential_number | varchar | 證件號 |
| telephone | varchar | 手機號 |
| member | varchar | 會員信息 |
2、車次表:
| 變量名稱 | 變量類型 | 備注 |
| train_id | int | 車次編號 |
| train_number | varchar | 車次號 |
| train_identification | varchar | 列車編號 |
| begin_place | varchar | 起點 |
| end_place | varchar | 終點 |
| begin_time | datetime | 開車時間 |
| end_time | datetime | 到達時間 |
3、列車表:
| 變量名稱 | 變量類型 | 備注 |
| train_identification | varchar | 列車編號 |
| train_type | varchar | 列車類型 |
| carriage_sum | varchar | 車廂數量 |
| carriage_type | varchar | 列車狀態 |
4、車廂表:
| 變量名稱 | 變量類型 | 備注 |
| carriage_id | varchar | 車廂編號 |
| train_identification | varchar | 列車編號 |
| carriage_number | int | 車廂號 |
| carriage_type | varchar | 車廂類型 |
| seat_number | int | 車廂座位數 |
| seat_price | double | 車廂座位價格系數 |
5、座位表:
| 變量名稱 | 變量類型 | 備注 |
| seat_id | varchar | 座位編號 |
| carriage_id | varchar | 車廂編號 |
| train_identification | varchar | 列車編號 |
| seat_number | varchar | 座位號 |
| seat_use | varchar | 座位使用情況 |
6、站點表:
| 變量名稱 | 變量類型 | 備注 |
| station_id | varchar | 站點編號 |
| station_name | varchar | 站點名稱 |
| train_id | varchar | 車次編號 |
| begin_time | datetime | 列車到站時間 |
| end_time | datetime | 列車出發時間 |
7、訂單表:
| 變量名稱 | 變量類型 | 備注 |
| order_id | varchar | 訂單編號 |
| order_time | varchar | 訂單時間 |
| order_person | varchar | 訂單聯系人 |
| seat_id | varchar | 訂單座位號 |
| order_status | varchar | 訂單狀態 |
五、運行環境和技術選型
開發語言:Golang
后端框架:Gin
數據庫:Mysql
緩存技術:Redis
部署緩解:Linux+Docker
六、系統概念原型核心工作機制
用戶可以通過系統注冊自己的賬戶,然后登錄自己的賬戶,完善個人信息。在系統首頁選擇出發城市、到達城市和日期,然后在篩選出的車次中選擇一個具體的車次,選擇座位,然后系統生成訂單,用戶支付訂單。用戶可以通過訂單頁面選擇改簽或退票。
管理員可以登錄系統,增加或刪除某天的車次、某種車型,還可以增加和刪除某個具體的站點及站點信息。
