前言

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

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

最后,其实界面部分我基本是直接沿用我之前写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日补充

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

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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐