完整word版数据结构课程设计校园导游图.docx

上传人:b****5 文档编号:8337643 上传时间:2023-01-30 格式:DOCX 页数:19 大小:124.90KB
下载 相关 举报
完整word版数据结构课程设计校园导游图.docx_第1页
第1页 / 共19页
完整word版数据结构课程设计校园导游图.docx_第2页
第2页 / 共19页
完整word版数据结构课程设计校园导游图.docx_第3页
第3页 / 共19页
完整word版数据结构课程设计校园导游图.docx_第4页
第4页 / 共19页
完整word版数据结构课程设计校园导游图.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

完整word版数据结构课程设计校园导游图.docx

《完整word版数据结构课程设计校园导游图.docx》由会员分享,可在线阅读,更多相关《完整word版数据结构课程设计校园导游图.docx(19页珍藏版)》请在冰豆网上搜索。

完整word版数据结构课程设计校园导游图.docx

完整word版数据结构课程设计校园导游图

齐齐哈尔大学

计控学院

数据结构课程设计

选题名称:

校园导游图

系(院):

计算机与控制工程学院

专业:

软件工程

班级:

软件121班

姓名:

刘泽强

学号:

2012023019

指导教师:

吴迪

2014年7月1日

数据结构课程设计评分表

班级

软件121

姓名

刘泽强

指导教师

吴迪

题目:

数据结构课程设计

评分标准

评分标准

分数权重

评分的依据

得分

A

C

工作态度

10

态度端正,能主动认真完成各项内容,不迟到早退,出勤好。

能够完成各环节基本工作,出勤较好。

程序设计,完成及运行情况

20

功能达到设计要求,程序稳定、界面美观、符合规范、程序易读、完成率100%、程序运行正确。

功能实现了大部分,程序较稳定、界面可用性一般、程序有注释、完成率不足70%。

相关文档

40

格式规范,层次清晰,设计思想明确,解决问题方法合理,文档编写完整规范,编写过程符合软件工程开发设计流程等。

格式较规范,设计思想基本明确,解决问题方法较合理,基本遵循软件工程开发流程。

答辨问题回答

30

能准确回答老师提出的问题,并充分理解数据库开发技术,程序逻辑清晰。

能基本准确回答老师提出的问题

总分

指导教师(签字):

注:

介于A和C之间为B级,低于C为D级和E级。

按各项指标打分后,总分90~100为优,80~89为良,70~79为中,60~69为及格,60分以下不及格

 

 

一.问题描述

设计你所在的学校的校园平面图,所含景点不少于10个。

以图中顶点表示校内各景点,存放景点的名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。

 

(2)为来访客人提供图中任意景点相关信息的查询。

 

(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的最短的简单路径。

 

二、程序设计

 1.用数据结构知识创建校园图。

voidcreatgraph(vexnodeg[],int*n,EdgeTypee[],adjmax*adj)//创建校园图

{

intb,i,s,d,len;

structedgenode*p,*q;//定义图的结构体 

2.手动给校园图赋上相关信息(景点名称、代号、简介),路径及路径长度。

得到一个模拟的校园图:

图2.2

3.利用C语言知识编写查找景点相关信息的程序。

手动创建一个校园图creat(Matrix_Graph*G),然后为相应的边赋上真正的值。

主要代码:

do{

printf("是否继续?

Y/N");

scanf("%c",&ch);

getchar();

if(ch=='Y'||ch=='y')//继续

{

flag=1;

i=1;

printf("请输入您要查询的景点序号:

\n");

scanf("%d",&len);

getchar();

printf("此景点的名称是:

");

Name(len);

printf("此景点的介绍是:

");

Information(len); 

4.利用迪杰斯特拉算法计算任意两点之间的最短路径。

 用path函数来求任意两景点之间的最短路径。

while(c<=N)

{

t=MAX;

for(i=1;i<=N;i++)

if(flag[i]&&G->arcs[s][i]

{

t=G->arcs[s][i];v=i;r[v][1]=v;}

for(i=1;i<=c;i++)

for(j=1;j<=N;j++)

if(flag[j]&&d[i]+G->arcs[T[i]][j]

{

t=d[i]+G->arcs[T[i]][j];v=j;

if(r[v][0]!

=-1)

{

u=1;

while(r[T[i]][u]!

=0)

{

r[v][u]=r[T[i]][u];u++;}

}

r[v][u]=v;

}

r[v][0]=-1;

T[c]=v;

flag[v]=0;

d[c]=t;

c++;

}

5.最后用一个主函数main输出各项结果。

 

用switch语句分别输出,要创建校园图时调用creatgraph函数;查找景点相关信息时调用travgraph函数;要查找任意两景点之间的最短路径时,先输入你目前所在的位置,再输入你的目的地,最后调用path函数。

 

   

 

三、运行结果:

1.运行结果界面:

图-3.1

2.查找景点相关信息的结果:

图3.2

 

3.查找最短路径的结果:

图3.3

四、总结

1.了解数据结构在编写比较复杂的程序的重要作用;

2.对数据结构中定义无向图和创建无向图的理解更加深刻;

3.对于函数的原理不太理解,对于其算法的程序编写还是不太明白;

4.学会了在编写几百行程序时如何查找错误,如何改错误,不过改错误时有时候是叫同学改的;

5.通过本次设计,认识到了自己的很多不足,同时也在其中学到了很多,弥补了自己的不足,今后一定会认真学习知识,多多练习,充实自己在编程方面。

 

附录:

#defineN10

#defineMAX20//图中顶点数的最大值

#defineMAXedg30//图中边数的最大值

#include

#include

#include

#include

typedefintAdjMatrix[MAX][MAX];

typedefstruct

{

intvexs[MAX];

AdjMatrixarcs;

}Matrix_Graph;//图的矩阵表示法。

typedefstructedgenode

{

intadjvex;//临接点序号

intlength;//道路长度

charinfo[10];//景点名称

charinfo2[100];//景点详细信息

structedgenode*next;

}edgenode,*Node;

typedefstruct

{

charname[10];//存储景点的名称.

charinformation[100];//具体的介绍此景点

structedgenode*link;//指向下一个景点

}vexnode;//景点及其信息.

typedefstructEdge

{

intlengh;//边的权值,表示路径长度.

intivex,jvex;//边的两端顶点号

structEdge*next;//指向下一条边

}EdgeType;

//边及其信息.

typedefstruct

{

intnum;//顶点编号。

charname[10];//顶点名称

}vertex;

typedefstruct

{

vertexvexs[MAX];//顶点集合

intedges[MAX][MAX];//临街矩阵

}adjmax;//adj

FILE*fp;//文件的读取

voidclrscr()//清屏

{

system("cls");

}

voidcreatgraph(vexnodeg[],int*n,EdgeTypee[],adjmax*adj)//创建校园图

{

intb,i,s,d,len;

structedgenode*p,*q;//定义图的结构体

if((fp=fopen("file.txt","r"))==NULL)//打开文件

{

printf("文件打开错误!

\n");

getchar();

exit(0);

}

fscanf(fp,"%d%d\n",n,&b);//读入景点个数和边数

for(i=1;i<=*n;i++)//读入景点名称和详细介绍信息

{

fscanf(fp,"%s%s\n",&g[i].name,&g[i].information);

strcpy(adj->vexs[i].name,g[i].name);

g[i].link=NULL;//初始化

}

for(i=1;i<=b;i++)

{

fscanf(fp,"%d%d%d\n",&e[i].lengh,&e[i].ivex,&e[i].jvex);//读入道路长度和起始点

s=e[i].ivex;//s是起点,d是终点。

d=e[i].jvex;

len=e[i].lengh;

adj->edges[s][d]=e[i].lengh;//为邻接矩阵中相应的边赋值

adj->edges[d][s]=e[i].lengh;

p=(Node)malloc(sizeof(edgenode));//申请一个弧节点。

p->next=NULL;

q=(Node)malloc(sizeof(edgenode));

q->next=NULL;

p->adjvex=d;//弧p指向的定点

p->length=len;

strcpy(p->info,g[d].name);//为景点赋名称

strcpy(p->info2,g[d].information);//为景点赋介绍信息

q->adjvex=s;//弧q指向的定点

q->length=len;

strcpy(q->info,g[s].name);//为景点赋名称

strcpy(q->info2,g[s].information);//为景点赋介绍信息

p->next=g[s].link;//头插法建立邻接表

g[s].link=p;

q->next=g[d].link;

g[d].link=q;

}

printf("校园旅游图已经建立!

\n");

getchar();

}

voidName(inti)

{

switch(i)

{

case1:

printf("1:

学校正门\n\n");break;

case2:

printf("2:

主楼广场\n\n");break;

case3:

printf("3:

图书馆\n\n");break;

case4:

printf("4:

国际交流中心\n\n");break;

case5:

printf("5:

宿舍区\n\n");break;

case6:

printf("6:

二食堂\n\n");break;

case7:

printf("7:

体育馆\n\n");break;

case8:

printf("8:

大操场\n\n");break;

case9:

printf("9:

校医院\n\n");break;

case10:

printf("10:

大学活动中心\n\n");break;

default:

printf("景点编号输入错误!

请输入1->10的数字编号!

\n\n");break;

}

}/*Name*/

voidInformation(inti)

{/*景点介绍*/

switch(i)

{

case1:

printf("学校正门:

正门旁边是一条宽敞的马路,交通方便;进门后直对面就是两栋高大的主楼,气势宏伟。

\n\n");break;

case2:

printf("主楼广场:

广场大致圆形,两边是两栋主楼。

\n\n");break;

case3:

printf("图书馆:

学校信息资源中心,外表呈'品'字形,两面藏有大量各种书刊,设有电子查阅室和自习室,是学生学习的好地方。

\n\n");break;

case4:

printf("国际交流中心:

一楼餐厅(吃饭不贵而且很卫生),楼上是一些留学生和外教的住所。

还有一些国际研讨会经常在这里开展。

\n\n");break;

case5:

printf("宿舍区:

有一、二、三、四、六、七、九、七个公寓,是大部分学生的住所。

\n\n");break;

case6:

printf("二食堂:

坐落在宿舍区,里面有各个地方的小吃,味道不错,是学生就餐的主要餐厅。

\n\n");break;

case7:

printf("体育馆:

里面有篮球场,羽毛球场,乒乓球桌,是学校举行各项体育活动的主要场所。

\n\n");break;

case8:

printf("大操场:

在体育馆旁边,是学生和老师体育锻炼的主要地方。

\n\n");break;

case9:

printf("校医院:

设备不太齐全,只能治疗一些常见的小病,但是价格很便宜。

\n\n\n");break;

case10:

printf("大学活动中心:

里面有书店、打印和复印的地方、各种学生组织的办公室。

里面还可以举行各项文艺活动。

\n\n");break;

default:

printf("景点编号输入错误!

请输入1->10的数字编号!

\n\n");break;

}

}/*Information*/

voidtravgraph(vexnodeg[],intn,adjmaxadj)//查找指定景点信息

{

inti=1,flag=1,len;//len存储要查询的景点的序号

charch;

printf("请输入您要查询的景点序号:

\n");

scanf("%d",&len);

getchar();

printf("此景点的名称是:

");

Name(len);

printf("此景点的介绍是:

");

Information(len);

do{

printf("是否继续?

Y/N");

scanf("%c",&ch);

getchar();

if(ch=='Y'||ch=='y')//继续

{

flag=1;

i=1;

printf("请输入您要查询的景点序号:

\n");

scanf("%d",&len);

getchar();

printf("此景点的名称是:

");

Name(len);

printf("此景点的介绍是:

");

Information(len);

continue;

}

else

flag=0;//不继续

break;

}while

(1);

}

voidcreat(Matrix_Graph*G)

{

inti,j;

for(i=1;i<=N;i++)G->vexs[i]=i;//初始化,0号位不用。

for(i=1;i<=N;i++)

for(j=1;j<=N;j++)G->arcs[i][j]=0;//初始值为0。

G->arcs[1][2]=2;G->arcs[1][9]=5;//表示景点一到景点二的距离是2。

G->arcs[2][1]=2;G->arcs[2][3]=5;G->arcs[2][4]=4;G->arcs[2][9]=6;

G->arcs[3][2]=5;G->arcs[3][4]=7;G->arcs[3][7]=5;G->arcs[3][9]=6;G->arcs[3][10]=6;

G->arcs[4][2]=4;G->arcs[4][6]=7;G->arcs[4][10]=7;

G->arcs[5][6]=4;G->arcs[5][7]=6;G->arcs[5][8]=8;

G->arcs[6][4]=7;G->arcs[6][5]=4;G->arcs[6][7]=3;G->arcs[6][10]=7;

G->arcs[7][6]=3;G->arcs[7][8]=4;G->arcs[7][10]=6;

G->arcs[8][5]=8;G->arcs[8][7]=4;G->arcs[8][9]=9;

G->arcs[9][1]=5;G->arcs[9][2]=6;G->arcs[9][3]=6;G->arcs[9][8]=9;

G->arcs[10][3]=6;G->arcs[10][4]=7;G->arcs[10][6]=7;G->arcs[10][7]=6;

for(i=1;i<=N;i++)

for(j=1;j<=N;j++)

if(G->arcs[i][j]==0)G->arcs[i][j]=MAX;//没有被重新赋值的,表示两景点之间

//没有路,用MAX表示无穷大。

}

voidpath(Matrix_Graph*G,ints,inte)

{

inti,j,u,c=1,t,v;

intr[N+1][N+1];//用来存放路径上的景点。

intT[N],flag[N],d[N];

for(i=0;i<=N;i++)

for(j=0;j<=N;j++)r[i][j]=0;//初始值为0。

for(i=1;i<=N;i++)

{

T[i]=-1;//初始值为-1。

flag[i]=1;//初始值为1。

d[i]=MAX;//路径长度初始值为无穷大,用MAX表示。

}

flag[s]=0;//修改标识。

while(c<=N)

{

t=MAX;

for(i=1;i<=N;i++)

if(flag[i]&&G->arcs[s][i]

{

t=G->arcs[s][i];v=i;r[v][1]=v;}

for(i=1;i<=c;i++)

for(j=1;j<=N;j++)

if(flag[j]&&d[i]+G->arcs[T[i]][j]

{

t=d[i]+G->arcs[T[i]][j];v=j;

if(r[v][0]!

=-1)

{

u=1;

while(r[T[i]][u]!

=0)

{

r[v][u]=r[T[i]][u];u++;}

}

r[v][u]=v;

}

r[v][0]=-1;

T[c]=v;

flag[v]=0;

d[c]=t;

c++;

}

printf("\nThepathis:

\n(%d)",s);

j=1;

while(r[e][j]!

=0)

{

printf("-->(%d)",r[e][j]);j++;}//显示路径。

printf("\n\n");

}

intmain()//主函数

{

inti,j;

Matrix_GraphG;

creat(&G);

intn=0;//景点数目

vexnodeg[MAX];//保存顶点及其信息

EdgeTypee[MAXedg];//保存边及其信息

adjmaxadj;//保存边和定点

charchoice='x';

while

(1)

{

clrscr();

printf("\n\n\t\t\t***校园导游系统***");

printf("\n\t\t*************************************\n\n");

printf("\t\t\t1.文件读入并创建校园图:

\n\n");

printf("\t\t\t2.查询景点详细信息:

\n\n");

printf("\t\t\t3.查找两景点间最短路径:

\n\n");

printf("\t\t\t0.退出\n\n");

printf("\t\t\tWriteByEdvis@2009/07/06");

printf("\n\t\t************************************\n\n");

printf("Pleaseenteryourchoice(0-3):

\n");

choice=getchar();

switch(choice)

{

case'1':

clrscr();

creatgraph(g,&n,e,&adj);//创建图(景点,景点数,边,边和景点)

printf("\n打开文件错误\n");

getchar();

break;

case'2':

clrscr();

travgraph(g,n,adj);//查询景点信息

getchar();

break;

case'3':

clrscr();

printf("\2你目前的位置是:

\n");

scanf("%d",&i);

getchar();

printf("\2你的目的地是:

\n");

scanf("%d",&j);

getchar();

path(&G,i,j);//查找最短路径

getchar();

creat(&G);

do{

printf("是否继续?

Y/N");

charch;

intflag=1;

scanf("%c",&ch);

getchar();

if(ch=='Y'||ch=='y')//继续

{

flag=1;

i=1;

printf("\2你目前的位置是:

\n");

scanf("%d",&i);

getchar();

printf("\2你的目的地是

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1