校园导游系统设计与实现.docx
- 文档编号:23731250
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:43
- 大小:585.43KB
校园导游系统设计与实现.docx
《校园导游系统设计与实现.docx》由会员分享,可在线阅读,更多相关《校园导游系统设计与实现.docx(43页珍藏版)》请在冰豆网上搜索。
校园导游系统设计与实现
校园导游系统设计与实现
1.设计要求
2.1需求分析
2.2概要设计
2.3各个模块名称和功能
2.4系统导游主界面
2.4.1前台系统
2.4.2后台系统
2.4.3退出系统
3实验总结
参考文献
附件
1.设计要求
设计一个校园导游程序,为来访的客人提供各种信息查询服务。
2.1需求分析
⑴设计学校的校园平面图。
选取若干个有代表性的景点抽象成一个无向带权图(无向网),所含景点不少于30个。
以图中顶点表示校各景点,边上的权值表示两景点之间的距离。
⑵存放景点代号、名称、简介等信息供用户查询。
⑶为来访客人提供图中任意景点相关信息的查询。
⑷为来访客人提供图中任意景点之间的问路查询。
⑸可以为校园平面图增加或删除景点或边,修改边上的权值等。
景点距离图
2.2概要设计
校园旅游模型是由景点和景点之间的路径组成的,所以这完全可以用数据结构中的图来模拟。
用图的结点代表景点,用图的边代表景点之间的路径。
所以首先应设计一个图类。
结点值代表景点信息,边的权值代表景点间的距离。
结点值及边的权值用顺序表存储,所以需要设计一个顺序表类。
本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。
计算路径长度和最短路线时可用迪杰斯特拉(Dijkastra)算法实现。
最后用switch选择语句选择执行浏览景点信息或查询最短路径。
1、主界面设计
为了实现校园导游系统各功能的管理,首先设计一个含有多个菜单项的主控菜单子程序以系统的各项子功能,方便用户使用本系统。
2、存储结构设计
本系统采用图结构类型(mgraph)存储抽象校园图的信息。
其中,各景点间的邻接关系用图邻接矩阵类型(adjmatrix)存储;景点(顶点)信息用结构数组(vexs)存储,其中每个数组元素是一个结构变量,包含景点编号、景点名称及景点介绍三个分量;图的顶点个数及边的条数由分量vexnum、arcnum表示,它们是整型数据。
3、系统功能设计
本系统除了要完成图的初始化功能外还设置了9个子功能。
图的初始化由initgraph()函数实现。
依据读入的图的顶点个数和边的条数,分别初始化图结构中图的顶点数组和图的邻接矩阵。
9个子功能的设计描述如下。
1景点信息查询
景点信息查询由函数seeabout()实现。
该功能根据用户输入的景点编号输出该景点的相关信息。
如景点编号、名称等。
2学校景点介绍
学校景点介绍由函数browsecampus()实现。
当用户选择该功能,系统即能输出学校全部景点的信息:
包括景点编号、景点名称及景点介绍。
3相邻的景点及其距离
为使游客能够知道其周围的景点和路径,方便他们迅速知道其所在位置和周围信息
4查看浏览线路
查看浏览线路由函数shortestpath_dij()实现。
该功能采用迪杰斯特拉(Dijkstra)算
法实现。
当用户选择该功能,系统能根据用户输入的起始景点编号,求出从该景点到其他景点的最短路径线路及距离。
当用户选择该功能,系统能根据用户输入的起始景点及目的景点编号,查询任意两个景点之间的最短路径线路及距离。
5更改图信息
修改一个已有景点的相关信息、删除一个景点及其相关信息、删除一条路径、加一条路径、修改路径长度、添加一个景点
6数据安全防
设置密码,能保证数据不会被随便更改,由pass()判定密码是否正确,可由changepw()函数修改密码,初始密码为gdufsx
7写入文件并保存修改
打开该软件,若没有graph.txt,则会由系统初始化生成一个graph.txt,若已存在该文档会由该文档中的容初始化系统。
8恢复初始状态
若数据已经显得很杂乱并很难修理,就可以启用这个功能
9退出
即退出校园导游系统,由exit(0)函数实现
2.3函数结构
voidinitgraph(mgraph&G);//依据读入的图的顶点个数和边的条数,
//分别初始化图结构中图的顶点向量数组和图的邻接矩阵
voidbrowsecampus(mgraphG);//输出学校全部景点的信息:
编号、名称、介绍
voidcgraph(mgraph&G,Password&pw);//构造无向图和读写文件graph。
txt
voidwritetxt(mgraph&G,Password&pw);//写入文件
intpass(Passwordpw);//认证密码的正确与否,正确返回1,错误返回0
voidreception(mgraph&G);//前台服务函数
voidseeabout(mgraph&G);//景点信息
voidshortestpath_dij(mgraphG);//该景点到其他景点的最短路径线路及距离
voidnear(mgraphG);//相邻的景点及其距离
voidchangegraph(mgraph&G,Password&pw);//后台函数,并调用
voidchangeP(mgraph&G,Password&pw);//修改一个已有景点的相关信息
voiddeleteP(mgraph&G,Password&pw);//删除一个景点及其相关信
voiddeleteL(mgraph&G,Password&pw);//删除一条路径
voidaddL(mgraph&G,Password&pw);//添加一条路径
voidchangeL(mgraph&G,Password&pw);//修改路径长度
voidAdd(mgraph&G,Password&pw);//添加一个景点
voidchangepw(mgraph&G,Password&pw);//修改密码
voidregraph(mgraph&G,Password&pw);//恢复初始状态
2.4
2.4校园导游主界面
程序运行,后台对图结构进行初始化,运行结果如图2.4.1。
2.4主界面
2.4.10前台系统
前台系统是游客浏览查询界面。
如图2.4.10
2.4.10游客浏览界面
2.4.11个别景点的相关信息查询
景点的相关信息查询是通过seeabout()函数来调用输出的,在前台系统输入1,输入任一景点编号即可知道其信息。
运行结果如图2.4.11
2.4.11信息查询
2.4.12任意两景点间最短路径查询
根据用户的需求,在用户输入了起点和终点后计算出最短路径是哪一条路径。
例如起点是3.中国银行,终点是15.教学楼A栋。
运行结果如图2.4.12
2.4.12任意两景点间最短路径查询
2.4.13输出所有景点信息
为方便用户一次性知道所有景点信息,设置了查询所有景点的信息如图2.4.13
2.4.13输出所有景点信息
2.4.14相邻的景点及其距离
为使游客能够知道其周围的景点和路径,方便他们迅速知道其所在位置和周围信息。
如图2.4.14
2.4.14相邻的景点及其距离
2.4.20后台系统
输入密码
为防止他人随意修改景点信息,需密码验证身份,初始密码为gdufsx,进入后台系统后可修改密码,如图2.4.200
2.4.200输入密码
后台服务
后台服务具有以下功能:
修改一个已有景点的相关信息;删除一个景点及其相关信息;删除一条路径;添加一条路径;修改路径长度;添加一个景点;修改密码;恢复初始状态。
如图2.4.20。
功能如图2.4.21至2.4.28
2.4.20后台服务
2.4.21修改一个已有景点的相关信息
2.4.22删除一个景点及其相关信息
2.4.23删除一条路径
2.4.24添加一条路径
2.4.25修改路径长度
2.4.26添加一个景点
2.4.27修改密码
2.4.28恢复初始状态
在后台系统输入8,就会询问你是否恢复初始状态,暗“Y”将会使之前一切修改的数据信息都恢复原样,重新初始化。
2.4.28恢复初始状态
2.4.3退出系统
用户满足了需求之后,只要在主界面菜单处输入0便可退出此次校园导游系统。
运行结果如图2.4.9。
退出系统
3总结
由于设计者水平有限,本导游图系统的功能还比较简单,没有求出两景点间的多条可行路径供游客选择,无法在界面中显示出地图;由于邻接矩阵是30*30的,所以无法在一个界面中完整简洁的显示出来。
还有个很好的想法也没有实现,就是怎样求出游完所有景点是的最短路径和线路,这样游客就不需要重复走过几个景点。
在这次作业中,我积累了不少经验,提高了动手能力。
在编程序过程中不要急于求成,如果一下字把所有的功能编出来了再去编译,一旦出错,就很难找出是哪里错误了,这就需要一个一个的实现了。
这次作业也让我增加了对文件流的理解。
参考文献
[1]严蔚敏,冬梅,吴伟民.数据结构(C语言版).人民邮电.2011.
[2]王珊珊,臧洌,志航.C++程序设计教程第二版.机械工业.2011
附件:
//程序名称:
校园导游系统设计与实现
//程序员:
Joebug
//编写时间:
2015年6月
#include
#include
#include
#include
#include
usingnamespacestd;
#defineN50
#defineM10
typedefstructInfor{//景点结构体
charname[20];//景点名称
charinf[100];//景点信息
}Infor;
typedefstruct{
intadj[N][N];//各景点间的邻接关系用图邻接矩阵类型
Inforvexs[N];//景点(顶点)信息:
intvexnum,arcnum;//图的顶点个数及边的条数
}mgraph;
typedefstruct{
charp[6];
}Password;
charinform[30][100]={
"信息男宿舍,后面是环,与风采园相近,前面是南苑9-12栋!
",
"一楼价格还好,但饭菜比较难吃,二楼较贵,饭菜还行!
",
"中国银行营业厅,如果要办理业务,需很早地去排队;有ATM机!
",
"二楼有自强社办公室、校学生会办公室…一楼有健身房!
",
"东西较贵但品类基本齐全!
",
"主要是老师居住。
喜祥数码港要收费,云山数码港在不换硬件条件下免费修!
",
"主要接待外来人员,招待所!
",
"一楼有糖水和奶茶供应,晚上总有很多部门在此开会。
二楼有许多套餐!
",
"一楼大众点菜,品类比三饭多。
二楼的价格在8元左右!
",
"女生宿舍,北苑三栋楼下有创业园!
",
"组成巡逻队,协助学校保障校园安全。
!
",
"位于保卫处后面,在校生校看病只需支付很少的费用!
",
"具有防空洞;连接宿舍区和教学区!
",
"在隧道口的上方,可以乘坐很多路的公交车!
",
"一楼有中国银行ATM。
早上和中午前面有校巴。
不少活动的举办地点!
",
"是学习的主要地方,教室里面设施较为齐全,有多媒体、空调、电视等,后面是语心湖和实验楼!
",
"早上会有学生在那里练嗓子,以及读书!
",
"多种会议比赛的场所!
",
"学校政要的办公室所在地!
",
"各学院老师的办公室所在地!
",
"拍毕业照时,校友回来时的聚集之地!
",
"摆放着很多电脑的地方!
",
"位于教学楼和实验楼之间,湖水平静,还有黑天鹅嬉戏于水上!
",
"各种活动的举办场所!
",
"主要是艺术生上课的地方,周六日为雅思考场!
",
"重要会议进行的地方,党课和军训理论课在这里上,有空调!
",
"图书馆除了中英文借阅区与杂志借阅区外,还有自习区;前面有大广场,最前面是学校正门!
",
"有排球场、篮球场,外有足球场。
还有游泳池、网球场!
",
"体育馆有多个观众席;中央可用做正规比赛场所。
日常用来上羽毛球课、跆拳道课!
",
"位于图书馆前面,学术报告厅与艺术楼中间,虽然不宏伟,但是也是一个标志!
"
};
charName[30][20]={
"南苑13栋","风采园(三饭)","中国银行","学活&水榭",
"又康超市","师苑&数码港","广外友苑","博雅园(二饭)",
"文采园(一饭)","创业园","后勤&保卫处","校医室",
"隧道口","广外公交站","教学楼A栋","教学楼E、F栋",
"凤凰山坡","八角楼","校办公楼","院系办公楼","校友林","实验楼",
"语心湖","学术报告厅","艺术楼","大会堂","图书馆",
"泳池&操场","体育馆&场","正校门"};
voidinitgraph(mgraph&G);//依据读入的图的顶点个数和边的条数,
//分别初始化图结构中图的顶点向量数组和图的邻接矩阵
voidbrowse(mgraphG);//输出学校全部景点的信息:
编号、名称、介绍
voidcgraph(mgraph&G,Password&pw);//构造无向图和读写文件graph。
txt
voidwritetxt(mgraph&G,Password&pw);//写入文件
intpass(Passwordpw);//认证密码的正确与否,正确返回1,错误返回0
voidreception(mgraph&G);//前台服务函数
voidseeabout(mgraph&G);//景点信息
voidshortestpath_dij(mgraphG);//该景点到其他景点的最短路径线路及距离
voidbrowsecampus(mgraphG);//输出学校全部景点的信息:
编号、名称、介绍
voidnear(mgraphG);//相邻的景点及其距离
voidchangegraph(mgraph&G,Password&pw);//后台函数,并调用
voidchangeP(mgraph&G,Password&pw);//修改一个已有景点的相关信息
voiddeleteP(mgraph&G,Password&pw);//删除一个景点及其相关信
voiddeleteL(mgraph&G,Password&pw);//删除一条路径
voidaddL(mgraph&G,Password&pw);//添加一条路径
voidchangeL(mgraph&G,Password&pw);//修改路径长度
voidAdd(mgraph&G,Password&pw);//添加一个景点
voidchangepw(mgraph&G,Password&pw);//修改密码
voidregraph(mgraph&G,Password&pw);//恢复初始状态
intmain(){
mgraphcampus;
Passwordpw;
strcpy(pw.p,"gdufsx");//初始化密码
initgraph(campus);
cgraph(campus,pw);
intn,m=1;
while(m)
{
system("cls");
cout<<"欢迎使用GDUFS校园导游系统"< cout<<"**************************************"< cout<<" (1)前台服务(游客身份登陆)"< cout<<" (2)后台服务(管理员身份登陆)"< cout<<"(0)退出"< cout<<"**************************************"< cout<<"请输入您的选择(0-2): "; cin>>n; switch(n) { case1: reception(campus); break; case2: if(pass(pw)==1) changegraph(campus,pw);//后台函数 break; case0: m=0; cout<<"您的使用! "< getch(); exit(0); default: cout<<"您的输入有误,任意键继续..."; getch(); } } } voidinitgraph(mgraph&G){//依据读入的图的顶点个数和边的条数, //分别初始化图结构中图的顶点向量数组和图的邻接矩阵 inti,j; for(i=0;i for(j=0;j G.adj[i][j]=9999; for(i=0;i<30;i++){ strcpy(G.vexs[i].name,Name[i]); strcpy(G.vexs[i].inf,inform[i]); } G.vexnum=30; G.arcnum=45; G.adj[0][1]=55;G.adj[1][0]=55; G.adj[0][5]=287;G.adj[5][0]=287; G.adj[1][2]=243;G.adj[2][1]=243; G.adj[2][3]=28;G.adj[3][2]=28; G.adj[3][4]=31;G.adj[4][3]=31; G.adj[4][5]=42;G.adj[5][4]=42; G.adj[4][9]=106;G.adj[9][4]=106; G.adj[5][6]=87;G.adj[6][5]=87; G.adj[5][7]=71;G.adj[7][5]=71; G.adj[7][8]=132;G.adj[8][7]=132; G.adj[7][9]=97;G.adj[9][7]=97; G.adj[7][12]=150;G.adj[12][7]=150; G.adj[8][9]=111;G.adj[9][8]=111; G.adj[8][11]=151;G.adj[11][8]=151; G.adj[8][13]=126;G.adj[13][8]=126; G.adj[9][11]=257;G.adj[11][9]=257; G.adj[10][11]=33;G.adj[11][10]=33; G.adj[10][13]=128;G.adj[13][10]=128; G.adj[10][27]=287;G.adj[27][10]=287; G.adj[12][13]=117;G.adj[13][12]=117; G.adj[12][14]=83;G.adj[14][12]=83; G.adj[12][16]=160;G.adj[16][12]=160; G.adj[13][26]=359;G.adj[26][13]=359; G.adj[14][15]=118;G.adj[15][14]=118; G.adj[14][16]=245;G.adj[16][14]=245; G.adj[15][22]=94;G.adj[22][15]=94; G.adj[15][26]=176;G.adj[26][15]=176; G.adj[16][18]=62;G.adj[18][16]=62; G.adj[17][18]=74;G.adj[18][17]=74; G.adj[17][19]=88;G.adj[19][17]=88; G.adj[17][22]=218;G.adj[22][17]=218; G.adj[19][20]=64;G.adj[20][19]=64; G.adj[20][21]=167;G.adj[21][20]=167; G.adj[21][22]=68;G.adj[22][21]=68; G.adj[21][23]=132;G.adj[23][21]=132; G.adj[23][26]=203;G.adj[26][23]=203; G.adj[23][29]=60;G.adj[29][23]=60; G.adj[24][25]=129;G.adj[25][24]=129; G.adj[24][28]=263;G.adj[28][24]=263; G.adj[24][29]=80;G.adj[29][24]=80; G.adj[25][26]=181;G.adj[26][25]=181; G.adj[25][27]=212;G.adj[27][25]=212; G.adj[25][28]=192;G.adj[28][25]=192; G.adj[26][27]=164;G.adj[27][26]=164; G.adj[27][28]=354;G.adj[28][27]=354; } voidcgraph(mgraph&G,Password&pw){//写入文件并初始化 inti,j,dist; charc; ifstreaminfile("graph.txt"); if(! infile){ infile.close(); writetxt(G,pw); } else{ infile.close(); ifstreaminfile("graph.txt"); infile>>G.vexnum>>G.arcnum; for(i=0;i infile>>G.vexs[i].name; infile>>G.vexs[i].inf; } for(i=0;i for(j=0;j infile>>dist; G.adj[i][j]=dist; } } for(i=0;i<6;i++) infile>>pw.p[i]; infile.close(); } } voidwritetxt(mgraph&G,Password&pw){//写入文件 inti,j; ofstreamoutfile("graph.txt"); outfile< fo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 校园 导游 系统 设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)