售票系统设计方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
售票系统设计⽅案
1.架构设计
1. 系统架构选型
从软件架构⾓度,本系统采⽤了MVC分层的设计思想,各层级只需要关注本⾝的设计,⽽不需要关注其他层级的内部细节,层与层之间定义了良好的交互⽅式。
具体⽽⾔,本系统可以分为三个⽔平层,分别是展⽰层,业务服务层和数据库层;系统总体结构如下图所⽰。
2. 软件架构风格
本系统采⽤浏览器-服务模式(B/S模式),该模式是Web兴起后的⼀种⽹络结构模式。
相⽐较传统的C/S模式,B/S结构的重要特征就是分布性强、开发简单、共享性强、总体拥有费⽤低。
这种模式统⼀了客户端,将系统功能实现的核⼼部分集中到服务器上,简化了系统的开发、维护和使⽤。
BS架构优势总结如下:
● 分布性强,客户端零维护。
只需有⽹络、浏览器,能够随时随地实⾏查询、浏览等业务处理。
● 业务扩展简单便利,通过添加⽹页就可以添加服务器功能。
● 维护简单便利,只须要更改⽹页,就可以完成全部⽤户的同步更新。
● 开发简单,共享性强。
2. 业务概念原型
1. ⽤例设计
⽤户主要功能:⽤户注册、⽤户信息维护、查找车票、购买车票、改签及退票
后台管理员主要功能:列车信息维护、站点信息维护、车次设置
2. UML类图设计
根据业务需求描述,结合⾯向对象的思想,抽象出类、属性、⽅法,同时确定概念之间的关系,构建UML类图:
3. 数据库设计
采⽤关系数据库mysql进⾏设计(1)⽤户表
(2)⾓⾊表
(3)⽤户⾓⾊关联表(4)车次表
(5)列车表
字段名称字段类型字段描述userId int主键account varchar账号password varchar密码name varchar姓名sex varchar性别phonenum number电话号码certificate_type varchar证件类型certificate_num number证件号码authority varchar权限info varchar其它信息
字段名称字段类型字段描述roleId int主键role_type varchar⾓⾊类型authority varchar权限descr varchar描述
字段名称字段类型字段描述urId int主键
userId int⽤户主键【外键】roleId int⾓⾊主键【外键】
字段名称字段类型字段描述trainSequenceId int主键trainNum number车次号
trainId int列车号start_station varchar起点站end_station varchar终点站launch_time datetime启动时间
字段名称字段类型字段描述
trainId int主键
(6)车厢表(7)座位表(8)站点表(9)车次站点表(10)订单表
trainName varchar列车名称【外键】type varchar列车类型carriage_num int车厢数status int状态
字段名称字段类型字段描述carriageId int主键
trainId int列车主键【外键】carriage_number int车厢号carriage_type int车厢类型price_coef int价格系数
字段名称字段类型字段描述seatId int座位主键carriageId int车厢主键【外键】trainId int列车主键【外键】seat_number int座位号bitmap int座位站点状态位图
字段名称字段类型字段描述stationId int站点主键name varchar站点名称descr varchar站点级别
字段名称字段类型字段描述train_sta_Id int车次站点主键trainSequenceId int车次主键【外键】station_sequence int站点序列arrive_time datetime到达时间lanch_time datetime启动时间
字段名称字段类型字段描述orderId int订单主键userId int⽤户主键【外键】seatId int座位主键【外键】order_time datetime时间
status varchar订单状态
(11) 字典表
4. 分解视图
针对业务模块进⾏分解
5. 实现视图
项⽬的⽬录结构设计
本项⽬采⽤MVC 分层架构,其中,主流的⽬录结构设计是按照controller 、service 、dao 层来进⾏分包。
然⽽,考虑到本项⽬业务模块较少,且Go web 中忌讳包名后缀重复(例如import erService ),我们根据业务模块进⾏分包,如图所⽰:
descr
varchar 订单描述
字段名称字段类型
字段描述dictionaryId int 字典表主键attributes varchar 属性名称value
varchar
属性取值
6. 执⾏视图
时序图:以⽤户购票业务为例
7. 部署视图
部署图描述的是系统运⾏时的结构,展⽰了硬件的配置及其软件如何部署到⽹络结构中。
⼀个系统模型只有⼀个部署图,部署图通常⽤来帮助理解分布式系统。
部署视图有助于设计⼈员分析⼀个设计的质量属性,⽐如软件处理⽹络⾼并发的能⼒、软件对处理器的计算需求等。
8. API接⼝
1. ⽤户注册:
功能描述:⽤户注册个⼈账号
处理流程及要点:⽤户填写个⼈基本信息并提交,系统验证⽤户信息合法性,如果不合法,则返回相应的错误提⽰信息;否则提⽰注册成功,向表中插⼊数据
输⼊:账号,密码,性别,年龄,证件类型,证件号码
输出:(1)成功:注册成功(2)失败:失败原因
2. ⽤户登录
功能描述:⽤户登录⽕车售票平台
处理流程及要点:⽤户输⼊账号密码并提交,系统进⾏验证,如果通过则进⼊主页⾯;否则登录失败,并返回相应信息
输⼊:账号名,密码
输出:(1)成功:登录成功(2)失败:失败原因
3. 查票
功能描述:普通⽤户查询车票
处理流程及要点:⽤户输⼊筛选信息,系统返回满⾜条件的查找结果
输⼊:起点站,终点站,(可选项:时间,座次,车次)
输出:(1)成功:返回查找结果(2)失败:返回失败原因
4. 购票
功能描述:普通⽤户购买车票
处理流程及要点:⽤户输⼊筛选信息进⾏查票,选择车票购买,系统判断出票条件进⾏出票,成功出票则⽣成订单信息
输⼊:车次,座位号
输出:(1)成功:车票信息,包括车次,买票⼈信息,始发站,终点站,时间,座位号(2)失败:失败原因
5. 改签、退票
功能描述:普通⽤户改签车票或退票
处理流程及要点:⽤户选择要改签/退票的车票,系统重置该车票的信息及状态
输⼊:车次,座位号,若改签则还需输⼊改签时间
输出:(1)成功:返回车票信息或状态(2)失败:返回失败原因
6. 站点信息维护
功能描述:管理员⽤户维护站点信息
处理流程及要点:管理员⽤户维护站点表,主要包括增删改查等操作
输⼊:增删改查相应参数
输出:(1)成功:成功信息(2)失败:失败原因
7. 列车信息维护
功能描述:管理员⽤户维护列车信息
处理流程及要点:管理员⽤户维护列车表、车厢表、座位表,主要包括增删改查等操作
输⼊:增删改查相应参数
输出:(1)成功:成功信息(2)失败:失败原因
8. 车次设置
功能描述:管理员⽤户添加车次信息
处理流程及要点:管理员⽤户输⼊车次信息,系统进⾏判断和验证,并执⾏对应业务逻辑
输⼊:列车ID,始末站点,中途站点,各站点区间票价,发车⽇期和时间
输出:(1)成功:该车次信息(2)失败:失败原因
9. 技术选型
1. 开发技术
编程语⾔:GoLang
后端框架:Gin
持久化层:Gorm,Mysql
缓存层:Redis
部署环境:Linux,Docker
2. 设计模式
单例模式:数据库连接池。
创建数据库连接是⼀个很耗时的操作,也容易对数据库造成安全隐患。
所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使⽤,可以保证较快的数据库读写速度,还更加安全可靠。
管道模式:消息中间件。
通过中间件实现业务的解耦,在代码实现时,我们只需要关注各个阶段的实现,最后通过管道⽅式拼接起来。
享元模式:运⽤共享技术来有效地⽀持⼤量细粒度对象的复⽤,⽐如线程池。
10. 系统概念原型⼯作机制
以⽤户注册和查票为例进⾏说明
⽤户注册:⽤户填写注册信息【⽤户数据模型:账号,密码,姓名,性别,电话号码,证件号码...】,系统进⾏校验,并返回相应信息。
查票:⽤户输⼊或选择筛选条件,系统返回车票信息【车票数据模型:车次号,座位号,起点站,终点站,发车时间,到达时间,票价...】。