数据结构课程设计报告含代码.docx
- 文档编号:7829098
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:24
- 大小:90.60KB
数据结构课程设计报告含代码.docx
《数据结构课程设计报告含代码.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告含代码.docx(24页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告含代码
西安郵電學院
数据结构课程设计报告
题目:
校园导航系统
院系名称:
计算机学院
专业名称:
计算机科学与技术
班级:
学生姓名:
学号(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数组
visited数组在creatvisited()中被初始化,然后再在depthfirstsearch()中用。
3.全局变量shorest[][],path[][]
在floyd()中被赋值来分别记录v[i]-v[j]最短路径和v[i]-v[j]所经过景点。
3.重点设计及编码
两景点最短距离弗洛伊德算法
voidfloyd(adjmatrix*g)
{
inti,j,k;
for(i=0;i
for(j=0;j
shortest[i][j]=0;
for(i=0;i
for(j=0;j
{
shortest[i][j]=g->arcs[i][j].adj;
path[i][j]=0;
}
for(i=0;i
for(j=0;j
for(k=0;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(查询两景点最短路径)
19(两景点序号)
1->2->7->9
1->9最短距离:
570米
2.异常测试数据及运行结果
要求提供2组异常测试数据和运行结果
9
无此功能模块请重新输入
5(功能模块)
11(景点序号)
无此景点请重新输入
六.调试情况,设计技巧及体会
1.改进方案
1.可将景点文件,边文件及账户密码合并为一个文件。
2.可设管理员,是管理员才能进行创建和修改,而客户只能进行查询。
3.可选用更好的算法,提升查询路径的速度。
2.体会
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
七.参考文献
《数据结构》杨剑主编清华大学出版社
《数据结构(C语言版)》.严蔚敏_吴伟民.主编清华大学出版社
八.附录:
源代码(电子版)
#include
#include
#include
#include
#definemaxsize40//最大景点数
#defineinfinity32768//两景点不可到距离长度
intvisited[maxsize];
intpath[maxsize][maxsize];
intshortest[maxsize][maxsize];
typedefstruct
{
inttop;
charinfo[maxsize];
charintroduce[maxsize];
}data;
typedefstructnode
{
intadj;
}node;
typedefstruct
{
datavertex[maxsize];
nodearcs[maxsize][maxsize];
intvexnum,arcnum;
}adjmatrix;
voidCipher()
{
FILE*fp;
charuser0[20],user1[20],cipher0[10],cipher1[10],ch;
inti;
fp=fopen("Cipher.txt","r");
if((fp=fopen("Cipher.txt","r"))==NULL)
{
printf("nousermessage!
\n");
exit
(1);
}
fscanf(fp,"%s%s",user0,cipher0);
fclose(fp);
printf("\n\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t\t┃XI'ANUNIVERSITYOFPOSTS&TELLCOMUNICATIONS┃\n");
printf("\t\t┃*********SchoolYardGuidebook*********┃\n");
printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\t\tinputuser'sname:
\t");
scanf("%s",user1);
printf("\t\tintputcipher:
\t");
for(i=0;i<10;i++)
{
ch=getch();
if(ch==13)
break;
printf("*");
cipher1[i]=ch;
}
cipher1[i]=0;
printf("\n");
if(strcmp(user0,user1)!
=0)
{
system("cls");/*清屏*/
printf("erroruser'sname!
\n");
main();
}
if(strcmp(cipher0,cipher1)!
=0)
{
system("cls");/*清屏*/
printf("errorcipher!
\n");
main();
}
else
{
system("cls");/*清屏*/
printf("\n\n\t\tWelcometoTheSchoolYardGuidebook!
%s.....\n\n",user1);
}
}
voidBrowser()
{
system("color0F");
printf("西安邮电学院平面图图");
printf("\n");
printf("正门");
printf("\n");
printf("//||\\\\");
printf("\n");
printf("//||\\行政楼===========");
printf("\n");
printf("//喷泉\\||||");
printf("\n");
printf("基础教学楼||\\||||");
printf("\n");
printf("||||\\||||");
printf("\n");
printf("||||\\||||");
printf("\n");
printf("||||\\||||");
printf("\n");
printf("实验楼||大学生活动中心||");
printf("\n");
printf("||||||\\||");
printf("\n");
printf("||||||\\||");
printf("\n");
printf("||====图书馆==人工湖\\||");
printf("\n");
printf("||||\\||");
printf("\n");
printf("||||\\||");
printf("\n");
printf("||||\\||");
printf("\n");
printf("||||=============东门");
printf("\n");
printf("||");
printf("\n");
printf("||");
printf("\n");
printf("操场======================体育馆");
printf("\n");
printf("\\||");
printf("\n");
printf("\\||");
printf("\n");
printf("\\||");
printf("\n");
printf("\\||");
printf("\n");
printf("\\||");
printf("\n");
printf("\\||");
printf("\n");
printf("\\||");
printf("\n");
printf("=========食堂");
printf("\n");
printf("||");
printf("\n");
printf("||");
printf("\n");
printf("||===================宿舍");
printf("\n");
}
voidPlaceList()
{
system("color0A");
printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t\t┃已存文件景点一览表┃\n");
printf("\t\t┣━━━━━━━━━━━━┳━━━━━━━━━━━━┫\n");
printf("\t\t┃1.学校正门┃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");
}
intlocatevertex(adjmatrix*g,intv)
{
intj,k;
for(k=0;k
if(g->vertex[k].top==v)
{
j=k;
break;
}
return(j);
}
voidcreatdn(adjmatrix*g)
{
inti,j,k,weight;
datav1,v2;
printf("请输入景点数和边数:
\n");
scanf("%d%d",&g->vexnum,&g->arcnum);
for(i=0;i
for(j=0;j
g->arcs[i][j].adj=infinity;
for(i=0;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
{printf("请输入第%d条边关联的两个景点:
\n",k+1);
scanf("%d%d",&v1.top,&v2.top);
printf("请输入距离:
\n");
scanf("%d",&weight);
i=locatevertex(g,v1.top);
j=locatevertex(g,v2.top);
g->arcs[i][j].adj=weight;
g->arcs[j][i].adj=weight;
}
}
voidcreatvisited(adjmatrix*g)
{
inti;
for(i=0;i
visited[i]=0;
}
voiddepthfirstsearch(adjmatrix*g,intv)
{
intk;
visited[v]=1;
printf("景点序号:
%d名称:
%s\n",g->vertex[v].top,g->vertex[v].info);
for(k=0;k
if(!
visited[k]&&g->arcs[v][k].adj!
=infinity)
depthfirstsearch(g,k);
}
intpat[maxsize],visited[maxsize];
inttop=0;
voidDepsearch(adjmatrix*G,intnum1,intnum2)
{
intv,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
if(G->arcs[num1][v].adj visited[v]) Depsearch(G,v,num2); } visited[num1]=0; top--; } voidallways(adjmatrix*G) { intnum1,num2,i; charc='y'; while(c=='y') { printf("请输入起始和终点的景点编号 "); scanf("%d,%d",&num1,&num2); top=-1; for(i=0;i visited[i]=0; Depsearch(G,num1,num2); printf("\n是否继续查询最短路径(y/n): "); //system("cls"); scanf("%c",&c); c=getchar(); printf("\n"); } } voidsearch(adjmatrix*g) { inti,n; creatvisited(g); for(i=0;i printf("%d\t%s\n",g->vertex[i].top,g->vertex[i].info); printf("请输入遍历的起点序号: (1-%d)\n",g->vexnum); scanf("%d",&n); depthfirstsearch(g,n-1); } voidvernumfile(adjmatrix*g) { FILE*fp; inti; fp=fopen("vernum.txt","wt"); for(i=0;i fprintf(fp,"%d%s%s\n",g->vertex[i].top,g->vertex[i].info,g->vertex[i].introduce); fclose(fp); } voidarcnumfile(adjmatrix*g) { FILE*fp; inti,j; fp=fopen("arcnum.txt","wt"); for(i=0;i for(j=0;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); } voidreadvernum(adjmatrix*g) { FILE*fp; inti=0; fp=fopen("vernum.txt","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); } voidreadarcnum(adjmatrix*g) { FILE*fp; inti=0,j=0,k=0; for(i=0;i for(j=0;j g->arcs[i][j].adj=infinity; fp=fopen("arcnum.txt","rt"); while(fscanf(fp,"%d%d%d",&i,&j,&k)! =EOF) { g->arcs[i-1][j-1].adj=k; } fclose(fp); } voidfindvernum(adjmatrix*g) { inti,n,a; charchoice; for(i=0;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'); } voidfloyd1(adjmatrix*g) { inti,j,k; for(i=0;i for(j=0;j shortest[i][j]=0; for(i=0;i for(j=0;j { shortest[i][j]=g->arcs[i][j].adj; path[i][j]=0; } for(i=0;i for(j=0;j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 代码
![提示](https://static.bdocx.com/images/bang_tan.gif)