2023课程设计--任务书
哈尔滨工业大学(威海)计算机科学与工程程序设计实践任务书
1. 问题背景及应用意义
由于火车线路的布局和运营安排,火车线路通常由多个区段组成,每个区段之间有不同的车次和时刻表安排。当旅客需要从起点站到达目的地时,有时需要在中途站点进行换乘,以继续前行。 火车换乘参考网站的问题背景与应用意义在于为乘客提供准确、全面、实时的换乘信息,帮助他们更好地规划和安排火车旅行。
应用意义分为以下几点:
(1)换乘信息整合:火车换乘参考网站将各个车站的时刻表、车次信息、换乘方案等整合到一个平台上,提供了一个集中查询的渠道。乘客可以通过一个网站获取到所需的换乘信息,避免了需要查询多个网站或咨询多个渠道的麻烦。
(2)换乘方案推荐:火车换乘参考网站通常会根据乘客提供的出发站和目的地,智能地推荐最佳的换乘方案。这可以帮助乘客节省时间和费用,选择最优的换乘方式。
(3)详细信息展示:火车换乘参考网站通常会提供详细的换乘信息,包括中转站点、换乘时间、换乘路线等,帮助乘客更好地了解换乘流程和行程安排。
综上所述,火车换乘参考网站的问题背景与应用意义在于为乘客提供便捷、准确、实时的换乘信息,帮助他们更好地规划和安排火车换乘行程,节省时间和费用,提高出行的便利性和舒适度。
2. 所要解决的实际应用问题及难点
(1)数据准确性:确保提供的火车时刻表、车次信息、换乘方案等数据准确无误,需要与铁路部门或相关权威机构进行数据对接和更新,以及处理数据的实时性和准确性。由于技术不足以12306车次数据,该程序将使用模拟数据替代真实车次数据。
(2)换乘算法:设计智能的换乘算法,能够根据用户输入的出发站和目的地,计算出最优的换乘方案,考虑到换乘时间、中转站点、车次间隔等因素,提供用户友好的换乘建议。
(3)用户体验:提供直观友好的用户界面,使用户能够快速、方便地查询到所需的换乘信息,同时考虑多种用户需求和使用场景,提供个性化的服务和建议。
(4)多样化需求:考虑到用户可能有不同的出行需求,需要提供多种换乘方案和选择,包括最快捷路线、最经济路线等,同时能够满足不同用户的个性化需求。
3. 计划实施方案(含功能模块划分、算法流程设计等)
前端: 采用Vue框架,分为以下两个模块:
(1)查询模块:包括三个输入框和查询按钮。三个输入框分别用于填写出发 地、目的地、出发日期,用户可以点击查询按钮进行查询方案
(2)数据展示模块:数据展示模块负责将查询结果以直观的方式展示给用户。它包括换乘方案的列表,显示换乘路线、中转站点、车次信息、出发时间、到达时间等。此外,还可以提供筛选和排序功能,以便用户根据自己的需求进行选择
后端: 采用Spring Boot框架,分为以下四部分:
Controller层:接受前端传来的参数,并将其解析,调用service层的接口进行 处理参数,并将结果返回给前端 Pojo层:定义一个实体类,用于封装数据,作为方法参数或返回值进行数据传输
Service层:定义一个接口,接收参数后调用算法模块,来计算出可行换乘方 案,对其进行排序后返回给Controller层
Exception层:定义异常,当程序产生异常时抛出异常代码,以便分析问题
算法: 考虑到实际情况,火车换乘次数不超过3次,最多乘坐4趟列车,可对最短路算法进行限制。 将火车始发站与其途径站视为一条单向边,由先经过的站点指向后经过的站点,每个站点视为一个点,构建成一个图。对于每个请求,将出发地视为起点,目的地视为终点。换乘最短路算法采用双向BFS算法,从起点出发,进行广度优先搜索(BFS),深度为2层。将搜索到的站点存储。
再新建一个图,将火车终点站与其途径站视为一条单向边,由后经过的站点指向先经过的站点,将目的地视为起点,出发地视为终点,从起点出发,进行广度优先搜索(BFS),深度为2层。将搜索到的站点进行存储。 将两次搜索到的站点进行比较,若有相同或为起点或终点,即视为有一条可行的换乘路径,存储起来。对于所有可行的路径,按不同的关键词(时间最短,路程最短,价格最低)进行排序,输出到文件中。
模拟数据:

4. 拟采用的数据结构及算法等
数据结构:
链表:对于每个点,以车次来构造边,用链表来存储
图:火车路线图可以用图来表示,火车站为其中的点,车次为节点之间的边。 这样就可以采取图的搜索方法BFS来搜索最短路。
数组:存储路线,列车车次,站点信息等信息 哈希表:快速存储和查询车站信息,列车信息等,提高数据检索效率
算法:
双向BFS:计算最短换乘路线,考虑到换乘时间、中转站点、车次间隔等因素,以提供用户换乘方案
排序算法:将双向BFS搜索出来的换乘路线按不同的关键字(换乘次数,时间等)进行排序。
工作量(阐述所选任务的工作量体现,包括具体的设计模块及预期代码量等)
前端部分:
1.查询模块:这个模块主要负责接收用户输入的出发地、目的地和出发日期,并将其传递给后端进行处理。工作量相对较小,预计代码量约为100-200行。
2.数据展示模块:这个模块负责将后端返回的查询结果以直观的方式展示给用户,包括换乘方案列表、路线信息、中转站点、车次信息等。同时,还需要实现筛选和排序功能。这个模块的工作量较大,预计代码量约为300-500行。
后端部分:
1.Controller层:这个层负责接收前端传来的参数,并进行解析和处理,预计代码量约为100-200行。
2.Pojo层:这个层主要负责定义一个实体类,需要定义具体参数和方法getter和setter,以及一些辅助方法equals,hashCode,toString等,预计代码量约为100行。
3.Service层:这个层负责定义接口,进行文件操作,并调用算法模块来计算可行的换乘方案,然后对结果进行排序并返回给Controller层。工作量较大,预计代码量约为200-300行。
数据模拟: 随机函数生成列车信息,包含票价,里程,中转站等信息,预计代码量100行。 算法: 使用文件输入或调用api读取火车车次信息,对其建立两个有向图,并分别进行双向BFS查找换乘信息,再进行排序,预计代码量200-300行。
工作计划安排(要明确中期检查及结题验收时的完成目标) 1.学习并研究各部分的语言逻辑、算法思路等,将后端的部分基本完善,并完成基本的前端界面 2.在中期已完成内容的基础上,进一步完善网页,并将前、后端的部分进行整合,形成一个功能基本完备的火车换乘参考网站的实际应用界面。
同组人员分工安排(若自行成组则写“独立完成”;多人同组则要分工明确,清晰列出每人所承担的具体任务安排) 独立完成
说明:每个课设小组需独立完成任务书,内容要完整、分工要明确;各组项目尽量不重复。
