校园导游系统实训报告_校园导游程序实训报告
校园导游系统实训报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“校园导游程序实训报告”。
导游咨询系统
1需求分析
编制一个为来访客人进行最短路径导游的程序
(1)从学校的平面图上选取n个有代表性的景点,根据用户指定的起点和终点输出相应路径,或根据用户指定的景点输出景点的信息。
(2).为来访客人提供图中任意景点相关信息的查询。
(3).为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
2、设计思路
校园旅游模型是由景点和景点之间的路径组成的,所以这完全可以用数据结构中的图来模拟。
用图的结点代表景点,用图的边代表景点之间的路径。所以首先应设计一个图类。(草稿纸)结点值代表景点信息,边的权值代表景点间的距离。
结点值及边的权值用顺序表存储,所以需要设计一个顺序表类。
本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。计算路径长度和最短路线时可用弗洛伊德(Floyd)算法实现。最后用switch选择语句选择执行浏览景点信息或查询最短 路径。3 算法设计
一、概要设计
程序中包含的模块(1)主程序模块 主函数:void main()(2)查询模块
景点信息查询:void CreateUDN()(3)打印模块
打印两个景点的路径及最短距离: void display()模块间的调用关系
主函数main()调用:void CreateUDN()void ShortestPath()/*要查找的两景点的最短距离*/ void NextValue()void HaMiTonian()
void display()/* 打印两个景点的路径及最短距离*/ 3.2 详细设计 界面菜单设计: char Menu(){ char c;int flag;do{
flag=1;
system(“cls”);
narrate();
printf(“ttt-------
1、查询景点路径-------n”);
printf(“ttt-------
2、查询景点信息-------n”);
printf(“ttt-------
3、推荐参观路线-------n”);
printf(“ttt-------e、退出-----------n”);
printf(“tttt请输入您的选择:”);
scanf(“%c”,&c);
if(c=='1'||c=='2'||c=='3'||c=='e')
flag=0;}while(flag);return c;}
char SearchMenu(){ char c;int flag;do{
flag=1;
system(“cls”);
narrate();
printf(“ttt-----
1、按照景点编号查询-----n”);
printf(“ttt-----
2、按照景点名称查询-----n”);
printf(“ttt-----e、返回-----------n”);
printf(“tttt请输入您的选择:”);
scanf(“%c”,&c);
if(c=='1'||c=='2'||c=='e')
flag=0;}while(flag);return c;} void search(){ int num;int i;char c;char name[20];
do {
system(“cls”);
c=SearchMenu();
switch(c)
{
case '1':
system(“cls”);
narrate();
printf(“nntt请输入您要查找的景点编号:”);
scanf(“%d”,&num);
for(i=0;i
{
if(num==G.vex[i].number)
{
printf(“nnttt您要查找景点信息如下:”);
printf(“nnttt%-25snn”,G.vex[i].description);
printf(“nttt按任意键返回...”);
getchar();
getchar();
break;
}
}
if(i==NUM)
{
printf(“nnttt没有找到!”);
printf(“nnttt按任意键返回...”);
getchar();
getchar();
}
break;
case '2':
narrate();
system(“cls”);
printf(“nntt请输入您要查找的景点名称:”);
scanf(“%s”,name);
for(i=0;i
{
if(!strcmp(name,G.vex[i].sight))
{
printf(“nnttt您要查找景点信息如下:”);
printf(“nnttt%-25snn”,G.vex[i].description);
printf(“nttt按任意键返回...”);
getchar();
getchar();
break;
}
}
if(i==NUM)
{
printf(“nnttt没有找到!”);
printf(“nnttt按任意键返回...”);
getchar();
getchar();
}
break;
} }while(c!='e');} 介绍景点:
void CreateUDN(int v,int a){ int i,j;G.vexnum=v;
G.arcnum=a;for(i=0;i
G.vex[0].sight=“行政楼”;G.vex[0].description=“学校领导,办公室之地。”;G.vex[1].sight=“校大礼堂”;G.vex[1].description=“业余活动,举办各种晚会。”;G.vex[2].sight=“5教”;G.vex[2].description=“教室,自习室”;G.vex[3].sight=“1教”;G.vex[3].description=“教室,自习室”;G.vex[4].sight=“图书馆”;G.vex[4].description=“阅览,借阅图书,电子阅览”;G.vex[5].sight=“第五食堂”;G.vex[5].description=“餐饮休闲”;G.vex[6].sight=“翠湖”;G.vex[6].description=“欣赏休闲,放松心情”;G.vex[7].sight=“南区食堂”;G.vex[7].description=“餐饮休闲”;G.vex[8].sight=“小树林”;G.vex[8].description=“晨读”;
for(i=0;i
for(j=0;j
G.arcs[i][j].adj=Max;
G.arcs[0][1].adj=G.arcs[1][0].adj=12;
G.arcs[0][2].adj=G.arcs[2][0].adj=6;
G.arcs[0][3].adj=G.arcs[3][0].adj=5;
G.arcs[1][4].adj=G.arcs[4][1].adj=11;
G.arcs[2][4].adj=G.arcs[4][2].adj=2;
G.arcs[3][5].adj=G.arcs[5][3].adj=4;
G.arcs[5][7].adj=G.arcs[7][5].adj=9;
G.arcs[4][6].adj=G.arcs[6][4].adj=2;
G.arcs[4][7].adj=G.arcs[7][4].adj=14;
G.arcs[6][8].adj=G.arcs[8][6].adj=7;
G.arcs[7][8].adj=G.arcs[8][7].adj=3;} 要查找的两个景点的最短距离: void ShortestPath(int num){ int v,w,i,t;
int final[NUM];int min;for(v=0;v
final[v]=0;
D[v]=G.arcs[num][v].adj;
for(w=0;w
P[v][w]=0;
if(D[v]
{
P[v][num]=1;
P[v][v]=1;
} }
D[num]=0;final[num]=1;
for(i=0;i
{
min=Max;
for(w=0;w
if(!final[w])
if(D[w]
{
v=w;
min=D[w];
}
final[v]=1;
for(w=0;w
if(!final[w]&&((min+G.arcs[v][w].adj)
{
D[w]=min+G.arcs[v][w].adj;
for(t=0;t
P[w][t]=P[v][t];
P[w][w]=1;
} } } 打印两个景点的路径及最短距离: void display()
{
int i=0;printf(“nnt”);for(i=0;i
printf(“%s->”,G.vex[x[i]-1].sight);
printf(“出口”);printf(“n”);}
4、调试分析
菜单界面
景点名称
景点描述
两景点的最短路径