# 互联网购票乘车系统软件体系结构描述文档 | 修改人员 | 日期 | 变更原因 | 版本号 | | -------- | -------- | -------- | -------| | 陈泓雨、金语盼、王骏佳、刘子恒 | 2023.5.30 | 初稿(大概框架) | V1.0 | | 陈泓雨、金语盼、王骏佳、刘子恒 | 2023.6.2 | 完成接口 | V2.0 | | 陈泓雨、金语盼、王骏佳、刘子恒 | 2023.6.4 | 修改、完善接口 | V2.1 | | 金语盼 | 2023.6.30 | 根据框架代码修改 | V3.0 | 分工:陈泓雨:1-4.3 <br> 金语盼:5.1-5.2 + 6 <br> 王骏佳:5.3 <br> 刘子恒:5. [互联网购票乘车系统软件体系结构描述文档](#互联网购票乘车系统软件体系结构描述文档)<br>[1. 引言](#1-引言)<br>&nbsp;&nbsp;[1.1 编制目的](#11-编制目的)<br>&nbsp;&nbsp;[1.2 词汇表](#12-词汇表)<br>&nbsp;&nbsp;[1.3 参考资料](#13-参考资料)<br>[2. 产品概述](#2-产品概述)<br>[3. 逻辑视角](#3-逻辑视角)<br>[4. 组合视角](#4-组合视角)<br>&nbsp;&nbsp;[4.1 开发包图](#41-开发包图)<br>&nbsp;&nbsp;[4.2 运行时进程](#42-运行时进程)<br>&nbsp;&nbsp;[4.3 物理部署](#43-物理部署) <br>[5. 接口视角](#5-接口视角)<br>&nbsp;&nbsp;[5.1 模块的职责](#51-模块的职责)<br>&nbsp;&nbsp;[5.2 用户界面层的分解](#52-用户界面层的分解)<br>&nbsp;&nbsp;&nbsp;&nbsp;[5.2.1 用户界面层模块的职责](#521-用户界面层模块的职责)<br>&nbsp;&nbsp;&nbsp;&nbsp;[5.2.2 用户界面层模块的接口规范](#522-用户界面层模块的接口规范)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[5.2.2.1 mainui模块接口规范](#5221-mainui模块接口规范)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[5.2.2.2 userui模块接口规范](#5222-userui模块接口规范)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[5.2.2.3 stationui模块接口规范](#5223-stationui模块接口规范)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[5.2.2.4 routeui模块接口规范](#5224-routeui模块接口规范)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[5.2.2.5 trainui模块接口规范](#5225-trainui模块接口规范)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[5.2.2.6 orderui模块接口规范](#5226-orderui模块接口规范)<br>&nbsp;&nbsp;&nbsp;&nbsp;[5.2.3 用户界面模块设计原理](#523-用户界面模块设计原理) <br>&nbsp;&nbsp;[5.3 业务逻辑层的分解](#53-业务逻辑层的分解) <br>&nbsp;&nbsp;&nbsp;&nbsp;[5.3.1 业务逻辑层模块的职责](#531-业务逻辑层模块的职责)<br>&nbsp;&nbsp;&nbsp;&nbsp;[5.3.2 业务逻辑层模块的接口规范](#532-业务逻辑层模块的接口规范) <br>&nbsp;&nbsp;[5.4 数据层的分解](#54-数据层的分解)<br>&nbsp;&nbsp;&nbsp;&nbsp;[5.4.1 数据层模块的职责](#541-数据层模块的职责)<br>&nbsp;&nbsp;&nbsp;&nbsp;[5.4.2 数据层模块的接口规范](#542-数据层模块的接口规范)<br>[6. 信息视角](#6-信息视角) <br>&nbsp;&nbsp;[6.1 数据持久化对象](#61-数据持久化对象)<br>&nbsp;&nbsp;[6.2 数据库表](#62-数据库表) ## 1. 引言 ### 1.1 编制目的 本报告详细完成对互联网购票乘车系统的概要设计,达到详细设计和开发的⽬的,同时实现和测试⼈员及⽤户的沟通。 本报告⾯向开发⼈员、测试⼈员及最终⽤户⽽编写,是了解系统的导航。 ### 1.2 词汇表 | 词汇名称 | 词汇含义| 备注 | | -------- | -------- | -------- | | ITS | 互联网购票乘车系统 | | ### 1.3 参考资料 i. [骆斌2012]骆斌,丁⼆⽟,刘钦,软件⼯程与计算(卷⼆):软件开发的技术基础,2012 ## 2. 产品概述 参考互联网乘车购票系统⽤例⽂档和互联网乘车购票系统软件需求规格说明⽂档中对产品的概括描述。 ## 3. 逻辑视角 互联网乘车购票系统中,选择了分层体系结构⻛格,将系统分为3层(展示层、业务逻辑、数据层)能够很好地示意整个⾼层抽象。展示层包含GUI⻚⾯的实现,业务逻辑层包含业务逻辑处理的实现,数据层负责数据的持久化和访问。分层体系结构的逻辑视⻆和逻辑设计⽅法如图1和图2所示。 ![](https://hackmd.io/_uploads/SkmWvprFh.png)<br> ![](https://hackmd.io/_uploads/S14Q-jBt3.png) 图2 软件体系结构逻辑设计方案 ## 4. 组合视角 ### 4.1 开发包图 互联网购票乘车系统的最终开发包图设计如下表所示。 ![](https://hackmd.io/_uploads/ByImmorY3.png) 互联网购票乘车系统浏览器端开发包图如下图所示,服务器端开发包图如下下图所示。 ![](https://hackmd.io/_uploads/r1LEWsBY2.png) 互联网购票乘车系统客户端开发包图 ![](https://hackmd.io/_uploads/SyUBWorY3.png) 互联网购票乘车系统服务器端开发包图 ### 4.2 运行时进程 在互联网购票乘车系统中,会有多个浏览器端进程和⼀个服务器端进程,其进程图如图5所示。结合部署图, 浏览器端进程是在⽤户浏览器上运⾏,服务器端进程是在服务器机器上运⾏。 ![](https://hackmd.io/_uploads/S1AMtCdE3.jpg) <br>进程图 ### 4.3 物理部署 互联网购票乘车系统中客户端构件是放在客户端机器上,服务器端构件是放在服务 器端机器上。在客户端节点上,还要部署 RMIStub 构件。由于 Java RMI 构件属于 JDK 1.8 的一部分。所以,在系统 JDK 环境已经设置好的情况下,不需要再独立部署。部署图如图所示。 ![](https://hackmd.io/_uploads/rJLei0uVh.jpg) 部署图 ## 5. 接口视角 ### 5.1 模块的职责 浏览器端模块和服务器端模块视图分别如图5.1.1和图5.1.2所示。浏览器各层和服务器端各层的职责分别如表5.1.1和表5.1.2所示。 <br><center>![图5.1.1 浏览器端模块视图](https://hackmd.io/_uploads/Hy1401FN3.png) <br>**图5.1.1 浏览器端模块视图** <br>![图5.1.2 服务器端模块视图](https://hackmd.io/_uploads/ryNxygY4n.png) <br>**图5.1.2 服务器端模块视图** </center> <br><center>**表5.1.1 浏览器端各层的职责**</center> ||| |------|------| |**层**|**职责**| |展示层|基于网络的互联网购票乘车系统浏览器端用户界面| |浏览器端网络模块|利用HTTP协议访问服务器端服务| ||| <br><center>**表5.1.2 服务器端各层的职责**</center> ||| |------|------| |**层**|**职责**| |启动模块|初始化数据库| |服务器端网络模块|利用HTTP协议接受浏览器端数据以及返回数据| |业务逻辑模块|对浏览器端的请求进行响应并执行业务处理逻辑| |数据层|负责数据的持久化及数据访问接口| ||| 每一层只是使用下方直接接触的层。层与层之间仅仅是通过接口的调用来完成的。层之间调用的接口如表5.1.3所示。 <br><center>**表5.1.3 层之间调用的接口**</center> |||| |------|------|------| |**接口**|**服务调用方**|**服务提供方**| |UserBLService<br>StationBLService<br>RouteBLService<br>TrainBLService<br>OrderBLService|浏览器端展示层|服务器端业务逻辑层| |UserDataService<br>StationDataService<br>RouteDataService<br>TrainDataService<br>OrderDataService<br>DatabaseFactory|服务器端业务逻辑层|服务器端数据层| |||| ### 5.2 用户界面层的分解 &emsp;&emsp;根据需求,系统存在22个用户界面:登录/注册界面、客户主界面、客户个人中心界面、车票列表界面、车票详情界面、购票界面、车票订单界面、购买预定车票界面、线上退票界面、会员开通界面、铁路管理员主界面、铁路管理员个人中心界面、车票信息管理界面、铁路信息管理界面、余票管理员主界面、余票管理员个人中心界面、余票管理界面、票务员主界面、票务员个人中心界面、售票界面、换票界面、线下退票界面。界面跳转如图5.2.1所示。 ![用户界面跳转](https://hackmd.io/_uploads/rk1ZA1tV3.png) <br><center>**表5.2.1 用户界面跳转**</center> #### 5.2.1 用户界面层模块的职责 ||| |------|------| |**模块**|**职责**| |mainui|负责首页的显示和界面的跳转| |userui|负责客户、管理员登录注册、个人信息、会员注册相关的显示| |stationui|负责车站相关界面的显示| |routeui|负责铁路线路相关界面的显示| |trainui|负责车次相关界面的显示| |orderui|负责订单相关界面的展示| ||| #### 5.2.2 用户界面层模块的接口规范 ##### 5.2.2.1 mainui模块接口规范 ![](https://hackmd.io/_uploads/SylPboBK3.png) ##### 5.2.2.2 userui模块接口规范 ![](https://hackmd.io/_uploads/rke_-iBK3.png) ![](https://hackmd.io/_uploads/S11O-jBKh.png) ##### 5.2.2.3 stationui模块接口规范 ![](https://hackmd.io/_uploads/ByEY-srYh.png) ![](https://hackmd.io/_uploads/r1NYbjHFh.png) ##### 5.2.2.4 routeui模块接口规范 ![](https://hackmd.io/_uploads/HJW5biHYn.png) ![](https://hackmd.io/_uploads/H1-9bsrF2.png) ##### 5.2.2.5 trainui模块接口规范 ![](https://hackmd.io/_uploads/S10kMiHF3.png) ![](https://hackmd.io/_uploads/rypJGoSth.png) ##### 5.2.2.6 orderui模块接口规范 ![](https://hackmd.io/_uploads/BkGGzsBF2.png) ![](https://hackmd.io/_uploads/BJMGforth.png) #### 5.2.3 用户界面模块设计原理 用户界面利用Vue.js框架实现 ### 5.3 业务逻辑层的分解 业务逻辑层分解如图所示: ![](https://hackmd.io/_uploads/rkdMyhHFn.png) #### 5.3.1 业务逻辑层模块的职责 ||| |:--------:|--------| |**模块**|**职责**| |UserBL|负责用户注册界面的业务<br>负责用户登录页界面的业务<br>负责用户查看个人信息的业务<br>负责用户注册会员的业务<br>| |StationBL|负责车站管理的业务<br>| |RouteBL|负责铁路线路信息管理的业务<br>| |TrainBL|负责车次管理的业务| |OrderBL|负责订单信息的管理业务| ||| #### 5.3.2 业务逻辑层模块的接口规范 ![](https://hackmd.io/_uploads/ryn_MjrKh.png)<br> ![](https://hackmd.io/_uploads/SJCdzoHY3.png)<br> ![](https://hackmd.io/_uploads/SkytGjHF2.png)<br> ![](https://hackmd.io/_uploads/r1fJU6SY2.png)<br> ![](https://hackmd.io/_uploads/rymtfiHKh.png) ![](https://hackmd.io/_uploads/SJmFGorFh.png) ### 5.4 数据层的分解 #### 5.4.1 数据层模块的职责 | 列1 | 列2 | |--------|-------------| |UserDataService|持久化数据库接口,提供客户账号和基本信息的增加、修改、查询等操作| |StationDataService|持久化数据库接口,提供车站信息的增加、修改、查询、删除等操作| |RouteDataService|持久化数据库接口,提供路线信息的增加、修改、查询、删除等操作| |TrainDataService|持久化数据库接口,提供车次信息的增加、修改、查询、删除等操作| |OrderDataService|持久化数据库接口,提供订单信息的增加、修改、查询、删除等操作| #### 5.4.2 数据层模块的接口规范 ![](https://hackmd.io/_uploads/HkDSmaBK2.png)<br> ![](https://hackmd.io/_uploads/BkgPSmpBth.png)<br> ![](https://hackmd.io/_uploads/S1vrmTrth.png)<br> ![](https://hackmd.io/_uploads/SkPBXpSKn.png)<br> ![](https://hackmd.io/_uploads/ryDHXprFn.png) ## 6. 信息视角 ### 6.1 数据持久化对象 系统的PO类就是对应的相关的实体类,在此只做简单的介绍。 <br> UserPO类包含用户编号、用户名、密码、身份证号、姓名、电话号码、证件类型、身份、是否是会员、里程积分、创建时间、更新时间等属性。 <br> StationPO类包含车站编号、车站名称、创建时间、更新时间等属性。 <br> RoutePO类包含路线编号、路线名称、途径车站编号、创建时间、更新时间等属性。 <br> TrainPO类包含车次编号、车次名称、路线编号、座位、列车类型、出发时间、到点数组、开点数组、额外信息、创建时间、更新时间等属性。 <br> OrderPO类订单编号、用户编号、车次编号、出发站编号、到达站编号、订单状态、座位号、价格、优惠、创建时间、更新时间等属性。 ![](https://hackmd.io/_uploads/rJ7t4aBKn.png)<br> ![](https://hackmd.io/_uploads/rJ7FVTHY2.png)<br> ![](https://hackmd.io/_uploads/BJXtN6SF2.png)<br> ![](https://hackmd.io/_uploads/Sk7YN6BKh.png) ![](https://hackmd.io/_uploads/HJ7tE6Btn.png)<br> ![](https://hackmd.io/_uploads/rklQK4aHth.png)<br> ### 6.2 数据库表 数据库中包含User表、Station表、Route表、Train表、Order表