基于c++实现的自助导游及信息服务系统【100011214】

您所在的位置:网站首页 python用户界面设计太费劲 基于c++实现的自助导游及信息服务系统【100011214】

基于c++实现的自助导游及信息服务系统【100011214】

2023-06-27 09:38| 来源: 网络整理| 查看: 265

一、实现方法 1. 校园平面图

2. 系统的功能模块图

在这里插入图片描述

3.模块功能说明

– 数据结构模块(Library)

该模块实现了基本的数据结构,为上层模块提供数据容器,同时实现了快速排序、折半查找、斐波那契查找、BFS算法、Dijkstra算法等重要算法。在本次实习中,我对数据结构层进行了细致的设计。在设计过程中基于C++11标准,使用面向对象的设计思想,应用了泛型编程,实现了一次编写多次运用,加强了代码的可重用性。为了防止命名空间污染,及命名重复引入了Structure命名空间。(Structure::Library API详见 附录一)

– 辅助工具模块(Util)

该模块包含函数返回和状态信息的枚举类、及用于和Windows API交互的UWP辅助工具类。设计函数返回值和状态信息的模块是为了能够清晰准确语意化的描述程序的状态信息,同时弥补C++异常处理不完善的部分。而UWPHelper主要是进行标准C++与C++/CX语言的数据交换(Util API详见 附录二)

– 程序控制器模块(Controller)

该模块仅包含两个静态成员变量(基于服务接口模块),用于在UWP中进行全局访问。

数据模型模块(DataModel)

该模块对于项目中如景点、路径、用户等信息进行了数据抽象和严格封装。

服务接口模块(Service)

该模块实现了程序的主要功能,在数据结构模块和数据模型模块的基础上,对于程序的所有功能进行了具体实现,利用辅助工具模块中的枚举类,为上层模块提供程序运行的详细状态信息。Service层不包含任何交互逻辑,仅执行数据操作,修改用户界面不影响整体的操作逻辑。(Service API详见 附录三)

– 用户界面模块(UI)

该模块本次使用了Microsoft提供的XAML及Windows API实现简单的用户界面,由于程序的底层抽象比较完整,可以很容易的移植到不同的用户界面而不影响程序的整体功能

4. 最短路算法流程图

流程图

5.代码实现 template void Graph::dijkstra(int s) { //assert: 0 priority(s) + weight(s, j))) { //对邻接顶点j做松弛 priority(j) = priority(s) + weight(s, j); parent(j) = s; } } for (int shortest = INT_MAX, j = 0; j < vNum; j++) { //选出下一最近顶点 if ((status(j) == UNDISCOVERED) && (shortest > priority(j))) { shortest = priority(j); s = j; } } } } Structure::Stack MapService::getShortestPath(Rank i, Rank j, int &shortestLength) { Structure::Stack path; _bjfuMap.dijkstra(i); shortestLength = _bjfuMap.priority(j); while (i != j) { path.push(_bjfuMap.vertex(j)); j = _bjfuMap.parent(j); } path.push(_bjfuMap.vertex(i)); return path; } 6.Markdown流程图绘制代码 Created with Raphaël 2.3.0 Start reset() 重置所有顶点、边的辅助信息 从参数获取路径起点st 并令其优先级为0 i = 0 i < vNum? i小于节点数目 status(s) = VISITED; 标记s已访问 parent(s) != -1 s的父节点不为空? type(parent(s), s) = TREE 边(parent(s), s)为路径树的一条边 j = firstNbr(s) 获取s的第一个邻居 j > -1? 邻居j存在? j未被发现 dis(j,st)>dis(s,st)+dis(j,s) dis(j,st)=dis(s,st)+dis(j,s) 令s为j的父结点 j = nextNbr(s) 获取s的下一个邻居 获取下一距离最近的点j s = j i++ End yes no yes no yes no yes no 二、实验结果 1.页面展示

在这里插入图片描述

2.功能测试

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

三、结论分析 1. 问题与解决方法

问题:

– 所有类均为.h,Visual Studio提示链接错误:多个类的函数重复声明。

– 拆分为.h和.cpp,Visual Studio提示编译错误:模板类函数声明找不到

– 解决方法:

C++中普通类声明和实现需要分开写,分别存为.h和.cpp

C++中模板声明和实现需要写在一起,如果一定要分开需要在.h中引入.cpp

2. 收获和体会

提升了C++的运用水平,对于封装、多态、继承、泛型、内存管理、文件读取等C++知识等运用更加的灵活。

对本学期学习的各种数据结构和算法有了更深刻的认识。

我通过书籍和网络学习到了简单的UWP应用程序的开发方式。

3. 尚存在的问题

查询所有路径时的DFS算法的设计问题,目前仅此算法在GraphMartix.cpp中实现,暂时无法通过调用Graph.h中已经实现的DFS算法进行所有路径查找

用户管理服务类中已经实现了新建用户、修改密码等功能,但由于时间问题UI框架暂未搭建完毕。

用户登陆部分,后台进行了密码校验以及异常处理,但密码错误时前台界面暂时无法再次弹出登录框。

– 根据逻辑要求需要接受对话框的返回结果,登陆界面为Windows::UI::Xaml::Controls::ContentDialog ^类型,Windows UWP应用程序弹出ContentDialog需要进行异步操作,UWP官方推荐的开发语言为C#,以上操作用c#代码表示为:await dialog.ShowAsync();,但是标准C++语言无类似关键字,若要用C++实现异步等待需要使用微软创建的C++/CX,或者在代码中引入C#的dll库。

♻️ 资源

在这里插入图片描述

大小: 2.07MB ➡️ 资源下载:https://download.csdn.net/download/s1t16/87553484 注:如当前文章或代码侵犯了您的权益,请私信作者删除!



【本文地址】


今日新闻


推荐新闻


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