收藏 分销(赏)

校园导航系统课程设计报告.doc

上传人:a199****6536 文档编号:3341608 上传时间:2024-07-02 格式:DOC 页数:61 大小:742.54KB 下载积分:14 金币
下载 相关 举报
校园导航系统课程设计报告.doc_第1页
第1页 / 共61页
校园导航系统课程设计报告.doc_第2页
第2页 / 共61页


点击查看更多>>
资源描述
《校园导航系统》 课程设计报告 姓 名: 郭璇 学 号: 班 级: 10网络 专 业: 网络工程 指导教师: 唐轶媛 蒋荣萍 时 间:2023/6/25-2023/7/6 信息科学与工程学院 目 录 摘要……………………………………………………………….……………….1 1. 题目…………………………………………………………….……………….1 2. 概要设计……………………………………………………………………….1 3. 调试分析……………………………………………………………………….15 4. 参考文献……………………………………………………………………….15 1. 题目 校园导航系统 设计一个校园导游程序,后台操作: 1、操作员信息管理如修改密码等 2、能根据学校的规模进行添加景点信息、修改景点信息等功能, 3、若临时有交通管制,能进行交通管制的设立和撤消(如某某时间段那条路进行那个方向的交通管制等) 前台为来访的客人提供各种信息查询服务: 1、设计学校的校园平面图,所含景点不少于10个。以图中顶点表达校内各景点,存放景点名称、代号、简介等信息;以边表达途径,存放途径长度等相关信息。 2、为来访客人提供图中任意景点相关信息的查询。 3、提供途中任意景点问路查询,即求任意两个景点间的一条最短的简朴途径。 1.1 需求分析 设计一个校园导航系统,导航系统又分为游客和管理员。要进行管理操作还是游客操作由用户自己选择 管理员的操作:修改景点信息、增长景点信息、交通管制等。 游客的操作:查看景点信息和查最短途径。 2. 概要设计 景点的信息由一维数组存放,景点关系由二维数据来存放 景点的信息和关系从文献读取,进而初始化 typedef struct //保存单个景点信息的结构体 { char code[10]; //存放景点代码 char name[20]; //存放景点名称 char instruction[100]; //存放景点简介 }ViewPoint; typedef struct //存放景点关系的二维数组 { int edges[MAXV][MAXV]; //两景点间的距离 int number; //景点的数量 ViewPoint V[MAXV]; //保存景点信息的结构体数组 }MGraph; 2.1 流程图 函数开始 ↓ 接受功能的请求 ↓ 接受信息输入 ↓ 判断是否对的 ↓ 读取文献 ↓ 进行相相应操作 ↓ 写回文献 ↓ 函数结束 2.2 具体设计 void MainMenu(); 主菜单,写界面操作的函数。 void UserMenu(); 游客菜单,判断是否非法输入,不会死循环。 void Map(); 输出民大地图,由于时间关系,没有画出。 void ViewAsk(); 游客查询景点函数,让游客选择要查询的景点,判断是否非法输入,不会死循环。 void PathAsk(); 问路函数,根据游客的起点和终点给出最短途径,判断是否非法输入,不会死循环。 void Dijkstra(MGraph G,int v,int i); 迪杰斯特拉函数求最短途径 void Ppath(MGraph G,int path[],int i,int v); 输出最短途径中的景点 void Dispath(MGraph G,int dist[],int path[],int s[],int n,int v,int i); 查找最短途径。 void AdminMenu(); 管理员菜单,判断是否非法输入,不会死循环。 void Password(); 密码函数,管理员需输入密码才干进入后台,输入一次后无需再输入。 void AdminAlter(); 修改密码,需要再次输入密码。 void ViewAdd(); 增长景点,列出已有景点,判断新景点信息是和与已有景点的冲突,如冲突需重新输入,判断是否非法输入,不会死循环。 void ViewAlter(); 修改景点信息,由于时间关系,没有判断新修改的景点信息是否与已有景点信息冲突。若要做次判断,应与增长景点的判断算法一致。 void ControlMenu(); 交通管制菜单,判断是否非法输入,不会死循环。 void PathControl(); 途径管理,可增长途径和修改途径,列出已有途径,根据用户的输入进行管理,判断是否非法输入,不会死循环。但途径长度为整型,没有判断,若输入非整型,则进入死循环,一个大大的BUG,能力有限。 void PathDel(); 删除途径,列出已有途径,用户根据提醒进行删除。判断是否非法输入,不会死循环。 void Read(MGraph &G); 读取文献。 void White(MGraph &G); 保存文献。 2.3 操作界面 程序一开始登录主界面: 游客菜单: 管理员界面 管理员界面 管理员操作界面 查询景点 查询最短途径 修改密码 增长景点 修改景点信息 交通管制界面 删除途径 管理途径 3 调试分析: 当进入操作界面进行功能的选择,但非法输入时,应当提醒错误并可以让用户重新选择,我使用的接受选择的是字符串,判断字符串长度是否等于1,假如不等于则是错误的,等于1后用switch判断第一个字符,与case比较,调用相应的函数。用whlie(1),使之一直循环,直到与case中相同,使用标志和break;让他跳出相应的循环层。在这里经常会犯错,所以要很小心的判断每个标志跳出的相应的循环,使他不会跳出不该跳出的循环。 另一个问题是最短途径。在新增一个景点后,我选择不添加相邻的途径时(矩阵的行等于列始终为0,表达同一个景点到同一个景点的途径为0),再次查询最短途径时,起点为新增的途径,终点为任何一个景点都无法运营;但是起点为除新增景点外的景点,而终点为新增景点时,可对的输出:没有途径。由于时间因素来不及调试了。 参考文献 [1]严蔚敏、吴为民.数据结构(C语言版).北京:清华大学出版社.2023 [2]林小茶.C语言程序设计(第二版).中国铁道出版社.2023 [3]杜茂康、李昌兵等.C++面向对象程序设计(第2版).北京:电子工业出版社.2023 附 录 源程序 <All.h>:头文献具体代码 #include<iostream.h> #include<iomanip.h> #include<fstream.h> #include<string.h> #include<conio.h> #include<stdlib.h> #include<stdio.h> #define MAXV 100 #define INF 10000 typedef struct { char code[10]; char name[20]; char instruction[100]; }ViewPoint; typedef struct { int edges[MAXV][MAXV]; int number; ViewPoint V[MAXV]; }MGraph; void MainMenu(); void UserMenu(); void Map(); void ViewAsk(); void PathAsk(); void Dijkstra(MGraph G,int v,int i); void Ppath(MGraph G,int path[],int i,int v); void Dispath(MGraph G,int dist[],int path[],int s[],int n,int v,int i); void AdminMenu(); void Password(); void AdminAlter(); void ViewAdd(); void ViewAlter(); void ControlMenu(); void PathControl(); void PathDel(); void Read(MGraph &G); void White(MGraph &G); <Main.cpp>:主函数 #include"All.h" main() { int pass; char name[10],password[10]; ifstream indata("Password.txt"); indata>>pass>>name>>password; indata.close(); pass=0; ofstream outdata("Password.txt"); outdata<<pass<<endl<<name<<endl<<password; outdata.close(); MainMenu(); } <Menu.cpp>:菜单功能 #include"All.h" void MainMenu() { system("cls"); char choose[1]; cout<<"\n\n\n"<<setw(56)<<"欢迎光顾广西民族大学,祝您旅途快乐!"<<endl; cout<<setw(55)<<"广西民族大学校园导航系统为您服务!"<<endl; cout<<endl<<setw(45)<<"1.进入导航系统"<<endl; cout<<setw(45)<<"───────"<<endl; cout<<setw(45)<<"2.登录操作系统"<<endl; cout<<setw(45)<<"───────"<<endl; cout<<setw(37)<<"3.退出"<<endl; cout<<setw(45)<<"───────"<<endl; cout<<endl<<setw(46)<<"请输入您的选择:"; cin>>choose; if(strlen(choose)==1) { switch(choose[0]) { case '1': UserMenu();break; case '2': Password();break; case '3': exit(0); default: system("cls"); cout<<"\n\n\n"<<endl<<setw(43)<<"选择错误!"<<endl; cout<<endl<<setw(52)<<"按任意键返回主菜单重新选择!"; cout<<endl; getch(); MainMenu(); break; } } else { system("cls"); cout<<"\n\n\n"<<endl<<setw(43)<<"选择错误!"<<endl; cout<<endl<<setw(52)<<"按任意键返回主菜单重新选择!"; cout<<endl; getch(); MainMenu(); } } void UserMenu() { system("cls"); char choose[1]; int flag=0; cout<<"\n\n\n"<<setw(45)<<"校园导航系统!"<<endl; cout<<endl<<setw(45)<<"1.查看校园地图"<<endl; cout<<setw(45)<<"───────"<<endl; cout<<setw(45)<<"2.景点信息查询"<<endl; cout<<setw(45)<<"───────"<<endl; cout<<setw(45)<<"3.景点问路查询"<<endl; cout<<setw(45)<<"───────"<<endl; cout<<setw(43)<<"4.返回主菜单"<<endl; cout<<setw(45)<<"───────"<<endl; cout<<setw(37)<<"5.退出"<<endl; cout<<setw(45)<<"───────"<<endl; cout<<endl<<setw(46)<<"请输入您的选择:"; cin>>choose; if(strlen(choose)==1) { switch(choose[0]) { case '1': Map();break; case '2': ViewAsk();break; case '3': PathAsk();break; case '4': MainMenu();break; case '5': exit(0); default: system("cls"); cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl; cout<<endl<<setw(49)<<"按任意键返回重新选择!"; cout<<endl; getch(); UserMenu(); } } else { system("cls"); cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl; cout<<endl<<setw(49)<<"按任意键返回重新选择!"; cout<<endl; getch(); UserMenu(); } } void Password() { system("cls"); char name[10],password[10]; char entername[10],enterpassword[10]; char choose[1]; int pass,flag=0,flag1=0; ifstream indata("Password.txt"); indata>>pass>>name>>password; indata.close(); if(pass) AdminMenu(); else { cout<<"\n\n\n"<<setw(40)<<"用户名:"; cin>>entername; cout<<endl<<setw(40)<<"密码:"; cin>>enterpassword; if(strcmp(name,entername)==0&&strcmp(password,enterpassword)==0) { pass=1; ofstream outdata("Password.txt"); outdata<<pass<<endl<<name<<endl<<password; outdata.close(); AdminMenu(); } else { system("cls"); cout<<"\n\n\n"; cout<<setw(47)<<"用户名或密码错误!"<<endl; while(1) { if(flag1) { system("cls"); cout<<"\n\n\n"; } cout<<endl<<setw(45)<<"1.重新输入密码"<<endl; cout<<setw(45)<<"───────"<<endl; cout<<setw(43)<<"2.返回主菜单"<<endl; cout<<setw(45)<<"───────"<<endl; cout<<setw(37)<<"3.退出"<<endl; cout<<setw(45)<<"───────"<<endl; cout<<endl<<setw(46)<<"请输入您的选择:"; cin>>choose; if(strlen(choose)==1) { switch(choose[0]) { case '1': flag=1;Password();break; case '2': flag=1;MainMenu();break; case '3': exit(0); default: flag1=1; system("cls"); cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl; cout<<endl<<setw(49)<<"按任意键返回重新选择!"; cout<<endl; getch(); } if(flag) break; } else { flag1=1; system("cls"); cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl; cout<<endl<<setw(49)<<"按任意键返回重新选择!"; cout<<endl; getch(); } } } } } void AdminMenu() { system("cls"); char choose[1]; int flag=0; cout<<"\n\n\n"<<setw(45)<<"后台操作系统!"<<endl; cout<<endl<<setw(46)<<"1.操作员信息管理"<<endl; cout<<setw(46)<<"────────"<<endl; cout<<setw(44)<<"2.增长景点信息"<<endl; cout<<setw(46)<<"────────"<<endl; cout<<setw(44)<<"3.修改景点信息"<<endl; cout<<setw(46)<<"────────"<<endl; cout<<setw(44)<<"4.道路交通管制"<<endl; cout<<setw(46)<<"────────"<<endl; cout<<setw(42)<<"5.返回主菜单"<<endl; cout<<setw(46)<<"────────"<<endl; cout<<setw(36)<<"6.退出"<<endl; cout<<setw(46)<<"────────"<<endl; cout<<endl<<setw(46)<<"请输入您的选择:"; cin>>choose; if(strlen(choose)==1) { switch(choose[0]) { case '1': AdminAlter();break; case '2': ViewAdd();break; case '3': ViewAlter();break; case '4': ControlMenu();break; case '5': MainMenu();break; case '6': exit(0); default: system("cls"); cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl; cout<<endl<<setw(49)<<"按任意键返回重新选择!"; cout<<endl; getch(); AdminMenu(); } } else { system("cls"); cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl; cout<<endl<<setw(49)<<"按任意键返回重新选择!"; cout<<endl; getch(); AdminMenu(); } } void ControlMenu() { system("cls"); char choose[1]; cout<<"\n\n\n"<<setw(45)<<"道路交通管制!"<<endl; cout<<endl<<setw(41)<<"1.管理途径"<<endl; cout<<setw(45)<<"───────"<<endl; cout<<setw(41)<<"2.删除途径"<<endl; cout<<setw(45)<<"───────"<<endl; cout<<setw(45)<<"3.返回上级菜单"<<endl; cout<<setw(45)<<"───────"<<endl; cout<<setw(37)<<"4.退出"<<endl; cout<<setw(45)<<"───────"<<endl; cout<<endl<<setw(46)<<"请输入您的选择:"; cin>>choose; if(strlen(choose)==1) { switch(choose[0]) { case '1': PathControl();break; case '2': PathDel();break; case '3': AdminMenu();break; case '4': exit(0); default: system("cls"); cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl; cout<<endl<<setw(49)<<"按任意键返回重新选择!"; cout<<endl; getch(); ControlMenu(); } } else { system("cls"); cout<<"\n\n\n"<<setw(43)<<"选择错误!"<<endl; cout<<endl<<setw(49)<<"按任意键返回重新选择!"; cout<<endl; getch(); ControlMenu(); } } <User.cpp>:包涵游客用的函数 #include"All.h" void Map() { system("cls"); cout<<"\n\n\n"<<setw(42)<<"map!"<<endl; cout<<endl<<setw(47)<<"按任意键继续..."; cout<<endl; getch(); UserMenu(); } void ViewAsk() { system("cls"); MGraph G; char viewpoint[20]; char choose[1]; int i,flag=0,flag1=1,flag2=0; Read(G); cout<<"\n\n\n"<<setw(44)<<"民大景点:"<<endl<<endl; for(i=0;i<G.number;i++) cout<<setw(34)<<"("<<G.V[i].code<<")"<<G.V[i].name<<endl; while(1) { cout<<endl<<setw(55)<<"请输入要查询的景点代码或名称:"; cin>>viewpoint; for(i=0;i<G.number;i++) { flag1=1;flag2=0; if(strcmp(G.V[i].code,viewpoint)==0||strcmp(G.V[i].name,viewpoint)==0) { flag1=0; cout<<"\n\n"<<setw(37)<<"代码"<<":"<<G.V[i].code<<endl; cout<<setw(37)<<"名称"<<":"<<G.V[i].name<<endl; cout<<setw(37)<<"简介"<<":"<<G.V[i].instruction<<endl<<endl; while(1) { cout<<setw(48)<<"是否继续查询(Y/N):"; cin>>choose; if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0) { flag2=1;break;} else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0) { flag=1;UserMenu();break; } else cout<<endl<<setw(43)<<"选择错误!"<<endl; }//while }//if if(flag2||flag) break; }//for if(flag1) { cout<<endl<<setw(46)<<"没有要查询的景点!"<<endl; while(1) { cout<<setw(48)<<"是否继续查询(Y/N):"; cin>>choose; if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0) { break;} else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0) { UserMenu();break; } else cout<<endl<<setw(43)<<"选择错误!"<<endl; }//while } } } void PathAsk() { system("cls"); MGraph G; char choose[1]; char start[10],end[10]; int i,j,flag=0,flag1=1,flag2=0,flag3=1; Read(G); cout<<"\n\n\n"<<setw(43)<<"民大景点:"<<endl<<endl; for(i=0;i<G.number;i++) cout<<setw(34)<<"("<<G.V[i].code<<")"<<G.V[i].name<<endl; cout<<endl<<setw(45)<<"请输入景点代码!"<<endl; while(1) { flag=0,flag1=1,flag2=0,flag3=1; cout<<endl<<setw(40)<<"起点:"; cin>>start; for(i=0;i<G.number;i++) { if(strcmp(G.V[i].code,start)==0) { flag1=0; cout<<setw(40)<<"终点:"; cin>>end; for(j=0;j<G.number;j++) { if(strcmp(G.V[j].code,end)==0) { flag3=0; Dijkstra(G,i,j); while(1) { cout<<setw(48)<<"是否继续查询(Y/N):"; cin>>choose; if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0) { flag2=1;break;} else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0) { flag=1;UserMenu();break; } else cout<<endl<<setw(43)<<"选择错误!"<<endl; }//while if(flag||flag2) break; } if(flag||flag2) break; }//for if(flag3) { cout<<endl<<setw(44)<<"没有该终点!"<<endl; while(1) { cout<<setw(48)<<"是否继续查询(Y/N):"; cin>>choose; if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0) { flag2=1;break;} else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0) { flag=1;UserMenu();break; } else cout<<endl<<setw(43)<<"选择错误!"<<endl; }//while } if(flag2||flag) break; } if(flag||flag2) break; }//for if(flag1) { cout<<endl<<setw(44)<<"没有该起点!"<<endl; while(1) { cout<<setw(48)<<"是否继续查询(Y/N):"; cin>>choose; if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0) { flag2=1;break;} else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0) { flag=1;UserMenu();break; } else cout<<endl<<setw(43)<<"选择错误!"<<endl; }//while }//if }//while } void Dijkstra(MGraph G,int v,int i2) //v为出发顶点 { int dist[MAXV],path[MAXV]; int s[MAXV]; int mindis,i,j,u; for(i=0;i<G.number;i++) { dist[i]=G.edges[v][i]; //赋值 s[i]=0; if(G.edges[v][i]<INF) path[i]=v; else path[i]=-1; } s[v]=1; path[v]=0; for(i=0;i<G.number;i++) { mindis=INF; for(j=0;j<G.number;j++) if(s[j]==0&&dist[j]<mindis) { u=j; mindis=dist[j]; } s[u]=1; for(j=0;j<G.number;j++) if(s[j]==0) if(G.edges[u][j]<INF&&dist[u]+G.edges[u][j]<dist[j]) { dist[j]=dist[u]+G.edges[u][j]; path[j]=u; } } Dispath(G,dist,path,s,G.number,v,i2); } void Ppath(MGraph G,int path[],int i,int v) { int k; k=path[i]; if(k==v) return; Ppath(G,path,k,v); cout<<G.V[k].name<<"→"; } void Dispath(MGraph G,int dist[],int path[],int s[],int n,int v,int i) { if(dist[i]!=0) { if(s[i]==1) { cout<<endl<<setw(24)<<"从"<<G.V[v].name<<"到"<<G.V[i].name<<"的最短途径长度为:"<<dist[i]<<endl; cout<<setw(30)<<"途径为:"<<G.V[v].name<<"→"; Ppath(G,path,i,v); cout<<G.V[i].name<<"\n\n"; } else cout<<endl<<setw(29)<<"从"<<G.V[v].name<<"到"<<G.V[i].name<<"不存在途径!\n"; } else { cout<<endl<<setw(24)<<"从"<<G.V[v].name<<"到"<<G.V[i].name<<"的最短途径长度为:"<<dist[i]<<endl; cout<<set
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服