校园导游系统设计与实现_校园导游系统课程设计
校园导游系统设计与实现由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“校园导游系统课程设计”。
校园导游系统设计与实现
目录 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个子功能的设计描述如下。⑴ 景点信息查询
景点信息查询由函数 seeabout()实现。该功能根据用户输入的景点编号输出该景点的相关信息。如景点编号、名称等。⑵ 学校景点介绍
学校景点介绍由函数 browsecampus()实现。当用户选择该功能,系统即能输出学校全部景点的信息:包括景点编号、景点名称及景点介绍。⑶ 相邻的景点及其距离
为使游客能够知道其周围的景点和路径,方便他们迅速知道其所在位置和周围信息 ⑷ 查看浏览线路
查看浏览线路由函数 shortestpath_dij()实现。该功能采用迪杰斯特拉(Dijkstra)算 法实现。当用户选择该功能,系统能根据用户输入的起始景点编号,求出从该景点到其他景点的最短路径线路及距离。当用户选择该功能,系统能根据用户输入的起始景点及目的景点编号,查询任意两个景点之间的最短路径线路及距离。⑸ 更改图信息
修改一个已有景点的相关信息、删除一个景点及其相关信息、删除一条路径、加一条路径、修改路径长度、添加一个景点 ⑹ 数据安全防范
设置密码,能保证数据不会被随便更改,由pa()判定密码是否正确,可由changepw()函数修改密码,初始密码为gdufsx ⑺ 写入文件并保存修改
打开该软件,若没有graph.txt,则会由系统初始化生成一个graph.txt,若已存在该文档会由该文档中的内容初始化系统。⑻ 恢复初始状态
若数据已经显得很杂乱并很难修理,就可以启用这个功能 ⑼ 退出
即退出校园导游系统,由 exit(0)函数实现
2.3函数结构
void initgraph(mgraph &G);
//依据读入的图的顶点个数和边的条数,//分别初始化图结构中图的顶点向量数组和图的邻接矩阵 void browsecampus(mgraph G);//输出学校全部景点的信息 :编号、名称、介绍
void cgraph(mgraph &G,Paword &pw);//构造无向图和读写文件graph。txt void writetxt(mgraph &G,Paword &pw);//写入文件
int pa(Paword pw);
//认证密码的正确与否,正确返回1,错误返回0
void reception(mgraph &G);
//前台服务函数 void seeabout(mgraph &G);
//景点信息
void shortestpath_dij(mgraph G);//该景点到其他景点的最短路径线路及距离 void near(mgraph G);
//相邻的景点及其距离
void changegraph(mgraph &G,Paword &pw);
//后台函数,并调用
void changeP(mgraph &G,Paword &pw);
//修改一个已有景点的相关信息 void deleteP(mgraph &G,Paword &pw);
//删除一个景点及其相关信 void deleteL(mgraph &G,Paword &pw);
//删除一条路径 void addL(mgraph &G,Paword &pw);
//添加一条路径 void changeL(mgraph &G,Paword &pw);
//修改路径长度
void Add(mgraph &G,Paword &pw);
//添加一个景点 void changepw(mgraph &G,Paword &pw);//修改密码 void regraph(mgraph &G,Paword &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 using namespace std;
#define N 50 #define M 10
typedef struct Infor{
//景点结构体
char name[20];
//景点名称
char inf[100];
//景点信息
}Infor;
typedef struct{ int adj[N][N];
//各景点间的邻接关系用图邻接矩阵类型
Infor vexs[N];
//景点(顶点)信息: int vexnum,arcnum;
//图的顶点个数及边的条数 }mgraph;
typedef struct{
char p[6];
}Paword;
char inform[30][100]={
“信息男宿舍,后面是内环,与风采园相近,前面是南苑9-12栋!”,“一楼价格还好,但饭菜比较难吃,二楼较贵,饭菜还行!”,“中国银行营业厅,如果要办理业务,需很早地去排队;有ATM机!”,“二楼有自强社办公室、校学生会办公室„一楼有健身房!”,“东西较贵但品类基本齐全!”,“主要是老师居住。喜祥数码港要收费,云山数码港在不换硬件条件下免费修!”,“主要接待外来人员,招待所!”,“一楼有糖水和奶茶供应,晚上总有很多部门在此开会。二楼有许多套餐!”,“一楼大众点菜,品类比三饭多。二楼的价格在8元左右!”,“女生宿舍,北苑三栋楼下有创业园!”,“组成巡逻队,协助学校保障校园安全。!”,“位于保卫处后面,在校生校内看病只需支付很少的费用!”,“具有防空洞;连接宿舍区和教学区!”,“在隧道口的上方,可以乘坐很多路的公交车!”,“一楼有中国银行ATM。早上和中午前面有校巴。不少活动的举办地点!”,“是学习的主要地方,教室里面设施较为齐全,有多媒体、空调、电视等,后面是语心湖和实验楼!”,“早上会有学生在那里练嗓子,以及读书!”,“多种会议比赛的场所!”,“学校政要的办公室所在地!”,“各学院老师的办公室所在地!”,“拍毕业照时,校友回来时的聚集之地!”,“摆放着很多电脑的地方!”,“位于教学楼和实验楼之间,湖水平静,还有黑天鹅嬉戏于水上!”,“各种活动的举办场所!”,“主要是艺术生上课的地方,周六日为雅思考场!”,“重要会议进行的地方,党课和军训理论课在这里上,有空调!”,“图书馆除了中英文借阅区与杂志借阅区外,还有自习区;前面有大广场,最前面是学校正门!”,“内有排球场、篮球场,外有足球场。还有游泳池、网球场!”,“体育馆有多个观众席;中央可用做正规比赛场所。日常用来上羽毛球课、跆拳道课!”,“位于图书馆前面,学术报告厅与艺术楼中间,虽然不宏伟,但是也是一个标志!”
};char Name[30][20]={
“南苑13栋”,“风采园(三饭)”,“中国银行”,“学活&水榭”,“又康超市”,“师苑&数码港”,“广外友苑”,“博雅园(二饭)”,“文采园(一饭)”,“创业园”,“后勤&保卫处”,“校医室”,“隧道口”,“广外公交站”,“教学楼A栋”,“教学楼E、F栋”,“凤凰山坡”,“八角楼”,“校办公楼”,“院系办公楼”,“校友林”,“实验楼”,“语心湖”,“学术报告厅”,“艺术楼”,“大会堂”,“图书馆”,“泳池&操场”,“体育馆&场”,“正校门”};
void initgraph(mgraph &G);
//依据读入的图的顶点个数和边的条数,//分别初始化图结构中图的顶点向量数组和图的邻接矩阵 void browse(mgraph G);
//输出学校全部景点的信息 :编号、名称、介绍
void cgraph(mgraph &G,Paword &pw);//构造无向图和读写文件graph。txt void writetxt(mgraph &G,Paword &pw);//写入文件
int pa(Paword 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,Paword &pw);
//后台函数,并调用
void changeP(mgraph &G,Paword &pw);
//修改一个已有景点的相关信息 void deleteP(mgraph &G,Paword &pw);
//删除一个景点及其相关信 void deleteL(mgraph &G,Paword &pw);
//删除一条路径 void addL(mgraph &G,Paword &pw);
//添加一条路径 void changeL(mgraph &G,Paword &pw);
//修改路径长度
void Add(mgraph &G,Paword &pw);
//添加一个景点
void changepw(mgraph &G,Paword &pw);
//修改密码 void regraph(mgraph &G,Paword &pw);
//恢复初始状态
int main(){ mgraph campus;Paword pw;strcpy(pw.p,“gdufsx”);
//初始化密码
initgraph(campus);cgraph(campus,pw);int n,m=1;while(m)
{
system(“cls”);
cout
欢迎使用GDUFS校园导游系统“
cout
**************************************”
cout
(1)前台服务(游客身份登陆)“
cout
(2)后台服务(管理员身份登陆)”
cout
(0)退出“
cout
**************************************”
cout
请输入您的选择(0-2):“;
cin>>n;
switch(n)
{
case 1:
reception(campus);
break;
case 2:
if(pa(pw)==1)
changegraph(campus,pw);//后台函数
break;
case 0:
m=0;
cout
getch();
exit(0);
default:
cout
您的输入有误,任意键继续...”;
getch();
}
}
}
void initgraph(mgraph &G){
//依据读入的图的顶点个数和边的条数,//分别初始化图结构中图的顶点向量数组和图的邻接矩阵
int i,j;for(i=0;i
for(j=0;j
G.adj[i][j]=9999;for(i=0;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;} void cgraph(mgraph &G,Paword &pw){
化
int i,j,dist;char c;ifstream infile(“graph.txt”);if(!infile){
infile.close();
writetxt(G,pw);} else{
infile.close();
ifstream infile(“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
infile>>pw.p[i];
infile.close();} } void writetxt(mgraph &G,Paword &pw){
//写入文件
int i,j;ofstream outfile(“graph.txt”);outfile
outfile
}
for(i=0;i
for(j=0;j
outfile
} } for(i=0;i
outfile
//输出学校全部景点的信息 :编号、名称
int j=0,k;for(int i=0;i
k=i+1;
cout
j++;
if(j%3==0)cout
请输入密码:“;for(int i=0;i
ch[i]=getch();
cout.flush();
cout
}
for(int i=0;i
if(pw.p[i]!=ch[i])
judge=0;}
return judge;} void changepw(mgraph &G,Paword &pw){ int i,b=1;char ch[6],ch1[6],judge1=1,judge2=1;while(b==1){
cout
for(i=0;i
ch[i]=getch();
cout.flush();
cout
}
for(i=0;i
if(pw.p[i]!=ch[i])
judge1=0;
}
if(judge1){
cout
for(i=0;i
ch[i]=getch();
cout.flush();
cout
}
cout
for(i=0;i
ch1[i]=getch();
cout.flush();
cout
}
for(i=0;i
if(ch[i]!=ch1[i])judge2=0;
}
if(judge2){
for(i=0;i
pw.p[i]=ch[i];
}
cout
writetxt(G,pw);
}
else
cout
}
else cout
cout
cin>>b;
cout
}
/////////////////////////前台///////////////////////////////////////// void reception(mgraph &G){
//前台函数
int n,i,j;
while(1)
{
system(”cls“);//清屏
cout
cout
cout
cout
cout
cout
cout
cin>>n;
switch(n)
{
case 1:
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
getch();
}
}
} void seeabout(mgraph &G){
//景点信息
int a;
int b=1;system(”cls“);browse(G);
while(b){
cout
cin>>a;a--;
if(a>=0&&a
cout
}
else
{
cout
}
cout
cin>>b;
while(b!=0&&b!=1){
cout
cin>>b;
} } }
void shortestpath_dij(mgraph G){ //该景点到其他景点的最短路径线路及距离
int b=1,i,j,vt,v,v0,w,min;
bool S[N];
int D[N],Path[N];
int n=G.vexnum;
system(”cls“);
browse(G);
while(b){
cout
cin>>v0;v0--;
cin>>vt;
vt--;
for(v=0;v
S[v]=false;
D[v]=G.adj[v0][v];
if(D[v]
Path[v]=v0;//v0是v的前趋
else
Path[v]=-1;//v无前趋
}
D[v0]=0;
S[v0]=true;
for(i=1;i
min=9999;
for(w=0;w
if(!S[w]&&D[w]
S[v]=true;
//将v加入S
for(w=0;w
if(!S[w]&&(D[v]+G.adj[v][w]
D[w]=D[v]+G.adj[v][w];
Path[w]=v;
}
}
cout
cout
cout
int f=Path[vt],e[N];
i=0;
while(f!=-1){
e[i]=f;
f=Path[f];
i++;
}
for(v=i-1;v>=0;v--){
cout”;
}
cout
cout
cin>>b;} } void browsecampus(mgraph G){ //输出学校全部景点的信息 :编号、名称、介绍
int k;for(int i=0;i
k=i+1;
cout
} cout
//相邻的景点及其距离
int b=1,i,j;
bool a[50][50];system(“cls”);
while(b){
browse(G);
for(i=0;i
for(j=0;j
a[i][j]=false;
for(i=0;i
for(j=0;j
if(G.adj[i][j]!=9999){
if(!a[i][j]){
cout “
a[i][j]=true;a[j][i]=true;
}
}
}
}
cout
cin>>b;
} }
////////////////////////////后台函数///////////////////////////////////
void changegraph(mgraph &G,Paword &pw){
//修改图信息
int n;
while(1)
{
system(”cls“);
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cin>>n;
switch(n)
{
case 1:
changeP(G,pw);
break;
case 2:
deleteP(G,pw);
break;
case 3:
deleteL(G,pw);
break;
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
getch();
}
}
} void changeP(mgraph &G,Paword &pw){
//修改一个已有景点的相关信息
int a;
int b=1;
while(b){
system(”cls“);
browse(G);
cout
cin>>a;a--;
if(a>=0&&a
cout
cout
cin>>G.vexs[a].inf;
cout
cout
int c;
cin>>c;
if(c==1){
writetxt(G,pw);
}
else{
cgraph(G,pw);
}
}
else{
cout
}
cout
cin>>b;
}
} void deleteP(mgraph &G,Paword &pw){
//删除一个景点及其相关信息
int b=1,i,j,k;
while(b)
{
system(”cls“);
browse(G);
cout
cin>>i;i--;
if(i>=0&&i
for(j=i;j
G.vexs[j]=G.vexs[j+1];
for(k=0;k
G.adj[k][j]=G.adj[k][j+1];
}
for(j=i;j
for(k=0;k
G.adj[j][k]=G.adj[j+1][k];
}
G.vexnum--;
G.arcnum=0;
for(i=0;i
for(j=0;j
if(G.adj[i][j]!=9999)
G.arcnum++;
}
}
G.arcnum=G.arcnum/2;
b=0;
cout
}
if(b!=0){
cout
}
else{
cout
int c;
cin>>c;
if(c==1){
writetxt(G,pw);
}
else{
cgraph(G,pw);
}
}
cout
cin>>b;
} }
void deleteL(mgraph &G,Paword &pw){
//删除一条路径
int b=1,i,j;
bool a[50][50];system(”cls“);
while(b){
browse(G);
for(i=0;i
for(j=0;j
a[i][j]=false;
for(i=0;i
for(j=0;j
if(G.adj[i][j]!=9999){
if(!a[i][j]){
cout ”
a[i][j]=true;a[j][i]=true;
}
}
}
}
cout
cin>>i;
i--;
cin>>j;
j--;
if(G.adj[i][j]!=9999){
G.adj[i][j]=9999;
G.adj[j][i]=9999;
b=0;
cout
G.arcnum--;
cout
int c;
cin>>c;
if(c==1){
writetxt(G,pw);
}
else{
cgraph(G,pw);
}
}
if(b!=0){
cout
}
cout
cin>>b;
} }
void addL(mgraph &G,Paword &pw){
//添加一条路径
int b=1,i,j,distance;
system(“cls”);
browse(G);
while(b){
cout
cin>>i;
i--;
cin>>j;
j--;
cout
cin>>distance;
if(G.adj[i][j]==9999){
G.adj[i][j]=distance;
G.adj[j][i]=distance;
b=0;
cout
G.arcnum++;
cout
int c;
cin>>c;
if(c==1){
writetxt(G,pw);
}
else{
cgraph(G,pw);
}
}
if(b!=0){
cout
}
cout
cin>>b;
} }
void changeL(mgraph &G,Paword &pw){
//修改路径长度
int b=1,i,j,distance;bool a[50][50];
while(b){
system(“cls”);
browse(G);
for(i=0;i
for(j=0;j
a[i][j]=false;
for(i=0;i
for(j=0;j
if(G.adj[i][j]!=9999){
if(!a[i][j]){
cout “
a[i][j]=true;a[j][i]=true;
}
}
}
}
cout
cin>>i;
i--;
cin>>j;
j--;
if(G.adj[i][j]!=9999){
cout
cin>>distance;
G.adj[i][j]=distance;
G.adj[j][i]=distance;
b=0;
cout
cout
int c;
cin>>c;
if(c==1){
writetxt(G,pw);
}
else{
cgraph(G,pw);
}
}
if(b!=0){
cout
}
cout
cin>>b;
} } void Add(mgraph &G,Paword &pw){
//添加一个景点
system(”cls“);int i,b=1;while(b==1){
cout
cin>>G.vexs[G.vexnum].name;
cout
cin>>G.vexs[G.vexnum].inf;
for(i=0;i
G.adj[G.vexnum][i]=9999;
for(i=0;i
G.adj[i][G.vexnum]=9999;
G.adj[G.vexnum][G.vexnum]=9999;
G.vexnum++;
cout
cout
cout
int c;
cin>>c;
if(c==1){
writetxt(G,pw);
}
else{
cgraph(G,pw);
}
cout
cin>>b;
}
system(”pause“);system(”cls“);} void regraph(mgraph &G,Paword &pw){
//恢复初始状态
system(”cls“);cout
char c;
cin>>c;
if(c=='Y'){
strcpy(pw.p,”gdufsx");
//初始化密码
initgraph(G);
writetxt(G,pw);
} cout