交通咨询系统(数据结构课设)

前言

        这学期做了一个数据结构的课设, 我的选题是交通咨询系统。硬性要求是组队完成,但是其实整个系统基本都是我写的,为了队友,把算法部分的分给他了。

        然后呢,因为老师发的课设模板比较正规,所以我课设报告写了很多废话(选题分析、数据结构设计、算法分析),所以就不能直接复制课设报告给大家了。我就单独把系统展示的部分复制出来,详细的解释都在源代码里面了。

最后,其实界面部分我基本是直接沿用我之前写C语言课设的时候的模板,就是进行了一些优化吧。

选题题目

交通咨询系统设计(最短路径问题)

【问题描述】在交通网络非常发达、交通工具和交通方式不断更新的今天,人们在出差、旅游或做其他出行时,不仅关心节省交通费用,而且对里程所需时间等问题也感兴趣。对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。图中顶点表示城市,边表示城市之间的交通关系。这个交通系统可以回答旅客提出的各种问题。例如,一位旅客要从A城到B城,他希望选择一条途中中转次数最少的路线。假设图中每一站都需要换车,那么这个问题反映到图上就是要找一条从顶点A到B所含边的数目最少的路径。我们只需要从顶点A出发对图作广度优先搜索,一旦遇到顶点B就终止。由此所得广度优先生成树上,从根顶点A到顶点B的路径就是中转次数最少的路径。路径上A与B之间的顶点就是路径的中转站数,但只是一类最简单的图的最短路径问题。

设计要求

    设计一个交通咨询系统,能让旅客咨询从任一个城市顶点到另一城市顶点之间的最短路径(里程)或最低花费或最少时间等问题。对于不同咨询要求,可输入城市间的路程或所需时间或所需费用。

    该设计共分三个部分,一是建立交通网络图的存储结构;二是解决单源最短路径问题;最后再实现两个城市顶点之间的最短路径问题。

【我的分析】:
        使用图的邻接表来实现就好,算法用Floyd算法就好,一举解决单源和任意两城市的距离,权重又三个。

系统展示

执行代码后,会直接进入主菜单界面,不需要进行登录。

测试功能1,查询城市路线:

如果路线不存在会进行显示:

测试功能二,查看所有路线:

因为我们找的路线数据比较多,且没有实现换页数的功能,所以显示比较满。

测试功能3,查询可到达城市:

测试功能四,进入管理员界面:

在第一次进入管理员界面的时候,因为文件中没有保存有管理员账号,所以我们需要先进行注册才能进入管理员界面,而且,注册好了账号之后还是需要进行登录而不是直接就可以进入管理员界面了。当然,文件中有了管理员账号之后,就不会再让你注册了,而是直接登录。

(注册密码后还需要登录)成功进入管理员界面:

测试管理员功能1,修改密码:

先输入7查看管理员账号。

在文件中:

一般来说,任意一名管理员是不能查看管理员的用户名和账号密码的,但是为了系统方便进行测试和更加友好,我们就设置了查看管理员的功能。

然后我们进行密码修改:

再次进行查看:

在文件中的数据也已经被修改了:

可以看到,密码已经成功进行修改了。

然后测试管理员功能二,修改/更新路线:

先输入4查看路线中的数据:

然后我们修改第一条路线的数据:

进行查看:

可以看到,第一条路线已经被成功修改了。

但是,如果输入的城市名称在文件里找不到,系统就会阻止进行路线的修改:

测试管理员功能三,添加路线:

对路线进行查看:

可以看到,路线的第六行已经显示路新添加的路线,说明路线添加成功。

测试管理员功能六,注册管理员账号:

再进行查看,说明注册成功。

我们对管理员的人数有限制,不能超过十个人,当管理员已经满十个人时,无法进行管理员账号注册:

测试管理员功能八,注册管理员账号:

进行查看:

说明账号已经成功的注销了。

测试管理员功能九,修改管理员用户名:

查看:
 

测试管理员功能五,退出管理员界面:

退出管理员界面时会直接return出管理员界面函数,然后重新进入管理员界面(就像递归返回上一层一样)。

最后测试主菜单界面的功能0,退出咨询系统:

写代码过程中出现的bug

        1、因为插入邻接表的时候使用头插法,导致每次保存文件路线会倒置,改为尾插法插入后解决。

        2、其它都是一些调试过程中出现的bug。(竟然找不到可以说的bug了,确实,写的过程感觉挺顺的,可能是因为有经验了)

我认为的存在的无关紧要的bug

        1、没有对管理员用户名、账号、密码进行具体的限制。

        2、没有对图中的城市名称、三个权重进行具体的限制。(爆int)

        显然,这些bug基本没必要去解决,我也是比较懒啦,一般哪有路线的路费、里程和时间会爆int的。

源代码

        点击这里获取源代码(实际就是另一篇博客,免费的)

参考文献

[1]陈越主编;何钦铭等编著.数据结构[M].高等教育出版社(第二版),2016.6

[2]放码过来呀!!!.C语言文件读写操作(详解).

C语言文件读写操作(详解)_放码过来呀!!!的博客-CSDN博客_c语言文件读写.2022.5.4.

[3]HawaiiHello.C语言隐藏密码效果实现.

C语言隐藏密码效果实现_HawaiiHello的博客-CSDN博客_c语言如何实现密码的隐藏.2022.5.4

[4]Milo Yip.如何用C语言画如何用 C 语言画「心形」?.

如何用 C 语言画「心形」? - 知乎 (zhihu.com).2022.5.4

[5]Coder802.C语言获取当前日期及时间.

C语言获取当前的日期及时间_Coder802的博客-CSDN博客_c获取当前日期时间.2022.5.4

(参考了自己写的博客算不算呢。。。。。)

结语

        嗯,因为没多少时间,现在已经是期末了,为了不挂科我只能快速的写完,然后去复习了。源代码是免费提供的哦,所以能不能求一个点赞呢[可怜.jpg]

2023年1月10日补充

        不知道为什么,发现很多人要文件,实际里面的数据就是随便写的,数据也是随手造的,按一定格式就好,不过我也把我的放在这吧,也就几十条数据。将数据复制后保存到项目目录下的path.txt文件里面就好。

北京 上海 1000 1000 1000
北京 南京 1000 650 540
北京 济南 420 280 180
北京 杭州 1300 850 840
北京 天津 150 100 120
北京 青藏高原 1000 2000 999
北京 广西 1000 1000 100
上海 桂林 1500 850 840
上海 厦门 1000 750 480
上海 成都 2000 1100 1200
上海 杭州 200 150 120
上海 南京 300 150 180
上海 贵阳 1800 1000 960
上海 贵港 1800 1150 870
南京 遵义 1500 1000 780
南京 贵阳 1600 900 750
南京 贵港 1600 1050 690
南京 厦门 1100 850 570
南京 杭州 300 150 120
济南 厦门 1600 950 810
杭州 厦门 900 550 390
杭州 天津 1100 750 450
杭州 南宁 1700 1100 306
天津 厦门 2000 1300 1080
桂林 贵阳 460 270 210
桂林 贵港 320 150 90
厦门 遵义 1500 800 720
厦门 贵阳 1500 800 600
厦门 贵港 1050 650 510
厦门 成都 1900 1250 1110
厦门 南宁 1200 750 600
成都 遵义 550 360 240
成都 贵阳 660 300 240
成都 贵港 1300 650 630
贵阳 遵义 160 70 60
贵阳 南宁 580 350 240
贵港 遵义 800 550 360
贵港 南宁 150 85 42
遵义 南宁 700 400 360

2023年6月2日补充

        直接把我的实践报告放在这了吧,把一些带个人信息的去掉了。数据结构实验报告去个人信息版

        嗯,其实没多少东西,都是凑字数写的。看看就行。能有帮助更好了。

  • 119
    点赞
  • 278
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 38
    评论
设计、实现一个全国大城市间的交通咨询程序,为旅客提供三种最优决策方案:一是建立交通网络图的存储结构,二实现两个城市间的最短路经问题。程序所具有的功能特色本程序主要目的是为了给用户提供路径咨询。实现了帮助用户了解全国各大城市间往来的最短路径问题,第二,可以提供用户查询各大城市的相关信息。本程序最大的特点是支持用户自己添加城市信息及城市,或添加城市的路径,既就有可扩展性 该程序所做的工作的是模拟全国交通咨询,为旅客提供三种最优决策的交通咨询。此程序规定: (1) 在程序中输入城市名称时,需输入10个字母以内的字母串;输入列车或飞机编号时需输入一个整型数据;输入列车或飞机的费用时需输入一个实型数据;输入列车或飞机开始时间和到达时间时均需输入两个整型数据(以hh:mm的形式);在选择功能时,应输入与所选功能对应的一个整型数据。 (2) 程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才能到达,或最少需要多少次中转到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。 (3) 程序的功能包括:提供对城市信息的编辑,提供列车时刻表和飞机航班表的编辑,提供三种最优决策:最快到达、最省钱到达、最少中转次数到达。
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoyuer2815

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值