1、校园导游系统课程设计报告 I. .1、需求分析2、总体设计 . 2 2.1 抽象数据类型图的定义 . 2 2.2 程序中包含的模块 . 2 2.3模块间的调用关系 . 3 3、详细设计 . 3 3.1 代码设计 . 错误!未定义书签。 3.1.1 定义结构体和全局变量 . 错误!未定义书签。 3.1.2 平面图的初始化 . 错误!未定义书签。 3.1.3 最短路径查询 . 错误!未定义书签。 3.1.4 景点信息查询 . 错误!未定义书签。 3.1.5景点信息更新 . 错误!未定义书签。 3.2 界面分析 . 11 3.2.1 主程序界面 . 11 3.2.2 景点信息的查询 . 11 3.2
2、.3 最短路径查询 . 14 3.2.4 管理校园查询系统 . 14 4、总结报告 . 14 参考文献 . 15 1、需求分析 设计一个校园导游系统程序,为来访的客人提供各种服务的信息查询。 (1).设计潍坊学院校园平面图,所含的景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。 (2).为来访客人提供图中任意景点相关信息的查询。 (3).为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。 2、算法设计 2.1 概要设计 2.1.1 函数定义的变量 /*定义符号常量*/ #define INT_MA
3、X 10000 #define n 10 /*定义全局变量*/ int costnn; /* 边的值*/ int shortestnn;/* 两点间的最短距离*/ int pathnn; /* 经过的景点*/ 2.1.2 程序中包含的模块 (1)主程序模块 void main()/*主函数*/ 打印菜单,景点,景点信息 定义景点之间的权值 (2)查询模块 景点信息查询:void introduce()/*景点介绍*/ 最短路径查询:int shortestdistance() /*要查找的两景点的最短距离*/ void floyed()/*用floyed算法求两个景点的最短路径*/ )打印模块
4、3( 打印最短路径:void display(int i,int j) /* 打印两个景点的路径及最短距离 */ 2.1.3模块间的调用关系 Main()voidintroduce()int shortestdistance() void display()void floyed() 详细设计2.2 #include #include */ /*定义符号常量 #define INT_MAX 10000 #define n 10 */ 定义全局变量/*/ 边的值 /* int costnn; */ int shortestnn;/* 两点间的最短距离*/ /* 经过的景点 int pathnn;
5、 */ 自定义函数说明/*void introduce(); int shortestdistance(); void floyed(); void display(int i,int j); void main() int i,j; char k; for(i=0;i=n;i+) for(j=0;j10的数字编号!nn); break; /*introduce*/ int shortestdistance() /*要查找的两景点的最短距离*/ int i,j; 牰湩晴尨请输入要查询的两个景点的编号(1-10的数字编号并用,间隔):); scanf(%d,%d,&i,&j); if(in|in
6、|j10的数字编号并用,间隔):n); scanf(%d,%d,&i,&j); else floyed(); display(i,j); return 1; /*shortestdistance*/ void floyed()/*用floyed算法求两个景点的最短路径*/ int i,j,k; for(i=1;i=n;i+) for(j=1;j=n;j+) shortestij=costij; pathij=0; for(k=1;k=n;k+) for(i=1;i=n;i+) for(j=1;j(shortestik+shortestkj) /*用path记录从i到j的最短路径上点j的前驱景点
7、的序号*/ shortestij=shortestik+shortestkj; pathij=k; pathji=k; /*floyed*/ void display(int i,int j) /* 打印两个景点的路径及最短距离 */ int a,b; a=i; b=j; 牰湩晴尨您要查询的两景点间最短路径是:nn); if(shortestij!=INT_MAX) if(ij) printf(%d,b); while(pathij!=0) /* 把i到j的路径上所有经过的景点按逆序打印出来*/ printf(-%d,pathij); if(ij) j=pathij; else i=pathj
8、i; printf(%d)最短距离是:%d米nn,a,b,shortestab); else printf(%d,a); while(pathij!=0) /* 把i到j的路径上所有经过的景点按顺序打印出来*/ printf(-%d,pathij); if(i%d,b); printf(n); printf(%d-%d)最短距离是:米nn,a,b,shortestab); else 牰湩晴尨输入错误!不存在此路!nn); printf(); /*display*/ 3 测试结果 3.1 主程序界面 根据图中提示选择要执行的操作 图1 主界面 3.2输入错误 输入i ,s ,e来完成相应的操作,
9、如果输入有误,系统将显示错误信息,请重新输 入。 3.3 景点信息的查询 输入你要查询的景点名称:通过调用函数void introduce()来查询景点信息。 如果输入的景点不存在,系统会提示你输入错误,请重新输入。 图2 信息查询界面 输入编号存在,则系统显示要查询的景点信息。 3.4 最短路径查询 输入你所在的景点和要到达的景点,将输出这两点的最短距离: 调用函数void floyed();来求最短路径。 图3 路径查询界面 3.5 退出系统 根据提示按“e”退出该系统,程序结束。 4、总结报告 通过本次课程设计实验,使我更能熟练地掌握c语言、c+以及数据结构等知识的综合运用。当然在课程设
10、计期间,也遇到了大大小小的一些问题,是我看到了自己的不足之处,使我认识到在以后的学习中要善于发现自己的不足,找出自己的薄弱环节,以便能够更好的去巩固所学的。 本次设计中要求求最短路径,就必须了解最短路径的算法:Dijkstra算法和Floyd算法。在拿到题目时,通过查找相关的资料才回忆起这两种方法的具体算当然任何程序都不可能完美,尽量选用复杂度小。比较这两种算法的复杂度,法。往往会牺牲程序的空间来换取时间,或者牺牲时间来换取足够大的空间,这就需要根据程序的具体要求来设计算法。在选用存储方法是,要尽量选用时间复杂度较小的方法,这样能够节省程序执行时间,提高查询效率。 课程设计中所使用的计算机语言其使用范围比较广阔,在很多编程中都可以用到,所以无论以后我们从事计算机编程、软件设计还是硬件、网络等领域,都应该学会、学精一门编程语言,这对我们以后的学习和工作有很大的帮助。 参考文献 1.秦锋.数据结构:中国科学技术大学出版社,2007 2.温秀梅,丁学钧.VisualC+面向对象程序设计.北京:清华大学出版社,2007 3.徐孝凯.C+语言基础教程.北京:清华大学出版社,2006