校园导游系统设计及实现_第1页
校园导游系统设计及实现_第2页
校园导游系统设计及实现_第3页
校园导游系统设计及实现_第4页
校园导游系统设计及实现_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、校园导游系统设计与实现 目录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.2概要设计校园旅游模型是由景点和景点之间的路径组成的, 所以这完全可以用数据结构中的图来模拟。用图的结点代表景点,用图的边代表景点之间的路径。所以首先应设计一个图类。结点值代表景点信息,边的权值代表景点间的距离。结点值及边的权值用顺序表存储,所以需要设计一个顺序表类。 本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。计算路径长度和最短路线时可用迪杰斯特拉(Dijkastra)算法实现。最后用 switch 选择语句选择执行浏览景点信息或查询最短路径。1、主界面设计为了实现校园导游系统

3、各功能的管理, 首先设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。2、存储结构设计本系统采用图结构类型(mgraph)存储抽象校园图的信息。其中,各景点间的邻接关系用图邻接矩阵类型(adjmatrix)存储;景点(顶点)信息用结构数组(vexs)存储,其中每个数组元素是一个结构变量,包含景点编号、景点名称及景点介绍三个分量;图的顶点个数及边的条数由分量 vexnum、arcnum 表示,它们是整型数据。3、系统功能设计本系统除了要完成图的初始化功能外还设置了9个子功能。图的初始化由 initgraph()函数实现。依据读入的图的顶点个数和边的条数,分别初始化

4、图结构中图的顶点数组和图的邻接矩阵。9个子功能的设计描述如下。1 景点信息查询景点信息查询由函数 seeabout()实现。该功能根据用户输入的景点编号输出该景点的相关信息。如景点编号、名称等。2 学校景点介绍学校景点介绍由函数 browsecampus()实现。当用户选择该功能,系统即能输出学校全部景点的信息:包括景点编号、景点名称及景点介绍。3 相邻的景点及其距离为使游客能够知道其周围的景点和路径,方便他们迅速知道其所在位置和周围信息4 查看浏览线路查看浏览线路由函数 shortestpath_dij()实现。该功能采用迪杰斯特拉(Dijkstra)算法实现。当用户选择该功能,系统能根据用

5、户输入的起始景点编号,求出从该景点到其他景点的最短路径线路及距离。当用户选择该功能,系统能根据用户输入的起始景点及目的景点编号,查询任意两个景点之间的最短路径线路及距离。5 更改图信息修改一个已有景点的相关信息、删除一个景点及其相关信息、删除一条路径、加一条路径、修改路径长度、添加一个景点6 数据安全防范设置密码,能保证数据不会被随便更改,由pass()判定密码是否正确,可由changepw()函数修改密码,初始密码为gdufsx7 写入文件并保存修改打开该软件,若没有graph.txt,则会由系统初始化生成一个graph.txt,若已存在该文档会由该文档中的内容初始化系统。8 恢复初始状态若

6、数据已经显得很杂乱并很难修理,就可以启用这个功能9 退出即退出校园导游系统,由 exit(0)函数实现2.3函数结构void initgraph(mgraph &G); /依据读入的图的顶点个数和边的条数, /分别初始化图结构中图的顶点向量数组和图的邻接矩阵void browsecampus(mgraph G); /输出学校全部景点的信息 :编号、名称、介绍 void cgraph(mgraph &G,Password &pw); /构造无向图和读写文件graph。txtvoid writetxt(mgraph &G,Password &pw); /写入文件int pass(Password

7、pw); /认证密码的正确与否,正确返回1,错误返回0void reception(mgraph &G); /前台服务函数void seeabout(mgraph &G); /景点信息void shortestpath_dij(mgraph G); /该景点到其他景点的最短路径线路及距离void near(mgraph G); /相邻的景点及其距离 void changegraph(mgraph &G,Password &pw); /后台函数,并调用 void changeP(mgraph &G,Password &pw); /修改一个已有景点的相关信息void deleteP(mgraph

8、&G,Password &pw); /删除一个景点及其相关信void deleteL(mgraph &G,Password &pw); /删除一条路径void addL(mgraph &G,Password &pw); /添加一条路径void changeL(mgraph &G,Password &pw); /修改路径长度 void Add(mgraph &G,Password &pw); /添加一个景点void changepw(mgraph &G,Password &pw); /修改密码void regraph(mgraph &G,Password &pw); /恢复初始状态2.42.4校

9、园导游主界面 程序运行,后台对图结构进行初始化,运行结果如图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 任意两景点间最短路径查询

10、2.4.13输出所有景点信息为方便用户一次性知道所有景点信息,设置了查询所有景点的信息如图2.4.13 2.4.13 输出所有景点信息2.4.14相邻的景点及其距离为使游客能够知道其周围的景点和路径,方便他们迅速知道其所在位置和周围信息。如图.14相邻的景点及其距离2.4.20后台系统 输入密码为防止他人随意修改景点信息,需密码验证身份,初始密码为gdufsx,进入后台系统后可修改密码,如图2.4.200 2.4.200 输入密码后台服务后台服务具有以下功能: 修改一个已有景点的相关信息;删除一个景点及其相关信息;删除一条路径;添加一条路径;修改路径长度;添加一个景点;修改密

11、码;恢复初始状态。如图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总结 由于设计者水平有限

12、,本导游图系统的功能还比较简单,没有求出两景点间的多条可行路径供游客选择,无法在界面中显示出地图;由于邻接矩阵是30*30的,所以无法在一个界面中完整简洁的显示出来。还有个很好的想法也没有实现,就是怎样求出游完所有景点是的最短路径和线路,这样游客就不需要重复走过几个景点。在这次作业中,我积累了不少经验,提高了动手能力。在编程序过程中不要急于求成,如果一下字把所有的功能编出来了再去编译,一旦出错,就很难找出是哪里错误了,这就需要一个一个的实现了。这次作业也让我增加了对文件流的理解。参考文献1严蔚敏,李冬梅,吴伟民.数据结构(C语言版).人民邮电出版社.2011.2王珊珊,臧洌,张志航.C+程序设

13、计教程 第二版 .机械工业出版社.2011附件:/程序名称:校园导游系统设计与实现/程序员:Joebug/编写时间:2015年6月#include #include #include #include #include using namespace std;#define N 50#define M 10typedef struct Infor /景点结构体 char name20; /景点名称 char inf100; /景点信息 Infor;typedef structint adjNN; /各景点间的邻接关系用图邻接矩阵类型Infor vexsN; /景点(顶点)信息:int vexn

14、um,arcnum; /图的顶点个数及边的条数mgraph;typedef struct char p6; Password;char inform30100=信息男宿舍,后面是内环,与风采园相近,前面是南苑9-12栋!,一楼价格还好,但饭菜比较难吃,二楼较贵,饭菜还行!,中国银行营业厅,如果要办理业务,需很早地去排队;有ATM机!,二楼有自强社办公室、校学生会办公室一楼有健身房!,东西较贵但品类基本齐全!,主要是老师居住。喜祥数码港要收费,云山数码港在不换硬件条件下免费修!,主要接待外来人员,招待所!,一楼有糖水和奶茶供应,晚上总有很多部门在此开会。二楼有许多套餐!,一楼大众点菜,品类比三饭

15、多。二楼的价格在8元左右!,女生宿舍,北苑三栋楼下有创业园!,组成巡逻队,协助学校保障校园安全。!,位于保卫处后面,在校生校内看病只需支付很少的费用!,具有防空洞;连接宿舍区和教学区!,在隧道口的上方,可以乘坐很多路的公交车!,一楼有中国银行ATM。早上和中午前面有校巴。不少活动的举办地点!,是学习的主要地方,教室里面设施较为齐全,有多媒体、空调、电视等,后面是语心湖和实验楼!,早上会有学生在那里练嗓子,以及读书!,多种会议比赛的场所!,学校政要的办公室所在地!,各学院老师的办公室所在地!,拍毕业照时,校友回来时的聚集之地!,摆放着很多电脑的地方!,位于教学楼和实验楼之间,湖水平静,还有黑天鹅

16、嬉戏于水上!,各种活动的举办场所!,主要是艺术生上课的地方,周六日为雅思考场!,重要会议进行的地方,党课和军训理论课在这里上,有空调!,图书馆除了中英文借阅区与杂志借阅区外,还有自习区;前面有大广场,最前面是学校正门!,内有排球场、篮球场,外有足球场。还有游泳池、网球场!,体育馆有多个观众席;中央可用做正规比赛场所。日常用来上羽毛球课、跆拳道课!,位于图书馆前面,学术报告厅与艺术楼中间,虽然不宏伟,但是也是一个标志!;char Name3020=南苑13栋,风采园(三饭),中国银行,学活&水榭, 又康超市,师苑&数码港,广外友苑,博雅园(二饭),文采园(一饭),创业园,后勤&保卫处,校医室,隧

17、道口,广外公交站,教学楼A栋,教学楼E、F栋,凤凰山坡,八角楼,校办公楼,院系办公楼,校友林,实验楼,语心湖,学术报告厅,艺术楼,大会堂,图书馆,泳池&操场,体育馆&场,正校门;void initgraph(mgraph &G); /依据读入的图的顶点个数和边的条数, /分别初始化图结构中图的顶点向量数组和图的邻接矩阵void browse(mgraph G); /输出学校全部景点的信息 :编号、名称、介绍 void cgraph(mgraph &G,Password &pw); /构造无向图和读写文件graph。txt void writetxt(mgraph &G,Password &pw

18、); /写入文件 int pass(Password pw); /认证密码的正确与否,正确返回1,错误返回0 void reception(mgraph &G); /前台服务函数void seeabout(mgraph &G); /景点信息void shortestpath_dij(mgraph G); /该景点到其他景点的最短路径线路及距离void browsecampus(mgraph G); /输出学校全部景点的信息 :编号、名称、介绍void near(mgraph G); /相邻的景点及其距离 void changegraph(mgraph &G,Password &pw); /后台

19、函数,并调用 void changeP(mgraph &G,Password &pw); /修改一个已有景点的相关信息void deleteP(mgraph &G,Password &pw); /删除一个景点及其相关信void deleteL(mgraph &G,Password &pw); /删除一条路径void addL(mgraph &G,Password &pw); /添加一条路径void changeL(mgraph &G,Password &pw); /修改路径长度 void Add(mgraph &G,Password &pw); /添加一个景点void changepw(mgr

20、aph &G,Password &pw); /修改密码void regraph(mgraph &G,Password &pw); /恢复初始状态 int main()mgraph campus;Password pw;strcpy(pw.p,gdufsx); /初始化密码 initgraph(campus);cgraph(campus,pw);int n,m=1;while(m) system(cls); cout 欢迎使用GDUFS校园导游系统endl;cout *endlendl; cout (1)前台服务(游客身份登陆)endl; cout (2)后台服务(管理员身份登陆)endl; c

21、out (0)退出endlendl;cout *endl;coutn; switch(n) case 1: reception(campus); break; case 2:if(pass(pw)=1) changegraph(campus,pw); /后台函数 break; case 0: m=0;cout谢谢您的使用! endl按任意键继续 ;getch();exit(0); default: cout 您的输入有误,任意键继续.; getch(); void initgraph(mgraph &G) /依据读入的图的顶点个数和边的条数, /分别初始化图结构中图的顶点向量数组和图的邻接矩阵

22、int i,j;for(i=0;iN;i+)for(j=0;jN;j+) G.adjij=9999;for(i=0;iG.vexnumG.arcnum;for(i=0;iG.;infileG.vexsi.inf; for(i=0;iG.vexnum;i+)for(j=0;jdist;G.adjij=dist;for(i=0;ipw.pi; infile.close();void writetxt(mgraph &G,Password &pw) /写入文件 int i,j;ofstream outfile(graph.txt);outfileG.vexnumendlG.arc

23、numendl;for(i=0;iG.vexnum;i+)outfileG.endlG.vexsi.infendl; for(i=0;iG.vexnum;i+)for(j=0;jG.vexnum;j+)outfileG.adjij ;for(i=0;i6;i+)outfilepw.pi ;outfile.close();void browse(mgraph G) /输出学校全部景点的信息 :编号、名称int j=0,k;for(int i=0;iG.vexnum;i+)k=i+1;coutk.G.t;j+;if(j%3=0)coutendl;if(j%3

24、!=0)coutendl;int pass(Password pw)char ch6,judge=1;cout 请输入密码:;for(int i=0;i6;i+)chi=getch();cout.flush();cout*; for(int i=0;i6;i+)if(pw.pi!=chi)judge=0; return judge; void changepw(mgraph &G,Password &pw)int i,b=1;char ch6,ch16,judge1=1,judge2=1;while(b=1)cout请输入原密码:endl;for(i=0;i6;i+)chi=getch();c

25、out.flush();cout*; for(i=0;i6;i+)if(pw.pi!=chi)judge1=0;if(judge1)coutendl请输入新密码:endl;for(i=0;i6;i+)chi=getch();cout.flush();cout*; coutendl请确认新密码:endl;for(i=0;i6;i+)ch1i=getch();cout.flush();cout*; for(i=0;i6;i+)if(chi!=ch1i)judge2=0; if(judge2)for(i=0;i6;i+)pw.pi=chi;coutendl修改成功! endl;writetxt(G,

26、pw);elsecoutendl修改错误! endl; else cout密码错误!endl;coutendl返回后台系统按0,继续修改按1b;coutendl; /前台/ void reception(mgraph &G) /前台函数 int n,i,j; while(1) system(cls);/清屏 cout*欢迎使用前台系统*endl; cout(1)个别景点信息查询endl; cout(2)问路查询endl; cout(3)输出所有景点信息endl; cout(4)相邻的景点及其距离endl; cout(0)返回上一级菜单endl; coutn; switch(n) case 1:

27、 seeabout(G); break; case 2: shortestpath_dij(G); break; case 3: browsecampus(G); break; case 4: near(G); break; case 0: return; break; default: cout您的输入有误,任意键继续.endl; getch(); void seeabout(mgraph &G) /景点信息 int a; int b=1;system(cls);browse(G); while(b) cout请输入要查找的景点信息a; a-;if(a=0&aG.vexnum)couta+1

28、.G.endlG.vexsa.infendl; else cout输入错误,无此景点endl; cout返回前台系统按0,继续查找按1b;while(b!=0&b!=1)cout返回前台系统按0,继续查找按1b; void shortestpath_dij(mgraph G) /该景点到其他景点的最短路径线路及距离 int b=1,i,j,vt,v,v0,w,min; bool SN; int DN,PathN; int n=G.vexnum; system(cls); browse(G); while(b) cout请输入要查询路径的两个景点的编号v0; v0-; cin

29、vt; vt-; for(v=0;vn;v+) Sv=false; Dv=G.adjv0v; if(Dv9999) Pathv=v0;/v0是v的前趋 else Pathv=-1;/v无前趋 Dv0=0; Sv0=true; for(i=1;in;i+) min=9999; for(w=0;wn;w+) if(!Sw&Dwmin) v=w; min=Dw;/选择一条当前的最短路径,终点为v Sv=true; /将v加入S for(w=0;wn;w+)/更新当前最短路径及距离 if(!Sw&(Dv+G.adjvwDw) Dw=Dv+G.adjvw; Pathw=v; cout距离为:endl;

30、coutDvtendl; cout要经过=0;v-) coutev+1.G.; coutvt+1.G.endl; cout返回后台系统按0,继续查询按1b;void browsecampus(mgraph G) /输出学校全部景点的信息 :编号、名称、介绍 int k;for(int i=0;iG.vexnum;i+)k=i+1;coutk.G.endlG.vexsi.infendl;cout按任意键返回前台系统endl;getch();void near(mgraph G) /相邻的景点及其距离int b=1,i,j; bool

31、 a5050;system(cls); while(b)browse(G);for(i=0;i50;i+) for(j=0;j50;j+) aij=false; for(i=0;iG.vexnum;i+) for(j=0;jG.vexnum;j+) if(G.adjij!=9999)if(!aij) couti+1 j+1tG.adjijendl;aij=true;aji=true; cout返回后台系统按0b; /后台函数/ void changegraph(mgraph &G,Password &pw) /修改图信息 int n; while(1) system(cls); cout*欢迎

32、使用后台系统*endl; cout(1)修改一个已有景点的相关信息endl; cout(2)删除一个景点及其相关信息endl; cout(3)删除一条路径endl; cout(4)增加一条路径endl; cout(5)修改一条路径长度endl; cout(6)增加景点endl; cout(7)修改密码endl; cout(8)恢复初始状态endl; cout(0)返回上一级菜单endl; coutn; switch(n) case 1: changeP(G,pw); break; case 2: deleteP(G,pw); break; case 3: deleteL(G,pw); brea

33、k; case 4: addL(G,pw); break; case 5: changeL(G,pw); break; case 6: Add(G,pw); break; case 7: changepw(G,pw); break; case 8: regraph(G,pw); break; case 0: return; break; default: cout您的输入有误,任意键继续.endl; getch(); void changeP(mgraph &G,Password &pw) /修改一个已有景点的相关信息 int a; int b=1; while(b) system(cls);browse(G);cout请输入要修改景点信息的编号:a; a-;if(a=0&a=G.vexnum) couta+1.G.endlG.vexsa.infendl; cout请输入该景点的修改后的信息G.vexsa.inf; cout修改成功!endl; cout是否要保存?保存按1,不保存按2c; if(c=1) writetxt(G,pw); elsecgraph(G,pw); else couterror!输入有误!endl; cout返回后台系统按0,继续修改按1b; void deleteP(mgraph &G,Pa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论