1. 前言
本文在中科大软件学院孟宁老师的指导下完成,是一个基于对工程实践选题中的12306火车售票系统分析,从而进行数据库建模、接口设计等分析过程,最终形成概念原型的过程。
2. 项目介绍
该项目来自于学校与企业合作选题,意在模拟实现一个12306售票系统,尽可能覆盖真实线上系统,要求实现但不限于以下功能:
- 用户信息注册
- 查询余票
- 售票
- 退票
- 改签
并在此基础上,对一些读写接口的延迟以及并发请求做出了要求。
3. 需求分析概述
1. 用户系统需求分析
- 用户注册
- 用户登录
- 用户信息维护
- 查询余票信息
- 查询订单信息
2. 车次查询系统需求分析
- 根据用户提供的起始站与终点站、时间数据返回相关的车次信息
- 根据用户提供的车次、时间数据返回相关的车次信息
- 根据用户提供的车站、时间数据返回当天停留的车次信息
3. 订单系统需求分析
- 售票:根据用户提交的信息生成订单
- 改签:根据用户提交的订单信息与改签信息对订单进行修改
- 退票:根据用户提供的请求取消订单
- 候补:根据用户提交的信息生成候补订单
4. 用例建模设计
用例是一个业务过程(business process),经过逻辑抽象得到的业务过程。而业务过程则是在软件开发所处的领域内的一系列特定业务。
用例建模的基本步骤如下:
- 从需求表述中找出用例,一般是动名词短语表示的抽象用例。
- 描述用例的开始和结束状态。
- 对用例按照子系统或不同的方面进行分类,描述用例与用例、用例与参与者的上下文关系。
- 逐一分析参与者的详细交互过程,完成用例建模。
在实现该项目时,考虑到方便分工合作降低耦合度,故而设计成三个大的模块系统,得到以下用例:
5. 业务领域建模
业务领域建模即时开发团队用于获取业务领域知识的过程。在不同的项目里,开发者们一般工作的领域并不太相同,业务领域建模可以帮助开发团队形成统一的业务认知。
业务领域建模的过程大致如下:
- 收集业务领域相关信息
- 执行团队头脑风暴
- 对业务领域相关的知识概念进行分类
- 用UML类图将业务领域知识图形化展示
在该系统中,可以得到大致如下的UML类图:
6. 数据模型设计
数据模型是数据特征的抽象,从抽象层次上描述了系统的静态特征、动态行为和约束条件,其为数据库系统的信息表示与操作提宫了一个抽象框架。
数据模型由三部分组成:数据结构、数据操作、数据约束。
在本系统中,可以建立如下数据模型:
- 用户表
字段名称 | 字段类型 | 字段描述 |
username | varchar | 用户名称 |
userid | int | 用户id(主键) |
password | varchar | 用户密码 |
name | varchar | 用户姓名 |
sex | varchar | 用户性别 |
email | varchar | 用户邮箱 |
2. 订单表
字段名称 | 字段类型 | 字段描述 |
orderid | int | 订单id(主键) |
userid | int | 用户id(外键) |
trianid | varchar | 火车id(外键) |
sertid | varchar | 座位id |
status | varchar | 订单状态 |
ordertime | datetime | 订单生成时间 |
3. 站点表
字段名称 | 字段类型 | 字段描述 |
stationid | int | 站点id(主键) |
city | varchar | 站点城市 |
name | varchar | 站点名字 |
4. 列车表
字段名称 | 类型 | 字段描述 |
trainid | int | 列车id(主键) |
traintype | varchar | 列车类型 |
started_station | varchar | 起始站(外键) |
arrived_station | varchar | 终点站(外键) |
5. 联系人表
字段名称 | 字段类型 | 字段描述 |
id | int | 联系人信息id(主键) |
userid | int | 用户id(外键) |
name | varchar | 姓名 |
id_number | varchar | 证件号码 |
6. 车票表
字段名称 | 字段类型 | 字段描述 |
id | int | 车票id(主键) |
traid_id | int | 车次id(外键) |
started_station | varchar | 出发站名称(外键) |
arrived_station | varchar | 到达站名称(外键) |
startd_time | datetime | 出发时间 |
seat_number | varchar | 座位号 |
7. 总结
本篇博客简要地介绍了在实现12306系统过程中的概念模型分析、功能设计、概念原型设计的过程。在此过程中遇到了不少问题,通过解决这些问题对系统本身业务的理解上升了一个层次,也学习到了软件工程的相关思想,在此感谢任课老师的指导。文中所涉及的具体实现细节仍待补充,拟在工程实践的过程中不断对其完善。