一、項目介紹
項目是模仿實現12306的部分功能,主要是售票系統的實現。這個系統的面向兩類人,一是用戶,二是系統管理員,其中系統設計主體部分是車次車票等信息的存儲方式以及用戶與系統的交互對后台數據的影響。車次信息與車票信息以一種什么樣的形式相互關聯尤其重要,用戶做出自己的行為后(購買車票,查看車票訂單信息,退票,改簽等)怎么影響着后台數據是本次博客討論的重點。
二、系統架構
本系統的設計架構是MVC架構,即Model-View-Controller(模型-視圖-控制器),其中Model代表一個存儲數據的對象及數據模型;View代表模型包含的數據的表達方式,一般表達為可視化的界面接口;Controller作用於模型和視圖之上,控制數據流向模型對象,並在數據變化時更新視圖。控制器可以使視圖和模型分離開解耦合。
在本項目中,Model保存一些數據模型,如用戶的信息,用戶的訂單信息,系統中的車次信息,車次的對應車票信息,系統中的總的訂單信息等等;控Controller則處理用戶做出行為后后端數據信息的變更,還有前端數據信息可視化的變更;View則是軟解界面的可視化,主要是面向用戶設計的UI。可以看到這種架構的一個顯著的好處就是前后端分離,數據模型和視圖的關聯是要通過控制器來進行,模型只要關心怎么讓別人取值,怎么根據控制器的信息修改內部狀態,不用關系它的數據怎么展現出來;視圖也不用受限於數據模型,而且同一個數據模型可以對應多個視圖,比如說用戶的歷史訂單信息里會顯示所有的訂單,而當前訂單信息里只顯示當前生效的車票信息的等等。
三、接口API
接口名稱 | 接口功能 | 傳入參數 | 返回信息 |
用戶注冊 | 為新用戶注冊一個賬號 | 用戶名,密碼 | 注冊成功或者失敗的信息 |
用戶登錄 | 使已有賬號的用戶登錄系統 | 賬號,密碼,驗證碼 | 登錄是否成功 |
用戶個人信息 | 用戶查看個人信息 | 無 | 用戶個人信息的數據結構指針 |
修改個人信息 | 修改個人信息 | 修改字段, 修改信息 | 修改是否成功 |
查看訂單 | 用戶查看自己的訂票信息 | 無 | 用戶訂單信息數據結構指針 |
查看車次信息 | 查看車次信息 | 出發站,終點站 | 車次信息數據結構指針 |
查看車票信息 | 查看車票的相關信息 | 車次信息數據結構指針 | 車票信息數據結構指針 |
訂車票 | 用戶購買車票 | 車票信息數據結構 | 購買是否成功的信息 |
退票 | 用戶退票 | 訂單信息數據結構指針 | 是否退票成功 |
改簽 | 用戶改簽 | 訂單信息數據結構指針 | 是否改簽成功 |
四、軟件系統概念原型的不同視圖
1. 分解視圖
分解是構建軟件架構模型的關鍵步驟,分解視圖也是描述軟件架構模型的關鍵視圖,一般分解視圖呈現為較為明晰的分解結構(breakdown structure)特點。分解視圖用軟件模塊勾划出系統結構,往往會通過不同抽象層級的軟件模塊形成層次化的結構。
2. 執行視圖
執行視圖展示了系統運行時的時序結構特點,比如流程圖、時序圖等。執行視圖中的每一個執行實體,一般稱為組件(Component),都是不同於其他組件的執行實體。如果有相同或相似的執行實體那么就把它們合並成一個。執行實體可以最終分解到軟件的基本元素和軟件的基本結構,因而與軟件代碼具有比較直接的映射關系。在設計與實現過程中,我們一般將執行視圖轉換為偽代碼之后,再進一步轉換為實現代碼。
從用戶使用的角度
從軟件系統模塊執行的角度:實線表示用戶在ui界面執行了某個操作后這個操作在軟件系統中的影響的傳遞過程, 虛線表示軟件系統對用戶操作的響應的過程。
3. 工作分配視圖
工作分配視圖將系統分解成可獨立完成的工作任務,以便分配給各項目團隊和成員。工作分配視圖有利於跟蹤不同項目團隊和成員的工作任務的進度,也有利於在個項目團隊和成員之間合理地分配和調整項目資源,甚至在項目計划階段工作分配視圖對於進度規划、項目評估和經費預算都能起到有益的作用。
五、數據庫設計
用戶賬戶表
字段 | 類型 | 注釋 |
id | unsigned int | 主鍵 |
username | varchar | 用戶名稱 |
password | varchar | 口令 |
id_0 | varchar | 身份證號 |
phone | varchar | 手機號 |
state | unsigned int | 賬號狀態 |
createtime | timestamp | 創建時間 |
deletetime | timestamp | 刪除賬戶時間 |
添加乘客表(聯系人表)
字段 | 類型 | 注釋 |
id | unsigned int | 乘客id |
id_0 | varchar | 身份證號 |
phone | varchar | 手機號 |
user_id | unsigned int | 所屬用戶 |
state | unsigned int | 狀態 |
訂單表
字段 | 類型 | 注釋 |
order_id | unsigned int | 訂單id(主鍵) |
id | unsigned int | 聯系人id(外鍵) |
outer_id | unsigned int | 對外訂單號(如果用支付寶支付,會生成支付寶訂單號) |
cost | varchar | 金額 |
ticket_id | unsigned int | 車票表id |
車站表
字段 | 類型 | 注釋 |
station | unsigned int | 車站id |
name | varchar | 車站名稱 |
city | varchar | 城市名稱 |
列車表
字段 | 類型 | 注釋 |
train_id | unsigned int | 列車id |
start_station | unsigned int | 出發車站id |
end_station | unsigned int | 目的車站id |
train_type | unsigned int | 列車類型id |
列車類型表
字段 | 類型 | 注釋 |
train_type_id | unsigned int | 列車類型id |
code | char | 類型字母 |
seat_num | unsigned int | 座位數 |
車票表
字段 | 類型 | 注釋 |
ticket_id | unsigned int | 車票id |
user_id | unsigned int | 購買人 |
start_station | unsigned int | 出發站 |
end_station | unsigned int | 目的站 |
start_time | timestamp | 出發時間 |
train_id | unsigned int | 列車id |
passenger_id | unsigned int | 乘客id |
state | unsigned int | 狀態 |
六、源代碼的目錄文件結構
|---src |---main |---model 數據庫中的數據模型 |---service 業務邏輯 |---util 主要用於處理對車票的操作 |---view 視圖 |---resources 配置文件 |---test 測試文件 |---java |---resources
七、項目概念原型的核心工作機制
用戶可以不登陸進入系統,也可以注冊后登錄系統,不登錄就不顯示個人信息。
可以在主頁面根據首末地點查詢車票,或者點擊車次匯總信息查看車站對用車次。
用戶可以在查詢車票后購買車票,然后可以在個人的訂單信息中查看或者退票改簽。
用戶可以添加乘客,可以幫同行的人買車票。