数据结构课程设计报告模板

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

校园导游系统设计一、设计要求1.问题描述设计一个校园导游程序,为来访的客人提供信息查询服务。2.需求分析(1)设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图(无向网),以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。(2)存放景点代号、名称、简介等信息供用户查询。(3)为来访客人提供图中任意景点相关信息的查询。(4)为来访客人提供图中任意景点之间的问路查询。(5)可以为校园平面图增加或删除景点或边,修改边上的权值等。二、概要设计为了实现以上功能,可以从3个方面着手设计。1.主界面设计为了实现校园导游系统各功能的管理,首先设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。本系统主控菜单运行界面如图7-10所示。2.存储结构设计本系统采用图结构类型(mgraph)存储抽象校园图的信息。其中:各景点间的邻接关系用图的邻接矩阵类型(adjmatrix)存储;景点(顶点)信息用结构数组(vexs)存储,其中每个数组元素是一个结构变量,包含景点编号、景点名称及景点介绍三个分量;图的顶点个数及边的个数由分量vexnum、arcnum表示,它们是整型数据。此外,本系统还设置了三个全局变量:visited[]数组用于存储顶点是否被访问标志;d[]数组用于存放边上的权值或存储查找路径顶点的编号;campus是一个图结构的全局变量。3.系统功能设计本系统除了要完成图的初始化功能外还设置了8个子功能菜单。图的初始化由函数initgraph()实现。依据读入的图的顶点个数和边的个数,分别初始化图结构中图的顶点向量数组和图的邻接矩阵。8个子功能的设计描述如下。(1)学校景点介绍学校景点介绍由函数browsecompus()实现。当用户选择该功能,系统即能输出学校全部景点的信息:包括景点编号、景点名称及景点简介。(2)查看浏览路线查看浏览路线由函数shortestpath_dij()实现。该功能采用迪杰斯特拉(Dijkstra)算法实现。当用户选择该功能,系统能根据用户输入的起始景点编号,求出从该景点到其它景点的最短路径线路及距离。(3)查看两景点间最短路径C语言与数据结构课程设计2查看两景点间最短路径由函数shortestpath_floyd()实现。该功能采用弗洛伊德(Floyd)算法实现。当用户选择该功能,系统能根据用户输入的起始景点及目的地景点编号,查询任意两个景点之间的最短路径线路及距离。(4)景点信息查询景点信息查询由函数seeabout()实现。该功能根据用户输入的景点编号输出该景点的相关信息。例如,景点编号、名称等。(5)更改图的信息更改图的信息功能由主调函数changegraph()及若干个子函数完成,可以实现图的若干基本操作。例如:增加新的景点、删除边、重建图等。(6)查询景点间可行路径该功能是查询两景点间所有可行路径,由函数allpath()和函数path()实现,其中path()函数是直接递归函数。由于是无向网,如果网中的边数很多,任意两个景点间的所有路径也会有限多,但很多路径是无实际意义的(有近路,为什么去走远路呢?)。所以,本算法在求得的两景点间所有可行路径中,限制只输出路径长度不超过8个景点的路线。(7)打印邻接矩阵该功能即输出图的邻接矩阵的值,由函数printmatrix()实现。(8)退出即退出校园导游系统,由exit(0)函数实现。三、模块设计1.校园抽象图设计以湖北第二师范学院光谷校区主要景点为例,抽象完成的无向网如图7-7所示。全校共抽象出28个景点,39条道路。各景点分别用图中的顶点表示,景点编号从0-27;39条道路分别用图中的边表示,边上的权值表示景点之间的模拟距离。第7章图结构及其应用3图7-7抽象的二师院光谷校区无向带权图2.模块设计本程序包含3个模块:主程序模块、工作区模块和无向网操作模块。调用关系如图7-8所示。图7-8模块调用示意图3.系统子程序及功能设计本系统共设置18个子程序,各子程序的函数名及功能说明如下。(1)mgraphinitgraph()//图的初始化(2)intlocatevex(mgraphc,intv)//查找景点在图中的序号(3)voidpath(mgraphc,intm,intn,intk)//打印序号为m,n景点间的长度不超过8个景点的路径(4)intallpath(mgraphc)//打印两景点间的景点个数不超过8的所有路径。调用(3)(5)voidshortestpath_dij(mgraphc)//用Dijkstra算法,求一个景点到其他景点间的最短路径,并打印以下编号(6)-(12)是图的基本操作。包括:重建图、更新信息、删除、增加结点和边等。(6)intcreatgragh(mgraph&c)//建图。以图的邻接矩阵存储图(7)intnewgraph(mgraph&c)//更新图的部分信息。返回值:1主程序模块工作区模块无向网操作模块9050605050406060605050904060806040100806010090406060605040604070200807070190608070902150639420122116222517141924132311827711052618C语言与数据结构课程设计4(8)intenarc(mgraph&c)//增加一条边。返回值:1(9)intenvex(mgraph&c)//增加一个结点。返回值:1(10)intdelvex(mgraph&c)//删除图的一个顶点。返回值:1(11)intdelarc(mgraph&c)//删除图的一条边。返回值:1(12)voidprintmatrix(mgraphc)//输出图的邻接矩阵(13)intchangegraph(mgraph&c)//图操作的主调函数。返回值:1(14)voidshortestpath_floyd(mgraphc)//用Floyd算法求任意两景点间的最短路径,并输出(15)voidseeabout(mgraphc)//查询景点的信息(16)voidbrowsecompus(mgraphc)//显示所有景点信息(17)voidmainwork()//工作区函数。操作区用户界面(18)voidmain()//主函数。设定界面的颜色和大小,调用工作区模块函数4.函数主要调用关系图校园导游系统18个子程序之间的主要调用关系如图7-9所示。图中数字是各函数的编号。图7-9系统函数调用关系图四、详细设计1.数据类型定义(1)无向带权图(无向网)的定义typedefstructarcell//边的权值信息{intadj;//权值}arcell,adjmatrix[MaxVertexNum][MaxVertexNum];//图的邻接矩阵类型18main()17mainwork()11651415134129678101123第7章图结构及其应用5typedefstructvexsinfo//顶点信息{intposition;//景点的编号charname[32];//景点的名称charintroduction[256];//景点的介绍}vexsinfo;typedefstructmgraph//图结构信息{vexsinfovexs[MaxVertexNum];//顶点向量(数组)adjmatrixarcs;//邻接矩阵intvexnum,arcnum;//分别指定顶点数和边数}mgraph;(2)全局变量定义intvisited[35];//用于标志顶点是否已经访问过intd[35];//用于存放权值或存储路径顶点编号mgraphcampus;//图变量(大学校园)2.系统主要子程序详细设计(1)主程序模块设计主函数。设定用户操作界面的颜色和大小,调用工作区模块函数。voidmain(){system(color1f);//屏幕颜色设定system(modecon:cols=140lines=130);mainwork();}(2)用户工作区模块设计主要工作函数。操作区用户界面设计。voidmainwork(){intyourchoice;campus=initgraph();printf(\n-----------------------------------------欢迎使用校园导游程序--------------------------------------------\n);printf(\n欢迎来到湖北第二师范学院!\n\n);printf(\n菜单选择\n\n);printf(1.学校景点介绍2.查看游览路线\n);C语言与数据结构课程设计6printf(3.查询景点间最短路径4.景点信息查询\n);printf(5.更改图信息6.查询景点间可行路径\n);printf(7.打印邻接矩阵8.退出\n);printf(\n-------------------------------------------------------------------------------------------------------------------\n);printf(请输入你的选择:);scanf(%d,&yourchoice);while(!(yourchoice==1||yourchoice==2||yourchoice==3||yourchoice==4||yourchoice==5||yourchoice==6||yourchoice==7||yourchoice==8)){printf(输入选择不明确,请重新输入\n);scanf(%d,&yourchoice);}while(1){switch(yourchoice){case1:system(cls);browsecompus(campus);break;case2:system(cls);shortestpath_dij(campus);break;case3:system(cls);shortestpath_floyd(campus);break;case4:system(cls);seeabout(campus);break;case5:system(cls);changegraph(campus);break;case6:system(cls);allpath(campus);break;case7:system(cls);printmatrix(campus);break;case8:system(cls);exit(0);break;default:break;}printf(\n----------------------------------欢迎使用校园导游程序------------------------------------\n);printf(\n欢迎来到湖北第二师范学院!\n\n);printf(\n菜单选择\n\n);printf(1.学校景点介绍2.查看游览路线\n);printf(3.查询景点间最短路径4.景点信息查询\n);printf(5.更改图信息6.查询景点间可行路径\n);printf(7.打印邻接矩阵8.退出\n);printf(\n----------------------------------------------------------------------------------------------------\n);printf(\n请输入你的选择:);scanf(%d,&yourchoice);}//endwhile(1)}//mainwork第7章图结构及其应用7(3)无向网操作主调模块设计intchangegraph(mgraph&c){intyourchoice;printf(\n请问是要\n\n(1)再次建图(2)删除结点(3)删除边\n);printf(\n(4)增加结点(5)增加边(6)更新信息\n\n(7)打印邻接矩阵(8

1 / 24
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功