1. 前言

  本文在中科大软件学院孟宁老师的指导下完成,是一个基于对工程实践选题中的12306火车售票系统分析,从而进行数据库建模、接口设计等分析过程,最终形成概念原型的过程。

 

2. 项目介绍

  该项目来自于学校与企业合作选题,意在模拟实现一个12306售票系统,尽可能覆盖真实线上系统,要求实现但不限于以下功能:

  1. 用户信息注册
  2. 查询余票
  3. 售票
  4. 退票
  5. 改签

  并在此基础上,对一些读写接口的延迟以及并发请求做出了要求。

 

3. 需求分析概述

  1. 用户系统需求分析

  • 用户注册
  • 用户登录
  • 用户信息维护
  • 查询余票信息
  • 查询订单信息

  2. 车次查询系统需求分析

  • 根据用户提供的起始站与终点站、时间数据返回相关的车次信息
  • 根据用户提供的车次、时间数据返回相关的车次信息
  • 根据用户提供的车站、时间数据返回当天停留的车次信息

  3. 订单系统需求分析  

  • 售票:根据用户提交的信息生成订单
  • 改签:根据用户提交的订单信息与改签信息对订单进行修改
  • 退票:根据用户提供的请求取消订单
  • 候补:根据用户提交的信息生成候补订单

 

4. 用例建模设计

  用例是一个业务过程(business process),经过逻辑抽象得到的业务过程。而业务过程则是在软件开发所处的领域内的一系列特定业务。

  用例建模的基本步骤如下:

  1. 从需求表述中找出用例,一般是动名词短语表示的抽象用例。
  2. 描述用例的开始和结束状态。
  3. 对用例按照子系统或不同的方面进行分类,描述用例与用例、用例与参与者的上下文关系。
  4. 逐一分析参与者的详细交互过程,完成用例建模。

  在实现该项目时,考虑到方便分工合作降低耦合度,故而设计成三个大的模块系统,得到以下用例:

  

12306系统架构采用的技术有 12306系统分析_用例

 

5. 业务领域建模

  业务领域建模即时开发团队用于获取业务领域知识的过程。在不同的项目里,开发者们一般工作的领域并不太相同,业务领域建模可以帮助开发团队形成统一的业务认知。

  业务领域建模的过程大致如下:

  1. 收集业务领域相关信息
  2. 执行团队头脑风暴
  3. 对业务领域相关的知识概念进行分类
  4. 用UML类图将业务领域知识图形化展示

  在该系统中,可以得到大致如下的UML类图:

  

12306系统架构采用的技术有 12306系统分析_用例_02

 

6. 数据模型设计

  数据模型是数据特征的抽象,从抽象层次上描述了系统的静态特征、动态行为和约束条件,其为数据库系统的信息表示与操作提宫了一个抽象框架。

  数据模型由三部分组成:数据结构、数据操作、数据约束。

  在本系统中,可以建立如下数据模型:

  1. 用户表  

字段名称

字段类型

字段描述

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系统过程中的概念模型分析、功能设计、概念原型设计的过程。在此过程中遇到了不少问题,通过解决这些问题对系统本身业务的理解上升了一个层次,也学习到了软件工程的相关思想,在此感谢任课老师的指导。文中所涉及的具体实现细节仍待补充,拟在工程实践的过程中不断对其完善。