校园导航系统java具有gui,[数据结构大作业]HBU Guide 河北大学校园导航

[数据结构大作业]HBU Guide

河北大学校园导航

校园导航问题

实验报告介绍:

博客园 https://www.cnblogs.com/hx97/p/11967398.html

CSDN https://blog.csdn.net/shiliang97/article/details/103339031

【问题描述】

以我校为例,设计一个校园导航系统,主要为来访的客人提供信息查询。系统有两类登陆账号,一类是游客,使用该系统方便校内路线查询;一类是管理员,可以使用该系统查询校内路线,可对校园景点路线可编辑。

【需求分析】

设计学校的平面图,至少包括10个以上景点(场所),每两个景点间可以有不同道路,且路长也可能不同,找出在游人所在景点到其他景点的最短路径,或游人输入的任意两个景点的最短路径。 要求: (1) 以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,路径权重为路径长度。 (2) 为游人提供任意景点相关信息查询。 (3)为游人提供任意景点的问路查询,即任意两个景点之间的最短路径。

9d9bcdd374cbbe72f57e272f450b6205.png

text

d61c0db627f9685735baabf1538b4637.png

实现提示: 一般情况下,校园道路是双向通行的,可设计校园平面图是一个无向图。顶点和边均含有相关信息。 选做内容: (1)提供图的编辑功能:增删景点;增删道路;修改已有信息等。 (2)校园导游图的仿真界面。

2c3067a1d8e4c0b4aece61cf9511751a.png

text

cd25564a17b618f8991887210e7eb5b4.png

text

TODO

1.构建函数列表 2019年11月30日21:36:15

2.构造存储数据结构体 2019年11月30日21:36:17

3.编写用户管理员登录界面,以及函数调用。 2019年11月30日21:36:19

4.完善各个函数功能。

函数列表

//景点介绍

void introduct (void){

return;

}

//查找游客所在景点与其他景点的距离

void Dijkstra(void){

return;

}

//查找游客指定的两个景点间的最短路径长度

void Floyd(void){

return;

}

//修改景点信息

void modifyInfo(void){

return;

}

//添加景点

void addInfo(void){

return;

}

//删除景点

void delInfo(void){

return;

}

//添加道路

void addPath(void){

return;

}

//删除道路

void delPath(void){

return;

}

//生成图

void create(void){

return;

}

数据结构实验报告

【概要设计】

1. 抽象数据类型定义:

(1)景点 顶点名称 代号 顶点信息简介

Typedef struct{

Int num;

Char name[100];

Char features[200];

} VertexType;

(2)图的存储结构:

Typedef int EdgeType;

Typedef struct{

VertexType vexs[MaxVertexNum];

EdgeType edges[MaxVertexNum][MaxVertexNum];

Int n, e;

} MGraph;

2 主要功能模块

(1)创建图的邻接矩阵存储结构 create()

(2) 浏览图中任一景点介绍

(3) 修改景点信息

(4) 增加景点信息

(5) 删除景点信息

(6) 增加道路

(7) 删除道路

(8) 查找某一景点到其他景点的最短路径

(9) 查找任一两个景点之间的最短路径。

//景点介绍

void introduct (void){

return;

}

//查找游客所在景点与其他景点的距离

void Dijkstra(void){

return;

}

//查找游客指定的两个景点间的最短路径长度

void Floyd(void){

return;

}

//修改景点信息

void modifyInfo(void){

return;

}

//添加景点

void addInfo(void){

return;

}

//删除景点

void delInfo(void){

return;

}

//添加道路

void addPath(void){

return;

}

//删除道路

void delPath(void){

return;

}

//生成图

void create(void){

return;

}

3 主模块流程

管理员登陆,可实现(1)-(9)功能操作 游客登陆,在(1)基础实现基础之上,可实现 (2)(8)(9)功能操作

printf("请输入您的密码:");

char password[PASSWORDLENGTH];

scanf("%s",password);

getchar();//一定要吃回车,不然影响下一次输入

if(strcmp(password, PASSWORD)==False) {

printf("密码正确,即将进入系统\n");

Administrator();//转入超级管理员界面

}else{

system("cls");

printf("----------密码错误---------\n");

printf("系统将在1S后回到主面板");

Sleep(1000);

system("cls");

}

break;

default:

printf("即将在1s后退出系统,感谢您的使用。");

Sleep(1000);

return 0;

【详细设计】

用C语言定义相关数据类型

(1)景点 顶点名称 代号 顶点信息简介

Typedef struct{

Int num;

Char name[100];

Char features[200];

} VertexType;

(2)图的存储结构:

Typedef int EdgeType;

Typedef struct{

VertexType vexs[MaxVertexNum];

EdgeType edges[MaxVertexNum][MaxVertexNum];

Int n, e;

} MGraph;

写出各模块伪代码算法

d61c0db627f9685735baabf1538b4637.png

画出函数间的调用关系图

b3211ab1c7664e7f1cfd44d3887c6545.png

【调试分析】

调试中遇到的问题及对问题的解决方法

遇到算法查询最短路径问题,查找弗洛伊德算法和迪杰斯特拉算法

通过搜索引擎,借鉴前人的思路和方法,进行学习和总结。

算法时间复杂度和空间复杂度

时间复杂度 n* n

空间复杂度 存储信息 n * n

【使用书说明及测试结果】

4354d87aba6b995c0c6b9a6572abf723.png

登录界面

ee0c22de44680ca62777f123a5947670.png

游客界面

4921f39484d689d73e098ddabafafe83.png

管理员登录

c5b67afd94df115fe4e4ce2ffcbdfba5.png

管理员系统

346dbf1681438609ab6f8dda9dacbbbe.png

景点描述

b5174d9d701388ac168f199e961b4092.png

最短路径查询

68a014f4fcb8ae3ec14b02f246162f02.png

删除功能

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现简单的查询,各风景的查询,调用各函数,实现课程设计的目标。其中包含三个功能,一个是直接进入导航系统,利用主函数中已有的数据,进行查询:一个是进行创建数据,本程序中初始数据为农大的导航数据,如果需要也可以自己建立一个;最后一个是退出功能。设计该函数的目的是为了能够多次得应用dijkstra函数进行查询最短路径。同时该函数可以列出各景点的代号和对应的名称,这样大家只要输入代号就行了。方便进行查询。下面分别描述这些函数,建立它们函数原型。 1、主函数 函数原型:void main(void) 功 能:控制程序。 参 数:void 返 回 值:void 要 求:管理菜单命令并完成初始化。 2、菜单选择和处理函数 函数原型:int menu() 功 能:处理选择的菜单命令并接收用户选择的命令代码。 参 数:int 返 回 值:int 工作方式:返回命令代码的整数值,根据命令,调用相应函数。 要 求:只允许选择规定键,如果输入不合要求,则提醒用户重新输入。 3、建立邻接矩阵函数 函数原型:void createadj() 功 能:重新建立一个学生信息的记录。 参 数:void 返 回 值:void 工作方式:在需要的时候就可以有主菜单中调用 void createadj()函数。 要 求:必需输入信息记录,然后才能调用出search()函数进行查询。 4、dijkstra函数 函数原型:void dijkstra(intx,inty) 功 能:求两点间的最短路径 参 数:void 返 回 值:void 工作方式: 该函数被其它一些函数调用。 5、结束程序 函数原型:int Exit() 功 能:使程序正常结束运行 参 数:int 返 回 值:1 工作方式:在操作都完成后,可以调用int Exit()函数,使函数最终返回 1 运行exit(1),程序正常结束。 要 求:运行Exit()函数后可以选择是否要保存,选择y则先保存再返 回1值;如果选择n直接返回1值。详细的程序设计应从下到上,在本设计中就要先设计createadj函数;然后设计dijkstra函数;接着是search函数;menu函数;最后才是main函数。如此设计能大大提升设计速度,因为从下往上使编程时的高试过程简单许多,而做课程设计花费时间最多的就是调试过程。对于各函数的详细设计,各函数的N—S图如下: (1)Createadj函数 (2)Dijkstra函数          (3)Search函数          (4)Menu函数          (5)main函数          2.4 程序编码   把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言,使程序中逻辑概念清楚;编写过程中参考各种的教材和材料,使程序编写的正确性大有提高,同时也许到许多实践知识,增加了实践经验。 2.5 程序调试与测试    程序编写总是出现各种各样的错误,但是难点不是修改错误,而是找出错误。在大量的源程序中找出错误难度很大,但有了一定的方法,就能节省大量的时间,在这次课程设计中我运用的调试方法主要有2种:     一是借助调试工具。利用Turbo C中提供的程序专门调试工具Debugger程序,可以很容易找出程序中的各种语法错误。但是遇到一些逻辑错误时却又无从着手。这时我就用下面一种方法。     二是在程序中插入打印语句。猜测出大致的错误位置,选则一些主要变量,在关键部位插入打印语句,打印出这个主要变量,看其是否与理论上的一样,在多个位置插入,如果有个位置的值与理论值一样,另一个位置与理论值不一样,则错误就落在这两个位置之间,然后再多测试几个位置缩小范围,直到找出错误。  例如;我在调试main()主函数时,程序能够运行,三个选项都能选择,创建函数能够正常运行,也能正常退出,但在选第一条进入校园导航后,打印出来的列表却是空的,源程序中的初始化数据没有显示出来,我又尝试输入两个结点进行查找,发现没有输出路线,所以我猜测初始化数据没有被正常写入。但不知道为何没有被正常写入,首先怀疑是初始化时附值发生错误,查阅各种资料进行校验,发现没有错误。后来经过综合分析,发现最有可能是n值在search()函数中发生错误,于是我在search()函数中插入打印n 的语句,运行后发现输出的n为0,初始化数据中有11个结点,n应该为11,所以n 在这个地方发生错误,我又在main()主函数中打印出n 的值,n=11,是正确的。所以错误就在search()函数中,也就说是当运行case1,运行到search()函数时,n从11变为0,针对这个错误,我把变量n改为宏定义,因为n 是代表结点个数,不管在哪个函数中它的值都是一样的才对。改完后运行程序,成功! 本设计文件的注释如上,已给出详细的说明,下面仅以文件为单位说明各个函数的作用和特点,在必要的地方给予一定说明。  3.1、guide.h文件 使用条件编译。以下是头文件中语句 /********************************************* *头文件(.h) ********************************************/ #include "stdio.h" #include "conio.h" #include "alloc.h" #define n0 100 #define infi 32767 /*“无穷大*/ int adjmatrix[n0+1][n0+1];     /*邻接矩阵*/ int n=11; struct node             /*表结点*/ { char name[20];       /*下一个表结点与它们之间的距离*/ }place[12]={{"ShiDiGongYuan"},   /*表结点初始化,即写各景点名称*/    {"CangRongGongYu"},    {"YinHuiLou"},    {"TuoHuanGuanChang"},    {"DiBaShiTang"},    {"XiaoYiYuan"},    {"TuShuGuan"},    {"TiYuGuan"},    {"ZhongHuaGuanChang"},    {"ChuangXinLou"},    {"YiFuTuShuGuan"},    {"BoXueLou"}};  void createadj()          /*建立邻接表*/  void dijkstra( int x,int y)     /*dijkstra求最小生树*/  void search()            /*搜索最短路径*/  menu()               /*菜单函数*/          /********************************************* *建立邻接表 ********************************************/ void createadj()  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值