一、任务描述
1.用户需求分析
在 COVID19 疫情的影响下,人们乘坐交通工具出行的健康风险大大增加。这些风险来自不同的交通工具和城市环境,并且不同的交通工具和城市都会有不同的风险程度。对于人们来说,出行时综合考虑时间,城市风险,交通工具风险, 以及交通时刻表是一个很复杂的问题。“COVID19 疫情下的低风险旅行模拟系统”是针对这个问题的解决方案。
2.基础功能描述
城市之间有各种交通工具(汽车、火车和飞机)相连,有些城市之间无法直达,需要途径中转城市。某旅客于某一时刻向系统提出旅行要求。考虑在当前COVID19 疫情环境下,各个城市的风险程度不一样,分为低风险、中风险和高风险三种。系统根据风险评估,为该旅客设计一条符合旅行策略的旅行线路并输出; 系统能查询当前时刻旅客所处的地点和状态(停留城市/所在交通工具)。
二、功能需求说明及分析
城市总数不少于 10 个,为不同城市设置不同的单位时间风险值:低风险城市为 0.2;中风险城市为 0.5;高风险城市为 0.9。各种不同的风险城市分布要比较均匀,个数均不得小于 3 个。旅客在某城市停留风险计算公式为:旅客在某城市停留的风险=该城市单位时间风险值*停留时间。建立汽车、火车和飞机的时刻表(航班表),假设各种交通工具均为起点到终点的直达,中途无经停。
不能太简单,城市之间不能总只是 1 班车次;
整个系统中航班数不得超过 10 个,火车不得超过 30 列次;汽车班次无限制;
旅客的要求包括:起点、终点和选择的低风险旅行策略。其中,低风险旅行策略包括:
最少风险策略:无时间限制,风险最少即可
限时最少风险策略:在规定的时间内风险最少
旅行模拟系统以时间为轴向前推移,每 10 秒左右向前推进 1 个小时(非查询状态的请求不计时,即:有鼠标和键盘输入时系统不计时);
不考虑城市内换乘交通工具所需时间
系统时间精确到小时
建立日志文件,对旅客状态变化和键入等信息进行记录
选做一:用图形绘制地图,并在地图上实时反映出旅客的旅行过程。
选做二:为不同交通工具设置不同单位时间风险值,交通工具单位时间风险值分别为:
汽车=2;火车=5;飞机=9。
将乘坐交通工具的风险考虑进来,实现前述最少风险策略和限时风险最少策略。
三、总体方案设计说明
1.软件开发环境
Qt 版本号 5.12.8 msvc2017 x64 Visual studio 2019 C++ Windows10
2.总体结构
2.1总体结构图
2.2 总体结构说明
程序结构使用面向对象的思想设计,整个程序是一个窗口对象,该对象主要包括 UI 界面,用户对象,交通系统对象,以及时钟四个部分。这四个部分中只有UI 界面是用户可以直接操作的。系统接收两个输入,一个是来自用户的输入, 由 UI 组件接收;一个是程序内部时钟信号的输入。用户对象和交通系统对象为前端 UI 界面组件提供各种信息,UI 组件接收到输入后对用户和交通系统进行修改。
2.3模块划分
2.3.1类设计
2.3.2文件模块与包含关系
四、数据结构说明和数据字典
1 交通相关的数据结构说明和字典
此处的设计考虑多个方面的因素,在保证时刻表的复杂性,合理性的前提下, 根据现实情况进行适当的简化以提高灵活度和减少手工工作量。在此模拟系统中, 每 24 小时的时刻表都相同,该时刻表基于给定的某些参数随机生成(详情见5.2.3.3),实际运行中通过一些巧妙的算法同步时间日期,最终使模拟系统可以以无限的时间日期运行。
1.1航班/车次Transport
是计划表/时刻表中最基本的单位,表示两个城市之间直达的一次航班/车次。时刻表/计划表: 一个元素为 Transport 的数组:vector
城市 City
系统中的城市信息表只有一个,作为 TransSystem 类的私有成员变量m_cityList,在该类的构造函数中初始化,可以使用该类封装的 GetCityList()方法获,不可修改。在系统中,城市都用唯一的编号表示,需要获取信息时才从城市信息表中获取。
城市距离表:二维数组:vector
系统中的城市距离图只有一个, 作为 TransSystem 类的私有成员变量m_distMap,在该类的构造函数中初始化,没有提供外部接口,在该类中直接使用。使用 m_distMap[srcIndex][destIndex]获取编号为 srcIndex 和 destIndex 的城市之间的距离。
*时刻表:三维数组:vector<vector
Vehicle::Type 本质上是一个 unsigned char 类型,即 8bit 的空间。每一个交通方式使用一个标志位表示,飞机,火车,汽车的标志位分别为低 1、2、3 位, 其 值 作 为 静 态 常 量 存 储 在 Vehicle 类 中 。 使 用 m_timeTable [srcIndex][destIndex][time]可以获取从编号为 srcIndex 到 destIndex 的城市之间第 time 小时发车的所有直达交通工具。判断是否有某种交通工具的方法是与运算:if (m_timeTable[i][j][t] & Vehicle::plane)。
1.2 交通系统数据说明
1.3 用户数据说明
五、各模块(类)设计说明
1.User.c (User 类)
用户类,包含用户数据以及对用户数据的操作。
1.1 成员变量介绍 (见 4.2)
1.2 成员函数介绍
1.3 用户状态机
2.Transport.c
2.1Vehicle 类
该类只提供静态方法和静态常量,并不用于构造对象。该类的作用是提供关于各种交通工具的类型和信息。车辆的属性包括名字,固定的发车间隔,单位距离需要的时间,每小时风险值。
2.2 City 类: 见 4.1.2
2.3TransSystem 类
交通系统类,包含整个系统的客观环境信息,包括城市列表,距离表,时刻表,时间,日期等信息。内置算法模块提供计算最佳路径的接口,提供同步时间日期的接口。
2.3.1成员变量介绍(见 4.1.5)
2.3.2 成员函数介绍
2.3.3 时刻表生成算法介绍
生成 4.1.4 中所述的时刻表,需要用到的参数有:交通工具及其属性(5.2.1),城市距离表(4.1.3),以及一个增加一个辅助的二维数组 m_transMap, 元素类型为Vehicle::Type,即交通工具类型。m_transMap[srcIndex][destIndex]表示从城市 srcIndex 到 destIndex 是否存在直达航班。
在介绍该算法前,先声明几个假设条件:
每天(24 小时)的时刻表完全相同。
每种交通工具拥有固定的发车间隔。
对于每个城市来说,只有拥有某一种交通工具,那么他们每天的发车间隔、发车次数相同,只有时间不同,该时间由模拟程序随机生成。
算法描述: (伪代码)
2.3.4寻找最低风险算法介绍
该算法使用 DFS 算法,目的是找到一个最小风险的 transport 序列。设停留在城市C 的单位时间的风险为 R[c], 交通工具v 的单位时间风险是R[v], 第i 个transport 为 T[i]
选择第i 个transport 的总风险函数如下:
不考虑交通工具风险。
() = ( 1) + ([]. [ 1]. ) []
考虑交通工具风险。
() = ( 1) + ([]. [ 1]. ) [] + []. []
以上公式构成了 DFS 的基本框架,接下来介绍剪枝策略:
由于每 24 小时的车次相同,所以当 ([]. [ 1]. ) > 23
时不再往下搜索。
累积风险超过当前最优解的风险时,不再往下搜索。
当用户选择限时策略时,累计时间超过用户期望到达时间则不再往下搜索。
当用户选择不允许重复访问策略时,如果当前 transport 的终点已访问过,则不再往下搜索。
算法伪代码和描述如下:以“限时最小风险,允许重复访问”策略为例
详细代码和注释见TransSystem 中 a_开头的成员。
UI 模块。
UI 模块包括用代码写的 MainWindow.h 主窗口模块,MapCanvas.h 地图动画模块,TransportFrame.h 车票模块,用 Qt designer 设计生成的 MainWindow.ui 主窗口模块, SettingWindow.ui 设置窗口模块, TransportFrame.ui 车票模块, MapCanvas 地图模块。由于时间原因,繁琐的 ui 界面难以逐一介绍,用户交互逻辑和界面布局请查阅下文的用户使用说明,成员变量和成员函数请查阅 3.31 的UML 类图。详细代码和注释请查阅源文件。
六、范例执行结果及测试情况说明
当前软件内置的城市列表数组如下:
城市 | 成都 | 西安 | 太原 | 北京 | 沈阳 | 长沙 |
---|---|---|---|---|---|---|
编号 | 0 | 1 | 2 | 3 | 4 | 5 |
城市 | 武汉 | 合肥 | 济南 | 广州 | 福州 | 杭州 |
编号 | 6 | 7 | 8 | 9 | 10 | 11 |
当前软件内置的城市距离图如下:
成都 | 西安 | 太原 | 北京 | 沈阳 | 长沙 | 武汉 | 合肥 | 济南 | 广州 | 福州 | 杭州 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
成都 | 0 | 2 | 4 | 5 | 7 | 3 | 3 | 4 | 5 | 5 | 6 | 6 |
西安 | 2 | 0 | 2 | 3 | 5 | 3 | 2 | 3 | 4 | 5 | 5 | 5 |
太原 | 4 | 2 | 0 | 2 | 3 | 4 | 3 | 3 | 2 | 6 | 5 | 4 |
北京 | 5 | 3 | 2 | 0 | 2 | 5 | 4 | 3 | 2 | 6 | 5 | 4 |
沈阳 | 7 | 5 | 3 | 2 | 0 | 6 | 5 | 4 | 2 | 7 | 6 | 5 |
长沙 | 3 | 3 | 4 | 5 | 6 | 0 | 1 | 4 | 4 | 2 | 2 | 3 |
武汉 | 3 | 2 | 3 | 4 | 5 | 1 | 0 | 1 | 3 | 2 | 2 | 2 |
合肥 | 4 | 3 | 3 | 3 | 4 | 4 | 1 | 0 | 2 | 3 | 2 | 1 |
济南 | 5 | 4 | 2 | 2 | 2 | 4 | 3 | 2 | 0 | 5 | 4 | 3 |
广州 | 5 | 5 | 6 | 6 | 7 | 2 | 2 | 3 | 5 | 0 | 2 | 3 |
福州 | 6 | 5 | 5 | 5 | 6 | 2 | 2 | 2 | 4 | 2 | 0 | 1 |
杭州 | 6 | 5 | 4 | 4 | 5 | 3 | 2 | 1 | 3 | 3 | 1 | 0 |
当前交通工具属性如下:
名字 | 代码 | 发车间隔 | 单位里程的时间 | 风险值 |
---|---|---|---|---|
飞机 | 0x04 | 12 | 1 | 9 |
火车 | 0x02 | 8 | 2 | 5 |
汽车 | 0x01 | 6 | 4 | 2 |
当前 m_transMap(表示两座城市间存在的交通方式的标志位)如下:
成都 | 西安 | 太原 | 北京 | 沈阳 | 长沙 | 武汉 | 合肥 | 济南 | 广州 | 福州 | 杭州 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
成都 | 0 | 1 | 0 | 4 | 0 | 0 | 2 | 0 | 0 | 4 | 0 | 0 |
西安 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
太原 | 0 | 1 | 0 | 1 | 0 | 0 | 2 | 0 | 2 | 0 | 0 | 0 |
北京 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 4 | 0 | 0 |
沈阳 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
长沙 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
武汉 | 2 | 1 | 2 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 2 | 0 |
合肥 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
济南 | 0 | 0 | 2 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 |
广州 | 4 | 0 | 0 | 4 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
福州 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 1 | 0 | 1 |
杭州 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 2 | 0 | 1 | 0 |
该表格可视化草图如下:黄色,绿色,紫色分别表示飞机,火车,汽车。
测试方法和测试结果
由于城市数量有限,且每 24 小时的时刻表相同,所以我们可以规律的方法测试完几乎所有情况。对于任意源和目的地的组合(共 12*11 种), 使用所有可选的策略组合,设置起始时间为 0 到 23 的所有时间,对最优解进行搜索。
测试结果:所有样例通过测试,算法可以立刻响应生成结果。
七、评价和改进意见
个人对这一次的大作业比较满意,代码有着良好的命名,较为良好的面向对象设计,以及很好的扩展性能和易读性。算法设计也兼顾了灵活和效率,拥有良好的鲁棒性,可供用户自由设置。课程设计要求的任务已经全部完成。
所有的不足都来自扩展部分,原本计划完成的一些功能因为时间问题没有完成, 以至于该模拟程序离商用程序还有不小的差距。如:没有完成更随机的时刻表生成 算法,没有完成软件内部的用户操作教程,没有完成可动态缩放、可后台增删城市 的地图。并且,对于设计模式不熟悉导致了对一些类的设计一再改动,这些都是需 要改进的地方。
八、用户使用说明
1. 进入程序:
2. 主界面布局介绍:
3. 状态栏介绍:
4. “地图”页介绍
在地图页会显示系统中存在的城市,不同区域的风险程度使用不同的色块来表示。带箭头的红色虚线为用户当前计划的路线,该路线上的交通工具图标表示用户所处的位置和乘坐的交通工具。
5. “我的旅行”页介绍
查看我正在进行的计划。
6. 搜索新计划并添加计划。
注意:用户点击查询计划且查询成功后,系统时间会暂停并等待用户做出决策。在这个过程中,切换页面的按钮被禁用。用户允许的操作包括:添加计划, 取消(放弃)计划,重新选择起点、终点、时间、重新查询。
7. “时刻表”页介绍
参考文献
- 城市尺度下COVID-19传播关系分析与可视化平台研发(石河子大学·隆学丰)
- 基于Java EE的旅游在线预订系统的设计与实现(电子科技大学·韩利娜)
- 新冠疫情舆情信息分析系统的设计与实现(华中科技大学·胡永辉)
- 基于.NET的在线旅游产品系统设计与应用(吉林大学·关子南)
- 新冠疫情舆情信息分析系统的设计与实现(华中科技大学·胡永辉)
- 人体温度快速筛选及智能监控系统开发(太原理工大学·张紫东)
- 微博疫情专题文本的情感分析及可视化(厦门大学·吴萍)
- 基于Java EE的旅游在线预订系统的设计与实现(电子科技大学·韩利娜)
- 新冠疫情舆情信息分析系统的设计与实现(华中科技大学·胡永辉)
- 基于SSH框架的旅游管理系统设计与实现(苏州大学·闫利霞)
- 旅游资源与线路管理系统的设计与实现(山东大学·孙杰)
- 新冠疫情舆情信息分析系统的设计与实现(华中科技大学·胡永辉)
- 新型冠状病毒感染循证决策动态推荐系统的研究(兰州大学·栗梦婷)
- 旅行社散客安排系统的设计与开发(电子科技大学·郭红梅)
- 基于智能移动终端蓝牙系统的传染源追踪系统研究(北京化工大学·秦宏利)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕业设计工坊 ,原文地址:https://m.bishedaima.com/yuanma/35695.html