校园导游咨询系统课程设计报告
校园导游咨询系统课程设计报告
目录一、需求分析 (2)二、概要设计 (2)三、详细设计 (4)四、设计和调试分析 (9)五、用户手册 (9)六、测试结果 (10)1.操作命令符为s/S, (10)2.操作命令符为v/V, (11)3.操作符为v/V, (11)4.操作符为e/E, (11)5.综上可以查得: (12)七、附录 (12)参考文献 (13)校园导游咨询系统一、需求分析1.从福建农林大学的平面图中选取28个有代表性的景点,抽象成一个无向带权图。
以图中顶点表示景点,边上的权值表示两地间的距离。
2.本程序的目的是为了用户提供路径咨询,根据用户指定的始点和终点输出相应路径,或者根据用户指定的景点输出景点的信息。
3.测试数据(附后)。
二、概要设计1.抽象数据类型图的定义如下:ADT {struct arcnode{ int v;int w;struct arcnode *next;};struct node{ int degree;struct arcnode *first;}adjlist[28];}2.主程序V oid mian(){初始化临接矩阵windows(); / /初始化串口getch();}3.函数定义的变量#define infi 32767#define MAX 28int M,N; //无向图中的顶点M,无向图的变数int adjmatrix[MAX][MAX]; // 保存临接矩阵的2唯数组char *schoolIfo[MAX+1]={ //此数组用于界面显示信息"null","东台-dt","金1-j1","金2-j2","金3-j3","金4-j4","食堂-st","田径场-tjc","校大门-xdm","创业园-cyy","校医院-xyy","图书馆-tsg","映辉桥-yhq","观音湖-gyh","成教楼-cjl","生物楼-swl","博学楼-bxl","创新楼-cxl","明德楼-mdl","拓荒广场-thgc","南区公寓-nqgy","田家炳楼-tjbl","农大新区-ndxq","中华广场-zhgc","905终点站-zdz","蜂疗医院-flyy","研究生公寓-yjsgy","昌融学生街-crxsj","北区学生公寓-bqxsgy"};char *charcd2[MAX]={ //用于显示最短路径时走向的数组"校大门","金1","昌融学生街","创业园","东台","金2","田径场","拓荒广场","南区公寓","校医院","食堂","成教楼","创新楼","田家炳楼","农大新区","观音湖","金3","映辉桥","金4","明德楼","中华广场","905终点站","蜂疗医院","生物楼","博学楼","图书馆","研究生公寓","北区学生公寓"};char *charcd[MAX]={ //用于用户输入起始点与终止点时对应的数组"xdm","j1","crxsj","cyy","dt","j2","tjc","thgc","nqgy","xyy","st","cjl","cxl","tjbl","ndxq","gyh","j3","yhq","j4","mdl","zhgc","zdz","flyy","swl","bxl","tsg","yjsgy","bqxsgy"};char *infor[MAX]={ //介绍景点信息数组"校大门:\n 占不提供介绍","金1:\n 指金山大道的一处,由图可知","昌融学士街:\n 农大的小吃一条街,来农大一定要来尝尝!","创业园:\n 农大创业有志者的孵化地","东台:\n 农大老师所住之处","金2:\n 金山大道的第二处有图可看出","田径场:\n 农大的运动场地","拓荒广场:\n 大礼堂就在此处","南区公寓:\n 顾名思意,学生公寓","校医院:\n 希望你不要来","食堂:\n 学校八九十食堂都在这,不错蛮好吃的。
基于数据结构的校园导游咨询系统课程设计报告
重庆科技学院课程设计报告院(系):_电气与信息工程学院专业班级:计科普0902学生姓名:周杨学号: 2009441622设计地点(单位)____计算机基础自主学习中心I306___设计题目:_________校园导游咨询____________________ 完成日期: 2011 年 1 月 14 日指导教师评语: _______________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________ __________ _成绩(五级记分制):______ __________指导教师(签字):________ ________重庆科技学院课程设计任务书设计题目:校园导游咨询教研室主任:指导教师:向毅、陈刘奎、熊茜2010年 12 月 20日摘要现代快节奏的生活使得都市人越来越渴望亲近自然,因此外出旅游现在被越来越多的都市人所看中,所以如何快速方便的找到我们想要的旅游景点的信息和最短路径就成了一个很重要的问题。
本设计基于图的结构,创建一个无向图,针对游客的实际需求,将重庆科技学院的景点编号、名称、介绍等信息放入到图的顶点当中并保存在景点文本文件当中,将两个景点的编号和它们之间的距离当作权值也保存到权值文本文件当中,利用迪杰斯特拉算法来求从一个景点到另一个景点的最短距离,利用strcmp();函数来查找景点,并显示出它的信息,从而解决了要查找景点信息和景点之间的最短路径的问题,最后按照显示屏上的提示进行相关的操作。
齐鲁工业大学校园导游咨询系统设计报告
成绩:__________________ 校园导游系统设计报告学院名称理学院一、系统分析此次课程设计的主要内容是校园导航系统,所谓系统其实也不尽然,只不过是个小小的提示,为来访的客人提供各种信息查询服务。
主要包括:①查看学校的全景图②各个景点的简介③学校主要景点的分布④查看某一景点到其它所有景点的最短路径⑤查询任意两个景点之间的最短路径。
矚慫润厲钐瘗睞枥庑赖。
二、概要设计抽象数据类型的定义:ADT Graph{数据对象 V:V具有相同特性的数组元素的集合,称为顶点集。
数据关系 R:R={VR}VR={<v,w>|v,w∈V且P(v,w),<v,w> 表示从v到w的弧,谓词P(v,w)定义了弧<v,w>的意义或信息}聞創沟燴鐺險爱氇谴净。
基本操作P:CreateGraph(&G,V,VR);初始条件:V是图的顶点集,VR是图中弧的集合。
操作结果:按V和VR的定义构造图G。
DistroyGraph(&G)初始条件:图G存在操作结果:销毁图GLocateVex(G,u);初始条件:图G存在,u和G中顶点有相同的特征。
操作结果:若存在顶点u,则返回该顶点在图中的位置;否则返回其他信息。
GetVex(G,u);初始条件:图G存在,u是图中的顶点。
操作结果:返回u的值。
InsertVex(&G,v);初始条件:图G存在,v和图中的顶点有相同的特性。
操作结果:在图G中新增顶点v.InsertArc(&G,v,w);初始条件:图G存在,v和w是图中的顶点。
操作结果:在图G中增添弧<v,w>,若是无向图,还增添弧<w,v>。
}ADT Graph主程序流程(各函数之间的调用关系):Main();//主函数Initview();//景点信息的初始化InitLength();//各个景点之间距离的初始化log();//登录时的头部showmenu();//登录后的菜单browser();//全景图的浏览browse_view_info();//景点简介的查询browse_view_distribute();//主要景点的分布onetoall();//某一景点到其它所有景点的最短路径onetoone();//查询任意两个景点之间的最短路径三、详细设计#include<stdio.h>#include<string.h>#include<windows.h>#include<conio.h>#include<malloc.h>#define MAX 50#define TRUE 1#define FALSE 0#define INFINITY 10000typedef int **PathMatrix;typedef int *DistancMatrix;typedef struct view{ int no;//景点编号char name[100];//景点名称char briefinfo[1000];//景点简介}view;typedef struct edge{ //pathlength arcs;//两个景点之间的距离int length; char direction[4];//方向}edge;void showmenu(){printf(" 齐鲁工业大学主要景点列表 \n");printf("\t*********************************************************\n"); 残骛楼諍锩瀨濟溆塹籟。
校园导游咨询程序设计报告
数据结构课程设计设计题目:校园导游咨询学院:信息学院班级:计算机1008班姓名:学号: 20101221180日期: 2012 年 3 月校园导航问题[问题描述]设计一个校园导游程序,为来访的客人提供各种信息查询服务。
[基本要求](1)设计所在学校的校园平面图,所含景点不少于十个。
以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等信息。
(2)为来访客人提供图中任意景点相关信息的查询。
(3)为来访客人提供图中任意景点的问路查询,即查询任意两个顶点之间的一条最短的简单路径。
(4)校园导游图的景点和道路的修改扩充功能。
(5)扩充道路信息,如道路类别(车道、人行道),以致可按客人所需分别查询人行路径或车行路径。
(6)扩充每个景点的林洁景点的方向等信息,使得路径查询结果能提供详尽的导向信息。
(7)实现校园导游的仿真界面。
一、概要设计 (4)二、详细设计 (6)三、调试分析 (12)四、调用关系 (12)五、用户操作指南 (13)[测试数据]一、概要设计1. 数据类型#define V_MAX 20#define E_MAX 200typedef struct {char name[10];//名字//char code[10];//代码char info[20];//信息,简介int x,y;//坐标}VType;//顶点类型typedef struct {int live;//标记是否存在,如果被删除则为0,存在为1 char name[10];// 路名int length;//路的长度char ivex[10],jvex[10];//路(边)连接的两个顶点的名字int type;//表示道路类型,0表示两个都是,1表示人行道,2表示行车道}EdgeType;//边类型typedef struct AdjNode{int length;// 弧的长度char name[10];//关联的顶点的名字struct AdjNode *next;//下一条弧}AdjNode;//弧结点typedef struct {int live;//标记是否存在,如果被删除则为0,存在为1int flag;//标记是否被访问过VType data;//顶点的信息AdjNode *first_adj;//指向该顶点的第一条弧}VNode;//景点(顶点)结点typedef struct {VNode vex[V_MAX];//顶点数组EdgeType edge[E_MAX];//边的数组int v_num,e_num;}Graph;//图类型////////////////////////////////Graph G;AdjNode *p;2.基本函数////////////////////////////////void creatGraph(Graph &G);//创建校园图void load(Graph &G);//从文件中读取数据void save(Graph &G);//保存数据入文件int find_v(Graph G,char name[10]);//通过输入景点名字,返回该景点在vex数组里的下标void print_Graph(Graph G);//以邻接矩阵的形式输出图信息int direction(Graph G,char bname[10],char fname[10]);//用于判断并输出一个景点在另外一个景点的方位信息void search_view(Graph G);//查询并输出景点的所有信息void del_v(Graph &G);//删除景点void add_v(Graph &G);//增加景点void add_e(Graph &G)//增加道路void modify_v(Graph &G);//修改景点信息void del_e(Graph &G);//删除道路二、详细设计本程序由m.cpp、head.h、Menu.h、dijie.h4个文件构成。
校园导游咨询实验报告
本实验旨在通过设计并实现一个校园导游咨询系统,提高学生对数据结构在实际问题中的应用能力,培养编程实践能力和问题解决能力。
通过本次实验,学生能够深入了解图论在计算机科学中的应用,学会使用图论算法解决实际问题,并掌握Java编程语言在图形用户界面(GUI)设计中的应用。
二、实验内容1. 问题描述设计一个校园导游咨询系统,为来访客人提供以下服务:- 查询校园内景点的详细信息,包括名称、代号、简介等。
- 查询任意两个景点之间的最短路径。
- 提供从指定景点出发,游览所有景点的推荐路径。
2. 基本要求- 设计校园平面图,包含不少于10个景点。
- 以图中顶点表示校内各景点,存储景点名称、代号、简介等信息。
- 以边表示路径,存储路径长度等相关信息。
- 实现景点信息查询、景点间最短路径查询和推荐游览路径查询功能。
3. 数据结构- 采用邻接矩阵存储校园平面图,表示景点间的路径关系。
- 使用前趋结点数组辅助Floyd算法实现最短路径查询。
4. 算法- 使用Floyd算法计算任意两个景点之间的最短路径。
- 使用DFS算法结合贪心思想计算推荐游览路径。
5. 界面设计- 使用Java Swing实现图形用户界面,方便用户进行操作。
1. 需求分析- 与用户沟通,了解用户对校园导游咨询系统的需求。
- 确定系统功能,包括景点信息查询、景点间最短路径查询和推荐游览路径查询。
2. 系统设计- 设计系统架构,包括数据结构、算法和界面设计。
- 确定数据存储方式和算法实现方法。
3. 编码实现- 使用Java编程语言实现系统功能。
- 实现数据结构、算法和界面设计。
4. 测试与调试- 编写测试用例,验证系统功能。
- 调试系统,修复发现的问题。
四、实验结果1. 景点信息查询- 用户可以输入景点代号,查询景点详细信息,包括名称、代号、简介等。
2. 景点间最短路径查询- 用户可以输入两个景点的代号,查询它们之间的最短路径。
3. 推荐游览路径查询- 用户可以输入起始景点的代号,查询从该景点出发,游览所有景点的推荐路径。
数据结构校园导游咨询系统课程设计报告及课程总结.doc
姓名:班级:学号:指导教师:2012年12月目录1、需求分析 (1)1.1 系统简介 (1)1.2 系统功能模块介绍 (1)2、概要设计 (1)2.1 系统功能结构图 (1)2.2 系统流程图 (2)2.3 主要函数概要设计 (3)2.3.1 主函数概要设计 (3)2.3.2 初始化图函数InitGraph() (3)2.3.4 查询景点信息函数设计SearchGraph() (4)2.3.5 显示图中信息函数设计ShowGraph() (4)2.3.6 弗洛伊德算法函数设计Floyd() (4)3、详细设计 (4)3.1 主函数详细设计 (4)3.2初始化图函数详细设计InitGraph() (5)3.3查询景点信息函数详细设计SearchGraph() (6)3.4 弗洛伊德算法函数详细设计Floyd() (7)4、调试分析 (8)4.1 显示主界面函数测试 (8)4.2 查找两景点间最短路径测试 (9)4.3 查看景点信息测试 (10)5.课程设计总结 (11)6、附录 (12)1、需求分析1.1 系统简介随着现代社会生活节奏的加快,人们外出旅行以寻求放松的时间越来越多。
考虑到游客不可能对所有景点都有所了解,因此可能无法找到游玩景点最省时,最高效的路径,而人工导游成本又过高,故使用C语言,基于《数据结构》中图的相关算法开发了“江西农业大学校园咨询系统”。
开发本系统目的在于为来访我校的游客提供一条最短游览路径,本系统从实际出发,通过对校园平面图的分析,将其转化为数据并保存在系统中,因此系统提供的路径具有较大的可信性。
本系统界面友好,提示信息充分,在实际使用过程中运行良好。
1.2 系统功能模块介绍本系统主要分为以下三大功能模块:1、查询两景点最短路径:用户在选择此功能模块后,按照屏幕上方提示的景点名称及其对应的编号,要求用户输入起点和终点的编号,系统将在已存储的景点中进行匹配,若未找到所需查询的景点编号,系统将提示错误并要求用户再次输入。
校园导游系统课程设计报告
目录1、需求分析错误!未指定书签。
2、总体设计错误!未指定书签。
2.1抽象数据类型图的定义................................................. 错误!未指定书签。
4、总结报告错误!未指定书签。
参考文献错误!未指定书签。
1、需求分析设计一个校园导游系统程序,为来访的客人提供各种服务的信息查询。
(1).设计潍坊学院校园平面图,所含的景点不少于10个。
以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2).为来访客人提供图中任意景点相关信息的查询。
(2)查询模块景点信息查询:voidintroduce()/*景点介绍*/最短路径查询:intshortestdistance()/*要查找的两景点的最短距离*/voidfloyed()/*用floyed算法求两个景点的最短路径*/(3)打印模块打印最短路径:voiddisplay(inti,intj)/*打印两个景点的路径及最短距离*/2.1.3模块间的调用关系intpath[n][n];/*经过的景点*/ /*自定义函数说明*/ voidintroduce(); intshortestdistance(); voidfloyed();voiddisplay(inti,intj);voidmain(){inti,j;chark;for(i=0;i<=n;i++)for(j=0;j<=n;j++)cost[6][6]=cost[7][7]=cost[8][8]=cost[9][9]=cost[10][10]=0;while(1){printf("‖〓〓〓〓〓〓〓★欢迎使用潍坊学院导游系统!★〓〓〓〓〓〓〓‖"); printf("‖‖");printf("‖1.景点信息查询———————请按〖introduc〗键‖");printf("‖‖");printf("‖2.景点最短路径查询—————请按s〖shortestdistance〗键‖");printf("‖‖");printf("‖3.退出系统—————————请按e〖exit〗键‖");printf("‖‖"); printf("‖学校景点列表:‖");printf("‖‖");printf("‖1:学校南门2:操场3:体育馆4:行政楼5:一号宿舍‖");printf("‖‖");printf("‖6:二号餐厅7:天一教学楼8:洪德湖9:图书馆10:一号餐厅‖printf("输入信息错误!\n请输入字母i或s或e.\n");break;}}}voidintroduce()/*景点介绍*/{inta;printf("请输入您想查询的景点的编号:");scanf("%d",&a);getchar();printf("\n");switch(a)printf("7:天一教学楼\n学校主要教学楼之一。
(完整word版)校园导游系统课程设计
西安邮电大学(计算机学院)数据结构课程设计报告题目:校园导游系统专业名称:班级:学生姓名:学号(8位):指导教师:设计起止时间:一. 设计目的1.数据结构课程设计是让学生综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的应用系统的设计与开发2.通过课程设计,使学生通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
二. 设计内容1.完成校园导游咨询系统。
2.校园平面图(景点、路径等信息)3.利用深度优先和广度优先搜索搜索所有景点4.查询图中任意景点的相关信息5.问路信息(查询任意两个景点之间的一条最短的简单路径,任意两景点之间的所有路径)校园图的关节点、多个景点的最佳访问路线6.校园导游图的界面仿真。
7.添加删除道路信息。
三.概要设计1.功能模块图;选择显示标识信息2.各个模块详细的功能描述。
1.登录模块进入后可添加删除道路信息。
2.路线选择模块选择路线,在右侧窗口显示最短路径3.其他查询景点信息,查看深度优先遍历查看广度优先遍历四.详细设计*重点设计及编码//结点function Node(vexdata){this.vexdata=vexdata;this.node=[];this.weight=[];}//类定义function AdjList(vexnum,arr){this.vexnum=vexnum;this.arcnum=0;this.vertex=[];=[];//名称r=[];//信息this.flag=[];//标记this.arr=[];//存储路径this.ar=[];//存储路径2for(var i=0;i<this.vexnum;i++){this.vertex[i]=new Node(arr[i]);this.flag.push(0);}//增加结点this.addarc=addarc;//增加边this.addvex=addvex;//深度优先搜索this.dfs=dfs;this.edfs=edfs;//广度优先搜索this.guangdu=guangdu;this.guang=guang;//输出存储结构this.printf=printf;//求最短路径this.getpath=getpath;//输出景点信息函数this.printinfor=printinfor;}function addarc(a1,a2,weight){this.vertex[a1].node.push(a2);this.vertex[a1].weight.push(weight);this.vertex[a2].node.push(a1);this.vertex[a2].weight.push(weight);this.arcnum++;}function addvex(v){var temp=new Node(v);this.vertex.push(temp);this.vexnum++;}function edfs(flag,v,g,arr){arr.push(v);flag[v]=1;for(var i=0;i<g.vertex[v].node.length;i++){if(1!=flag[g.vertex[v].node[i]]){edfs(flag,g.vertex[v].node[i],g,arr);}}}function dfs(){var temp=parseInt(document.getElementById('last').value);this.arr=[];for(var i=0;i<this.vexnum;i++)this.flag[i]=0;edfs(this.flag,temp,this,this.arr);for(var i=0;i<this.vexnum;i++){if(this.flag[i]!=1) edfs(this.flag,i,this,this.arr);}var showpath="<b>深度遍历路线:</b>";for(var i=0;i<this.arr.length;i++){showpath+="->";showpath+=[this.arr[i]];}document.getElementById('footer').innerHTML=showpath; }function guangdu(temp,g){var v,k,w=temp;var que=[];que.push(w);g.flag[w]=1;while(que.length!=0){w=que[0];g.ar.push(que[0]);que.splice(0,1);k=0;v=parseInt(g.vertex[w].node[k++])while(k<g.vertex[w].node.length){if(g.flag[v]!=1){g.flag[v]=1;que.push(v);}v=parseInt(g.vertex[w].node[k++]);}}}function guang(){var temp=parseInt(document.getElementById('last').value);this.ar=[];for(var i=0;i<this.vexnum;i++)this.flag[i]=0;guangdu(temp,this);for(var i=0;i<this.vexnum;i++)if(this.flag[i]!=1)guangdu(i,this);var showpath="<b>广度遍历路线:</b>";for(var i=0;i<this.ar.length;i++){showpath+="->";showpath+=[this.ar[i]];}document.getElementById('footer').innerHTML=showpath; }function printf(){for(var i=0;i<this.vexnum;i++){document.write('<br>'+this.vertex[i].vexdata+" :");for(var j=0;j<this.vertex[i].node.length;j++)document.write('->'+this.vertex[i].node[j]+":"+this.vertex[i].weight[j]);}}function getpath(/*start,end*/){var start=parseInt(document.getElementById('first').value);var end=parseInt(document.getElementById('last').value);var mindist;var k;var a=[];var path=new Array(this.vexnum);//初始化for(var i=0;i<this.vexnum;i++){document.getElementById('b'+i).style.color='#000';}for(var i=0;i<this.vexnum;i++){path[i]=[];}for(var i=0;i<this.vexnum;i++){a[i]=10000;path[i][0]=0;}path[start][0]=1;for(var i=0;i<this.vertex[start].node.length;i++){a[this.vertex[start].node[i]]=this.vertex[start].weight[i];path[this.vertex[start].node[i]].push(start);}//找各条最短路径for(var i=1;i<this.vexnum;i++){mindist=10000;//找最小权值路径for(var j=0;j<this.vexnum;j++){if(!path[j][0]&&a[j]<mindist){k=j;mindist=a[j];}}if(10000==mindist) return;path[k][0]=1;//改变记录for(var j=0;j<this.vertex[k].node.length;j++){if(!path[this.vertex[k].node[j]][0]&&a[this.vertex[k].node[j]]>a[k]+this.vertex[k].weight[j]){a[this.vertex[k].node[j]]=a[k]+this.vertex[k].weight[j];path[this.vertex[k].node[j]]=[0];for(var t=1;t<path[k].length;t++){path[this.vertex[k].node[j]].push(path[k][t]);}path[this.vertex[k].node[j]].push(k);}}}//返回最短路径var showpath="路线:";for(var i=1;i<path[end].length;i++){document.getElementById('b'+path[end][i]).style.color='#fff';showpath+=[path[end][i]];showpath+="->";}document.getElementById('b'+end).style.color='#fff';showpath+="<b>"+[end]+"</b>";document.getElementById('path').innerHTML=showpath;}function printinfor(){var last=document.getElementById('last').value;document.getElementById('footer').innerHTML=r[parseInt(last)]; }五.测试数据及运行结果六.调试情况,设计技巧及体会每当写完一个函数的时候,都会出现很多错误,就这样坚持着改错误,慢慢的发现其实很多是由于自己粗心造成的,别的错误改多了就习惯了。
校园导游系统程序课程设计报告
一、需求分析设计一个校园导游系统程序,为来访的客人提供各类效劳的信息查询。
(1).设计工商学院校园无向图,所含的景点很多于10个。
以图中极点表示校内各景点,寄存景点名称、代号、简介等信息;以边表示途径,寄存途径长度等相关信息。
(2).为来访客人提供图中任意景点相关信息的查询。
(3).为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单途径。
二、设计思路校园旅行模型是由景点和景点之间的途径组成的,因此这完全能够用数据结构中的图来模拟。
用图的结点代表景点,用图的边代表景点之间的途径。
因此第一应设计一个图类。
结点值代表景点信息,边的权值代表景点间的距离。
结点值及边的权值用顺序表存储,因此需要设计一个顺序表类。
本系统需要查询景点信息和求一个景点到另一个景点的最短途径长度及线路,为方便操作,因此给每一个景点一个代码,用结构体类型实现。
计算途径长度和最短线路时可用弗洛伊德(Floyd)算法实现。
最后用switch选择语句选择执行阅读景点信息或查询最短途径。
3 算法设计概要设计3.1.1 程序中包括的模块(1)主程序模块主函数:void main(void)void cmd(void) cmd修改显示框大小,字体背景颜色,初始化景点,景点信息打印菜单,MGraph InitGraph(void); 3.1.2dj=INFINITY;[0][1].adj=80;/*途径度*/[0][2].adj=180;[0][6].adj=200;[1][11].adj=120;[1][2].adj=100;[2][5].adj=50;[3][4].adj=60;[4][9].adj=140;[5][9].adj=250;[5][7].adj=150;[6][7].adj=190;[6][9].adj=150;[8][7].adj=130;[8][6].adj=50;[10][12].adj=100;[9][10].adj=150;[3][4].adj=190;[5][13].adj=150;[14][7].adj=350;[2][3].adj=190;[2][9].adj=150;[2][11].adj=120;[0][8].adj=120;[1][2].adj=50;[10][12].adj=170;[12][15].adj=160;for(i=0;i<;i++)for(j=0;j<;j++)[j][i].adj=[i][j].adj;return G;界面菜单设计:菜单项选择择void Menu(){printf("\n 武汉工商学院院导游图\n");printf(" ┏━━━━━━━━━━━━━━━━━━━━┓\n"); printf(" ┃ 1.阅读校园全景┃\n"); printf(" ┃ 2.查看所有游览线路┃\n"); printf(" ┃ 3.确信两景点之间最短距离┃\n"); printf(" ┃ 4.查看景点信息┃\n"); printf(" ┃ 5.退出导游系统┃\n"); printf(" ┗━━━━━━━━━━━━━━━━━━━━┛\n"); printf("Option-:");}Menu();scanf("%d",&i);while(i!=5){switch(i){case 1:system("cls");Browser(&b);Menu();break;case 2:system("cls");ShortestPath_DIJ(&b);Menu();break;case 3:system("cls");Floyd(&b);Menu();break;case 4:system("cls");Search(&b);Menu();break;case 5:exit(1);break;default:break;}介绍景点:void Browser(MGraph *G){int v;printf("┏━━┳━━━━━━━━━━┳━━━━━━━━━┓\n"); printf("┃编号┃景点名称┃简介┃\n"); printf("┗━━┻━━━━━━━━━━┻━━━━━━━━━┛\n"); for(v=0;v<G->vexnum;v++)printf("┃%-4d┃%-20s┃%-60s\n",G->vexs[v].num,G->vexs[v].name,G->vexs[v].introduction);printf("┗━━┻━━━━━━━━━━┻━━━━━━━━━┛\n"); }要查找的两个景点的最短距离:用floyd算法求两个景点的最短途径void Floyd(MGraph *G)dj;for(u=0;u<G->vexnum;u++)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]){ D[v][w]=D[v][u]+D[u][w];for(i=0;i<G->vexnum;i++)p[v][w][i]=p[v][u][i]||p[u][w][i]; }while(flag){ printf("请输入动身地编号:");scanf("%d",&k);if(k<0||k>G->vexnum){ printf("景点编号存!\n请输入动身地编号:");scanf("%d",&k); }printf("请输入目的地编号:");scanf("%d",&j);if(j<0||j>G->vexnum){ printf("景点编号存!\n请输入目的地编号:");scanf("%d",&j); }if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum)flag=0; }printf("%s",G->vexs[k].name);for(u=0;u<G->vexnum;u++)if(p[k][j][u]&&k!=u&&j!=u)printf("-->%s",G->vexs[u].name);printf("-->%s",G->vexs[j].name);printf(" 总线路%dm\n",D[k][j]); }查看所有游览线路算法计算,引进一个辅助向量D,它的每一个分量D表示当前所找到的从始点v0到每一个终点vi的的长度。
校园的导游交通咨询系统
数据结构课程设计报告题目:校园的导游交通咨询系统学院:软件学院姓名:学号:专业:软件开发班级:指导教师:职称:二0一年月目录一.需求分析 (1)二.概要设计 (2)2.1算法的流程图 (2)2.2功能模块说明 (2)三.详细设计 (4)3.1 函数声明 (4)3.2 功能函数实现 (4)3.3 主函数 (16)四.测试分析 (18)五.心得体会 (21)一.需求分析现在大多数的学校由于不断的扩张,这也就使得学校不得不建立的更大。
这也就为人们拜访学校造成了很大的不便。
人们往往不熟悉学校,找个东西,或某处带来了极大的不便。
往往要花很多时间在这一方面。
然而要是有一个学校导游系统这将给乘客带来极大的方便,使人们一下就能了解到这个学校的大致的情况。
设计一个可向来访客人提供最短路径的校园导游交通咨询系统。
功能:这个系统给用户提供浏览该学校平面图、查询景点,浏览路径,寻找最佳的方案到达目的地,还提供了最佳路径。
实现的目标:(1).设计学校的校园平面图,所含景点不少于12个。
以图中结点表示校内各景点,存放景点名称、序号、简介等信息;以边表示路径,并存放其权值。
(2).为来访客人提供图中任意景点相关信息的查询,包括按景点编号和景点名称查询两种方式;提供图中任意景点的最短路径查询,并求出最短距离。
4:北区菽香楼食堂 5:教育超市 6:体育馆 7:北区田径场8:五教先骕楼 9:逸夫图书馆 10:农大正门 11:一教惟义楼二.概要设计2.1算法的流程图系统分析:用图的算法进行构造,用邻接表建立图,然后再用深度优先遍历进行搜索,查找所需的路径。
再用狄克斯特拉算法求出两个景点之间的最佳路径。
2.2功能模块说明2.1.1创建各景点及其信息函数(CreateInfor):建立无向图,把学校的景点及景点的信息,连接起来,并写入距离(权值),采用二维数组进行距离的存储。
2.1.2景点信息界面函数(GuideInfor):列出学校的所有的景点及其信息,采用printf输出函数和for循环语句。
《校园导游咨询》实验设计报告
设计题目:___校园导游咨询__一、需求分析及规格说明1、要求:用无向网表示学校的校园景点平面图,所含景点不少于十个。
图中顶点表示主要景点,存放景点的代码和名称等信息,图中的边表示景点间的道路,存放路径长度等信息。
设计一个校园导游程序,为来访的客人提供各种信息查询服务。
a)简易菜单管理,界面友好。
b)对城市信息(城市名、城市间的里程)进行录入和编辑(可选);c)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径,给出相应的距离。
d)对于任意两个景点之间的一条最短的简单路径,给出所经过景点的信息和距离。
对景点采用相应的字符选择。
2、功能:修改及查询校园各景点的信息3、测试数据:a)请输入出发景点:A 鲁迅像请输入到达景点:F 图书馆b)请输入出发景点:B 音乐楼请输入到达景点:H 体育馆二、概要设计1、数据存储结构:一个结构体数组存放各景点名及其编号;一个二维数组存放两景点间的距离;一个栈结构,存储最短路径所经过的各个点;以及多个辅助数组;2、算法思想:1)使用菜单页,选择不同的功能(修改距离、求最短路径、退出等),进行相应的操作;2)采用邻接矩阵作为数据的存储结构,打表,确定位置,修改距离值;3)利用Dijkstra算法,求两地间的距离,并输出其路径;4)主程序有简易菜单,选择功能模块执行,在程序运行过程中可以反复操作。
3、子函数:void init() //初始化各景点的名称、编号及两地已知距离等信息void list(int pos) //以表格的形式打印邻接矩阵string chto_string(char a) //将景点的编号转换为名称,返回void alter(int x,int y,int dist) //修改相应位置上的距离信息void Dijkstra(int s,int t) //求两点间的最短距离void output(int s,int t) //输出最短距离的路径bool menu(int step) //根据不同的操作序号,实现各自的功能4、主函数:int main(){//初始化景点的各个信息;//显示菜单页,提供修改信息、查最短路径的功能//根据键入的信息,进行相应的操作}三、详细设计1、数据类型:全局变量:int mat[10][10](两点距离) ,p[10](路径前去节点) ,dst[10](到起点的距离);const int MAX=INT_MAX/2(最大值); bool visited[10](结点是否访问过);stack<int> path(存放最短距离的路径);struct liocation // 存放景点的名称及编号信息{ char syb;string name;}school[10];2、基本操作:void init() //初始化各景点的名称、编号及两地已知距离等信息school[],mat[][];void list(int pos) //根据不同的pos,打印对应的表头,及其距离信息,表格的形式;若不连通则不输出string chto_string(char a) //根据给出的编号,搜索其对应的景点名称void alter(int x,int y,int dist) //修改相应位置上的距离信息,mat[x][y]=distvoid Dijkstra(int s,int t) //求两点间的最短距离{//初始化各个景点到起点的距离dst[]=mat[][],到起点的起始距离;//置起点的visited[]为true,即访问过;//循环进行9次以下操作:调整当前点与起点的距离,并记录其前驱点p[];}void output(int s,int t) //输出路径{//将记录下的路径p[],按顺序导入在栈中;(将其逆序)//逐个弹出栈中的元素,输出对应的路径信息,包括起点、中间点、距离;//输出全程最短行程的距离}bool menu(int step) // 菜单内容{//如果输入的操作序号有误,则提示,返回主菜单;//清屏;if(1修改功能){//打印表格,及对应的提示语句;//读取两个景点序号及两地的新距离;//覆盖原来的距离;//不再修改,则返回主菜单;//return true;}else if(求最短路径功能){//打印表格,及对应的提示语句;//读取正确的起点、终点编号,若不正确则提示,返回重新输入;//调用chto_string(char a),在编号旁,显示其对应的景点名称;//调用void Dijkstra(int s,int t),求最短路径;//调用void output(int s,int t) 输出对应的路径信息;//return true;}if(退出) return false;}int main(){//调用init(),初始化;//显示主菜单内容;//读取操作序号;//调用bool menu(int step),进行相应的功能;//if(menu的结果为false)则退出程序,否则重复进行;}四、调试分析1、打印表格的时候,输出有部分出现乱码。
数据结构课程设计实验报告《校园导游咨询系统》内含程
上海电力学院数据结构C++课程设计题目: 校园导游咨询学生姓名:学号:院系:专业年级:2011年7月1日一、设计题目校园导游咨询;1、实验目的(1)熟练掌握图的创建及遍历基本操作算法。
(2)熟练掌握最短路径算法。
(3)利用图的遍历和最短路径求解技术,设计一个校园导游程序,为来访的客人提供各种信息查询服务。
2、实验内容【问题描述】设计一个校园导游程序,为来访的客人提供各种信息查询服务。
【基本要求】(1)设计你所在学校的校园平面图,所含景点不少于10个。
以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点相关信息的查询。
(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一个最短的简单路径。
【测试数据】由读者根据实际情况指定。
【实现提示】一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。
顶点和边均含有相关信息。
【选作内容】(6)扩充每个景点的邻接景点的方向等信息,使得路径查询结果能提供详尽的导向信息。
二、小组成员分工说明略三、需求分析1)运行环境(软、硬件环境)硬件环境:windows2000、windows XP、windows7 皆可;软件环境:Microsoft (R) Developer Studio (2)2)输入的形式和输入值的范围输入形式:整形数据(景点代号、路径长度、地图上的方位信息),字符串(景点名称及简介);输入值范围:景点代号为:整形0~17(共18个景点)路径长度为:整形1~10(两景点间距离,以近似1::100m比例换算,最远1km)景点名称字符串长度:整形1~15(景点名称)字符串长度为:字符数组1~50(对景点进行简要介绍)景点在地图方位图上的位置:整形0~103)输出的形式描述景点代号、景点名称、信息的关联以cout形式输出,告知来访客人,以便查询;景点信息查询结果的输出形式为cout字符串;两景点间最短路径输出形式为cout字符串符号、以及嵌套的printroad()函数以显示路径信息及方位信息,方便客人获取最佳路线;4)功能描述(1)设计学校的校园平面图,所含景点18个。
校园导游系统程序--课程设计-报告
1、需求分析设计一个校园导游系统程序,为来访的客人提供各种服务的信息查询。
(1).设计工商学院校园无向图,所含的景点不少于10个。
以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2).为来访客人提供图中任意景点相关信息的查询。
(3).为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
2、设计思路校园旅游模型是由景点和景点之间的路径组成的,所以这完全可以用数据结构中的图来模拟。
用图的结点代表景点,用图的边代表景点之间的路径。
所以首先应设计一个图类。
结点值代表景点信息,边的权值代表景点间的距离。
结点值及边的权值用顺序表存储,所以需要设计一个顺序表类。
本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。
计算路径长度和最短路线时可用弗洛伊德(Floyd)算法实现。
最后用switch选择语句选择执行浏览景点信息或查询最短路径。
3 算法设计3.1 概要设计3.1.1 程序中包含的模块(1)主程序模块主函数:void main(void)void cmd(void) cmd修改显示框大小,字体背景颜色,初始化景点,景点信息打印菜单,MGraph InitGraph(void); //初始化图。
MGraph * CreatUDN(MGraph *G);//初始化图形接受用户输入void Menu(void);//菜单函数void Browser(MGraph *G);//浏览函数void ShortestPath_DIJ(MGraph *G);void Floyd(MGraph *G);//查询图中任意两个景点间的所有路径void Search(MGraph *G);//查找函数int LocateVex(MGraph *G,char*v); // 迪杰斯特拉算法计算起点各顶点间短路径,void print(MGraph *G); //输出函数(2)查询模块景点信息查询:void introduce()最短路径查询:要查找的两景点的最短距离:用floyd算法求两个景点的最短路径:(3)打印模块:void print(MGraph *G);3.1.2模块间的调用关系主函数main()调用void cmd(void)调用menu 并且用switch设置开关语句。
数据结构课程设计——校园导游咨询系统
数据结构课程设计——校园导游咨询系统在当今数字化的时代,信息的高效获取和处理变得至关重要。
对于一个大型校园来说,拥有一个便捷的导游咨询系统能够极大地提升访客和新生的体验。
本次数据结构课程设计的目标就是创建一个实用的校园导游咨询系统。
一、系统需求分析首先,我们需要明确这个校园导游咨询系统的主要功能和用户需求。
对于访客和新生来说,他们可能希望了解校园内各个景点的位置、简介,以及如何从当前位置到达目标景点的最优路径。
系统应该能够提供清晰准确的地图信息、景点介绍和导航指引。
从学校管理的角度出发,系统需要易于更新和维护,能够及时添加新的景点或者修改已有景点的信息。
同时,为了保证系统的稳定性和安全性,需要有一定的权限管理机制,防止未经授权的修改和访问。
二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储和管理校园的相关信息。
对于校园地图的表示,可以使用图(Graph)这种数据结构。
将校园中的各个景点看作图中的节点,景点之间的道路看作边,边的权重可以表示道路的长度或者行走所需的时间。
为了存储景点的详细信息,如名称、简介等,可以使用结构体或者类。
每个景点的结构体或类成员包含景点的标识符、名称、简介等属性。
对于路径搜索和导航,我们可以选择迪杰斯特拉(Dijkstra)算法或者 A算法来计算最短路径。
三、系统功能模块设计1、地图显示模块能够以直观的方式展示校园的地图,包括各个景点的位置和连接关系。
支持缩放、平移等操作,方便用户查看不同区域的细节。
2、景点信息查询模块用户可以输入景点名称或关键词,系统能够快速检索并显示相应景点的详细信息。
3、路径规划模块根据用户输入的起始景点和目标景点,计算并显示最优的行走路径。
能够提供多种路径选择,如最短路径、最少转弯路径等。
4、周边设施查询模块用户可以查询某个景点周边的餐厅、商店、卫生间等设施的位置。
5、用户管理模块只有授权的管理员能够对校园景点信息和地图进行修改和更新。
校园导游咨询管理系统软件设计报告书
课程设计题目校园导游咨询管理系统软件设计学院计算机科学与技术学院专业计算机科学与技术班级计算机0804班姓名王成鹏指导教师杜薇2012 年 1 月9 日课程设计任务书学生姓名:王成鹏专业班级:计算机0804指导教师:杜薇工作单位:计算机学院题目:校园导游咨询管理系统软件设计初始条件:1.预备内容:数据结构(图),软件工程,面向对象程序设计,数据库技术,编译原理,可视化编程2.实践准备:掌握一种计算机高级语言等相关的使用。
要求完成的主要任务:基本功能要求:(1)设计你所在学校的校园平面图,所含景点不少于10个。
将校内各景点的数据(景点名称、代号、简介等信息)和图片以图结构表示并保存于数据库。
(2)为来访客人提供任意景点相关信息的查询。
(3)为来访客人提供任意景点的问路查询。
(4)测试数据:自定。
(5)涉及技术工具:软件工程技术、数据库技术、UML工具、Java语言或C#语言等设计报告内容应说明:1.课程设计目的与功能;2.需求分析,数据结构或模块说明(功能与框图);3.源程序的主要部分;4.运行结果与运行情况分析;5.自我评价与总结时间安排:本学期第17-19周:1.查阅、消化资料,系统调查2天2.系统分析(采用UML工具) 3天3.总体设计,实施计划(采用UML工具) 3天?4.系统开发与实现(用指定语言工具) 5天5.撰写报告2天指导教师签名:2011年12月25日系主任(或责任教师)签名:年月日校园导游咨询管理系统1.课程设计目的与功能1)设计目的:为游客设计一个校园导游咨询管理系统软件,帮助游客很好地了解校园景点位置,为观光带来方便。
作为导游就是指示景点之间的距离和方向,让游客很清楚所处的位置,并且能够很快地找到方向与目的地。
软件是为了简单、易用而设计的。
2)基本功能要求:1.设计你所在学校的校园平面图,所含景点不少于10个。
将校内各景点的数据(景点名称、代号、简介等信息)和图片以图结构表示并保存于数据库。
课程设计校园导游咨询
课程设计校园导游咨询一、教学目标本课程旨在让学生了解和掌握校园导游的基本知识,包括校园的历史、文化、建筑、景观等方面的内容。
通过本课程的学习,使学生能够熟练运用所学的知识,为游客提供专业的校园导游服务。
具体目标如下:1.知识目标:学生能够掌握校园的基本历史、文化、建筑和景观知识,了解校园的发展历程和特色。
2.技能目标:学生能够运用所学的知识,进行校园导游的讲解和服务,具备良好的沟通和应变能力。
3.情感态度价值观目标:学生能够培养对校园文化的认同感,增强爱护校园环境的责任心,提高服务他人的意识。
二、教学内容本课程的教学内容主要包括以下几个方面:1.校园历史:介绍校园的创建背景、发展历程和重要事件。
2.校园文化:阐述校园的文化传统、校训、校风等核心价值观。
3.校园建筑:解析校园主要建筑的风格、特点和背后的故事。
4.校园景观:介绍校园内的风景名胜、历史遗迹和生态景观。
5.导游技巧:教授导游的基本礼仪、沟通技巧、应急处理等实际操作能力。
三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行:1.讲授法:教师讲解校园历史、文化、建筑和景观等方面的知识。
2.讨论法:学生分组讨论校园导游的实际案例,分享心得体会。
3.案例分析法:分析校园导游的成功案例和存在的问题,提高学生的判断和分析能力。
4.实验法:学生进行校园导游的实践活动,锻炼学生的实际操作能力。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用权威、实用的校园导游教材,为学生提供系统的理论知识。
2.参考书:提供相关的历史、文化、建筑等领域的参考书籍,丰富学生的知识储备。
3.多媒体资料:制作精美的课件、视频等多媒体资料,增强课堂教学的趣味性和生动性。
4.实验设备:配备必要的实验设备,如地图、模型等,帮助学生更好地理解校园景观。
5.实践活动:学生进行校园导游的实际操作,提高学生的实践能力。
五、教学评估为了全面、客观地评估学生的学习成果,本课程将采用多种评估方式相结合的方法:1.平时表现:评估学生在课堂上的参与度、发言积极性以及团队合作表现等。
校园导游系统课程设计报告
南京航空航天大学《数据结构》课程设计报告校园导游系统目录一、需求分析 (2)二、程序的主要功能 (2)三、程序运行平台 (2)四、数据结构 (2)五、算法设计思想及时间复杂度 (2)六、测试用例及结果 (5)七、存在的不足与对策及编程体会 (6)八、程序源代码 (6)一、需求分析南航学生家长及入学新生很需要一个导游程序,来引领他们参观和了解南航。
二、程序的主要功能1、查询各景点的相关信息2、查询任意两景点间的所有路径3、查询任意两景点间的最短路径 1、增加景点4、推荐参观路线 2、删除景点5、更新导游信息(操作需管理员密码) 3、更新道路信息6、对景点联通性的浏览(2阶矩阵表示)4、更新景点信息7、学校全景一览 5、修改管理员密码三、程序运行平台Microsoft Visual C++ 6.0四、数据结构图的邻接矩阵存储表示,栈的顺序存储表示五、算法设计思想及时间复杂度主要函数介绍:1、求两点间的所有路径:a)相关函数:void dfs(MGraph G,SqStack path,int *used,int u,int w);//深度优先遍历b)主要算法思想:栈的相关操作+深度优先搜索创建一个空栈保存路径,一个空数组保存已标记节点,首先让起点进栈,并标记为已访问,然后调用深度优先搜索,如果该顶点的相邻顶点(即与其有直接通路的顶点)未被访问过就标记为已访问,进栈,然后对它调用深度优先搜索,依次类推,直到获得所有到指定终点的路径。
c)时间复杂度:O(VE),其中V为图的顶点数目,E为图中边的数目。
2、求两点间的最短路径:a)相关函数:void ShortestPath(MGraph G,int v0,int P[][Nmax],int *D);//查询任意两景点间的最短路径void PrintShortest(MGraph G,int v1,int v2,int P[][Nmax],int *D); //输出最短路径b)主要算法思想:迪杰斯特拉算法假设起点为v0,S为已找到的从v0出发的最短路径的终点的集合,其初始状态为空集。
校园导游系统实验报告(3篇)
第1篇一、实验背景随着科技的发展,信息化、智能化已成为现代社会的重要特征。
为了更好地服务广大师生和游客,提高校园游览体验,本实验旨在设计并实现一个校园导游系统。
该系统将利用现代信息技术,为游客提供便捷、高效的校园游览服务。
二、实验目的1. 熟悉并掌握面向对象编程技术,提高编程能力;2. 了解和掌握图数据结构及其应用;3. 熟悉并掌握弗洛伊德算法,实现最短路径求解;4. 培养团队协作和沟通能力。
三、实验内容1. 系统需求分析本系统主要面向校园游客,提供以下功能:(1)查询景点信息:包括景点名称、代号、简介等;(2)查询景点间最短路径:支持任意两个景点间的最短路径查询;(3)添加、删除景点:允许管理员添加或删除景点;(4)修改景点信息:允许管理员修改景点名称、代号、简介等;(5)校园平面图展示:以图形化方式展示校园平面图,方便游客了解校园布局。
2. 系统设计(1)系统架构设计本系统采用分层架构,包括以下层次:- 表示层:负责用户界面展示,包括主界面、景点信息查询界面、路径查询界面等;- 业务逻辑层:负责实现系统功能,包括景点信息管理、路径查询等;- 数据访问层:负责数据存储和访问,包括景点信息表、路径信息表等;- 数据库层:负责存储系统数据,包括景点信息、路径信息等。
(2)数据结构设计本系统采用图数据结构表示校园平面图,包括以下数据结构:- 图结构(Graph):表示校园平面图,包括顶点集合和边集合;- 顶点(Vertex):表示校园内的景点,包含景点名称、代号、简介等信息;- 边(Edge):表示景点间的路径,包含起点、终点、路径长度等信息。
(3)算法设计本系统采用弗洛伊德算法实现最短路径查询。
弗洛伊德算法是一种求解图中所有顶点对之间最短路径的算法,其基本思想是通过逐步增加路径长度,找出所有顶点对之间的最短路径。
3. 系统实现(1)主界面设计主界面采用菜单栏、工具栏和状态栏等布局,方便用户操作。
菜单栏包括景点信息查询、路径查询、添加景点、删除景点等功能;工具栏提供快速访问常用功能;状态栏显示系统状态信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录一、需求分析 (2)二、概要设计 (2)三、详细设计 (4)四、设计和调试分析 (9)五、用户手册 (9)六、测试结果 (10)1.操作命令符为s/S, (10)2.操作命令符为v/V, (11)3.操作符为v/V, (11)4.操作符为e/E, (11)5.综上可以查得: (12)七、附录 (12)参考文献 (13)校园导游咨询系统一、需求分析1.从福建农林大学的平面图中选取28个有代表性的景点,抽象成一个无向带权图。
以图中顶点表示景点,边上的权值表示两地间的距离。
2.本程序的目的是为了用户提供路径咨询,根据用户指定的始点和终点输出相应路径,或者根据用户指定的景点输出景点的信息。
3.测试数据(附后)。
二、概要设计1.抽象数据类型图的定义如下:ADT {struct arcnode{ int v;int w;struct arcnode *next;};struct node{ int degree;struct arcnode *first;}adjlist[28];}2.主程序V oid mian(){初始化临接矩阵windows(); / /初始化串口getch();}3.函数定义的变量#define infi 32767#define MAX 28int M,N; //无向图中的顶点M,无向图的变数int adjmatrix[MAX][MAX]; // 保存临接矩阵的2唯数组char *schoolIfo[MAX+1]={ //此数组用于界面显示信息"null","东台-dt","金1-j1","金2-j2","金3-j3","金4-j4","食堂-st","田径场-tjc","校大门-xdm","创业园-cyy","校医院-xyy","图书馆-tsg","映辉桥-yhq","观音湖-gyh","成教楼-cjl","生物楼-swl","博学楼-bxl","创新楼-cxl","明德楼-mdl","拓荒广场-thgc","南区公寓-nqgy","田家炳楼-tjbl","农大新区-ndxq","中华广场-zhgc","905终点站-zdz","蜂疗医院-flyy","研究生公寓-yjsgy","昌融学生街-crxsj","北区学生公寓-bqxsgy"};char *charcd2[MAX]={ //用于显示最短路径时走向的数组"校大门","金1","昌融学生街","创业园","东台","金2","田径场","拓荒广场","南区公寓","校医院","食堂","成教楼","创新楼","田家炳楼","农大新区","观音湖","金3","映辉桥","金4","明德楼","中华广场","905终点站","蜂疗医院","生物楼","博学楼","图书馆","研究生公寓","北区学生公寓"};char *charcd[MAX]={ //用于用户输入起始点与终止点时对应的数组"xdm","j1","crxsj","cyy","dt","j2","tjc","thgc","nqgy","xyy","st","cjl","cxl","tjbl","ndxq","gyh","j3","yhq","j4","mdl","zhgc","zdz","flyy","swl","bxl","tsg","yjsgy","bqxsgy"};char *infor[MAX]={ //介绍景点信息数组"校大门:\n 占不提供介绍","金1:\n 指金山大道的一处,由图可知","昌融学士街:\n 农大的小吃一条街,来农大一定要来尝尝!","创业园:\n 农大创业有志者的孵化地","东台:\n 农大老师所住之处","金2:\n 金山大道的第二处有图可看出","田径场:\n 农大的运动场地","拓荒广场:\n 大礼堂就在此处","南区公寓:\n 顾名思意,学生公寓","校医院:\n 希望你不要来","食堂:\n 学校八九十食堂都在这,不错蛮好吃的。
","成教楼:\n 成人教育教学大楼","创新楼:\n 教学处","田家炳楼:\n 教学楼","农大新区:\n 此处景点很多,由于时间不多.占不介绍。
你自己看看,不错的....","观音湖:\n 来农大必到之处,口碑也非常好,来了就一定要去","金3:\n 金山大道第三处分叉口","映辉桥:\n 情人之桥美丽而烂漫,值得留恋","金4:\n 金山大道第四处分叉口","明德楼:\n 学校的最高建筑","中华广场:\n 学校最好的照相之处,那是相当漂亮哦","终点站,你离开农大再来我这吧!","蜂疗医院:\n 学校特色,其他学校可没有","生物楼:\n 搞研究的","博学楼:\n 搞化学方面的","图书馆:\n 不错,可以来看看","研究生公寓:\n 不要介绍了吧","北区学生公寓:\n 不要说你不懂哦"};void windows(); //主界面窗口void ReadCommand(char cmd); //读取用户需要的操作码void Interpret(char cmd); //执行正确的用户输入操作码void Shortpath(); //得到用户想要计算的起点与终点void getshortpath(int v0,int v1); //计算两点间的最短路径及走向void getinformation();4.本程序仅有三个模块三、详细设计void CreatGraph(){//创建学校平面图//采用邻接矩阵为存储结构FILE *fp2;int i=0,j=0,k;int vi=0,vj=0,w=0;fp2=fopen("D:\\TC\\tcwork\\Graph.txt","r");if(!fp2){printf("Open Graph file error.");}fscanf(fp2,"%d %d",&M,&N);for(i=0; i<M; i++)for(j=0; j<M; j++)if(i==j) adjmatrix[i][j]=0;else adjmatrix[i][j]=infi;for(k=0;k<N;++k){fscanf(fp2," %d %d %d",&vi,&vj,&w);i=vi;j=vj;adjmatrix[i][j]=adjmatrix[j][i]=w;}}/* CreatGraph */void windows(){int i;char cmd;printf("******************************************************\n");printf("*Scenic Information-s Visited Path-v Exit-e *\n");printf("******************************************************\n");for(i=1;i<=MAX;i++){printf("%d)%s ",i,schoolIfo[i]);if(i!=0&&i%4==0)printf("\n");}printf("\n");printf("******************************************************\n");printf("*Enter a operationcode: s/S v/V e/E *\n");printf("*******************************************************\n");printf("Operation :-\n"); //提示用户输入操作码scanf("%c",&cmd);ReadCommand(cmd);}void ReadCommand(char cmd){ //判断用户输入操作码while(1){if(cmd=='s'||cmd=='S'||cmd=='v'||cmd=='V'||cmd=='q'||cmd=='Q'){Interpret(cmd);fflush(stdin);printf("Operation :-\n"); //提示用户输入操作码scanf("%c",&cmd);if(cmd=='e'||cmd=='E')exit(0);}else {fflush(stdin);printf("您输入的操作码不正确,请重新输入:\n");scanf("%c",&cmd);if(cmd=='e'||cmd=='E')exit(0);}}}void Interpret(char cmd){ //处理用户希望的操作char m;switch(cmd){case 's':case 'S':while(1){getinformation();printf("\n是否继续了解其他景点Y&N: ");scanf("%c",&m);if(m=='n'||m=='N')break;}break;case 'v':case 'V':while(1){Shortpath();printf("\n是否继续Y&N: ");scanf("%c",&m);if(m=='N'||m=='n')break;}break;case 'e':case 'E':exit(0);break;}}void Shortpath(){ //得到用户要求的起点和终点的对应下标int i,j;int v0=0;int v1=0;char add1[80];char add2[80];printf(" @@@@@@@@@@@@@@@(使用地点的字母输入如:校大门输入为xdm)@@@@@@@@@@@@@\n");while(1){fflush(stdin);printf("起点:");gets(add1);printf("终点:");gets(add2);for(i=0;i<MAX;i++){if(strcmp(charcd[i],add1)==0) //判断起点对应的数组下标{v0=i;break;}}for(j=0;j<MAX;j++){if(strcmp(charcd[j],add2)==0){v1=j;break;}}if(i==MAX)printf("没有你要的起点\n");if(j==MAX)printf("没有你输入的终点\n");else break;}getshortpath(v0,v1);}void getshortpath(int v0,int v1){int reverce[MAX];int mark[MAX],dist[MAX],path[MAX];int i,j,k,l=1;int min,sum=0;for(i=0;i<MAX;i++){mark[i]=2;dist[i]=adjmatrix[v0][i];path[i]=v0;}mark[v0]=1;for(i=1;i<MAX;i++){ min=32767;for(j=0;j<MAX;j++){if(mark[j]==2&&dist[j]<min){min=dist[j];k=j;}}mark[k]=1;for(j=1; j<MAX; j++){if(mark[j]==2&&dist[j]>(double)dist[k]+(double)adjmatrix[k][j]) {dist[j]=dist[k]+adjmatrix[k][j];path[j]=k;}}}if(v0!=v1){j=v1;//reverce[l++]=v1;while(j!=v0){j=path[j];reverce[l++]=j;sum++;}for(i=sum;i>0;i--){k=reverce[i];printf("%s---",charcd2[k]);}printf("%s\n",charcd2[v1]);printf("此路路程最短为:%d\n",dist[v1]);}}void getinformation(){ //显示景点信息int i;char value[40];fflush(stdin);printf("输入景点:\n");gets(value);for(i=0;i<MAX;i++){if(strcmp(charcd[i],value)==0)printf(infor[i]);}}2.函数的调用关系图四、设计和调试分析1,考虑道路网多是稀疏网,故采用邻接多重表做存储结构,其空间复杂度为O(e).构建邻接多重表的时间复杂度为O(n+e),输出路径的时间复杂度为O(n).由此,本导游程序的时间复杂度为O(n+e).2,调试过程中头文件的引用也出现过报错如:warning C4013: 'exit' undefined; assuming extern returning int改正为:#include "stdlib.h"由于程序需要经常从键盘中得到数据,所以在接收时,要时常注意刷新缓冲区。