校园导游程序设计报告.docx

上传人:b****2 文档编号:1114638 上传时间:2023-04-30 格式:DOCX 页数:30 大小:49.43KB
下载 相关 举报
校园导游程序设计报告.docx_第1页
第1页 / 共30页
校园导游程序设计报告.docx_第2页
第2页 / 共30页
校园导游程序设计报告.docx_第3页
第3页 / 共30页
校园导游程序设计报告.docx_第4页
第4页 / 共30页
校园导游程序设计报告.docx_第5页
第5页 / 共30页
校园导游程序设计报告.docx_第6页
第6页 / 共30页
校园导游程序设计报告.docx_第7页
第7页 / 共30页
校园导游程序设计报告.docx_第8页
第8页 / 共30页
校园导游程序设计报告.docx_第9页
第9页 / 共30页
校园导游程序设计报告.docx_第10页
第10页 / 共30页
校园导游程序设计报告.docx_第11页
第11页 / 共30页
校园导游程序设计报告.docx_第12页
第12页 / 共30页
校园导游程序设计报告.docx_第13页
第13页 / 共30页
校园导游程序设计报告.docx_第14页
第14页 / 共30页
校园导游程序设计报告.docx_第15页
第15页 / 共30页
校园导游程序设计报告.docx_第16页
第16页 / 共30页
校园导游程序设计报告.docx_第17页
第17页 / 共30页
校园导游程序设计报告.docx_第18页
第18页 / 共30页
校园导游程序设计报告.docx_第19页
第19页 / 共30页
校园导游程序设计报告.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

校园导游程序设计报告.docx

《校园导游程序设计报告.docx》由会员分享,可在线阅读,更多相关《校园导游程序设计报告.docx(30页珍藏版)》请在冰点文库上搜索。

校园导游程序设计报告.docx

校园导游程序设计报告

 

石家庄铁道大学

 

校园导游系统设计报告

 

1.需求分析:

此次课程设计的主要内容是校园导航系统,所谓系统其实也不尽然,只不过是个小小的提示,为来访的客人提供各种信息查询服务。

主要包括:

①查看学校的全景图②各个景点的简介③学校主要景点的分布④查看某一景点到其它所有景点的最短路径⑤查询任意两个景点之间的最短路径。

一些约定:

⑴对于功能①的输入形式是没什么要求的,主要就是根据菜单的提示输入相应的数字选择相应的功能;对于功能②的输入形式的要求也比较简单,要查询某一景点的简介直接输入其对应的编号即可;对于功能③的输入形式的要求同功能①;对于功能④只需要输入想要查看的起始景点的编号即可;对于功能⑤只需要输入起始景点和目的景点的编号即可。

此程序在输入形式上都没什么特殊的要求只是一些简单的数字就可以搞定一切。

⑵功能①③就是输出由字符构成的一幅简易图,形式比较单一;景点的简介方面输出景点的简单信息就可以了;要查询最短路径的话输出的自然是从起始景点到目的地的最短路径中所途经的各个景点及距离。

⑶本程序所能达到的功能就是前面所提到的①—⑤中的功能。

2.概要设计:

抽象数据类型的定义:

ADTGraph{

数据对象V:

V具有相同特性的数组元素的集合,称为顶点集。

数据关系R:

R={VR}

VR={|v,w∈V且P(v,w),表示从v到w的弧,谓词P(v,w)定义了弧的意义或信息}

基本操作P:

CreateGraph(&G,V,VR);

初始条件:

V是图的顶点集,VR是图中弧的集合。

操作结果:

按V和VR的定义构造图G。

DistroyGraph(&G)

初始条件:

图G存在

操作结果:

销毁图G

LocateVex(G,u);

初始条件:

图G存在,u和G中顶点有相同的特征。

操作结果:

若存在顶点u,则返回该顶点在图中的位置;否则返回其他信息。

GetVex(G,u);

初始条件:

图G存在,u是图中的顶点。

操作结果:

返回u的值。

InsertVex(&G,v);

初始条件:

图G存在,v和图中的顶点有相同的特性。

操作结果:

在图G中新增顶点v.

InsertArc(&G,v,w);

初始条件:

图G存在,v和w是图中的顶点。

操作结果:

在图G中增添弧,若是无向图,还增添弧

}ADTGraph

主程序流程(各函数之间的调用关系):

Main();//主函数

Initview();//景点信息的初始化

InitLength();//各个景点之间距离的初始化

log();//登录时的头部

showmenu();//登录后的菜单

browser();//全景图的浏览

browse_view_info();//景点简介的查询

browse_view_distribute();//主要景点的分布

onetoall();//某一景点到其它所有景点的最短路径

onetoone();//查询任意两个景点之间的最短路径

调用关系如下:

(函数内部没什么调用关系)

 

3.详细设计:

⑴图的结构:

typedefstructview//点的结构

{

intno;//景点编号

charname[100];//景点名称

charbriefinfo[1000];//景点简介

}view;

typedefstructedge//边的结构

{

intlength;//两个景点之间的距离

chardirection[4];//方向

}edge;

⑵各个函数的伪代码如下

Initview()、InitLength()、log()、showmenu()、broser()、browse_view_distribute()、browse_view_info()等都是一些初始化或者即时显示,此处不再写其伪代码,在附录中给出。

Main()

{path=(edge**)malloc(MAX*sizeof(edge));

for(v=0;v

path[v]=(edge*)malloc(1000*sizeof(edge));

TD=(view*)malloc(MAX*sizeof(view));

D=(DistancMatrix)malloc(MAX*sizeof(DistancMatrix));

P=(PathMatrix)malloc(MAX*sizeof(PathMatrix));

for(v=0;v

Initview(TD);InitLength(path);//初始化

system("modecon:

cols=140lines=130");

log();while

(1){

showmenu();//菜单

printf("请选择:

\n");

scanf("%d",&k);

switch(k){

case1:

browser();system("cls");break;

case2:

browse_view_info(TD);system("cls");break;

case3:

browse_view_distribute();system("cls");break;

case4:

onetoall(P,D,TD,path);system("cls");break;

case5:

onetoone(P,D,TD,path);system("cls");break;

case0:

exit(0);

}}}

Voidonetoone(PathMatrixP,DistancMatrixD,view*TD,edge**path)

{//迪杰斯特拉算法

while(flag){

printf(请输入一个起始景点编号);scanf(v0);

if(v0<0||v0>MAX)

{printf("景点编号不存在!

请重新输入景点编号:

");

scanf(v0);}

if(v0>=0&&v0

flag=0;}

flag=1;

while(flag){

printf("请输入一个目的地景点编号:

");

scanf("%d",&v1);

if(v1<0||v1>MAX){

printf("景点编号不存在!

请重新输入景点编号:

");

scanf("%d",&v1);

}if(v1>=0&&v1

flag=0;}

for(v=0;v

final[v]=0;

D[v]=path[v0][v].length;

for(w=0;w

if(D[v]

P[v][v0]=1;P[v][v]=1;}

}

D[v0]=0;final[v0]=1;

for(i=1;i

min=INFINITY;

for(w=0;w

if(!

final[w])

if(D[w]

final[v]=1;

for(w=0;w

if(!

final[w]&&(min+path[v][w].length

{D[w]=min+path[v][w].length;

for(x=0;x

P[w][w]=1;

}}

v=v1;w1=v0;

printf("%s",TD[v0].name);

do{

flag=0;min=INFINITY;

for(w=0;w

if(P[v][w]&&w!

=v0){

flag=1;if(D[w]

}}

if(flag){//输出部分

printf("向%s走%dm",path[w1][j].direction,path[w1][j].length);

printf("-->%s",TD[j].name);

w1=j;P[v][j]=0;}

elsebreak;

}while

(1);

printf("\n总路线长%dm\n\n",D[v]);

printf("完毕,按任意键继续!

\n");

getch();}

onetoall()与onetoone()函数用的是相同的算法这里不再赘述。

4调试分析:

(1)设计过程中遇到的问题:

调试过程中难免会遇见这样或者那样的问题,一个很低级的错误就是在字符串的赋值上居然还会出错,本来是不可以像int型数据那样直接用等于号赋值的,可是刚开始由于失误却犯了这样低级的错误结果导致出现102个错误,当时确实有点慌了,等冷静下来一想才把问题想明白,字符串的赋值必须用strcpy函数。

看来基本功还是相当的重要的。

剩下的就是最主要的问题也可以说是99%的问题,都在迪杰斯特拉算法上了,迪杰斯特拉算法是我们重点学习的一个算法当时学习时就感觉很吃力,不过当时也确实弄明白了,只可惜都过去好长一段时间了所以有所遗忘,算法确实是按照书上所写的抄到了程序中。

最短路径确实也存到了数组P[v0][v]中,可是在输出相应的景点名称时总不能输出正确,感觉是很不可思议的问题,后来才明白数组P中的存储是按照一定的顺序存储的但是并不一定是路径中所途经的景点的顺序,所以最后选择在求最短路径过程中将其输出。

回顾讨论和分析:

迪杰斯特拉算法其实放在这里多少有些不合适,因为不管在求任意两个景点之间的最短路径还是求某一景点到其它景点的最短路径时都要完全的执行一遍算法时间复杂度是很高的,当时在实现时也确实考虑到了这个问题只是后来感觉要是实现时间复杂度的降低不是很简单也就暂时放弃了,也就选择了将这个算法直接搬了过来,这里是一点败笔,尚需要改进。

(2)算法的时空分析和改进设想:

主要还是迪杰斯特拉算法的时空分析:

在计算到剩下的MAX-1个顶点的最短距离时第一个for循环时时间复杂度是O(n),每进行一次第二个for循环的时间复杂度都是O(n),第三个for循环也就是存储途经顶点时用的循环而不是书中算法所用的只是个地址的赋值,所以时间复杂度也是O(n),这样总的时间复杂度就是O(n3)。

改进设想主要就是给用户一个浏览路线的推荐本来在程序设计初期是计划要实现这个功能的,但是由于时间和能力问题没有去实现,因为它涉及到汉密尔顿路的实现,目前感觉还比较复杂所以暂时放弃了,日后如果有机会一定将这个功能完善。

(3)经验和体会:

经验吧说实在的也谈不上什么就一点信息越全才能使你的程序功能越完善。

至于体会嘛,细心加耐心再加细节就等于成功!

5.用户使用说明:

程序刚运行时显示主要景点及其编号;菜单。

1输入1显示校园的全景图;

2输入2查询各个景点的简介范围0-49;

3输入3显示主要景点的分布图;

4输入4查询某一景点到所有景点的最短路径;

5输入5查询任意两个景点之间的最短路径;

6输入0退出系统;

6.测试结果:

2:

请输入您想要查看的景点的编号:

2

输出:

第四教学楼,此教学楼不是很了解貌似是建筑艺术学院专有的教学楼,上课教室都是固定的。

2:

请输入您想要查看的景点的编号:

18

输出:

工程训练中心,机械院的学生实习的场所,其他院工业认知实习时也会在此。

里面有个很出名的风功能研究中心。

请按任意键继续!

5请输入一个起始景点编号:

52景点编号不存在!

请重新输入景点编号:

3请输入一个目的地景点编号:

13

输出:

第三栋宿舍楼(含医院)向东走10m-->第二栋宿舍楼向北走60m-->大礼堂总路线长70m

完毕,按任意键继续!

5请输入一个起始景点编号:

8请输入一个目的地景点编号:

27

输出:

第十二栋宿舍楼向西走40m-->春晖楼向北走20m-->泽园向西走40m-->大礼堂向北走10m-->教学实验楼(建设中)

总路线长110m

完毕,按任意键继续!

7.附录:

#include#include#include

#include#include#include

#defineMAX50#defineTRUE1#defineFALSE0

#defineINFINITY10000

typedefint**PathMatrix;

typedefint*DistancMatrix;

typedefstructview

{intno;//景点编号

charname[100];//景点名称

charbriefinfo[1000];//景点简介

}view;

typedefstructedge

{//pathlengtharcs;//两个景点之间的距离

intlength;chardirection[4];//方向

}edge;

voidshowmenu(){

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

printf("$主要景点列表$\n");

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

printf("<23>操场<22>游泳馆\n");

printf("<19>3教<21>体育馆\n");

printf("<17>2教<1>1教\n");

printf("<24>图书馆<25>2实验楼\n");

printf("<40>9实验楼<3>医院\n");

printf("<5>春晖楼<32>7#宿舍楼\n");

printf("<10>青春苑<34>二三食堂\n");

printf("<3>医院<0>大门\n\n");

printf("1.查看学校全景图\n");

printf("2.查询各个景点简介\n");

printf("3.查看学校主要景点分布图\n");

printf("4.查询某一景点到其它所有景点的最短路径\n");

printf("5.查询任意两景点之间的最短路径\n");

//printf("\t\t\t\t\t\t6.游览路线推荐\n");printf("0.退出\n");}

voidlog()

{printf("\t\t\t\t\t\t\t");printf("欢");Sleep(100);printf("迎");

Sleep(100);printf("进");Sleep(100);printf("入");Sleep(100);

printf("石");Sleep(100);printf("家");Sleep(100);printf("庄");

Sleep(100);printf("铁");Sleep(100);printf("道");Sleep(100);

printf("大");Sleep(100);printf("学");Sleep(100);printf("校");

Sleep(100);printf("园");Sleep(100);printf("导");Sleep(100);printf("游");Sleep(100);printf("咨");Sleep(100);printf("询");

Sleep(100);printf("系");Sleep(100);printf("统");Sleep(100);printf("\n");}

view*Initview(view*TD)

{//初始化景点内容

inti;or(i=0;i

strcpy(TD[0].name,"学校大门");

strcpy(TD[1].name,"第一教学楼");

strcpy(TD[2].name,"第四教学楼");

strcpy(TD[3].name,"第三栋宿舍楼(含医院)");

strcpy(TD[4].name,"第二栋宿舍楼");

strcpy(TD[5].name,"春晖楼");strcpy(TD[6].name,"开元楼");

strcpy(TD[7].name,"招待所");

strcpy(TD[8].name,"第十二栋宿舍楼");

strcpy(TD[9].name,"第十三栋宿舍楼");

strcpy(TD[10].name,"青春苑");strcpy(TD[11].name,"篮球场一");

strcpy(TD[12].name,"泽园");strcpy(TD[13].name,"大礼堂");

strcpy(TD[14].name,"第一实验楼");strcpy(TD[15].name,"翠园");

strcpy(TD[16].name,"沁园");strcpy(TD[17].name,"第二教学楼");

strcpy(TD[18].name,"工程训练中心");

strcpy(TD[19].name,"第三教学楼");strcpy(TD[20].name,"西操场");

strcpy(TD[21].name,"体育馆");

strcpy(TD[22].name,"游泳教学场");strcpy(TD[23].name,"大操场");

strcpy(TD[24].name,"图书馆");

strcpy(TD[25].name,"第二实验楼");

strcpy(TD[26].name,"第五教学楼");

strcpy(TD[27].name,"教学实验楼(建设中)");

strcpy(TD[28].name,"第五栋宿舍楼");

strcpy(TD[29].name,"第四栋宿舍楼");

strcpy(TD[30].name,"研究生楼");

strcpy(TD[31].name,"第六栋宿舍楼");

strcpy(TD[32].name,"第七栋宿舍楼");

strcpy(TD[33].name,"第八栋宿舍楼");

strcpy(TD[34].name,"第二三食堂");

strcpy(TD[35].name,"第九栋宿舍楼");

strcpy(TD[36].name,"篮球场二");

strcpy(TD[37].name,"消费合作社");

strcpy(TD[38].name,"第三实验楼");

strcpy(TD[39].name,"机械工程学院");

strcpy(TD[40].name,"第九实验楼");strcpy(TD[41].name,"樱花林");

strcpy(TD[42].name,"交通事故应急中心");

strcpy(TD[43].name,"洗浴中心");strcpy(TD[44].name,"开水房");

strcpy(TD[45].name,"第一栋宿舍楼");

strcpy(TD[46].name,"第十栋宿舍楼");

strcpy(TD[47].name,"第十一栋宿舍楼");

strcpy(TD[48].name,"第十五栋宿舍楼");

strcpy(TD[49].name,"学校小门");

strcpy(TD[0].briefinfo,"学校大门,出门坐车的地方门口有环2,有23路(到火车站)有64路(到北站),平常学生很少在此出门一般都是车辆出入的地方。

");

strcpy(TD[1].briefinfo,"第一教学楼,学校最大的教学楼学生上课自习的地方,五楼有机房有耳麦也就是语音室。

");

strcpy(TD[2].briefinfo,"第四教学楼,此教学楼不是很了解貌似是建筑艺术学院专有的教学楼,上课教室都是固定的。

");

strcpy(TD[3].briefinfo,"第三栋宿舍楼(含医院)交通学院的男生宿舍楼建筑貌似相当的破,可以跟六栋媲美了。

医院更是不堪忍受,医生技术差动不动就是挂点滴,还很贵。

设施差就不言而喻了。

");

strcpy(TD[4].briefinfo,"第二栋宿舍楼,人文学院的宿舍楼公安队的多,好像跟三栋差不多一样破。

");

strcpy(TD[5].briefinfo,"春晖楼,目前铁大的门面,最高的楼,这里是很多学院办公的地方学校的各个办事处也都设在这栋楼里。

");

strcpy(TD[6].briefinfo,"开元楼,对此楼不甚了解,听说是1952年所建,开元楼顾名思义学校开元的时候所建。

里面住着些什么人不太清楚");

strcpy(TD[7].briefinfo,"招待所,外来人可以住宿吃饭的地方不过超级贵");

strcpy(TD[8].briefinfo,"第十二栋宿舍楼,貌似里面全是土木学院的学生");

strcpy(TD[9].briefinfo,"第十三栋宿舍楼,女生宿舍楼,不过楼下男生较多(不解释)。

");

strcpy(TD[10].briefinfo,"青春苑,一二楼又名综合餐厅,一楼价钱还可以,做的饭勉强凑合,二楼很贵,饭也比较难吃。

(本人很少去)");

strcpy(TD[11].briefinfo,"篮球场一,平常当然打篮球的比较多了,不过也是搞露天活动的绝佳之地。

");

strcpy(TD[12].briefinfo,"泽园,这里有伟大的毛泽东像(泽园的名字就这么来的?

我不是很清楚),毛泽东前面貌似是大家都称之为风口地方,泽园里有个情人约会的绝佳地方。

");

strcpy(TD[13].briefinfo,"大礼堂,举办大型联欢活动的地儿,(据说要花钱),每周六放映电影(要门票3元)。

");

strcpy(TD[14].briefinfo,"第一实验楼,这里还包含一个综合楼可以上课自习,实验楼里全都是物理实验室。

");

strcpy(TD[15].briefinfo,"翠园,早上学生朗读英语,晚上情人幽会的地方,有核桃树唉。

");

strcpy(TD[16].briefinfo,"沁园,基本同翠园,不过有喷泉,也不怎么喷水,也就学校有个什么大事才冒出几点水来,好像天天喷水会浪费多少水电似的。

有个很大的钟。

");

strcpy(TD[17].briefinfo,"第二教学楼,此楼虽新但建筑不怎么地,功能基本同一教,不过五楼没有语音室");

strcpy(TD[18].briefinfo,"工程训练中心,机械院的学生实习的场所,其他院工业认知实习时也会在此。

里面有个很出名的风功能研究中心。

");

strcpy(TD[19].briefinfo,"第三教学楼,全是阶梯教室,不提供自习室。

");

strcpy(TD[20].briefinfo,"西操场,分为两部分,南边是轮滑场(却有很多人在

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

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2