《校园导航系统》课程设计报告姓名:学号:班级:网络专业:网络工程指导教师:时间:2目录摘要 (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语言版).北京:清华大学出版社.2007[2]林小茶.C语言程序设计(第二版).中国铁道出版社.2010[3]杜茂康、李昌兵等.C++面向对象程序设计(第2版).北京:电子工业出版社.2011附录源程序<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 10000typedef 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;}elsecout<<endl<<setw(43)<<"选择错误!"<<endl;}//while}//ifif(flag2||flag)break;}//forif(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;}elsecout<<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;}elsecout<<endl<<setw(43)<<"选择错误!"<<endl;}//whileif(flag||flag2)break;}if(flag||flag2)break;}//forif(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;}elsecout<<endl<<setw(43)<<"选择错误!"<<endl;}//while}if(flag2||flag)break;}if(flag||flag2)break;}//forif(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;}elsecout<<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;elsepath[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";}elsecout<<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<<setw(30)<<"路径为:"<<G.V[v].name<<"→"<<G.V[i].name<<"\n\n";}}<Admin.cpp>:包涵操作员使用到的函数#include"All.h"void AdminAlter(){system("cls");char newname[10];char enterpassword[10],newpassword[10],repassword[10];char name[10],password[10];char choose[1];int pass,flag=0,flag1;ifstream indata("Password.txt");indata>>pass>>name>>password;indata.close();cout<<"\n\n\n"<<setw(45)<<"请输入密码:";cin>>enterpassword;if(strcmp(password,enterpassword)==0){while(1){system("cls");cout<<"\n\n\n"<<setw(45)<<"设置新的用户名:";cin>>newname;cout<<endl<<setw(45)<<"设置新的密码:";cin>>newpassword;cout<<endl<<setw(45)<<"重复新的密码:";cin>>repassword;if(strcmp(newpassword,repassword)==0){ofstream outdata("Password.txt");outdata<<pass<<endl<<newname<<endl<<newpassword;outdata.close();system("cls");cout<<"\n\n\n"<<setw(45)<<"修改成功!"<<endl;cout<<endl<<setw(48)<<"按任意键继续...";cout<<endl;getch();AdminMenu();break;}else{system("cls");cout<<"\n\n\n"<<setw(49)<<"两次输入的密码不一致!"<<endl;flag1=0;while(1){if(flag1){system("cls");cout<<"\n\n";}cout<<endl<<setw(41)<<"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':flag=1;break;case '2':flag=1;AdminMenu();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();}}}}}else{system("cls");cout<<"\n\n\n"<<setw(44)<<"密码不正确!"<<endl<<endl;flag1=0;while(1){if(flag1){system("cls");cout<<"\n\n\n";}cout<<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':flag=1;AdminAlter();break;case '2':flag=1;AdminMenu();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 ViewAdd(){system("cls");MGraph G;char adjcode[10];char choose[1];int i,k=0,flag=0,flag1=1,flag2=0,flag3=1,length;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;while(1){flag1=1;flag2=0;cout<<endl<<setw(46)<<"新增景点代码:";cin>>G.V[G.number].code;for(i=0;i<G.number;i++){if(strcmp(G.V[i].code,G.V[G.number].code)==0){flag1=0;cout<<endl<<setw(52)<<"新景点代码与已有代码冲突!"<<endl;cout<<setw(44)<<"请重新输入!"<<endl<<endl;break;}}if(flag1){cout<<setw(46)<<"新增景点名称:";cin>>G.V[G.number].name;for(i=0;i<G.number;i++){flag1=1;if(strcmp(G.V[i].name,G.V[G.number].name)==0){flag1=0;cout<<endl<<setw(52)<<"新景点名称与已有名称冲突!"<<endl;cout<<setw(44)<<"请重新输入!"<<endl<<endl;break;}}if(flag1){cout<<setw(46)<<"新增景点简介:";cin>>G.V[G.number].instruction;cout<<endl;for(k=0;k<=G.number;k++){if(k==G.number)G.edges[G.number][k]=0;elseG.edges[G.number][k]=G.edges[k][G.number]=10000;}while(1){cout<<setw(49)<<"是否增加路径(Y/N):";cin>>choose;if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0){cout<<endl;while(1){cout<<setw(46)<<"相邻的景点代码:";cin>>adjcode;for(k=0;k<G.number;k++){if(strcmp(G.V[k].code,adjcode)==0){flag3=0;cout<<setw(46)<<"两景点间的距离:";cin>>length;G.edges[G.number][k]=G.edges[k][G.number]=length;}}if(flag3)cout<<endl<<setw(44)<<"没有该景点!";while(1){cout<<endl<<setw(50)<<"是否继续增加路径(Y/N):";cin>>choose;cout<<endl;if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0)break;else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0){flag2=1;break;}elsecout<<endl<<setw(43)<<"选择错误!"<<endl;}if(flag2)break;}break;}else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0)break;elsecout<<endl<<setw(43)<<"选择错误!"<<endl;}G.number++;cout<<endl;while(1){cout<<setw(45)<<"增加景点成功!"<<endl;White(G);cout<<setw(50)<<"是否继续增加景点(Y/N):";cin>>choose;if(strcmp(choose,"Y")==0||strcmp(choose,"y")==0){ViewAdd();break;}else if(strcmp(choose,"N")==0||strcmp(choose,"n")==0){flag=1;cout<<"\n\n\n"<<setw(44)<<"保存成功!"<<endl;cout<<endl<<setw(47)<<"按任意键继续...";cout<<endl;getch();break;}elsecout<<endl<<setw(43)<<"选择错误!"<<endl;}//whileif(flag)break;}}//if}//whileAdminMenu();}void ViewAlter(){system("cls");MGraph G;char viewpoint[20];char newcode[10],newname[20],newinstruction[100];char choose[1];int i,k=0,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;cout<<setw(48)<<"无需修改按回n跳过"<<endl;cout<<setw(39)<<"新代码:";cin>>newcode;if(strcmp(newcode,"n")!=0&&strcmp(newcode,"N")!=0)strcpy(G.V[i].code,newcode);cout<<setw(39)<<"新名称:";cin>>newname;if(strcmp(newname,"n")!=0&&strcmp(newname,"N")!=0)strcpy(G.V[i].name,newname);cout<<setw(39)<<"新简介:";cin>>newinstruction;cout<<endl;if(strcmp(newinstruction,"n")!=0&&strcmp(newinstruction,"N")!=0) strcpy(G.V[i].instruction,newinstruction);White(G);while(1){cout<<setw(50)<<"是否继续修改(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)。