数据结构课设

您所在的位置:网站首页 校园导游系统算法设计分析 数据结构课设

数据结构课设

2024-07-13 09:14| 来源: 网络整理| 查看: 265

         一月份的数据结构课设完成后,我对Python的了解也更加深刻。现将课设报告及源码开源,不足之处希望大家指正。源码我放在博客主页的资源中,需要的话大家自行下载(用户信息保存在 users.json 文件中,地图信息保存在 campus_map.json 文件中,源码在 main.py 中。)。

一. 设计目的

        本次课程设计旨在完善和拓展校园导航系统,使其更具实用性和用户友好性。通过该系统,用户能够轻松查询校园内地点信息、获取最短路径和相关路径信息,同时实现对校园平面图的灵活管理,包括地点和路径的增加、删除、查询等功能。在完善系统的同时,设计目的还包括强调对数据结构概念的深入理解和实际运用,培养学生在软件设计和实现方面的综合能力,尤其注重系统设计、用户体验和团队协作等方面的技能。

二. 设计内容

用户管理模块:

        提供用户登录、注册、注销功能。

        管理用户信息,包括用户名、密码、用户类型等。

        用户友好的登录和注册界面,通过弹窗给予用户清晰的反馈。

地图管理模块:

        管理校园平面图信息,包括地点和路径。

        提供地点和路径的增加、删除、查询功能。

        实现地图信息的存储和读取功能,支持从文件加载和保存到文件。

路径查询模块:

        实现最短路径查询算法,包括最短简单路径和带权长度最短路径。

        提供用户界面,让用户输入起始地点和目标地点,显示查询结果。

用户界面模块:

        使用 tkinter 模块设计用户界面。

        提供登录后的主菜单,包括查询地点信息、查询路径、相关路径查询、增加路线、撤销路线、增加新地点、撤销旧地点、查看地图、注销等功能。

系统运行模块:

        利用主循环实现系统的运行逻辑。

        管理用户登录状态,根据用户操作调用相应的功能模块。

异常处理模块:

        在关键位置添加异常处理机制,确保系统对用户输入非法或操作无效时能够给予清晰的提示。

文件操作模块:

        提供用户信息和地图信息的读取和保存功能,保证数据的持久性。

创新性和扩展性考虑:

        在用户界面和功能上添加创新性设计,如图形界面、动态演示等。

        在系统设计中考虑扩展性,使得今后可以轻松添加新的功能或模块。

三.概要设计 1.功能模块图;

        系统运行模块 用户管理模块 菜单信息模块 地图管理模块 路径查询模块 文件操作模块

2.各个模块详细的功能描述。

系统运行模块:

        功能: 管理整个系统的启动和运行,协调不同模块的交互。

        详述: 负责初始化系统,处理用户登录和退出系统的流程,维护用户当前状态,确保系统能够在用户进行不同操作时正常切换状态。

用户管理模块:

        功能: 处理用户相关的操作,包括用户登录、注册、注销和权限管理。

        详述: 提供用户注册、登录和注销的功能,验证用户身份,管理用户权限,确保系统安全可靠。与权限相关的操作如管理员功能在此模块实现。

菜单信息模块:

        功能: 维护用户可用功能列表,根据用户类型动态生成菜单。

        详述: 存储并管理用户可用的功能菜单,不同用户类型可能有不同的菜单权限。该模块与用户管理模块协作,确保用户在登录后能够看到并选择系统提供的各项功能。

地图管理模块:

        功能: 管理校园平面图的地点和路径信息,包括增加、删除、查询地点和路径。

        详述: 提供添加、删除、查询地点和路径的接口,维护整个校园平面图的数据结构。负责地点的坐标信息、地点属性等的管理。

路径查询模块:

        功能: 实现最短路径和相关路径查询算法,支持多种查询方式。

        详述: 包括最短路径查询和相关路径查询功能,根据用户输入的起点和终点,计算并返回路径信息。支持不同查询方式,如最短简单路径、带权长度最短路径等。

文件操作模块:

        功能: 处理用户信息和地图信息的文件读写操作,确保数据的持久性。

        详述: 提供从文件加载用户信息和地图信息的功能,以及将用户信息和地图信息保存到文件的功能。在系统启动和退出时,负责加载和保存数据,保证数据的一致性和可恢复性。

四.详细设计 1.功能函数的调用关系图

          

         

         

          

2.各功能函数的数据流程图

1、用户登录过程:

函数: login(username, password)

输入: 用户名和密码

处理: 验证输入的用户名和密码是否匹配系统中保存的用户信息

输出: 登录成功或失败的消息

2、用户注册过程:

函数: register(username, password, user_type)

输入: 新用户的用户名、密码和用户类型

处理: 将新用户信息添加到系统中保存的用户信息中

输出: 注册成功或失败的消息

3、查询路径过程:

函数: query_route(start, end)

输入: 起点和终点

处理: 使用最短路径查询算法和排序算法获取路径信息

输出: 最短路径和排序的可通行路径信息

4、添加新地点过程:

函数: add_location(vertex_name, x, y, data)

输入: 新地点的名称、坐标和其他信息

处理: 将新地点信息添加到系统中保存的地点信息中

输出: 无明确输出

5、移除地点过程:

函数: remove_location(vertex_name)

输入: 地点名称

处理: 从系统中保存的地点信息中移除指定地点

输出: 无明确输出

6、增加路线过程:

函数: add_route(start, end, weight=None)

输入: 起点、终点和路径权重

处理: 将新路径信息添加到系统中保存的路径信息中

输出: 无明确输出

7、移除路线过程:

函数: remove_route(start, end)

输入: 起点和终点

处理: 从系统中保存的路径信息中移除指定路径

输出: 无明确输出

8、查看地图过程:

函数: view_map_ui()

输入: 无

处理: 创建并显示包含地点和路径信息的地图界面

输出: 无明确输出

9、注销过程:

函数: logout()

输入: 无

处理: 注销当前登录用户

输出: 注销成功的消息

3.重点设计及编码

1. 路径查询算法:

算法选择: 系统使用深度优先搜索(DFS)实现路径查询算法。在实现中,使用递归方式搜索所有可能的路径,找到最短路径和按带权值排序的路径列表。

函数: shortest_path(start, end, visited=None, path=None)

具体实现:

使用DFS递归搜索所有路径。

记录已访问过的节点,避免循环。

返回最短路径。

2. 用户管理逻辑:

用户信息存储: 用户信息以字典形式存储在self.users中,包括用户名、密码和用户类型。

登录: 通过验证输入的用户名和密码,确认用户身份。

注册: 将新用户信息添加到self.users中。

注销: 将当前用户置为None,完成注销过程。

3. 地图信息管理:

地点信息存储: 地点信息以字典形式存储在self.vertices中,包括位置坐标等信息。

路径信息存储: 路径信息以字典形式存储在self.edges中,每个地点对应一个包含邻居和权重的列表。

地图文件存储: 使用JSON格式将地图信息保存到文件,以便在系统启动时加载。

增加新地点: 将新地点信息添加到self.vertices中,保存到文件。

移除地点: 从self.vertices中移除指定地点,并更新所有包含该地点的路径,保存到文件。

增加路线: 将新路径信息添加到self.edges中,保存到文件。

移除路线: 从self.edges中移除指定路径,保存到文件。

五.测试数据及运行结果 1.正常测试数据和运行结果

第一组:查询路径

数据:逸夫——安悦

运行结果:给出最简路径,并给出所有可通行路径且按照权值大小排序

第二组:增加点,增加边

增加点:

数据:aaa、200、300

运行结果:地图上显示一个点并标注名称为aaa

增加边:

数据:aaa、东升、200

运行结果:地图上通过直线将aaa与东升相连并标注权值为200

第三组:相关路径查询

数据:图书馆

运行结果:显示图书馆能到的所有地点并表明权值

2.异常测试数据及运行结果

第一组:登录出错

数据:nihoa、111111

运行结果:由于没有注册这个账号,所以会显示账号或密码错误

                               

第二组:查询没有的路径

数据:图书馆、西宛

运行结果:由于没有相关路径,所以会显示未找到相关路径

                       

六.调试情况,设计技巧及体会 1.  改进方案

不足之处:

        用户界面设计简陋: 界面以基本的文本和简单的弹窗为主,缺乏直观的图形用户界面(GUI),可能降低用户体验。

        算法选择: 路径查询算法采用深度优先搜索,这在大型图中可能导致性能问题。可以考虑更高效的最短路径算法,如Dijkstra算法。

        异常处理不完善: 目前的实现对于各种异常情况的处理较为简单,可以加强对用户输入、文件读写等方面的异常情况处理,提高系统的稳定性。

        代码结构: 目前代码虽然进行了模块化,但在某些地方还可以进一步优化,例如将界面和逻辑代码更好地分离,提高代码的可读性和可维护性。

改进方案:

        引入图形用户界面(GUI): 使用专业的GUI库设计直观友好的界面,提升用户体验。界面应该包括地图的可视化展示、用户交互等。

        采用更高效的路径查询算法: 考虑替换深度优先搜索算法为更高效的算法,如Dijkstra算法,以提高路径查询的性能。

        完善异常处理机制: 在关键操作中加入更多的异常处理机制,向用户提供清晰的错误信息,帮助用户理解并解决问题。

        优化代码结构: 进一步优化代码结构,确保代码清晰、模块化,提高可读性和可维护性。可以考虑使用面向对象的设计思想,将不同功能划分为更独立的类。

2.体会

        在设计和调试过程中,面对系统的复杂性和功能的丰富性,我深切体会到了设计的挑战。首先,确定合适的数据结构和算法对于实现一个校园导航系统至关重要。通过深入理解问题的本质,我选择了深度优先搜索算法来实现路径查询功能。这一选择的挑战在于确保算法的效率和准确性,需要细致考虑各种情况。

        在设计时,用户体验成为我的首要考虑因素。我着重于确保系统界面的直观性和操作的简便性,以提高用户的满意度。模块化设计是我的另一个关注点,通过将系统划分为小模块,不仅提高了代码的可维护性,还有助于更好地理解系统的结构和功能。

        在调试过程中,我采用了模块测试的策略。每完成一个功能模块的实现,我会对其进行单元测试,确保其功能的正确性。同时,我充分考虑了各种异常情况,实现了健壮的系统。给用户提供友好的错误提示是保障系统稳定性的一项重要工作。

        总的来说,设计和调试过程是一个不断挑战和提高自己的过程。通过对系统进行模块化设计、注重用户体验、深入理解问题本质以及灵活运用调试方法,我逐渐克服了面临的挑战,为系统的顺利实现和优化奠定了基础。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3