校园导游程序的设计与实现Word文档格式.docx
- 文档编号:21096290
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:15
- 大小:169.76KB
校园导游程序的设计与实现Word文档格式.docx
《校园导游程序的设计与实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《校园导游程序的设计与实现Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
时间进度安排
序号
起止日期
工作内容
1
2012.9.5~2011.9.9
下达课程设计任务、查阅资料、确定方案
2
2012.9.10~2012.9.13
编写程序、调试、运行
3
2012.9.14
验收
4
2012.9.15~2012.9.16
撰写课程设计报告
5
2012.9.17
提交文档
校园导游程序
一、简介
1.设计目的:
2.问题的描述:
设计一个校园模拟导游程序,为新生或来访的客人通过与机器的“对话“提供最短路径的信息查询服务。
1.任意选取n个场所,构成一个无向带权图,图中顶点表示场所,边上的权值表示两点间的距离,图的存储结构可采用带权的邻接矩阵。
2.咨询以用户和计算机的对话方式进行,由用户输入起始点和终点,输出信息:
3、计算并记录从校门口到各个场所的最短路径,即求单源点到其它各个场所的最短路径。
4、提供校园中任意场所的问路查询,即求任意两点之间的最短路径。
二、数据结构的设计:
由于各个场所通过校园中的道路相连,各个场所和连接它们的道路构成了整个校园的地理环境,所以使用图这种数据结构对他们去进行描述。
以图中的顶点表示校园内各个场所,应包含场所名称、代号、简介等信息;
以边表示连接各个场所的道路,应包含路径的长度等信息;
顶点和边均使用结构体定义,整个图的数据结构采用教材中介绍的带权的邻接矩阵方法。
typedefstructArCell
{
intadj;
//路径长度
}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedefstruct//图中顶点表示主要景点,存放景点的序号、名称、介绍等信息,
charname[30];
intnum;
charintroduction[100];
//简介
}infotype;
typedefstruct
infotypevexs[MAX_VERTEX_NUM];
AdjMatrixarcs;
intvexnum,arcnum;
}MGraph;
MGraphb;
voidcmd(void)
inti;
b=InitGraph();
Menu();
scanf("
%d"
&
i);
while(i!
=4)
{
switch(i)
case1:
Browser(&
b);
Menu();
break;
case2:
ShortestPath_DIJ(&
case3:
Floyd(&
case4:
exit
(1);
default:
printf("
输入序号不存在,请重新输入"
);
}
MGraphInitGraph(void)
MGraphG;
inti,j;
G.vexnum=10;
G.arcnum=14;
for(i=0;
i<
G.vexnum;
i++)
G.vexs[i].num=i;
strcpy(G.vexs[0].name,"
河南科技大学大门"
strcpy(G.vexs[0].introduction,"
高大威武"
strcpy(G.vexs[1].name,"
篮球场地"
strcpy(G.vexs[1].introduction,"
科大学子健康成长,激情飞扬的地方"
strcpy(G.vexs[2].name,"
图书楼"
strcpy(G.vexs[2].introduction,"
藏书丰富,设施良好,知识的摇篮"
strcpy(G.vexs[3].name,"
3号综合办公楼"
strcpy(G.vexs[3].introduction,"
内有老师,教授办公室,各专业研究组,另外设有财务科"
strcpy(G.vexs[4].name,"
足球场"
strcpy(G.vexs[4].introduction,"
标准化跑道,适宜锻炼身体的场所"
strcpy(G.vexs[5].name,"
男生宿舍楼"
strcpy(G.vexs[5].introduction,"
房间设施良好,标准六人间"
strcpy(G.vexs[6].name,"
科大餐厅"
strcpy(G.vexs[6].introduction,"
厅内卫生整洁,环境宜人"
strcpy(G.vexs[7].name,"
体育馆"
strcpy(G.vexs[7].introduction,"
内有乒乓球馆,排球馆,室内篮球馆等设施"
strcpy(G.vexs[8].name,"
女生宿舍楼"
strcpy(G.vexs[8].introduction,"
strcpy(G.vexs[9].name,"
北校门"
strcpy(G.vexs[9].introduction,"
外有建设银行"
for(j=0;
j<
j++)
G.arcs[i][j].adj=INFINITY;
G.arcs[0][1].adj=100;
G.arcs[0][2].adj=80;
G.arcs[0][6].adj=100;
G.arcs[1][7].adj=120;
G.arcs[2][3].adj=50;
G.arcs[3][6].adj=110;
G.arcs[3][4].adj=150;
G.arcs[4][5].adj=60;
G.arcs[4][9].adj=280;
G.arcs[5][9].adj=250;
G.arcs[6][7].adj=190;
G.arcs[6][9].adj=180;
G.arcs[7][8].adj=130;
G.arcs[8][9].adj=100;
G.arcs[j][i].adj=G.arcs[i][j].adj;
returnG;
}//InitGraphend
用的是一个switch语句实现输入不同的序号操作选项,调用不同的函数进入不同的操作板块
//迪杰斯特拉算法计,v0为始点
voidShortestPath_DIJ(MGraph*G)
intv,w,i,min,t=0,x,flag=1,v0;
intfinal[20],D[20],p[20][20];
while(flag)
请输入起始点序号:
"
v0);
if(v0<
0||v0>
G->
vexnum)
输入错误,景点序号不存在!
请再次输入景点序号:
if(v0>
=0&
&
v0<
flag=0;
for(v=0;
v<
vexnum;
v++)
final[v]=0;
D[v]=G->
arcs[v0][v].adj;
for(w=0;
w<
w++)
p[v][w]=0;
if(D[v]<
INFINITY)
p[v][v0]=1;
p[v][v]=1;
D[v0]=0;
final[v0]=1;
for(i=1;
min=INFINITY;
if(!
final[w])
if(D[w]<
min){v=w;
min=D[w];
}
final[v]=1;
final[w]&
(min+G->
arcs[v][w].adj<
D[w]))
D[w]=min+G->
arcs[v][w].adj;
for(x=0;
x<
x++)
p[w][x]=p[v][x];
p[w][w]=1;
if(v0!
=v)printf("
%s"
G->
vexs[v0].name);
if(p[v][w]&
w!
=v0)printf("
-->
vexs[w].name);
t++;
if(t>
vexnum-1&
v0!
=v)printf("
总路线长%dm\n\n"
D[v]);
}//ShortestPath_DIJend
voidFloyd(MGraph*G)
intv,u,i,w,k,j,flag=1,p[10][10][10],D[10][10];
D[v][w]=G->
for(u=0;
u<
u++)
p[v][w][u]=0;
if(D[v][w]<
p[v][w][v]=1;
p[v][w][w]=1;
if(D[v][u]+D[u][w]<
D[v][w])
D[v][w]=D[v][u]+D[u][w];
p[v][w][i]=p[v][u][i]||p[u][w][i];
请输入始点和终点的序号:
%d%d"
k,&
j);
if(k<
0||k>
vexnum||j<
0||j>
景点序号错误!
请再次输入始点和终点的序号:
if(k>
k<
vexnum&
j>
vexs[k].name);
if(p[k][j][u]&
k!
=u&
j!
=u)
vexs[u].name);
vexs[j].name);
总路线长%dm\n"
D[k][j]);
}//Floydend
intLocateVex(MGraph*G,char*v)
{
intc=-1,i;
if(strcmp(v,G->
vexs[i].name)==0)
{c=i;
returnc;
MGraph*CreatUDN(MGraph*G)
inti,j,k,w;
charv1[20],v2[20];
输入图的顶点数,弧数:
vexnum,&
arcnum);
输入景点的编号:
、名称、介绍:
\n"
景点序号:
vexs->
num);
景点名称:
vexs[i].name);
景点介绍:
introduction);
G->
arcs[i][j].adj=INFINITY;
请输入路径长度:
for(k=0;
arcnum;
k++)
第%d条边:
k+1);
景点对(x,y):
v1);
v2);
路径长度:
w);
i=LocateVex(G,v1);
j=LocateVex(G,v2);
if(i>
=0)
arcs[i][j].adj=w;
arcs[j][i]=G->
arcs[i][j];
voidprint(MGraph*G)
intv,w,t=0;
for(v=0;
{if(G->
arcs[v][w].adj==INFINITY)
∞"
elseprintf("
%-7d"
arcs[v][w].adj);
if(t%G->
vexnum==0)
旅客进行查询:
1.查看校园各景点2.查看所有游览线路;
3.选择始点和终点4.退出程序
三、功能(函数)设计:
一.本程序从总体上分为四个功能模块,分别为:
(1)查看校园各景点,这一功能主要为来客提供要查的信息。
(2)查看所有游览线路,这一功能主要提供来客所要到达目的地的所有的线路,方便选择最短的的路线。
(3)选择始点和终点,这一功能的实现为了找出所走线路中的最短路径(4).退出程序
二,流程图如下
(1)程序功能介绍和操作提示模块
退出程序
(2)查看所有游览线路
权值小于无穷
带权最少的路径
(3)选择始点和终点
dist[i][j]=dist[i][k]+dist[k][j];
path[i][j]=JoinList(path[i][k],path[k][j]);
调用JoinList()和Addtail()
四、界面设计:
本程序界面本着易于操作简单整洁而不失美观的理念,采用数字对应功能选项,结合详细的操作提示,使得操作方便快捷,界面清晰明朗。
菜单界面:
五、程序设计:
函数MGraphInitGraph():
初始化图。
函数voidMenu():
创建菜单。
函数voidBrowser(MGraph*G):
浏览全景。
函数voidSearch(MGraph*G):
查询某点信息。
函数voidFloyd(MGraph*G):
查询任意两点之间的最短路径。
函数voidShortestPath_DIJ(MGraph*G):
查询校门口到其他各点之间的最短路径
六、运行与测试:
1、测试的数据及其结果:
(1)浏览各景点选项功能
(2)选择查看校门口到各个景点的最短路径
(3)从各个景点中任意选择两景点之间的最短距离
(4)查询完毕,退出程序
2、运行与测试期间遇到的问题及其解决办法。
1.对文件的输入、输出打开方式不够熟悉,导致输入输出信息有误,后参照教材等材料进行修改,使得程序正常进行;
2.删除函数中循环使用不当,导致运行结果及写入文件结果错误,经修改后恢复正常;
3.经过反复修改测试运行,程序功能基本实现,基本完成题目要求。
。
七、设计后的思考:
1.首先经过这一个星期的紧张而又充实的课程设计,是我对数据结构这一门课程的相关知识有了全面深刻的认识,尤其是对图这一数据结构的相关知识掌握的更加全面和牢固,特别是对迪杰斯特拉算法的思想和具体实现更是经历了从不知所云到熟练运用的学习过程,同时也全面而又系统的复习了C++相关知识。
2.此次课程设计最大的收获可以说是全面掌握了数据结构图的相关知识。
虽说图这一章也是数据结构的终点,但是由于考试只考一些算法的思想,对具体的实现没有做要求,因此课程设计之前我对迪杰斯特拉算法可以说是一窍不通,更谈不上了解。
经过几天的探索和同学的指点,终于可以运用迪杰斯特拉算法实现对无向网中各顶点间的最小路径和具体路径的求解。
3.经过此次课程设计,使我懂得任何一门计算机语言学习,都是应该理论与实际的结合,光有理论知识是不行的。
在以前的学习中,我往往知识以备考为目的,只注重对教材理论知识的学习,不注重实践,平时很少主动去写一些代码,从以前的C语言到C++语言包括现在的数据结构都是这样一个情况。
虽然在期末考试中往往有不错的表现,但是真正到要我自己动手去编写一个程序时,往往都是困难重重。
4.学习无止境,但不代表这门课程的学习彻底结束,因为我还没掌握的知识还有很多很多,就拿本次课程设计来说,在设计输出相关路径时,最初的设计思想是输出相关顶点的名称而不是其序号,因为这样就可以是相关的路径信息表达的更为直观明了,使用户更容易使用。
但是真正到了实现的时候困难重重,最后只能退而求其次,用各顶点的序号代替其名称。
这导致用户在查询相关路径信息时必须拿路径中所列出的序号同主登入界面中所列出的景点名称一一对照,加大了用户的工作量。
这可谓是本系统的一大遗憾,所以我决定在寒暑假等课余时间将这些知识重新学习,达到真正对这门课程的掌握。
指导教师评语:
2012年9月18日
成绩评定
项目
分值
评分要素
成绩
1设计过程中出勤、学习态度等方面
20
上机出勤及端正的学习态度、认真刻苦程度等
2软件设计质量
40
采用的算法、设计方案,设计结果,界面友好等方面进行综合评定
3答辩
能简明扼要地阐述设计的主要内容,能准确流利地回答各种问题
4报告书写
10
条理清晰,表述清楚、措词得当
5实际动手能力
软件编程及调试能力等
总成绩
国际教育学院软件专题训练指导教师评分表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 校园 导游 程序 设计 实现