Advertisement

基于qt和mysql的地铁线路系统_课内资源 - 基于QT实现的可视化地铁换乘查询系统...

阅读量:

这个课程设计报告主要介绍了开发一个基于C++和Qt框架的地铁换乘指南应用系统。系统功能包括地铁线路查询、换乘查询以及动态添加线路和站点的功能。采用面向对象的方法进行系统设计,并使用Qt进行界面开发。项目中实现了站点和线路的数据结构,并利用Dijkstra算法求解最短路径问题。通过多次调试和技术学习解决了编程中的各种问题,并实现了高效的用户交互体验。整个项目从需求分析到实现再到测试优化,展示了完整的软件开发流程和技术能力提升的过程。

1 题目

目前上海地铁运营体系已具完善。该体系由多条地铁线路构成,在市区分布了百余个站点。基于此需求,现计划开发一个换乘指南打印系统。该系统可通过输入起终点信息自动输出相应的换乘路线图。其输出内容包含起始点、中转点及最终抵达点。

图形化显示地铁网络结构,能动态添加地铁线路和地铁站点

根据输入起点和终点站,显示地铁换乘指南

通过图形界面显示乘除路径

1.2 软件功能

核心功能涉及地铁网络线路查询、地铁换乘指南获取以及动态增添线路站点等。

线路图查看

通过浏览器端应用或PC端软件工具实现上海地铁网络线路图的浏览功能,在图形界面下支持键盘输入文字并实时显示在地图视窗中,并且支持利用鼠标拖动线条进行线路标注以及调节地图缩放比例等功能实现便捷的查询与分析操作

查看地铁线路信息,包括线路段、包含站点等

查看地铁站的详细信息,包括站点地理坐标、所属线路等

换乘指南查询

提供地铁换乘查询,可通过视图方便的查看乘坐路线和换乘路线

提供最小出行时间的换乘策略指南

提供最小换乘次数的换乘策略指南

动态添加线路

动态添加线路,可根据需要新增线路

动态添加站点,可根据需要新增站点

动态添加连接,可根据需要新增站点连接

文本方式简易添加,方便快捷

帮助

提供软件使用帮助和说明

关于

提供软件制作信息

本系统中所有功能基于面向对象的技术方案借助C++语言程序与QT框架实现了。后续将对具体实现细节进行详细说明。

1.3 设计思想系统分析,明确功能要求

在开发应用程序前通常会首先明确软件的需求是什么,在了解需要实现哪些功能之后才能进一步细化使用什么方法来实现。系统的架构是什么以及初步规划程序的基本流程和核心算法是什么呢?在仔细审题并明确功能需求之后开始进行下一步操作。

MVC模式系统架构

MVC模式即是基于模型-视图-控制器结构的设计模式。该软件架构模式通常被采用作一种典型的结构化设计方法,在本次系统设计中,主要采用了这一架构模式进行前后端分离。前端部分则着重于与用户交互的界面设计,在视图设计方面,则会关注如何呈现相关的数据信息。例如,在视图设计方面,则会关注如何呈现相关的数据信息。同时,在地铁网络线路图展示方面也会进行深入的设计。而后端部分则负责复杂的业务逻辑和数据处理功能移交给后端服务器处理,并通过函数接口实现数据交互与通信机制。

设计后端数据结构和接口

本次开发的应用程序系统,在开发过程中涉及的数据结构基础已经形成完整的体系。其中,在具体实现中采用图模型来描述网络线路之间的连接关系,并利用队列被优化算法运行效率;静态数据采用线性表形式存储;同时为了提高查找速度和空间利用率,则引入了哈希映射技术建立名称与存储位置之间的对应关系。经过对相关数据结构进行深入分析后,并基于具体需求设计前端与后端系统的接口架构。其中主要包括最短路径查询功能、新增线路和站点操作等核心模块。

分块实现,逐步求精

在系统结构、数据结构以及算法等相关设计完成后

数据结构分析

本项目旨在规划一种高效的数据模型来表示交通系统中的站点、线路及其相互关联的关系,并配套相应的算法实现。在该模型中,默认情况下所有线路与站点名称均被设定为唯一标识符。当构建网络拓扑关系时,默认情况下,默认情况下,在这种复杂性使得采用图论模型来表示尤为合适。对于每一个站与每条线路而言,在实际应用场景中不会涉及删除操作的问题,在数据处理频率上考虑优先选用数组(顺序表)作为存储方案。但存在必须满足的添加条件:即每当新线或新站加入系统时必须满足一定的条件约束;而在线路间建立联系的操作则较为频繁地执行查询操作的需求。因此,在数据处理频率上考虑优先选用数组(顺序表)作为存储方案;通过建立哈希映射关系实现各条目与其索引之间的快速对应查找机制以提高数据访问效率

核心算法流程

迪杰斯特拉算法求短距离换乘:

e0ab129a1d9c348b5d3418d6edddd1e6.png

1.4 逻辑结构与物理结构

1.4.1 站点

ebd31688e35222a82f0ba7c8d46a4770.png

1.4.2 线路

f22ec0c29eb55a7ba387c5625dc8b187.png

1.4.3 后端实现类

6304f1a50feea01386156d4057183343.png
095cb855b51995ae3a7c0fbbd1fcb1fa.png

1.5 开发平台

开发平台

计算机型号:惠普Pavilion M4

计算机内存:4.00GB

CPU:Intel Core i5 2.6GHz

操作系统:Windows 10 家庭版

开发语言:C++(C++11标准以上)

开发框架:QT

集成开发环境:Qt Version 5.9.1

编译器:MinGW 32bit

运行环境

可在上述集成环境下运行;

利用windeployqt.exe和Enigma Virtual Box完成集成压缩处理,并将其生成并发布为一个LinkListVisualizer.exe文件。该文件可在普通Windows机型上正常运行。

1.6 系统的运行结果分析说明

1.6.1 调试及开发过程

1.6.1.1 调试

本次开发主要运用的是基于Qt的新技术框架,并且该系统具有跨平台特性,在使用Qt Creator进行开发和测试过程中能够方便地调用相关的功能库。类似于Java那样的便捷性,在本项目中并未直接应用这些库类。然而 Qt 系统配备了高效的调试功能,在实际操作中偶尔会遇到一些小问题或简短的错误提示。我们只需向控制台输出一些关键数据即可帮助定位错误原因。

例如:

8b336040bb71151d1ee3931223ab8e44.png

输出:

3aef76cb8c65e890fa8f41ea2e54bc48.png

1.6.1.2 开发

在学习了Qt数据结构与算法实现设计题的相关知识基础上,在软件开发中逐渐掌握了Qt编程的基本规律与实现方法。通过深入学习相关技术文档与实践项目,在开发过程中逐渐形成了系统的理论知识体系与实践经验。在软件工程中遵循分层设计的思想,在具体实现时将系统划分为前后端两部分功能模块,并按照模块化设计原则逐步完成各功能点的设计与实现工作:首先针对系统的后端核心数据存储体系进行了深入研究,并提出了基于特定需求的数据存储方案;其次根据系统总体功能目标要求完成了关键算法的设计与实现;最后完成了前端界面与后端系统的服务接口设计工作,并实现了整个综合应用平台的主要功能框架搭建工作;经过逐步优化和调试实现了各功能模块之间的高效协作关系并最终完成了整个程序的开发任务

1.6.2 成果分析

1.6.2.1 正确性

经过多次不同角度的验证,程序表现的十分优秀,与预期没有任何差错。

换乘查询和最短时间查询

例如选择“上海汽车城”到“同济大学”,线路如下:

b212dee77a553dc3056ec441bcea806f.png

视图显示线路

4f3cac0707d7917841f94c3e68f96811.png

最少换乘查询

例如选择“上海汽车城”到“同济大学”,线路如下:

67dd4377281abcc8cfc8539b314b414e.png

换乘显示

bd239cb52913d7f452f8c6d198222b62.png

添加新线路成功

9d518e8b5ba5f6651a4608883522fffe.png

添加新站点成功

72e0254f7321c5ac05eadd1e5f56c148.png

地图显示新加站点

a17f94450433154d4b896fbda25a3bae.png

添加新连接成功

ab8e0d342f968fe7691635f41e9ea643.png

地图显示

509cc7d0587776149d2047a1c46c0be2.png

换乘检验

85bf2b7a55612129a5542311175e1e63.png

文本添加

4d7503b469d9d71d28e39078417edddd.png
0850ee3c78b13d1cee245c95ae99724d.png

添加后显示

8c1b99dc8241269c58523e4a206606f2.png

1.6.2.2 稳定性无论是在放大窗口或是小窗口程序都未有任何异常, 视图和右侧栏会根据窗口大小自动进行调整

运行速度非常快,所有操作都是在1s之内响应和得出结果

任何操作完成后都会立即完成。如新增线路及站点后,每个用户界面的数据会被即时更新,并呈现新增线路及站点。

经过多次调试和反复测试,程序没有任何异常情况

1.6.2.3 容错能力

本应用程序进行了大量针对用户输入和非法操作的容错处理。无论用户的操作如何变化,在系统中几乎没有发生非法情况。即便存在非法操作或异常输入,在系统中都会被及时捕获并进行处理。该系统具备良好的容错能力。

非法操作均有提示

12dc6ea1971581bb0c95885b84509102.png

输入利用控件保证输入的正确性;

为了确保数据合理性的有效传输, 我们采用了专门的设计方案, 该方案能够自动过滤并剔除无效的数据点, 包括任何非数字字符或其他不符合规范的信息

303e5c9b40631ee1fcced555ee51dc45.png

添加或选择只能从指定数据中选择:

f6235ccf545e94ea616ec45efb84999b.png

1.7 操作说明

基于题目设定下, 本应用程序主要包含两大核心功能: 换乘信息查询模块和动态线路规划功能模块. 在设定好的运行环境中进行程序运行.

1.7.1 视图查看

视图放大

点击工具栏中放大按钮

或选择“视图”下“放大”

或按下快捷键“Ctrl+L”

或直接在视图区域进行鼠标滚轮放大操作

可进行视图的放大,方便查看。

6c432687074f889972b891d207d3e011.png

视图缩小

点击工具栏中缩小按钮

或选择“视图”下“缩小”

或按下快捷键“Ctrl+S”

或直接在视图区域进行鼠标滚轮缩小操作

可进行视图的缩小,方便查看。

19758d4102ad047e3ec26981270bda5c.png

鼠标操作

鼠标除能直接放大和缩小视图外,在查看视图信息有重要作用:

鼠标滚轮直接放大缩小视图

通过鼠标点击后拖动,可直接进行视图移动

当鼠标悬停于站点时,系统可呈现与该站点相关的详细信息。例如,在'曹杨路'站悬停时,系统可呈现关于曹杨路地铁站的详细信息。

8b7c2c49983d9490b2d809e2629647df.png

当鼠标悬停于任意一条线上时, 系统会自动显示与该线路相关的详细信息;例如, 在"曹杨路"站至"镇坪路"线路之间悬停时, 能够显示与该线路相关的详细信息。

61603ea55c35a3931cef63fde395fa2a.png

1.7.2 换乘查询

选择起始和目标站点,直接选择即可,如下:

4cd8e87b3aca7d32333007bd8f9c815d.png

最小时间换乘查询

选择“起点站”、“终点站”、“换乘策略”为“所需时间最短”后,点击换乘,可得相应线路。

9ca2bea335cf6e82cf7c0aa7b0035125.png

在换乘之后的文本栏中会显示相应的路线信息,在视图区域中可以查看详细的路径信息。通过前面所述的视图操作能够方便地进行查看。

3b838b8a2edb490161a42afc615b1992.png

换乘次数最少查询

选择“起点站”、“终点站”、“换乘策略”为“换乘次数最少”后,点击换乘,可得相应线路。

7d71f4e74b8c54587bbccc396458b010.png

在换乘之后的文本栏中将具备相应的线路接续方法;在视图区能绘制出这些线路;通过前面所述的视图查看操作能够方便地进行查询。

8c15d5ce391441294d326fa8bdaefef9.png

完成换乘查询后,请您采取以下任一操作方式:单击下方图表按钮;或者在'视图'选项卡中选择'地铁线路图';亦可通过键盘快捷键Ctrl+M来重新查看网络线路分布情况。

673c0f9859cb3d3ee91e962af75e7335.png

1.7.3 动态添加

动态功能主要包括新增线路配置、服务站点设置、网络连接设置以及简单的文本输入与配置,在工具栏中提供示例界面。

0705754ecfb42ed8ffcc4129336ce194.png

在操作界面左侧找到并点击插入线路的功能项。单击工具栏中的"插入线路"按钮即可完成操作。此外,在'工具'选项卡的'添加'部分选择'线路'也是一个有效的方法。另外,在命令行界面中输入'Ctrl+Shift+L'也可以快速实现此功能

c79dccffc5ed52c8a450cf2fcc5f6e67.png

上述操作后弹出添加对话框,按相应操作可添加线路。

da088406f8863e9f80e339b2fcae2588.png

在插入页面布局选项卡后,在点击工具栏中的'新建网站'按钮时,请注意以下设置:首先,在'新建网站'对话框左侧区域输入想要保留的基础信息;然后,在右侧区域指定目标路径;最后,在底部确认后即可生成新网站

5f10b75eee411e8179d8a89ef68c4bd6.png

上述操作后弹出添加对话框,按相应操作可添加站点。

bf1e46f3b20d5f280636aa9780818e7a.png

链接

工具

进行链接操作,请您依次进行以下步骤:首先,在工具栏上找到并点击【链接

afdf2d37245586d364555e4ff94e5f97.png

完成上述操作后将自动生成一个对话框;通过执行相应的操作步骤即可添加连接项。(其中用户可以直接通过快捷方式快速定位目标站点)

db7221665b89b9ec8dd653852a0fd5d2.png

单击位于工具栏中的"插入"选项卡中的"链接"按钮;或者在菜单栏中找到"插入"→"链接"→选择文字作为链接内容;同时按下键盘上的Ctrl+S和T组合键(通常为Ctrl+Shift+S)。

08f4ea90f552a7b1cb655ec170f96a45.png

上述操作后弹出添加框,按提示输入即可。

2ef6bde9ef478f412340ae4e55aee781.png

1.7.4 工具栏和状态栏

在菜单中点击"查看"以展开展示"工具栏"与"状态栏"选项设置,在其前置选项框中勾选来决定是否显示具体内容。

d618eda4d2e663841a0b3127d632a7ec.png

无工具栏,如下:

0cd907c20eab3c365abf373e31ba7529.png

状态栏,如下:

389439cc595744a29caef532faa8e55e.png

2.1 所做的工作学习和运用了Qt5的编程架构和相关知识

独立完成课程设计中的综合应用题目的所有设计、编程实现、测试等工作

完成课程设计报告一份

2.2 总结和收获

2.2.1 能力提升

完成后, 我确实在自主学习方面取得了显著进步。在课程设计之前, 大部分编程知识都是通过老师的言传身受逐步传授给我们的。然而这些年间我所学到的知识尚算有限 学习的机会相对有限 自学能力也得到的有效锻炼也较为有限 但在完成了本次数据结构课程的设计工作之后 我们决定不再依赖于老师手把手教导的方式 而是采取更加主动的方式进行探索与实践 这样才能更好地培养自己的技术应用能力和独立解决问题的能力 在这个过程中 特别是针对计算机专业学生的自主学习能力培养显得尤为重要 对今后的技术与知识的学习而言 这将是重要的起点 现在我们已经掌握了如何快速学习一门技术的能力 对于未来的学习和工作中的各种挑战 已经做好了充分准备

2.2.2 收获

整个课程设计过程不仅涵盖了以往未曾接触的标准用户交互程序,并且从简陋的控制台程序发展到界面友好、美观且人性化的应用程序。这一过程不仅帮助我们打开了编程学习的一扇新的大门,并且在心态、自学能力以及解决未知问题的能力等方面都得到了全面提升。

具体而言,在学习 Qt 编程框架方面取得了深入掌握的成绩:全面掌握了 Qt 开发框架中的关键模块——元对象机制及其应用、基础控件的操作技巧以及与之相关的交互设计方法;同时对图形绘制功能模块(如图形节点渲染技术)和数据模型构建方法(如树状模型与表单视图)也进行了系统学习;此外对文件操作与资源管理相关的底层实现细节也有了一定的理解和实践能力;

掌握并熟悉了openstreetmap等开源地图数据的获取与提取方法,并在此过程中实现了对相关技术原理的理解与应用能力的进一步提升

在软实力方面,通过学习用户界面这一工具,为未来的编程学习打开了大门.在后续的学习过程中,我对编程产生了浓厚的兴趣并形成了持续探索的动力.通过自主学习完成课程设计任务,从而显著提升了个人的学习能力.在实际操作中,无论是软件设计还是具体编码工作,都会遇到各种各样的挑战与困难.面对这些难题时能够独立思考并找到解决方案,这大大增强了我的独立解决问题的能力.更重要的是,我建立了面对未知知识、困难与挑战时的坚定信心.

2.2.3 个人体会

在学习与实践的过程中,感悟与理解相当丰富;这里梳理出自己感受最深的几点经验。

首先明确关键任务应当优先处理以提升整体效能。由于个人对程序界面和细节的关注程度较高可能导致资源过度投入而影响整体进度建议应将主要精力集中在核心功能上即首先实现不可替代的基础模块随后逐步完善辅助功能最后才是细节优化这一循序渐进的方式能够最大化地提升工作效率避免陷入本末倒置的境地

第二段:所学的知识未必都能派上用场,在开发领域保持低些功利心的人更容易取得长远的发展。他们先确定需要用哪些知识再去学习,并且在实践中应用。在最初的学习阶段,请记住不要只停留在理论知识上。每天花时间阅读教材可能会让你觉得枯燥无味——结果发现过了几天后依然没有什么收获。因此,在遇到困难时及时调整方法并坚持下去至关重要。只有通过不断尝试与实践才能掌握正确的学习方法和重点。

全部评论 (0)

还没有任何评论哟~