分享
分享赚钱 收藏 举报 版权申诉 / 24

类型校园导游系统程序__课程设计_报告.doc

  • 上传人:tangtianxu1
  • 文档编号:2882158
  • 上传时间:2018-09-29
  • 格式:DOC
  • 页数:24
  • 大小:694.50KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    校园导游系统程序__课程设计_报告.doc
    资源描述:

    1、1、需求分析设计一个校园导游系统程序,为来访的客人提供各种服务的信息查询。(1).设计工商学院校园无向图,所含的景点不少于 10 个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。(2).为来访客人提供图中任意景点相关信息的查询。(3).为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。2、设计思路校园旅游模型是由景点和景点之间的路径组成的,所以这完全可以用数据结构中的图来模拟。用图的结点代表景点,用图的边代表景点之间的路径。所以首先应设计一个图类。结点值代表景点信息,边的权值代表景点间的距离。结点值及边的权值用

    2、顺序表存储,所以需要设计一个顺序表类。本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。计算路径长度和最短路线时可用弗洛伊德(Floyd )算法实现。最后用 switch 选择语句选择执行浏览景点信息或查询最短路径。3 算法设计3.1 概要设计 3.1.1 程序中包含的模块(1)主程序模块主函数:void main(void)void cmd(void) cmd 修改显示框大小 ,字体背景颜色,初始化景点,景点信息打印菜单, MGraph InitGraph(void); /初始化图。MGraph * CreatUDN(M

    3、Graph *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); / 迪杰斯特拉算法 计算起点各顶点间短1路径,void print(MGraph *G); /输出函数(2)查询模块景点信息查询:void introduce()最短路径查询:要查找的

    4、两景点的最短距离:用 floyd 算法求两个景点的最短路径:(3)打印模块:void print(MGraph *G);3.1.2 模块间的调用关系主函数 main()调用 void cmd(void)调用 menu 并且用 switch 设置开关语句。3.2 详细设计3.2.1 定义符号变量#define INFINITY 1000 /*穷*/#define MAX_VERTEX_NUM 40/*定义全局变量*/创建两个类 存储景点信息和存储景点道路和长度typedef struct ArCell /邻接矩阵int adj; /存储路径长度ArCell,AdjMatrixMAX_VERTEX

    5、_NUMMAX_VERTEX_NUM; typedef struct /图顶点表示主要景点存放景点编号、名称、简介等信息char name20;int num;char introduction60;/简介infotype;typedef struct/图中的边表示景点间的道路,存放路径长度等信息。infotype vexsMAX_VERTEX_NUM;/顶点信息域AdjMatrix arcs;int vexnum,/*顶点数 */ arcnum;/边个数MGraph;MGraph b;3.2.2 自定义函数原型说明给出函数声明2void cmd(void);MGraph InitGraph(

    6、void);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);MGraph * CreatUDN(MGraph *G);void print(MGraph *G);3.2.3 定义各顶点之间的距离:for(i=0;ivexnum;v+)printf(“%-4d %-20s%-60s n“,G-vexsv.num,G-vexsv.name,G-vex

    7、sv.introduction);printf(“n“);3.2.7 要查找的两个景点的最短距离:用 floyd 算法求两个景点的最短路径void Floyd(MGraph *G)/查询图中任意两个景点间的所有路径。 int v,u,i,w,k,j,flag=1,p202020,D2020;for(v=0;vvexnum;v+)for(w=0;wvexnum;w+)5 Dvw=G-arcsvw.adj;for(u=0;uvexnum;u+)pvwu=0;if(Dvwvexnum;u+)for(v=0;vvexnum;v+)for(w=0;wvexnum;w+)if(Dvu+Duwvexnum;

    8、i+)pvwi=pvui|puwi; while(flag) printf(“请输入出发地编号:“);scanf(“%d“, if(kG-vexnum) printf(“景点编号存!n 请输入出发地编号:“);scanf(“%d“, printf(“请输入目的地编号:“);scanf(“%d“,if(jG-vexnum) printf(“景点编号存!n 请输入目的地编号 :“);scanf(“%d“, if(k=0 printf(“%s“,G-vexsk.name);for(u=0;uvexnum;u+)if(pkju6printf(“%s“,G-vexsj.name);printf(“ 总路

    9、线%dmn“,Dkj); 3.2.8 查看所有游览路线迪杰斯特拉算法计算单源最短路径,引进一个辅助向量 D,它的每个分量 D 表示当前所找到的从始点 v0 到每个终点 vi 的最短路径的长度。若从 v 到 vi 有弧,则 D 为弧上的权值;否则置 D 为。4 测试分析4.1 主程序界面 主程序从 void main()开始运行 void cmd(void) cmd 修改显示框大小,字体背景颜色,初始化景点,景点信息的赋值初始化无向邻接图 b=InitGraph(); 调用 menu菜单函数打印菜单,提示用户输入选择功能。图 4-1.主程序界面4.2 浏览景点信息输出浏览比较简单就是把原来的景点

    10、信息利用 for 循环输出,int v=0;v 小于最多的景点个数输出景点信息。依次输出。7图 4-2 浏览景点信息4.3 查看所有游览线路查看所有路线是使用 void ShortestPath_DIJ(MGraph * G)/ 迪杰斯特拉算法 计算起点各顶点间短路径,然后利用 for 循环输出计算的结果。输入景点不正确时会输出景点不存在请重新输入景点编号。图 4-3:查看所有游览路线4.4 确定两景点之间最短距离利用 void Floyd(MGraph *G)/函数 利用循环嵌套 查询图中存在的任意两个景点间的最短路径再利用循环输出,如果景点不存在将会输出景点不存在 请输入出发地(目的地)编

    11、号。8图 4-4:确定两景点之间最短距离4.5 查看景点信息利用 void Search(MGraph *G)/函数,查看景点信息 查找景点编号,当输入景点编号不在范围时输出“景点编号不存在请重新输入编号:”输入正确时输出景点信息。图 4-5:查看景点信息5 系统功能及实现5.1 主程序界面 定义一个 I,然后,调用 InitGraph()函数初始化图,再调用 menu()函数,再输入选择,利用switch 开关语句,用户选择,需要的功能,实现想要的.。I n t i1 .浏览校园全景 i = ?2 .查看所有路线3 .两景点最短距离4 .查看景点信息5 .退出导游系统1 2345图 5-1.

    12、主程序界面95.2 浏览景点信息定义 v;用 for 循环 for(v=0;i v e x s v . n u m , G - v e x s v . n a m e , G - v e x s v . i n t r o d u c t i o n ) ;YV + +结束N图 5-2 浏览景点信息5.3 查找所有游览线路查找路径利用,迪杰斯特拉算法,第 1 重循环 for(x=0;xvexnum;x+)/第 1 重循环条件成立时执行 pwx=pvx;不成立时结束循环。I n t xf o r ( x = 0 ; i v e x n u m ; ) / / 第 1 重 f o r 循环p w

    13、x = p v x ;结束YNX + +10图 5-:3-1:查找所有游览路线第 2 重循环 for(w=0 ;wvexnum;w+)循环条件成立的时候执行 if(!finalw第一重循环 pww=1; 循环不成立时循环结束I n t wf o r ( w = 0 ; w v e x n u m ; ) / / 第 2 重循环i f ( ! f i n a l w f o r ( x = 0 ; x v e x n u m ; x + + ) / / 第 1 重循环 p w x = p v x ; p w w = 1 ; 结束YNw + +图 5-:3-2:查找所有游览路线第3重循环定义一个w

    14、 ,利用for循环for(w=0;wvexnum;w+)当循环体成立时if(!finalw)if(Dwvexnum;i+)循环条件成立的时候执行 min=INFINITY; 以及第3重for循环 里面的代码 直到循环条件不成立,循环结束然后利用for输出查找结果 如图5-3-4I n t if o r ( i = 1 ; i v e x n u m ; ) / / 第 4 重 f o r 循环 m i n = I N F I N I T Y ;第 3 重 f o r 循环 结束YNi + +图 5-3-4:查看所有游览路线(第 4 重循环)这是查看所有路线功能里的输出循环,定义v ,i整型变量

    15、然后利用for(v=0;vvexnum;v+)判断if(v0!=v)如果成立执行 printf(“%s“,G-vexsv0.name); 然后执行第二重 for(w=0;wvexnum;w+)12 if(pvw t+; if(tG-vexnum 第1重循环结束后跳到第1重v+直到外重循环循环条件不成立循环结束I n t v ;I n t t = 0 ;i f ( v 0 ! = v )f o r ( v = 0 ; v v e x n u m ; v + + )p r i n t f ( “ % s “ , G - v e x s v 0 . n a m e ) ;i f ( p v w f

    16、o r ( w = 0 ; w v e x n u m ; )YYYN结束Ni f ( t G - v e x n u m t + +W + +N图 5-3-5:查看所有游览路线5.4 确定两景点之间最短距离利用多个 for 循环嵌套,计算出路径,计算出路径长度,当最外重循环不成立时循环结束.利用 for 循环输出13I n t uf o r ( u = 0 ; u v e x n u m ; )i f ( p k j u p r i n t f ( “ - - % s “ , G - v e x s j . n a m e ) ;p r i n t f ( “ 总路线 % d m n “ ,

    17、 D k j ) ;结束YNu + +图 5-4-2:确定两景点之间最短距离6 总结经过近两周的课程设计,总的来说收获还是很大的!首先代码能力明显提高,有了想法基本都能顺利表达出来;再者就是数据结构的选择使用能力也有了很大的提高!虽说平时的试验课我们也有用各种数据做题,但那些都是很明确的知道该做什么操作,存什么,我们的发挥空间不大一般照做就行,然而这次实习我们却在自主的选择判断,这本身就是一个很大的提高!还有就是算法方面的学习有了初步进阶,如最短路径,这样比较简单的图论算法能比较熟练的写出来。但是还是有很多的只是不了解!收获真的很多,但是最大的收获可能就是对编程的兴趣吧,在一次次的改错,一次次

    18、的完成想要的效果后,越写越有感觉!当然还收获了无知,更确切的说是自知,原来我们现在什么也不算,还有很多有用的只是等着我们去学习!7 参考文献1 谭浩强.C 程序设计(第四版)M. 北京:清华大学出版社,2010:293-326.2 苏小红,孙志岗,陈惠鹏.C 语言大学实用教程(第三版)M. 北京:电子工业出版社,2012:240-280.3 林锐.高质量 C+/C 编程指南M.北京:清华大学出版社 2001.7:245-278.4 陈朔鹰,陈英.C 语言程序设计习题集(第二版)M.北京:人民邮电出版社,2003.2:320-360.5 谭浩强.C 语言程序设计题解与上机指导M.北京:清华大学出

    19、版社,2000.11:12-60.6 塞奇威克. 算法:C 语言实现M. 北京:机械工业出版社,2009:213-225.7 里斯.深入理解 C 指针M. 北京:人民邮电出版社,2014:103-122.8 陈正冲.C 语言深度解剖(第 2 版)M.北京:北京航空航天大学出版社,2012:34-1442.9 贾宗璞.C 语言程序设计M.江苏:中国矿业大学出版社,2007.6:112-135.10周海燕,赵重敏,齐华山.C 语言程序设计M. 北京:科学出版社,2001:165-187.8 附录#define INFINITY 100000000 /*穷*/#define MAX_VERTEX_N

    20、UM 40#define MAX 40#include#include#include#includetypedef struct ArCellint adj; /路径度ArCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;/邻接矩阵typedef struct /图顶点表示主要景点存放景点编号、名称、简介等信息char name20;int num;char introduction60;/简介infotype;typedef struct/图中的边表示景点间的道路,存放路径长度等信息。infotype vexsMAX_VERTEX_NUM;/顶点信息域A

    21、djMatrix arcs;int vexnum,/*顶点数 */ arcnum;/边个数MGraph;MGraph b;void cmd(void);MGraph InitGraph(void);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);MGraph * CreatUDN(MGraph *G);void print(MGraph *G);

    22、/*/void main(void)15system(“color 0f“);system(“mode con: cols=150 lines=140“);cmd();/*/void cmd(void)int i;b=InitGraph();Menu();scanf(“%d“,while(i!=5)switch(i)case 1:system(“cls“); Browser( Menu();break;/1.浏览校园全景case 2:system(“cls“); ShortestPath_DIJ( Menu();break;/2.查看所有游览路线 case 3:system(“cls“); F

    23、loyd( Menu(); break;/3.确定两景点之间最短距离 case 4:system(“cls“); Search( Menu();break;/4.查看景点信息 case 5:exit(1);break;default:break;printf(“请重新输入(1-5):“);scanf(“%d“,MGraph InitGraph(void)/初始化MGraph G;int i,j;G.vexnum=16;G.arcnum=40;for(i=0;ivexnum;v+)printf(“%-4d%-20s%-60s n“,G-vexsv.num,G-vexsv.name,G-vexsv

    24、.introduction);printf(“n“);void ShortestPath_DIJ(MGraph * G)/ 迪杰斯特拉算法 计算起点各顶点间短路径 查找所有路线int v,w,i,min,t=0,x,flag=1,v0;int final20, D20, p2020;while(flag)printf(“请输入起始景点编号:“);scanf(“%d“,if(v0G-vexnum)printf(“景点编号存!请重新输入景点编号:“);scanf(“%d“,if(v0=0for(v=0;vvexnum;v+)finalv=0;Dv=G-arcsv0v.adj;/存储起始 v0-末尾

    25、 v 之间权值for(w=0;wvexnum;w+)pvw=0;if(Dvvexnum;i+)min=INFINITY;for(w=0;wvexnum;w+)if(!finalw)if(Dwvexnum;w+)if(!finalwfor(x=0;xvexnum;x+)pwx=pvx;pww=1;for(v=0;vvexnum;v+)if(v0!=v) printf(“%s“,G-vexsv0.name);for(w=0;wvexnum;w+)if(pvwt+;if(tG-vexnum/ShortestPath_DIJ endvoid Floyd(MGraph *G)/ 查询图中任意两个景点间的

    26、最短路径。20int v,u,i,w,k,j,flag=1,p202020,D2020;for(v=0;vvexnum;v+)for(w=0;wvexnum;w+)Dvw=G-arcsvw.adj;for(u=0;uvexnum;u+)pvwu=0;if(Dvwvexnum;u+)for(v=0;vvexnum;v+)for(w=0;wvexnum;w+)if(Dvu+Duwvexnum;i+)pvwi=pvui|puwi;while(flag)printf(“请输入出发地编号:“);scanf(“%d“,if(kG-vexnum)printf(“景点编号存!n 请输入出发地编号:“);sca

    27、nf(“%d“,printf(“请输入目的地编号:“);scanf(“%d“,if(jG-vexnum)printf(“景点编号存!n 请输入目的地编号:“);scanf(“%d“,if(k=0printf(“%s“,G-vexsk.name);for(u=0;uvexnum;u+)if(pkjuprintf(“%s“,G-vexsj.name);printf(“ 总路线%dmn“,Dkj);/Floyd endvoid Search(MGraph *G)/查找int k,flag=1;while(flag)printf(“请输入要查询景点编号:“);scanf(“%d“,if(kG-vexn

    28、um)printf(“景点编号存在! 请重新输入景点编号:“);scanf(“%d“,if(k=0printf(“n“);printf(“编号景点名称简介 n“);printf(“%-4d%-20s %-60sn“,G-vexsk.num,G-vexsk.name,G-vexsk.introduction);printf(“n“);/Search endint LocateVex(MGraph *G,char* v) int c=-1,i;for(i=0;ivexnum;i+)if(strcmp(v,G-vexsi.name)=0)c=i;break;return c;MGraph * Cre

    29、atUDN(MGraph *G)/初始化图形接受输入int i,j,k,w;char v120,v220;22printf(“请输入图顶点数,弧数:“);scanf(“%d%d“,printf(“请输入景点编号:、名称、简介 :n“);for(i=0;ivexnum;i+)printf(“景点编号:“);scanf(“%d“,printf(“景点名称:“);scanf(“%s“,G-vexsi.name);printf(“景点简介: “);scanf(“%s“,G-vexs-introduction);for(i=0;ivexnum;i+)for(j=0;jvexnum;j+)G-arcsij

    30、.adj=INFINITY;printf(“请输入路径度:n“);for(k=0;karcnum;k+)printf(“第%d 条边:n“,k+1);printf(“景点(x,y):“);scanf(“%s“,v1);scanf(“%s“,v2);printf(“路径度:“);scanf(“%d“,i=LocateVex(G,v1);j=LocateVex(G,v2);if(i=0G-arcsji=G-arcsij;return G;void print(MGraph *G)/输出int v,w,t=0;for(v=0;vvexnum;v+)for(w=0;wvexnum;w+) if(G-arcsvw.adj=INFINITY)printf(“ “);else printf(“%-7d“,G-arcsvw.adj);t+;if(t%G-vexnum=0)23printf(“n“);

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:校园导游系统程序__课程设计_报告.doc
    链接地址:https://www.docduoduo.com/p-2882158.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开