数据结构实习报告西安旅游查询系统汉源代码Word下载.docx
《数据结构实习报告西安旅游查询系统汉源代码Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构实习报告西安旅游查询系统汉源代码Word下载.docx(45页珍藏版)》请在冰豆网上搜索。
3)任意两个地点之间的所有简单路径。
4、增加新地点和路线、撤销旧地点和路线。
二、实验内容
1.旅游景点平面图(选取具有代表性的几个地点,用邻接表存储图的信息,用文件存储景点相关信息)
2.查询相关景点的描述信息,查看景点简介
3.新增或更改景点描述信息(用不同文件存储不同景点描述信息及景点简介)
4.创建或新增加景点信息及其文件(用文件存储景点间路径及其路径长度)
5.确定一个景点,由该景点出发到其他所有可到达景点的最优路径(中转次数最少)6.查询任意两景点间的最优路径{中转次数最少最少)
7.查询任意两景点间的最短路径
三、需求分析
这个程序功能比较简单,用户打开应用后可实现操作以下功能:
1.输出景点平面图;
2.查询有关景点的简介;
3.创建景点描述信息文件;
4.查询定点到其他所有景点间的最优路径;
5.查询两景点间的最优路径;
6.查询两景点间的最短路径;
7.创建景点及其路径关系的文件。
对于1而言,仅是输出文字信息。
功能2和3,用到了文件的存储与读取,对每个景点均用不同的文件来存储,这样每个景点的描述信息便不受存储容量大小的限制。
同样,功能7,用到的还是文件的存储与读取,同样可以增加或删除景点信息,存取信息相对都比较方便。
4,5,6这三个功能,说来虽是目标不同,但其编写思想却不尽相同。
四、概要设计
数据结构说明
程序中定义的数据类型——结构体(各个成员的作用)
typedefstructArcNode
{
intadjvex;
//所在数组中位置
AdjTypeadj;
//边的权值
OtherInfoinfo;
//边的其他类型
structArcNode*nextarc;
//下一个邻接点
}ArcNode;
typedefstructVertexNode
VertexDatavertexdata[M];
//顶点数据
charfilename[LEN];
//顶点的文件名
ArcNode*firstarc;
//顶点的第一个邻接点
}VertexNode;
typedefstruct
VertexNodevertex[MAX_VERTEX_NUM];
//顶点数组信息
intvernum,arcnum;
//顶点数边数
GraphKindkind;
//图的种类
}AdjList;
---------对的参数-------------
typedefstructQnode
intdata;
structQnode*next;
}LinkQueueNode;
LinkQueueNode*rear;
LinkQueueNode*front;
}LinkQueue;
------栈的参数-----------
typedefstructnode
structnode*next;
}LinkList;
五、详细设计及运行结果
1.各模块流程图,
函数间相互调用关系图:
Print_Scenic(AdjList*G)查询景点描述
建立景点信息(简介)voidCreat_Scenic(AdjList*G)
//voidAll_Good()一点到其他各点最佳路径(中专次数最少)
voidBreadth_first_Search(AdjList*G,intv1,intpre[M])广度优先
Search_Good()两景点间的最优路径
Shortest_Path()两景点间的最短路径
voidShortest_Path_DIJ(AdjList*G,intv1,intpre[MAX_VERTEX_NUM])
2.程序设计过程及编码
//-----------------------------------------景点描述
voidPrint_Scenic(AdjList*G)
FILE*fp;
charstr[MAX],v[M];
intm;
printf("
请输入所要查询的景点名称:
"
);
flushall();
gets(v);
m=LocateVex(G,v);
strcpy(filename,G->
vertex[m].filename);
fp=fopen(filename,"
rt"
if(fp==NULL)
{
printf("
\n文件不存在"
getch();
//system("
cls"
}
while(!
feof(fp))
fscanf(fp,"
%s"
str);
puts(str);
}
}
//-----------------------------------------建立景点信息(简介)
voidCreat_Scenic(AdjList*G)
charname[M],str[MAX],m;
inti;
\n请输入要描述的景点名称:
gets(name);
i=LocateVex(G,name);
vertex[i].filename);
\n是否重新介绍(yorn):
scanf("
%c"
&
m);
if(m=='
y'
||m=='
Y'
)
fp=fopen(filename,"
wt"
else
a+"
if(fp!
=NULL)
请输入关于%s的描述信息\n\n"
name);
system("
strcpy(G->
vertex[i].filename,filename);
flushall();
gets(str);
fprintf(fp,"
\n%s"
fclose(fp);
\n按任意键继续"
getch();
}
//----------------一点到其他各点最佳路径(中专次数最少)
voidAll_Good()
AdjList*G;
charv1[M];
inti,j=1;
intpre[M];
G=(AdjList*)malloc(sizeof(AdjList));
G=Creat_Link();
\n起始点到其他各点的最佳路径\n请输入要搜索的起始景点名称:
"
v1);
i=LocateVex(G,v1);
while(i==-1)
起始点错误,按任意键重新输入"
gets(v1);
i=LocateVex(G,v1);
}
Breadth_first_Search(G,i,pre);
for(j=1;
j<
G->
vernum;
j++)
if(j!
=i)
Print_Path(G,i,j,pre);
\n"
//--------------------------两点间最佳路径(中专次数最少)
voidSearch_Good()
charv1[M],v2[M];
inti,j;
请输入要搜索的两个景点名称:
v2);
j=LocateVex(G,v2);
while(i==-1||j==-1)
起始点或终点错误错误,按任意键重新输入"
请输入起点:
请输入终点:
gets(v2);
j=LocateVex(G,v2);
Print_Path(G,i,j,pre);
//------------------------------------两点间最短路径
voidShortest_Path()
intpre[MAX_VERTEX_NUM];
//将文件读出并存入邻接链表中
gets(v1);
gets(v2);
;
i=LocateVex(G,v1);
//得到起,终点下表
j=LocateVex(G,v2);
Shortest_Path_DIJ(G,i,pre);
Print_Path(