永发信息网

数据结构 校园导游系统的设计与实现(用c++实现)

答案:3  悬赏:60  手机版
解决时间 2021-04-03 14:34
数据结构 校园导游系统的设计与实现(用c++实现)
最佳答案
#include
#include
#include
#include
typedef struct Infor
{
char name[10];
char infor[100];
}Infor;
typedef struct
{ //图的定义
Infor vexs [20] ; //顶点表,用一维向量即可
int arcs[50][50]; //邻接矩阵
int vexnum, arcnum; //顶点总数,弧(边)总数

}Mgraph;

typedef struct
{
char password[6];
char n_password[6];

}PassWord;//密码结构体定义

int LocateVex(Mgraph &G,char a[10])//
{
for(int i=0;i {
if(strcmp(G.vexs[i].name,a)==0)
{
return i;
}
}
cout<<"输入有误!"< return -1;
}

//////////////////////以上是头文件

#include "net.h"
#include //密码功能所需要调用的头文件

void Creategraph(Mgraph &G,PassWord &pw) //构造无向网
{
ifstream inFile("graph.txt");
char v1[10],v2[10];
int i,j,k,w;
inFile>>G.vexnum>>G.arcnum;
for(i=0;i {
inFile>>G.vexs[i].name;
inFile>>G.vexs[i].infor;
}
for(i=0;i<50;i++)
{
for(int j=0;j<50;j++)
{
G.arcs[i][j]=10000;
}
}
for(k=0;k {
inFile>>v1>>v2>>w;
i=LocateVex(G,v1);
j=LocateVex(G,v2);
if(i==j)
{
G.arcs[i][j]=0;
}
else
{
G.arcs[i][j]=w;
G.arcs[j][i]=G.arcs[i][j];
}
}
for(int m=0;m<6;m++)
{
inFile>>pw.password[m];
}
}

/////////////////////////////前台调用的函数/////////////////////////////////////

void infor(Mgraph &G)
{
char a[10];
int b=1;
while(b)
{
for(int i=0;i {
cout< }
cout<<"请输入要查找的景点信息"< cin>>a;
for(i=0;i {
if(strcmp(G.vexs[i].name,a)==0)
{
cout< b=0;
}

}
if(b!=0)
{
cout<<"输入错误请重新输入!!"< }
cout<<"返回前台系统按0,继续查找按1"< cin>>b;
}
}

void ShortestPath (Mgraph G)//最短路径
{
char a[10],d[10];
int b=1,i,j,v,v0,w;
int Dist[100],S[100],Path[100];
int n=G.vexnum;
while(b)
{
for(i=0;i {
cout< }
for(i=0;i<100;i++)
{
Dist[i]=9999;
S[i]=0;
Path[i]=-1;
}
cout<<"请输入要查询路径的两个景点"< cin>>a;
cin>>d;
v0=LocateVex(G,a);
j=LocateVex(G,d);
for(v=0;v {
S[v]=0;
Dist[v]=G.arcs[v0][v];
if(Dist[v]<9999)
Path[v]=v0;//v1是v的前趋
else
Path[v]=-1;//v无前趋
}//
Dist[v0]=0;
S[v0]=1;
for(i=1;i {
int min=9999;
for(w=0;w if(!S[w]&&Dist[w] {
v=w;
min=Dist[w];
}//w顶点离v1顶点更近
S[v]=1;
for(w=0;w if(!S[w]&&(Dist[v]+G.arcs[v][w] {
Dist[w]=Dist[v]+G.arcs[v][w];
Path[w]=v;
}//end if
}//end for
cout<<"距离为:"< cout< cout<<"要经过"< int f=Path[j],e[100];
i=0;
while(f!=-1)
{
e[i]=f;
f=Path[f];
i++;
}
for(v=i-1;v>=0;v--)
{
cout<";
}
cout< cout<<"返回后台系统按0,继续删除按1"< cin>>b;
}
}

void reception(Mgraph &G)//前台
{

int n;
while(1)
{
system("cls");//清屏
cout<<"*********************欢迎使用前台系统************************"< cout<<"(1)景点信息查询"< cout<<"(2)问路查询"< cout<<"(0)返回上一级菜单"< cin>>n;
switch(n)
{
case 1:
infor(G);
break;
case 2:
ShortestPath (G);
break;
case 0:
return;
break;
default:
cout<<"您的输入有误,任意键继续..."< getch();

}
}
}

////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////后台调用的函数///////////////////////////////////
void WriteTXT(Mgraph G,PassWord pw)//将更改后的信息写如graph.txt
{
int i,j;
ofstream outFile("graph.txt");
if(!outFile)
{
cerr<<"cannot open my.txt"< exit(1);
}
outFile< for(i=0;i {
outFile< }

for(i=0;i {
for(j=0;j {
if(G.arcs[i][j]!=10000)
{
outFile< G.arcs[j][i]=10000;
}
}
}
Creategraph(G,pw);
}
void ChangeP(Mgraph &G,PassWord pw)//修改一个已有景点的相关信息
{
char a[10];
int b=1,i;
while(b)
{
for(i=0;i {
cout< }
cout<<"请输入要修改的景点的信息"< cin>>a;
for(i=0;i {
if(strcmp(a,G.vexs[i].name)==0)
{
cout< cout<<"请输入该景点的修改后的信息"< cin>>G.vexs[i].infor;
cout<<"修改成功!!!!"< b=0;
}
}
if(b!=0)
{
cout<<"error!输入有误!"< }
cout<<"保存请按1,不保存请按2"< int c;
cin>>c;
if(c==1)
{
WriteTXT(G,pw);
}
cout<<"返回后台系统按0,继续修改按1"< cin>>b;
}
}
void deleteP(Mgraph &G,PassWord pw)//删除景点信息
{
char a[10];
int b=1,i,j,k;
while(b)
{
for(i=0;i {
cout< }
cout<<"请输入要删除的景点的信息"< cin>>a;
for(i=0;i {
if(strcmp(a,G.vexs[i].name)==0)
{
for(j=i;j {
G.vexs[j]=G.vexs[j+1];
for(k=0;k G.arcs[k][j]=G.arcs[k][j+1];
}
for(j=i;j {
for(k=0;k G.arcs[j][k]=G.arcs[j+1][k];
}
G.vexnum--;
G.arcnum=0;
for(i=0;i {
for(j=0;j {
if(G.arcs[i][j]!=10000)
G.arcnum++;
}
}
G.arcnum=G.arcnum/2;
b=0;
cout<<"删除成功!!!!"< }
}
if(b!=0)
{
cout<<"输入有误!请看清楚!"< }
cout<<"是否要保存?保存按1,不保存按2"< int c;
cin>>c;
if(c==1)
{
WriteTXT(G,pw);
}
cout<<"返回后台系统按0,继续删除按1"< cin>>b;
}
}

void deleteL(Mgraph &G,PassWord pw)//删除路径
{
char a[10],d[10];
int b=1,i,j;
while(b)
{
for(i=0;i {
for(j=0;j {
if(G.arcs[i][j]!=10000)
{
cout< }
}
}
cout<<"请输入要删除的路径连接的两个景点名"< cin>>a;
cin>>d;
i=LocateVex(G,a);
j=LocateVex(G,d);
if(G.arcs[i][j]!=10000)
{
G.arcs[i][j]=10000;
G.arcs[j][i]=10000;
b=0;
cout<<"删除成功!!"< G.arcnum--;
}
if(b!=0)
{
cout<<"输入有误!!"< }
cout<<"保存请按1,不保存请按2"< int c;
cin>>c;
if(c==1)
{
WriteTXT(G,pw);
}
cout<<"返回后台系统按0,继续删除按1"< cin>>b;
}
}
///////////////////////////////////选作//////////////////////////

void Add(Mgraph &G,PassWord &pw)//增加景点
{

cout<<"请输入景点名称:"< cin>>G.vexs[G.vexnum].name;
cout<<"请输入景点信息:"< cin>>G.vexs[G.vexnum].infor;

for(int i=0;i G.arcs[G.vexnum][i]=10000;
for(i=0;i G.arcs[i][G.vexnum]=10000;

G.arcs[G.vexnum][G.vexnum]=0;

G.vexnum++;

cout<<"增加成功!"< cout< WriteTXT(G,pw);
system("pause");system("cls");
}

////////////////////////////////////////////////
bool password(PassWord &pw)//判断密码
{
char p[6];
cout<<"请输入6位密码:"< for(int e=0;e<6;e++)
{
p[e]=getch();
cout<<"*";
cout.flush();
}
cout< for(e=0;e<6;e++)
{

if(p[e]!=pw.password[e])return false;
}
cout< return true;
}

void backstage(Mgraph &G,PassWord pw)//后台函数
{
int n;
while(1)
{
system("cls");
cout<<"*********************欢迎使用后台系统************************"< cout<<"(1)修改一个已有景点的相关信息"< cout<<"(2)删除一个景点及其相关信息"< cout<<"(3)删除一条路径"< cout<<"(4)增加景点"< cout<<"(0)返回上一级菜单"< cin>>n;
switch(n)
{
case 1:
ChangeP(G,pw);
break;
case 2:
deleteP(G,pw);
break;
case 3:
deleteL(G,pw);
break;
case 4:
Add(G,pw);
break;
case 0:
return;
break;
default:
cout<<"您的输入有误,任意键继续..."< getch();

}
}
}

////////////////////////////////////////////////////////////////////////////////////////////////

void main()//主函数
{
Mgraph G;
PassWord pw;
Creategraph(G,pw);
int n,m=1;
while(m)
{
system("cls");
cout<<"*********************欢迎使用北林游览系统************************"< cout<<"(1)前台服务(游客身份登陆)"< cout<<"(2)后台服务(管理员身份登陆)"< cout<<"(0)退出"< cin>>n;
switch(n)
{
case 1:
reception(G);
break;
case 2:
if(password(pw)==true)
{
backstage(G,pw);//后台函数,并调用
}
else
cout<<"密码输入错误!!";
break;
case 0:
m=0;
break;
default:
cout<<"您的输入有误,任意键继续..."< getch();
}
}
}
全部回答
用《数据结构》的图论,很简单的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
神舟战神k540d-i7d2怎么样
王者荣耀典韦说的台词,王者荣耀刘邦怎么语c
下面节日在大月的是A.国庆节B.儿童节C.教师节
天正左边工具栏变成这样了,怎么调窄点?
“笹”这个字在搜狗输入法里怎么打?
剑三江湖论贱是哪个剑三服务器拍摄的,也就是
国家4A级风景区指的是那4A
什么是非标准产品定价法?
面试时面试者该问公司什么问题
现在注册韩国地区的AppleID都要银行卡了,怎
Last Sunday morning we allMr Wang’s weddi
一个电脑可以装两个硬盘吗?
中国象棋 棋子规格直径45毫米 用多大的棋盘
理学又称为“道学”、“新儒学”。这反映了理
魅蓝手机充了近十个小时的电,,电池不会坏吧
推荐资讯
硅胶隆鼻三年后鼻梁无故肿胀颜色发青
直径14的钢丝绳在多少吨的重量下被拉断
国家电网大贾供电营业所在哪里啊,我有事要去
四机科技是省级期刊吗
求企业周年庆 文章机场高速工大集团 20周年
单选题进入20世纪后,几乎每年都至少有一种鸟
僵尸王叫什麽名字
什么是水性原子灰,水性原子灰什么牌子好
在微信最多转账多少钱,微信钱包转帐一次最多
转转优品上的苹果6s国行过保机,是什么来路,
电动车外胎夹"咬"内胎里边衬一个废内胎管用吗
我用伊犁的手机号给乌鲁木齐的手机号打,乌鲁
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?