毕业设计 课程设计 校园导游系统设计报告.docx
《毕业设计 课程设计 校园导游系统设计报告.docx》由会员分享,可在线阅读,更多相关《毕业设计 课程设计 校园导游系统设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
毕业设计课程设计校园导游系统设计报告
校园导游咨询系统设计
设计时间2008.03.10
一.需求分析
二.问题描述
三.设计思路
四.详细设计过程
五.成员分工
六.平面图示
七.程序代码
八.调试并输出结果
九.心得体会
一:
需求分析
1.从西北大学现代学院中选取10个景点,抽象成一个无向带权图。
以图中顶点表示景点,边上的权值表示两地的距离。
2.本程序的目的是为用户提供路径咨询和景点查询。
根据用户指定的始点和终点输出相应路径或者根据用户指定的景点输出景点的信息。
二.问题描述
(1).设计学校的校园平面图,所含景点为10个。
以图中顶点表示校内各景点,存放景点名称、代号等信息;以边表示路径,存放路径长度等相关信息。
(2).为来访客人提供图中任意景点相关信息的查询。
(3).提供途中任意景点问路查询,即求任意两个景点间的一条最短的简单路径。
三.设计思路
用图的结点代表景点,用图的边代表景点之间的路径。
首先设计一个图类。
结点值代表景点信息,边的权值代表景点间的距离。
结点值及边的权值用顺序表存储,所以需要设计一个顺序表类。
本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。
计算路径长度和最短路线时可用Dijkastra算法实现。
最后用switch选择语句选择执行浏览景点信息或查询最短路径。
四.详细设计过程
1.景点基本信息的设计
为了方便操作,每一个景点名称用一个代码表示,因此景点基本信息设计成结构体类型,此类型包含两个成员变量:
景点名称及其代码。
在此我们设计了10个景点,具体如下:
structSight
{
charName[40];
intNum;
}W[10]={{"校门",1},{"操场",2},{"教学楼",3},{"图书馆",4},
{"学院食府",5},{"喷泉广场",6},{"行政楼",7},{"学生公寓",8},
{"超市",9},{"澡堂",10}};
2.顺序表的设计
一个景点存在自己的名字和代码等信息,两个景点之间有一个距离。
五.成员分工
王旋:
选取景点,记录景点的基本信息,设置路径并绘制无向平面图。
牛稳:
设计结构体类型,主体设计过程,编写程序。
王永强:
权值的构建并进一步修改调试程序。
六.平面图示
一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。
顶点和边均含有相关信息。
比例1:
10000(m)
七.程序代码
#include
#include
/*定义符号常量*/
#defineINT_MAX10000
#definen10
/*定义全局变量*/
intcost[n][n];/*边的值*/
intshortest[n][n];/*两点间的最短距离*/
intpath[n][n];/*经过的景点*/
/*自定义函数原型说明*/
voidintroduce();
intshortestdistance();
voidfloyed();
voiddisplay(inti,intj);
/*3个人分工
(1)景点信息查询
(2)两景点的最短距离
(3)两个景点之间的路径
三、详细设计*/
voidmain()
{/*主函数*/
inti,j;
chark;
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
cost[i][j]=INT_MAX;
cost[1][3]=cost[3][1]=15;
cost[2][3]=cost[3][2]=30;
cost[2][4]=cost[4][2]=60;
cost[3][10]=cost[10][3]=60;
cost[1][10]=cost[10][1]=45;
cost[2][10]=cost[10][2]=40;
cost[4][10]=cost[10][4]=30;
cost[1][4]=cost[4][1]=15;
cost[4][5]=cost[5][4]=15;
cost[4][9]=cost[9][4]=25;
cost[5][9]=cost[9][5]=10;
cost[5][7]=cost[7][5]=55;
cost[5][6]=cost[6][5]=20;
cost[6][7]=cost[7][6]=50;
cost[7][8]=cost[8][7]=20;
cost[8][6]=cost[6][8]=30;
cost[1][1]=cost[2][2]=cost[3][3]=cost[4][4]=cost[5][5]=0;
cost[6][6]=cost[7][7]=cost[8][8]=cost[9][9]=cost[10][10]=0;
while
(1)
{
printf("------------欢迎使用西北大学现代学院导游系统!
-------------\n");
printf("1.景点信息查询………请按i键\n");
printf("2.景点最短路径查询…请按s键\n");
printf("3.退出系统……………请按e键\n");
printf("学校景点列表:
\n");
printf("1:
学校南门");
printf("2:
操场");
printf("3:
教学楼");
printf("4:
图书馆");
printf("5:
学院食府\n");
printf("6:
喷泉广场");
printf("7:
行政楼");
printf("8:
学生公寓");
printf("9:
超市");
printf("10:
澡堂\n");
printf("请选择服务:
");
scanf("\n%c",&k);
switch(k)
{
case'i':
printf("进入景点信息查询:
");
introduce();
break;
case's':
printf("进入最短路径查询:
");
shortestdistance();
break;
case'e':
exit(0);
default:
printf("输入信息错误!
\n请输入字母i或s或e.\n");
break;
}
}
}/*main*/
voidintroduce()
{/*景点介绍*/
inta;
printf("您想查询哪个景点的详细信息?
请输入景点编号:
");
scanf("%d",&a);
getchar();
printf("\n");
switch(a)
{
case1:
printf("1:
学校南门\n\n学校的正门,巴洛克风格建筑,大气优雅,气势宏伟。
\n\n");break;
case2:
printf("2:
校园体育活动的地方,设施齐全,安全,有足球场、篮球场等。
\n\n");break;
case3:
printf("3:
教学楼\n\n学生学习的地方。
\n\n");break;
case4:
printf("4:
图书馆\n\n学校信息资源中心,内设大量的藏书。
\n\n");break;
case5:
printf("5:
\n\n学院食府\n\n学生就餐场所,饭菜可口,价格低廉。
\n\n");break;
case6:
printf("6:
喷泉广场\n\n学校的一个漂亮的风景,美化校园。
\n\n");break;
case7:
printf("7:
行政楼\n\n学校管理及办公场所\n\n");break;
case8:
printf("8:
学生公寓\n\n同学们理想的宿舍。
\n\n");break;
case9:
printf("9:
超市\n\n大型购物场所,物品丰富,种类齐全。
\n\n\n");break;
case10:
printf("10:
澡堂\n\n内设有现代化的洗澡设施,且免费开放。
\n\n");break;
default:
printf("景点编号输入错误!
请输入1->10的数字编号!
\n\n");break;
}
}/*introduce*/
intshortestdistance()
{/*要查找的两景点的最短距离*/
inti,j;
printf("请输入要查询的两个景点的编号(1->10的数字编号并用','间隔):
");
scanf("%d,%d",&i,&j);
if(i>n||i<=0||j>n||j<0)
{
printf("输入信息错误!
\n\n");
printf("请输入要查询的两个景点的编号(1->10的数字编号并用','间隔):
\n");
scanf("%d,%d",&i,&j);
}
else
{
floyed();
display(i,j);
}
return1;
}/*shortestdistance*/
voidfloyed()
{/*用floyed算法求两个景点的最短路径*/
inti,j,k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
shortest[i][j]=cost[i][j];
path[i][j]=0;
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(shortest[i][j]>(shortest[i][k]+shortest[k][j]))
{/*用path[][]记录从i到j的最短路径上点j的前驱景点的序号*/
shortest[i][j]=shortest[i][k]+shortest[k][j];
path[i][j]=k;
path[j][i]=k;
}
}/*floyed*/
voiddisplay(inti,intj)
{/*打印两个景点的路径及最短距离*/
inta,b;
a=i;
b=j;
printf("您要查询的两景点间最短路径是:
\n\n");
if(shortest[i][j]!
=INT_MAX)
{
if(i{
printf("%d",b);
while(path[i][j]!
=0)
{/*把i到j的路径上所有经过的景点按逆序打印出来*/
printf("<-%d",path[i][j]);
if(ij=path[i][j];
else
i=path[j][i];
}
printf("<-%d",a);
printf("\n\n");
printf("(%d->%d)最短距离是:
%d米\n\n",a,b,shortest[a][b]);
}
else
{
printf("%d",a);
while(path[i][j]!
=0)
{/*把i到j的路径上所有经过的景点按顺序打印出来*/
printf("->%d",path[i][j]);
if(ij=path[i][j];
else
i=path[j][i];
}
printf("->%d",b);
printf("\n\n");
printf("(%d->%d)最短距离是:
%5d米\n\n",a,b,shortest[a][b]);
}
}
else
printf("输入错误!
不存在此路!
\n\n");
printf("\n");
}/*display*/
八.调试结果
九.心得体会
通过使用C++语言设计程序代码,我们更能体会到C++语言较C语言在编程设计程序代码方面的优越性。
在编制过程中,我们将实际选取的景点抽象成一个带权的无向平面图并且使用了结构体类型,宏定义,全局变量,自定义函数及switch语句等内容。
经过多次测试,我们得到了一个完善的程序,通过用所学的知识去解决某个实际问题,我们更加认识到了团队合作的重要性,也深深的体会到了实践与理论想结合的重要性,这次程序设计极大的提高了我们对编程的兴趣,培养了我们分析和解决问题的能力。
为以后走上工作岗位积累下宝贵的经验。