校园导游.docx
《校园导游.docx》由会员分享,可在线阅读,更多相关《校园导游.docx(26页珍藏版)》请在冰豆网上搜索。
![校园导游.docx](https://file1.bdocx.com/fileroot1/2023-2/21/fa336f23-6dd5-486e-9e03-ac628060d781/fa336f23-6dd5-486e-9e03-ac628060d7811.gif)
校园导游
南通大学数据结构课程设计
校园导游系统
实验报告
学生姓名
所在院系
专业
学号
指导教师
南通大学
2014年1月12日
前言
南通大学坐落于素有“江海明珠”、“历史文化名城”美誉的沿海开放城市——江苏省南通市,是江苏省人民政府和交通运输部共建的综合性大学。
学校的办学历史最早可追溯到近代著名实业家、教育家张謇先生于1912年创办的私立南通医学专门学校和南通纺织专门学校。
2004年,南通医学院、南通工学院、南通师范学院三校合并组建南通大学。
经过一个世纪的办学历程,南通大学现已建设成为一所规模结构合理、学科门类齐全、教学质量优秀、办学效益明显的地方综合性大学。
南通大学现有4个校区,占地面积3700余亩,有25个学院和1所大型综合三级甲等附属医院,有全日制在校生3.5万余人,设有94个本科专业,涵盖文学、理学、工学、医学、艺术学、经济学、法学、教育学、历史学、管理学等10个学科门类。
学校始终坚持人才培养的中心地位,全面深化教育教学改革。
2007年以优秀成绩通过教育部本科教学工作水平评估。
学校拥有国家特色专业建设点、江苏省品牌专业、江苏省特色专业,以及国家级教学团队、国家级教学成果奖、国家精品课程、国家精品教材、国家级实验教学示范中心、江苏省高等教育教学成果奖等一批优质教学资源。
学校是江苏省首批教学工作先进高校。
学校师资力量雄厚,现有教职工3000多人,教学科研人员近2200人,其中博士、硕士生导师700余人,拥有国家有突出贡献的中青年专家、国家杰出青年科学基金获得者、首届江海杰出英才奖获得者、享受国务院特殊津贴人员、教育部优秀骨干教师、江苏省有突出贡献的中青年专家、省“333”工程培养对象、省高校“青蓝工程”培养对象等各类杰出人才。
学校广泛开展国际交流与合作,与英国、美国、澳大利亚、日本、香港等国家和地区的40多所高校和科研院所建立了友好合作关系,开展多个国际交流项目。
学校是全国精神文明建设先进单位,全国精神文明建设典型“莫文隋”精神的发源地,江苏省思想政治工作优秀单位,江苏省文明单位标兵,江苏省文明学校,全国普通高等学校毕业生就业工作先进集体和江苏省研究生招生管理工作优秀单位。
校党委被评为“江苏省高校先进基层党组织”,校党校获得“江苏省红旗基层党校”称号。
面对新的机遇和挑战,学校在跨越发展、协调发展、和谐发展之路上奋勇前行,加快推进从教学型大学向教学研究型大学的转变,立足南通,服务江苏,面向全国,逐步走向世界,积极为科技进步、经济建设和社会发展提供强有力的人才支持、智力支撑和知识贡献,为建设“有特色、高水平的地方综合性大学”而努力奋斗!
随着知名度的不断提升,越来越多的人希望了解南通大学,因此非常需要一个导游系统来直观地介绍南通大学。
因此我就针对南通大学主校区的主要景点,进行了本次课程设计,利用校园导游系统直观地介绍南通大学主校区。
编者
目录
一、课程设计目的………………………………………………………………………………1
二、问题描述……………………………………………………………………………………1
三、设计要求
(1)基本要求………………………………………………………………………………1
(2)较高要求………………………………………………………………………………1
四、思想分析
(1)定义数据类型…………………………………………………………………………2
(2)主要操作函数…………………………………………………………………………2
五、详细设计……………………………………………………………………………………2
六、总结与体会……………………………………………………………………………………5
附1:
源代码………………………………………………………………………………………6
附2:
调试结果……………………………………………………………………………………13
附3:
南通大学主校区平面图……………………………………………………………………16
一、课程设计目的
1.训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题的能力。
2.初步掌握程序开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4.训练用系统的观点和程序开发一般规范进行程序开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作与学习作风。
二、问题描述
校园占地几千亩,生活设施分布较散;校园内景色优美,景点甚多。
在校园内移动,因时间、交通工具和用户兴趣等原因,需要选择线路。
本设计的主要任务是为在南通大学新校区内生活、购物、参观的人们提供行走路线查询、选择、景点介绍的帮助。
需实现的基本功能如下。
(1)景点信息的查询。
(2)邻接景点信息的查询。
(3)给出到某个景点的最佳路线。
(4)给出到所有景点的最佳路线。
(5)修改景点信息。
三、设计要求
(1)基本要求
①设计校园游览图,景点不少于6个。
②设计全景图的显示方式。
③设计图的存储结构。
④文件读入或键盘方式输入图的顶点信息和边信息,在内存中创建图。
⑤一旦创建完地图,以文件形式保存,以免重复创建。
⑥实现上述基本功能。
⑦设计足够多的测试用例。
(2)较高要求
①为管理员提供图的编辑功能:
增、删景点;增、删道路;修改已有信息等。
②提供任意场所的问路查询功能,即任意两个景点之间的所有路径。
③根据该软件用途,增加其他功能。
④校园导游图的仿真界面。
四、思想分析
1.定义数据类型:
(1)包含景点序号(num)、景点名称(view)、简介(info)等;
(2)定义无向网,实际情况每两个不相同的景点间均有权值;
2.主要操作函数:
(1)ArcCell();
权值,弧的相关信息;
(2)VertexType();
景点序号、景点名称、景点简介;
(3)MGraph();
顶点表,两个地点的距离,顶点数与边数;
(4)ShortestPath();
用Dijkstra算法求最短路径,查询两景点间最短路径;
(5)Menu();
主菜单;
(6)Main();
主函数;
(7)output();
输出函数;
五、详细设计
(1)权值,弧的相关信息
structArcCell{
intadj;
char*info;
};
(2)景点序号、景点名称、景点简介
structVertexType{
intnumber;
char*view;
char*info;
};
(3)顶点表,两个地点的距离,顶点数与边数
structMGraph{
VertexTypevex[NUM];
ArcCellarcs[NUM][NUM];
intvexnum,arcnum;
};
(4)用Dijkstra算法求最短路径,查询两景点间最短路径
voidShortestPath(intnum)
{
intv,w,i,t;
intfinal[NUM];
intmin;
for(v=1;v{
final[v]=0;
D[v]=G.arcs[num][v].adj;
for(w=1;wP[v][w]=0;
if(D[v]<32767)
{
P[v][num]=1;
P[v][v]=1;
}
}
D[num]=0;
final[num]=1;
for(i=1;i{
min=Max;
for(w=1;wif(!
final[w])
if(D[w]{
v=w;
min=D[w];
}
final[v]=1;
for(w=1;wif(!
final[w]&&((min+G.arcs[v][w].adj){
D[w]=min+G.arcs[v][w].adj;
for(t=0;tP[w][t]=P[v][t];
P[w][w]=1;
}
}
}
(5)主菜单
charMenu()
{
charc;
intflag;
do{
flag=1;
cout<<"****************************************"<<'\n';
cout<<"欢迎使用南通大学导航图系统"<<'\n';
cout<<"1.景点信息的查询"<<'\n';
cout<<"2.邻接景点信息查询"<<'\n';
cout<<"3.给出到某个景点的最佳路线"<<'\n';
cout<<"4.给出到所有景点的最佳路线"<<'\n';
cout<<"5.修改景点信息"<<'\n';
cout<<"e.退出"<<'\n';
cout<<"****************************************"<<'\n';
cout<<"请输入您的选择:
";
cin>>c;
if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='e')
flag=0;
}while(flag);
returnc;
}
(6)输出函数
voidoutput(intview1,intview2)
{
inta,b,c,d,q=0;
a=view2;
if(a!
=view1)
{
cout<"<<<"最短距离为"<d=view1;
for(c=0;c{
gate:
;
P[a][view1]=0;
for(b=0;b{
if(G.arcs[d][b].adj<32767&&P[a][b])
{
cout<<"走"<q=q+1;
P[a][b]=0;
d=b;
if(q%8==0)cout<<'\n';
gotogate;
}
}
}
cout<<'\n';
}
}
六、总结与体会
经过了几天的课程设计,我对数据结构程序设计有了全新的认识。
尤其是当拿到一个不小的任务时,如何去分析,先干什么,接着干什么,最后干什么,有了比较明确的思路。
通过本次课程设计,我觉得熟练掌握所学的算法对于编程解决实际问题非常有效。
我们应该在平时多用我们所学的数据结构知识编写程序,尝试解决实际的问题。
选定一个项目后,我们应该先对这个项目进行概要的分析、设计,分析出这个程序是干什么用的,应该实现什么功能,这些功能应该包含哪些函数,函数之间应该是怎样的调用关系,比如说我做的“南通大学导游”系统,它就是一个为人们提供南通大学相关信息的软件,它包括南通大学主校区主要景点的名称、简介,能够查询任意两个景点间的最短距离,为大家提供更便捷的服务,为人们规划多条路线供选择,可以让管理员自己对景点进行动态添加。
进行这些是做项目时首先应该考虑的,如果概要设计做不好,那下面的其他设计也就很难做好。
概要设计做好后,我们就要开始做详细设计,详细设计就是将做好的概要设计进行完善,将每个函数要实现的功能用伪代码写出来,或者是用流程图画出来,因为伪代码更容易转换为C++源代码,因此我采用伪代码的方式进行详细设计,详细设计做好后,我们就能基本上知道每个程序应该如何实现它自身的功能,写源代码是也就不会那么盲目。
写源代码将详细设计转化为C++代码的过程,上面的详细设计做好后,我们只需在其基础上将一些简单的或者是用汉语代替的语句用C++语句写出来,再将一些语法错误改过来,并将概要设计和详细设计时未考虑到的东西在C++语句中完善,最终形成一个可执行的C++文件。
刚开始的时候,我根据书上的提示自己编写好程序输入电脑,然后编译的时候,出现了许许多多各种各样的问题,回头查看程序,自己却很难找到问题所在,于是查阅各种资料,问了身边很多同学,终于将程序顺利调试出来了。
通过这个系统的实现,我从输入代码跟运行调试的整个过程中学习到了很多东西,也了解到系统出现问题的时候的各种错误应该如何解决。
写完程序后并不是意味着项目结束,还有一件很重要的步骤就是调试,也就是将自己写的软件从头到尾将每个功能试用一下,如果运行的结果与预期一样,那程序通过测试,如果结果与预期的不一样,那说明程序还有问题,还需要继续改。
这次的实验使我了解到,平时对知识的积累相当重要,同时也要注重课上老师的讲解,老师在课上的延伸是课本上所没有的,这些知识对于我们对程序的编写有很大的作用,同时,编程也要求我们有足够的耐心,细细推敲。
越着急可能就越无法得到我们想要的结果,遇到不会的问题要多多请教,知识是在实践与向别人请教的过程中积累的,所以问是至关重要的,只要肯下功夫很多东西都是可以完成的。
数据结构这门课程更加注重设计灵活、巧妙的算法,提高程序运行效率,这对我逻辑思维能力的提高有相当大的帮助。
虽然这次课程设计还算圆满完成,但我在以后的学习中也决不会放下数据结构,而是经常回顾和温习,并多从生活中寻找和发现问题,进而尝试用数据结构的知识设计算法,并进行简单的实现。
相信这样的积累过程对我今后的学习生活大有帮助,让我受益终生。
最后,再次衷心感谢丁卫平老师在本次课程设计中对我的悉心指导!
附1(源代码):
#include
usingnamespacestd;
#defineMax10000
#defineNUM12
structArcCell{
intadj;//权值
char*info;//该弧的相关信息
};
structVertexType{
intnumber;//景点序号
char*view;//景点名称
char*info;//景点简介
};
structMGraph{
VertexTypevex[NUM];//顶点表
ArcCellarcs[NUM][NUM];//两个地点的距离
intvexnum,arcnum;//顶点数与边数
};
MGraphG;
intP[NUM][NUM];
longintD[NUM];
intx[13]={0};
voidCreateUDN(intv,inta);
voidpingmu();
voidShortestPath(intnum);//两个地点最短路径
voidoutput(intview1,intview2);
charMenu();
voidNextValue(int);
voidmain()//主函数
{
intv0,v1,v2,v3,n,j;
charck1,ck2;
charchar1[10],char2[10];
CreateUDN(NUM,12);
do
{
ck1=Menu();
switch(ck1)
{
case'1':
inti;
cout<<"#######################################"<<'\n';
cout<<"南通大学景点概况"<<'\t'<<'\n';
cout<<""<<"景点序号"<<'\t'<<"景点名称"<<'\t'<<"景点简介"<for(i=1;i{
cout<<""<
}
cout<<"#######################################"<<'\n';
cout<<"请按回车键继续..."<<'\n';
getchar();
getchar();
break;
case'2':
cout<<"该景点序号为:
"<<'\n';
cin>>v3;
n=v3;
cout<<"其邻接景点有:
"<<'\n';
for(j=1;j<12;j++)
if(G.arcs[n][j].adj<=1200)
cout<cout<<'\n';
cout<<"请按回车键继续..."<<'\n';
getchar();
getchar();
break;
case'3':
cout<<"请选择出发地序号(1~11):
";
cin>>v0;
while(v0>11||v0<1){
cout<<"输入的出发地序号错误v0error"<<'\n';
cout<<"请重新选择出发地序号(1~11):
";
cin>>v0;
}
cout<<"请选择目的地序号(1~11):
";
cin>>v1;
while(v1>11||v1<1){
cout<<"输入的目的地序号错误v1error"<<'\n';
cout<<"请重新选择目的地序号(1~11):
";
cin>>v1;
}
ShortestPath(v0);
output(v0,v1);
cout<<"请按回车键继续..."<<'\n';
getchar();
getchar();
break;
case'4':
cout<<"请选择出发地序号(1~11):
";
cin>>v0;
while(v0>11||v0<1){
cout<<"输入的出发地序号错误v0error"<<'\n';
cout<<"请重新选择出发地序号(1~11):
";
cin>>v0;
}
ShortestPath(v0);
for(i=1;i<12;i++)
output(v0,i);
cout<<"请按回车键继续..."<<'\n';
getchar();
getchar();
break;
case'5':
cout<<"要修改的景点的景点序号"<cin>>v2;
cout<<"要修改的信息是:
1.景点名称2.景点简介"<<'\n';
cin>>ck2;
switch(ck2)
{
case'1':
cout<<"输入新的景点名称:
"<<'\n';
cin>>char1;
G.vex[v2].view=char1;
break;
case'2':
cout<<"输入新的景点简介:
"<<'\n';
cin>>char2;
G.vex[v2].info=char2;
break;
};
cout<<"请按回车键继续..."<<'\n';
getchar();
getchar();
break;
};
}while(ck1!
='e');
}
charMenu()//主菜单
{
charc;
intflag;
do{
flag=1;
cout<<"****************************************"<<'\n';
cout<<"欢迎使用南通大学导航图系统"<<'\n';
cout<<"1.景点信息的查询"<<'\n';
cout<<"2.邻接景点信息查询"<<'\n';
cout<<"3.给出到某个景点的最佳路线"<<'\n';
cout<<"4.给出到所有景点的最佳路线"<<'\n';
cout<<"5.修改景点信息"<<'\n';
cout<<"e.退出"<<'\n';
cout<<"****************************************"<<'\n';
cout<<"请输入您的选择:
";
cin>>c;
if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='e')
flag=0;
}while(flag);
returnc;
}
voidCreateUDN(intv,inta)//创建图的函数
{
inti,j;
G.vexnum=v;
G.arcnum=a;
for(i=1;iG.vex[0].view="各个景点名称";
G.vex[0].info="各个景点简介";
G.vex[1].view="西门";
G.vex[1].info="可乘301,616,35,48路等公交车";
G.vex[2].view="北门";
G.vex[2].info="可乘301路,35路公交车";
G.vex[3].view="综合专业楼群";
G.vex[3].info="教学楼10#-12#楼,纺化楼";
G.vex[4].view="西操场";
G.vex[4].info="足球、篮球、排球场,运动场";
G.vex[5].view="东操场";
G.vex[5].info="足球场、篮球场、排球场、网球场";
G.vex[6].view="方肇周楼群";
G.vex[6].info="教学楼1#-5#楼";
G.vex[7].view="逸夫楼群";
G.vex[7].info="教学楼6#-9#楼";
G.vex[8].view="一食堂";
G.vex[8].info="学校一号食堂";
G.vex[9].view="二食堂";
G.vex[9].info="学校二号食堂,有二号超市";
G.vex[10].view