当前位置:文档之家› 数据结构课程设计-校园导航

数据结构课程设计-校园导航

课程设计报告
课程名称 数据结构课程设计
题目
校园导航
指导教师
设计起始日期 5.9~5.16
学院 系别 学生姓名 班级/学号 成绩
计算机学院 计算机科学与工程
一、 需求分析
本次实验设计的任务是实现一个简易的北京信息科技大学的校园导航平面图。设计要包 括下列要求:
设计你的学校的平面图,至少包括 10 个以上的场所,每两个场所间可以有不同的路, 且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。
五、 使用说明和测试结果
打开系统,首先会进入系统的主菜单: 1. 浏览各景点及简介 2. 查看所有游览路线 3. 选择出发点和目的地 4. 查看景点信息 5. 退出系统 用户可以进行如下操作: 1、如果你想浏览各景点及简介的话,请输入“1”,并回车。此时界面上将显示出各景
点的编号、名称及其简介。 2、如果你想查看某一景点的所有游览路线,可选择 2 操作。输入“2”,并回车。此时,
(3) 程序所能达到的功能:本程序可供任何人使用,主要功能 1.浏览各单位及简介; 2.查看所有游览路线;3.选择出发点和目的地求出最佳路径;4.查看某一单位信息。
(4)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。 a.首先看到的是校园导航系统的菜单:
b.查看浏览路线等待输入起始景点:
4、如果你想查看具体某些景点的简介及信息,可以选择 4 操作。输入“4”,并回车。此 时,系统会提示全部景点的对应的编号,选择你要查看的景点信息,输入其编号,回车,此 时,屏幕上将会显示出该景点的各种信息。若输入的景点编号错误就会有提示重新输入。
5、在主菜单键入“5” ,退出程序。
测试结果
1、 菜单界面
int i,j;
G.vexnum=10;
//十个景点
G.arcnum=14;
//邻接矩阵
for(i=0;i<G.vexnum;i++)
G.vexs[i].num=i;
//各景点的代码,名称及简介
strcpy(G.vexs[0].name,"前门 ");
strcpy(G.vexs[0].introduction,"面南.对面为北京外国专家大厦
");
strcpy(G.vexs[1].name,"图书馆 ");
strcpy(G.vexs[1].introduction,"藏书几十万册,设施良好,一二楼均有阅览室
");
strcpy(G.vexs[2].name,"教二楼 ");
strcpy(G.vexs[2].introduction,"学校的主要教学楼,共六层,有多个专业实验
int v,u,i,w,k,j,flag=1,p[10][10][10],D[10][10];//定义参数 for(v=0;v<G->vexnum;v++)
for(w=0;w<G->vexnum;w++) { D[v][w]=G->arcs[v][w].adj; for(u=0;u<G->vexnum;u++)
typedef struct ArCell
{
int adj; //路径长度
}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct //图中顶点表示主要景点,存放景点的编号、名称、简介等信息,
{
char name[30];
int num;
本课题实现校园多个场所(至少 10 个)的最短路径求解。 (1)输入的形式和输入值的范围:本系统主要数据类型为字符型 char 及整形 int,char 型主要包括单位编号,单位名称,单位简介,功能编号;输入功能编号与单位编号进行操作。 (2 ) 输出的形式:输出则通过已有的信息数据,通过相关的操作输出相应信息。
选择“退出系统”项,就会退出程序。
三、 详细设计
(1)十三个单位的图
0: 前门 1:图书馆 2:教二楼 3:实验楼 4:操场 5:教一楼 6:食堂 7: 水房 8:学一公寓 9:学二公寓 10:学三公寓 11:学四公寓 12:后门
(2)主程序流程图:
(3)弗洛伊德的算法: void Floyd(MGraph *G) {
//判断输入的景点编号正确与否
{
cout<<"景点编号不存在!请重新输入出发点和目的地的编号:";
cin>>k>>j;
}
if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum)
flat;vexs[k].name;
//输出景点名称
for(u=0;u<G->vexnum;u++)
七、 附录
#define INFINITY
10000
/*无穷大*/
#define MAX_VERTEX_NUM
40
#define MAX 40
#include<stdlib.h>
#include<string.h>
#include <iostream>
using namespace std;
#include <iomanip>
系统首先通过主程序调用 void main( );进入系统主菜单函数,根据用户的选择可分别 进入:1.浏览各景点及简介;2.查看所有游览路线;3.选择出发点和目的地求出最佳路径; 4.查看景点信息;5.退出系统。
选择“浏览各景点及简介”项,显示十个景点的有关信息,包括景点编号,景点名称, 景点简介。
经过一段时间来的努力,终于初步实现系统功能,但肯定还存在不少漏洞。这是我们 第三次做课程设计,也是第三次编写一个比较完整和具有一定功能的的系统代码,第二次几 个人合作制作系统,制作过程中存在储多的不足,遇到过许多的困难,曾经灰心丧气过,但 是最终还是坚持了下来,虽然做得不怎么样,但我们已经努力地去做了,由于基础也不怎么 扎实,所以困难会比其它组更多更艰巨。刚开始做系统缺乏全局观念,分工也不是很合理, 做得很零碎,所以在组合的时候也出现了很多问题。
");
strcpy(G.vexs[5].name,"教一楼 ");
strcpy(G.vexs[5].introduction,"学校各机关单位办公楼和双语教室
C.选择出发点与目的地 等待输入起始景点与目的地编号:
d.参看景点信息等待输入景点编号:
二、 概要设计
本系统包含一个文件。设计分有菜单,显示信息,弗洛伊德算法,迪杰斯特拉算法, 查找景点信息等程序段。主程序为整系统的入口处,菜单主要实现显示系统功能,显示信息 主要实现显示景点信息,弗洛伊德算法主要实现求两景点之间最短路径,迪杰斯特拉算法实 现求两景点之间最短路径,查找景点信息主要实现显示某一景点信息。
6、 输入要查询的景点编号错误,提示重新输入。 7、 退出程序界面。
六、 心得体会
做一个系统之前还应该做好全面的安排,对一个系统的整个流程及功能实现有一个很好 的统筹,几个人合作的功能可拆才拆,不可则由一个人主要负责,其它人帮忙思考,出 意见,做系统之前几个人必须先做对系统做一次较详细的探讨研究,然后才开始分工, 一个阶段后组员应互相交流情况,以达到一致。另在遇到困难时组员不能解决,应查资 料或问其它懂的同学,参考一下意见,再结合自己的想法,最后实现自己想实现的功能。
2、 进入“浏览各景点及简介”后,输出景点信息的界面。
3、 进入“查看所有游览路线”,显示输出景点编号为 0 的景点到其余九个景点的最佳 路线。
4、 进入“选择出发点和目的地”,输入出发点 1 和目的点 9 后输出的的最佳路线的界 面。
5、 进入“查看景点信息”,输入要查看的景点编号,输出景点信息的界面。
p[v][w][u]=0; if(D[v][w]<INFINITY) {
p[v][w][v]=1;p[v][w][w]=1; } } for(u=0;u<G->vexnum;u++) for(v=0;v<G->vexnum;v++) for(w=0;w<G->vexnum;w++)
if(D[v][u]+D[u][w]<D[v][w]) {
选择“查看所有游览路线”项,会进入输入起始景点编号的界面,输入正确编号后会显 示起始景点到其余九个景点的最短路线的方案。
选择“选择出发点和目的地”项,会进入输入起始景点与目的景点的界面,输入起始景 点与目的景点,并有空格隔开就得到两景点之间的最佳路径。
选择“查看景点信息”项,会进入输入要查看的景点的界面,如入后会显示该景点的有 关信息。
系统会提示你输入某景点的编号。输入编号后,回车,便可以看到该景点的所有游览路线。 若输入的景点编号错误就会有提示重新输入。
3、如果你想查看两个景点之间的最短路线的,可选择 3 操作。输入“3”,并回车。此 时,系统会提示你要输入起始景点与终点的编号。输入编号后,回车,此时,便可以见到这 两个景点之间的最短路径。
if(p[k][j][u]&&k!=u&&j!=u)
//输出路线
cout<<"-->"<<G->vexs[u].name;
cout<<"-->"<<G->vexs[j].name;
cout<<" 总路线长"<<D[k][j]<<endl; //输出总路线长度
相关主题