数据结构课程设计报告含代码HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】西安邮电学院数据结构课程设计报告题目:校园导航系统院系名称:计算机学院专业名称:计算机科学与技术班级:学生姓名:学号(8位):指导教师:设计起止时间:2011年12月11日~2011年12月15日一. 设计目的1.通过本次课程设计巩固《数据结构》中所学的内容;2.提高自己上机编程以及调试能力。
二. 设计内容1.设计所在学校的校园平面图,所含景点不少于10个。
以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
2.为来访客人提供图中任意景点相关信息的查询。
3.为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
三.概要设计1.功能模块图;2.各个模块详细的功能描述。
1. 可以手动创建一个校园图。
2. 可以直接从文件读取校园各个景点的信息。
3. 可选择从任意个景点作为起点进行遍历。
4. 输入景点序号查询该景点相关信息。
5. 输入两个景点查询两个景点的最短,最佳及其所有的路径。
6. 将校园图信息保存入文件。
四.详细设计1.功能函数的调用关系图2.各功能函数的数据流程图1. Adjmatrix *g即结构体对象在main()中被创建在其他子函数中进行参数传递。
2. 全局变量visited数组中用。
3. 全局变量shorest[][],path[][]在floyd()中被赋值来分别记录v[i]-v[j]最短路径和 v[i]-v[j]所经过景点。
3.重点设计及编码两景点最短距离弗洛伊德算法void floyd(adjmatrix *g){int i,j,k;for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++)shortest[i][j]=0;for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++){shortest[i][j]=g->arcs[i][j].adj;path[i][j]=0;}for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++)for(k=0;k<g->vexnum;k++)if(shortest[i][j]>(shortest[i][k]+shortest[k][j])){shortest[i][j]=shortest[i][k]+shortest[k][j];path[i][j]=k;path[j][i]=k;}}五.测试数据及运行结果1.正常测试数据和运行结果要求提供3组正常测试数据和运行结果2(遍历功能)1(起始景点序号)1 校门呈长方形,校训:爱国、求实、奋进2 喷泉呈鸽子形状,喷射出水花3 教学楼传授知识和学习知识4 实验楼供学生进行课程实验和教师办公5 洗浴中心供学生洗澡,内设单人间和双人间6 美食广场仅一层,快餐味道不错7 图书馆共七层,存储大量书籍供学生查阅和学习8 旭日苑共三层,主要的就餐场所9 体育馆内设篮球场,羽毛球场和观看席10 宿舍休息的场所5(查询景点信息)2(景点序号)2 喷泉呈鸽子形状,喷射出水花6(查询两景点最短路径)1 9(两景点序号)1->2->7->91->9 最短距离:570米2.异常测试数据及运行结果要求提供2组异常测试数据和运行结果9无此功能模块请重新输入5(功能模块)11(景点序号)无此景点请重新输入六.调试情况,设计技巧及体会1.改进方案1. 可将景点文件,边文件及账户密码合并为一个文件。
2. 可设管理员,是管理员才能进行创建和修改,而客户只能进行查询。
3. 可选用更好的算法,提升查询路径的速度。
2.体会回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
七.参考文献《数据结构》杨剑主编清华大学出版社《数据结构(C语言版)》 .严蔚敏_吴伟民.主编清华大学出版社八.附录:源代码(电子版)#include<>#include<>#include<>#include<>#define maxsize 40 ...\n\n", user1);}}void Browser(){system ("color 0F");printf(" 西安邮电学院平面图图 ");printf("\n");printf(" 正门 ");printf("\n");printf(" 校正门┃2.喷泉┃\n");printf("\t\t┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");printf("\t\t┃3.教学楼┃4.实验楼┃\n");printf("\t\t┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");printf("\t\t┃5.洗浴中心┃6.美食广场┃\n");printf("\t\t┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");printf("\t\t┃7.图书馆┃8.旭日苑┃\n");printf("\t\t┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");printf("\t\t┃9.体育馆┃10.宿舍┃\n");printf("\t\t┗━━━━━━━━━━━━┻━━━━━━━━━━━━┛\n");}int locatevertex(adjmatrix *g,int v){int j,k;for(k=0;k<g->vexnum;k++)if(g->vertex[k].top==v){j=k;break;}return(j);}void creatdn(adjmatrix *g){int i,j,k,weight;data v1,v2;printf("请输入景点数和边数:\n");scanf("%d %d",&g->vexnum,&g->arcnum);for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++)g->arcs[i][j].adj=infinity;for(i=0;i<g->vexnum;i++){ printf("请输入该景点的序号,名称:\n");scanf("%d",&g->vertex[i].top);gets(g->vertex[i].info);printf("请输入景点的信息:\n");gets(g->vertex[i].introduce);}for(k=0;k<g->arcnum;k++){ printf("请输入第%d条边关联的两个景点:\n",k+1);scanf("%d %d",&,&;printf("请输入距离:\n");scanf("%d",&weight);i=locatevertex(g,;j=locatevertex(g,;g->arcs[i][j].adj=weight;g->arcs[j][i].adj=weight;}}void creatvisited(adjmatrix *g){int i;for(i=0;i<g->vexnum;i++)visited[i]=0;}void depthfirstsearch(adjmatrix *g,int v){int k;visited[v]=1;printf("景点序号:%d 名称:%s\n",g->vertex[v].top,g->vertex[v].info);for(k=0;k<g->vexnum;k++)if(!visited[k]&&g->arcs[v][k].adj!=infinity)depthfirstsearch(g,k);}int pat[maxsize],visited[maxsize];int top=0;void Depsearch(adjmatrix *G,int num1,int num2){int v,i;top++;pat[top]=num1;visited[num1]=1;if(num1==num2){for(i=0;i<=top;i++)printf("%s->",G->vertex[pat[i]].info);printf("\b\b \n");visited[num1]=0;top--;return ;}for(v=0;v<G->vexnum;v++){if(G->arcs[num1][v].adj<infinity && !visited[v])Depsearch(G,v,num2);}visited[num1]=0;top--;}void allways(adjmatrix *G){int num1,num2,i;char c='y';while(c=='y'){printf("请输入起始和终点的景点编号<num1,num2>:");scanf("%d,%d",&num1,&num2);top=-1;for(i=0;i<maxsize;i++)visited[i]=0;Depsearch(G,num1,num2);printf("\n是否继续查询最短路径(y/n):");op,g->vertex[i].info);printf("请输入遍历的起点序号:(1-%d)\n",g->vexnum);scanf("%d",&n);depthfirstsearch(g,n-1);}void vernumfile(adjmatrix *g){FILE *fp;int i;fp=fopen("","wt");for(i=0;i<g->vexnum;i++)fprintf(fp,"%d %s %s\n",g->vertex[i].top,g->vertex[i].info,g->vertex[i].introduce);fclose(fp);}void arcnumfile(adjmatrix *g){FILE *fp;int i,j;fp=fopen("","wt");for(i=0;i<g->arcnum;i++)for(j=0;j<g->arcnum;j++)if(g->arcs[i][j].adj!=infinity){fprintf(fp,"%d %d %d\n",g->vertex[i].top,g->vertex[j].top,g->arcs[i][j].adj);}fclose(fp);}void readvernum(adjmatrix *g){FILE *fp;int i=0;fp=fopen("","rt");while(fscanf(fp,"%d %s %s",&g->vertex[i].top,g->vertex[i].info,g->vertex[i].introduce)!=EOF){printf("景点序号:%d 名称:%s\n",g->vertex[i].top,g->vertex[i].info);printf("景点信息:%s\n",g->vertex[i].introduce);printf("\n");i++;}g->vexnum=i;fclose(fp);}void readarcnum(adjmatrix *g){FILE *fp;int i=0,j=0,k=0;for(i = 0 ; i < g->vexnum ; i++)for(j = 0 ; j < g->vexnum ; j++)g->arcs[i][j].adj = infinity;fp=fopen("","rt");while(fscanf(fp,"%d %d %d",&i,&j,&k)!=EOF){g->arcs[i-1][j-1].adj=k;}fclose(fp);}void findvernum(adjmatrix *g){int i,n,a;char choice;for(i=0;i<g->vexnum;i++)printf("%d\t%s\n",g->vertex[i].top,g->vertex[i].info);printf("请选择查询方式的种类:\n");printf("1.按序号\n");printf("2.按名称\n");scanf("%d",&a);do{printf("请输入要查询的景点序号(1-%d):\n",g->vexnum);scanf("%d",&n);printf("景点名称:%s\n",g->vertex[n-1].info);printf("景点信息:%s\n",g->vertex[n-1].introduce);printf("\n");printf("是否继续查询:(y/n):\n");flushall();scanf("%c",&choice);}while(choice=='Y'||choice=='y');}void floyd1(adjmatrix *g){int i,j,k;for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++)shortest[i][j]=0;for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++){shortest[i][j]=g->arcs[i][j].adj;path[i][j]=0;}for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++)for(k=0;k<g->vexnum;k++)if(shortest[i][j]>(shortest[i][k]+shortest[k][j])){shortest[i][j]=shortest[i][k]+shortest[k][j];path[i][j]=k;path[j][i]=k;}}void shortload(adjmatrix *g){int i,j,a,b;PlaceList();floyd1(g);printf("请输入起始景点和终止景点(1-%d):\n",g->vexnum);scanf("%d%d",&i,&j);a=i;b=j;i=i-1;j=j-1;if(i<j){printf("%d",b);while(path[i][j]!=0){printf("<-%d",path[i][j]+1);if(i<j)j=path[i][j];elsei=path[j][i];}printf("<-%d",a);printf("\n\n");printf("%d->%d 距离是:%d米\n\n",a,b,shortest[a-1][b-1]);}else{printf("%d",a);...");getch();flushall();system("cls");}}main(){Cipher ();meun();}。