火车票售票系统设计方案
一、软件结构特点
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
六、系统概念原型核心工作机制
用户可以通过系统注册自己的账户,然后登录自己的账户,完善个人信息。在系统首页选择出发城市、到达城市和日期,然后在筛选出的车次中选择一个具体的车次,选择座位,然后系统生成订单,用户支付订单。用户可以通过订单页面选择改签或退票。
管理员可以登录系统,增加或删除某天的车次、某种车型,还可以增加和删除某个具体的站点及站点信息。

浙公网安备 33010602011771号