仿12306订票系统--需求分析与概念原型
1.项目简介
12306是中国铁路部门推出的网上售票平台。作为一个拥有众多人口以及幅员辽阔地域面积的铁路大国,中国的12306购票系统也承担着每日最高千亿次访问量,一年售票超过千万张。在如此高并发的环境下,注定12306系统是一个高度复杂、精密的系统。作为工程实践,我们要参照该系统进行建模设计,尽可能将系统接近覆盖真实上线系统。
2.需求分析
经过分析,本系统大致需要实现以下三个方面的需求:
一、身份认证:
a.用户可以通过账号注册使用系统。
b.用户注册账号以后需要认证实名信息,该信息由铁路部门工作人员审核。
c.学生用户购买学生票需要认证学生信息,该信息也由铁路部门工作人员审核。
d.用户拥有账号以后需要登录来获取身份信息才可以使用系统。
二、查询车票
a.用户通过系统界面输入出发地、目的地和日期等信息可以查询经过两地车次等余票信息。
b.用户也可以通过输入日期和车次来获取该趟列车的停靠站时刻表。
三、购买车票
a.用户确认查询到某车次的乘车区间余票充足
b.用户点击下单按钮提交订单
c.用户完成下单以后需要在30分钟以内支付车票款
d.用户拥有一次改签机会,可以重新选择一张以相同出发地和目的地但是不同出发时间的车票,需要确定该车次有余票。
3.用例建模
3.1用例建模简介
用例(use case)的核心概念中首先它是一个业务过程(business process),经过逻辑整理抽象出来的一个业务过程,这是用例的实质。
什么是业务过程?在待开发软件所处的业务领域内完成特定业务任务(business task)的一系列过程就是业务过程。
用例有三个要素。用例应该由业务领域内的一个参与者触发;用例必须能为特定的参与者完成一个特定的业务任务;用例必须终止
于某个特定的参与者,也就是特定参与者明确地或者隐含地得到了业务任务完成的结果。
3.2用例建模步骤
第一步,从需求表述中找出用例,往往是动名词短语表示的抽象用例;
第二步,描述用例开始和结束的状态,用TUCBW和TUCEW表示的高级用例;
第三步,对用例按照子系统或者不同的方面进行分类,描述用例与用例、用例与参与者之间的上下文关系,并画出用例图;
第四步,进一步逐步分析用例与参与者的详细交互过程,完成一个两列的表格,将参与者和开发软件系统之间从用例开始
到用例结束的所有交互步骤都列出来扩展用例。
3.3本案例中的用例建模
3.3.1分析
从需求中其实可以发现本系统的三个不同场景,核验身份、查询余票和购买车票,对应三个用例。而其中的参与者有两个,分别是
用户和铁路部门的工作人员。根据其用例与参与者间的关系,可以得到用例图。
3.3.2用例图
4.业务领域建模
4.1业务领域建模介绍
业务领域建模是开发团队用于获取业务领域知识的过程。因为软件工程师往往需要工作在不同的业务领域或者不同项目中,
他们需要业务领域知识来开发软件系统。软件工程师往往来自不同的专业背景,这可能会影响他们对业务领域的认知。因此
业务领域建模有助于开发团队获取业务领域知识,形成统一的认知。
4.2业务领域建模步骤
第一步,收集应用业务领域的信息。聚焦在功能需求层面,也考虑其他类型的需求和资料。
第二步,头脑风暴。列出重要的应用领域概念,给出这些概念的属性,以及这些概念之间的关系。
第三步,给这些应用业务领域概念分类。分别列出哪些是类,哪些是属性和属性值,以及列出类之间的继承关系、聚合关系和关联关系。
第四步,将结果用UML类图画出来。
4.3本案例中的业务领域建模
本案例涉及的类图如下:
5.数据模型分析
通过分析,本系统需要构建以下数据模型:
表1 用户表
字段名 | 类型 | 含义说明 |
user_id | varchar | 用户对应的id |
name | varchar | 用户名 |
password | varchar | 用户登录密码 |
phone | varchar | 绑定手机号 |
idnum | varchar | 身份证号码 |
isvalid | int | 是否通过核验 |
type | int | 身份类型,成人、学生等 |
表2管理员表
字段 | 类型 | 含义说明 |
name | varchar | 用户名 |
password | varchar | 登录密码 |
表3列车表
字段 | 类型 | 含义说明 |
train_no | varchar | 列车编号 |
name | varchar | 列车名 |
type | int | 列车类型(高铁、特快、动车等) |
seat | int | 座位数量 |
表4站点表
字段 | 类型 | 含义说明 |
station_no | varchar | 站点号 |
name | varchar | 站点名 |
表5时刻表
字段 | 类型 | 含义说明 |
id | int | 主键id |
train_no | varchar | 对应列车表的车次号 |
station_no | varchar | 对应站点表编号 |
starttime | time | 出发时间 |
arrivetime | time | 到站时间 |
date | date | 发车日期 |
表6车票表
字段 | 类型 | 含义说明 |
id | int | 主键id |
train_no | varchar | 对应列车编号 |
departure | varchar | 对应站点表编号,出发地 |
destination | varchar | 对应站点表编号,目的地 |
price | double | 车票价格 |
表7订单表
字段 | 类型 | 含义说明 |
order_id | varchar | 订单号 |
user_id | varchar | 对应用户表id |
departure | varchar | 出发地 |
destination | varchar | 目的地 |
starttime | time | 出发时间 |
arrivetime | time | 到达时间 |
date | date | 发车日期 |
price | double | 车票价格 |
seat | varchar | 车位号 |
train_no | varchar | 列车编号 |
6.总结
本文从用例建模、业务领域建模和数据模型的角度,分析了仿12306购票系统的需求。从这些分析中体会到了软件产品的概念原型。概念原型是一种虚拟的、理想化的软件产品形式。概念原型=用例+数据模型。在本文中得到了12306购票系统的概念原型。