当前位置:首页 » 课程设计 » 校园导游咨询课程设计

校园导游咨询课程设计

发布时间: 2020-11-18 04:49:26

A. 设计校园导游咨询程序,为来访的客人提供服务。

你,从高高的山岗下来
犹如一个被征服的城市中的士兵
总是在晨号声中
然后找一个窗台伏下
生长在路边
注定为以拼搏哈哈

B. c语言版的数据结构课设-校园导游咨询!!!急急急!!

我只有C++的~~

#include<iostream>
#include<string>
using namespace std;
#define MaxVertexNum 50 /*景点个数最大50*/
#define MAXCOST 1000 /*定义路径的无穷大*/
#define T 8 /*目前景点个数*/

typedef struct
{
char name[20]; /*景点名称*/
char number[15]; /*景点代号*/
char introce[100]; /*景点简介*/
}Elemtype;
typedef struct
{
int num; /*顶点编号*/
Elemtype date; /*顶点信息*/
}Vertex; /*定义顶点*/

typedef struct
{
Vertex vexs[MaxVertexNum]; /*存放顶点的一维数组,数组第零个单元没有用上*/
unsigned int edges[MaxVertexNum][MaxVertexNum]; /*存放路径的长度*/
int n,e;
}MGraph;

MGraph MGr; /*全局变量,定义MGr为MGraph类型*/
int shortest[MaxVertexNum][MaxVertexNum]; /*定义全局变量存贮最小路径*/
int path[MaxVertexNum][MaxVertexNum]; /*定义存贮路径*/

void init()
{
int i,j;
MGr.vexs[1].num=1;
strcpy(MGr.vexs[1].date.name,"学校东门");
strcpy(MGr.vexs[1].date.number,"001");
strcpy(MGr.vexs[1].date.introce,"挨着三好街,购物很方便。");

MGr.vexs[2].num=2;
strcpy(MGr.vexs[2].date.name,"综合楼");
strcpy(MGr.vexs[2].date.number,"002");
strcpy(MGr.vexs[2].date.introce,"学校最新的大楼。");

MGr.vexs[3].num=3;
strcpy(MGr.vexs[3].date.name,"逸夫楼");
strcpy(MGr.vexs[3].date.number,"003");
strcpy(MGr.vexs[3].date.introce,"上课的地方。");

MGr.vexs[4].num=4;
strcpy(MGr.vexs[4].date.name,"教学馆");
strcpy(MGr.vexs[4].date.number,"004");
strcpy(MGr.vexs[4].date.introce,"上课的地方。");

MGr.vexs[5].num=5;
strcpy(MGr.vexs[5].date.name,"篮球场");
strcpy(MGr.vexs[5].date.number,"005");
strcpy(MGr.vexs[5].date.introce,"打篮球的地方。");

MGr.vexs[6].num=6;
strcpy(MGr.vexs[6].date.name,"大活");
strcpy(MGr.vexs[6].date.number,"006");
strcpy(MGr.vexs[6].date.introce,"开晚会搞活动的地方。");

MGr.vexs[7].num=7;
strcpy(MGr.vexs[7].date.name,"汉卿会堂");
strcpy(MGr.vexs[7].date.number,"007");
strcpy(MGr.vexs[7].date.introce,"开讲座的地方。");

MGr.vexs[8].num=8;
strcpy(MGr.vexs[8].date.name,"主楼");
strcpy(MGr.vexs[8].date.number,"008");
strcpy(MGr.vexs[8].date.introce,"做实验的地方。");

for(i=1;i<=T;i++)
{
for(j=1;j<=T;j++)
{
MGr.edges[i][j]=MAXCOST;
}
}
for(i=1;i<=T;i++)
{
shortest[i][i]=0;
} /*初始化*/
MGr.edges[1][2]=MGr.edges[2][1]=25;
MGr.edges[1][5]=MGr.edges[5][1]=15;
MGr.edges[1][3]=MGr.edges[3][1]=10;
MGr.edges[2][8]=MGr.edges[8][2]=30;
MGr.edges[5][7]=MGr.edges[7][5]=32;
MGr.edges[7][8]=MGr.edges[8][7]=12;
MGr.edges[6][7]=MGr.edges[7][6]=6;
MGr.edges[3][4]=MGr.edges[4][3]=24;
MGr.edges[4][6]=MGr.edges[6][4]=50;
MGr.edges[1][1]=MGr.edges[2][2]=MGr.edges[3][3]=MGr.edges[4][4]=0;
MGr.edges[5][5]=MGr.edges[6][6]=MGr.edges[7][7]=MGr.edges[8][8]=0;
}

void introce()
{
int n;
cout<<"请输入查询景点编号:"<<endl;
cin>>n;
switch(n)
{
case 1:
cout<<"景点编号:"<<MGr.vexs[1].date.number<<"景点名称:"<<MGr.vexs[1].date.name;
cout<<"景点简介:"<<MGr.vexs[1].date.introce<<endl;
break;
case 2:
cout<<"景点编号:"<<MGr.vexs[2].date.number<<"景点名称:"<<MGr.vexs[2].date.name;
cout<<"景点简介:"<<MGr.vexs[2].date.introce<<endl;
break;
case 3:
cout<<"景点编号:"<<MGr.vexs[3].date.number<<"景点名称:"<<MGr.vexs[3].date.name;
cout<<"景点简介:"<<MGr.vexs[3].date.introce<<endl;
break;
case 4:
cout<<"景点编号:"<<MGr.vexs[4].date.number<<"景点名称:"<<MGr.vexs[4].date.name;
cout<<"景点简介:"<<MGr.vexs[4].date.introce<<endl;
break;
case 5:
cout<<"景点编号:"<<MGr.vexs[5].date.number<<"景点名称:"<<MGr.vexs[5].date.name;
cout<<"景点简介:"<<MGr.vexs[5].date.introce<<endl;
break;
case 6:
cout<<"景点编号:"<<MGr.vexs[6].date.number<<"景点名称:"<<MGr.vexs[6].date.name;
cout<<"景点简介:"<<MGr.vexs[6].date.introce<<endl;
break;
case 7:
cout<<"景点编号:"<<MGr.vexs[7].date.number<<"景点名称:"<<MGr.vexs[7].date.name;
cout<<"景点简介:"<<MGr.vexs[7].date.introce<<endl;
break;
case 8:
cout<<"景点编号:"<<MGr.vexs[8].date.number<<"景点名称:"<<MGr.vexs[8].date.name;
cout<<"景点简介:"<<MGr.vexs[8].date.introce<<endl;
break;
default:
cout<<"输入序号错误。";
break;
}
}
void floyd()
{
int i,j,k;
for(i=1;i<=T;i++)
{
for(j=1;j<=T;j++)
{
shortest[i][j]=MGr.edges[i][j];
path[i][j]=0;
}
} /*初始化数组*/
for(k=1;k<=T;k++)
{
for(i=1;i<=T;i++)
{
for(j=1;j<=T;j++)
{
if(shortest[i][j]>(shortest[i][k]+shortest[k][j]))
{
shortest[i][j]=shortest[i][k]+shortest[k][j];
path[i][j]=k;
path[j][i]=k;/*记录经过的路径*/
}//end_if
}
}
}//end_for
}
void display(int i,int j)
{/* 打印两个景点的路径及最短距离 */
int a,b;
a=i;
b=j;
cout<<"您要查询的两景点间最短路径是:\n\n";
if(shortest[i][j]!=MaxVertexNum)
{
if(i<j)
{
cout<<b;
while(path[i][j]!=0)
{/* 把i到j的路径上所有经过的景点按逆序打印出来*/
cout<<"<-"<<path[i][j];
if(i<j)
j=path[i][j];
else
i=path[j][i];
}
cout<<"<-"<<a;
cout<<"\n\n";
cout<<a<<"->"<<b<<"最短距离是"<<shortest[a][b]<<"米"<<"\n\n";
}
else
{
cout<<a;
while(path[i][j]!=0)
{/* 把i到j的路径上所有经过的景点按顺序打印出来*/
cout<<"->"<<path[i][j];
if(i<j)
j=path[i][j];
else
i=path[j][i];
}
cout<<"->"<<b;
cout<<"\n\n";
cout<<a<<"->"<<b<<"最短距离是:"<<shortest[a][b]<<"米\n\n"<<endl;
}
}
else
cout<<"输入错误!不存在此路!\n\n";
}/*display*/
int shortestdistance()
{/*要查找的两景点的最短距离*/
int i,j;
cout<<"请输入要查询的两个景点的编号(1->8的数字编号并用' '间隔):";
cin>>i>>j;
if(i>T||i<=0||j>T||j<0)
{
cout<<"输入信息错误!\n\n";
cout<<" 请输入要查询的两个景点的编号(1->8的数字编号并用' '间隔):\n";
cin>>i>>j;
}
else
{
floyd();
display(i,j);
}
return 1;
}/*shortestdistance*/

void main()
{
char k;
init();
cout<<"*******************************************************************\n";
cout<<"* *\n";
cout<<"* *\n";
cout<<"* 欢迎使用校园导游咨询 *\n";
cout<<"* *\n";
cout<<"******************************************************************\n";
while(1)
{
cout<<"1.景点信息查询请按 i 键\n";
cout<<"2.景点最短路径查询请按 s 键\n";
cout<<"3.退出系统请按 e 键\n";
cout<<"请选择服务:";
cin>>k;

switch(k)
{
case 'i':
cout<<"景点简介查询(请输入1~8)。";
introce();
break;
case 's':
cout<<"景点最短路径查询。";
shortestdistance();
break;
case 'e':
exit(0);

}
}
system("pause");
}

C. 一、设计一个校园导游程序,为来访的客人提供信息查询服务。 要求:(1)设计学校的校园平面图,所含景点

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define Max 20
#define Init_Length 10000
void shortestdistance();
void print()
{
printf(" 欢迎您来到XX大学\n");
printf(" ******\n");
printf(" 祝您旅途愉快\n");
printf("以下是您可能要前往的地方\n");
printf("1 主楼 \n");
printf("2 步行广场 \n");
printf("3 图书馆 \n");
printf("4 芙蓉湖 \n");
printf("5 嘉庚南区 \n");
printf("6 北区食堂 \n");
printf("7 中区食堂 \n");
printf("8 囊萤园区 \n");
printf("9 映雪园区 \n");
printf("10 芙蓉园区 \n");
printf("11 凌云园区 \n");
printf("12 博学园区 \n");
printf("13 操场 \n");
printf("功能1.景点查询请输入 i\n");
printf("功能2.查询最短路径请输入 s\n");
printf("功能3.退出系统请输入 e\n");
printf("请输入您的选择:");
}

void introce()
{
int a;
printf("请输入景点编号:");
scanf("%d",&a);
getchar();
printf("\n");
while(a<1||a>13)
{
printf("ERROR ! 请输入数字 1 到 13:\n\n");
scanf("%d",&a);
}
switch(a)
{
case 1:
printf("1:主楼 一纵四横嘉庚风范,庄严而又活泼美丽\n\n");
break;
case 2:
printf("2:步行广场 美丽校园的核心\n\n");
break;
case 3:
printf("3:图书馆 文化交流的中心和同学们自习的地方\n\n");
break;
case 4:
printf("4:芙蓉湖 魅力的校园明珠\n\n");
break;
case 5:
printf("5:嘉庚南区 嘉庚学院学生\n\n");
break;
case 6:
printf("6:北区食堂 距离宿舍区最近,饭点拥挤度最高\n\n");
break;
case 7:
printf("7:中区食堂 距离教学楼最近,晚上有课的同学可以来此\n");
break;
case 8:
printf("8:囊萤园区 居住计算机和海环外文男生\n\n");
break;
case 9:
printf("9:映雪园区 居住软件和生物化学男生\n\n\n");
break;
case 10:
printf("10:芙蓉园区 居住管院经院女生\n\n");
break;
case 11:
printf("11:凌云园区 居住计算机和医学女生\n\n");
break;
case 12:
printf("12:博学园区 居住海外学生\n\n");
break;
case 13:
printf("13:操场 学生活动锻炼的好去处\n\n");
break;
}
printf("/n");
}

void main()
{
char k;
print();
scanf("%c",&k);
while((k!='i')&&(k!='e')&&(k!='s'))
{
getchar();
printf("ERROR 请输入 i 或 s 或 e\n");
scanf("%c",&k);
}
switch(k)
{
case 'i':
printf("进入景点查询:\n");
introce();
break;
case 's':
printf("进入最短路径查询:\n");
shortestdistance();
break;
case 'e':
exit(0);
}
}
void shortestdistance()
{
int i,v,w,v0,j;
int min;
int top[14]={0};
int cost[14][14];
int path[14][14];
int final[14]={0};
int D[14];
for(i=0;i<14;i++)
for(j=0;j<14;j++)
cost[i][j]=Init_Length;
cost[1][3]=cost[3][1]=10;
cost[3][5]=cost[5][3]=40;
cost[1][7]=cost[7][1]=10;
cost[3][7]=cost[7][3]=30;
cost[2][7]=cost[7][2]=20;
cost[2][6]=cost[6][2]=10;
cost[4][6]=cost[6][4]=10;
cost[4][13]=cost[13][4]=10;
cost[6][12]=cost[12][6]=20;
cost[12][8]=cost[8][12]=10;
cost[8][9]=cost[9][8]=10;
cost[6][9]=cost[9][6]=15;
cost[10][9]=cost[9][10]=10;
cost[6][10]=cost[10][6]=20;
cost[9][10]=cost[10][9]=10;
cost[9][11]=cost[11][9]=10;
printf("请输入您现在所在的位置:\n");
scanf("%d",&v0);
while(v0>13||v0<1)
{
printf("ERROR!请重新输入编号从1到13的数\n");
scanf("%d",&v0);
}
for(i=1;i<14;i++)
for(j=1;j<14;j++)
path[i][j]=0;
for(v=1;v<14;v++)
{

D[v]=cost[v0][v];
if(D[v]<Init_Length)
{
path[v][(++(top[v]))]=v0;
path[v][(++(top[v]))]=v;
}
}
D[v0]=0;final[v0]=1;
for(i=2;i<14;++i)
{
min=Init_Length;
for(w=1;w<14;++w)
{
if((final[w]==0)&&(D[w]<min))
{
v=w;min=D[w];
}}
final[v]=1;
for(w=1;w<14;++w)
{
if((final[w]==0)&&(min+cost[v][w]<D[w]))
{
D[w]=min+cost[v][w];
for(j=1;j<14;j++)
path[w][j]=path[v][j];
top[w]=top[v]+1;
path[w][(top[w])]=w;
}
}

}
printf("请输入你要去的地方:\n");
scanf("%d",&w);
printf("\n");
while(w>13||w<1)
{
printf("ERROR!输入错误,请重新输入编号从1到13\n");
scanf("%d",&w);
}
printf("最短路径为:\n");
for(i=1;path[w][i]!=0;i++)
printf("-->%d",path[w][i]);
printf("\n");
printf("最短路径的长度为: %d\n",D[w]);
}

D. 校园导游系统

#include <stdio.h>
#include <string.h>
#define MAX 20
int mincost(int V[], int D[], int n);
int main()
{
int C[MAX][MAX];
int D[MAX], V[MAX] = { 0 }; /*数组V用来表示每次计算加入集合V的点,1为加入了,0为还没有加入*/
int n, i, j, k, w, sum;
printf("请输入景点个数:");
scanf("%d", &n);
printf("\n请输入建立后的临接矩阵(用n*n矩阵表示), 输入100000表示无穷大:\n");
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
{
scanf("%d", &C[i][j]);
}
}
V[1] = 1; /*1为源点*/
for(i = 1; i <= n; i++)
{
D[i] = C[1][i]; /*D置初值*/
}
for(i = 1; i <= n; i++)
{
/*从集合S(即没有经过计算的点)中选出一个点w(即V中值为0),使D[w]值最小*/
w = mincost(V, D, n);
V[w] = 1;
/*由于w的选定,S中的每个点(即V中值为0的点都要重新计算其到源点的最小值*/
for(k = 2; k <= n; k++)
{
if(V[k] == 0)
{
sum = D[w] + C[w][k];
if(sum < D[k])
{
D[k] = sum;
}
}
}
}
for(i = 2; i <= n; i++)
{
printf("D[%d] = %d\n", i, D[i]);
}
memset(V, 0, MAX * sizeof(int)); /*初始化*/
return 0;
}

int mincost(int V[], int D[], int n)
{
int temp = 10000000, i, w = 2;
for(i = 2;i <= n; i++)
{
if(V[i] == 0 && D[i] < temp)
{
temp = D[i];
w = i;
}
}
return w;
}

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

#include <iostream.h>
#include<string.h>
#include <stdlib.h>
#include <fstream.h>
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<G.vexnum;i++)
{
if(strcmp(G.vexs[i].name,a)==0)
{
return i;
}
}
cout<<"输入有误!"<<endl;
return -1;
}

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

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

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<G.vexnum;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<G.arcnum;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<G.vexnum;i++)
{
cout<<G.vexs[i].name<<endl;
}
cout<<"请输入要查找的景点信息"<<endl;
cin>>a;
for(i=0;i<G.vexnum;i++)
{
if(strcmp(G.vexs[i].name,a)==0)
{
cout<<G.vexs[i].infor<<endl;
b=0;
}

}
if(b!=0)
{
cout<<"输入错误请重新输入!!"<<endl;
}
cout<<"返回前台系统按0,继续查找按1"<<endl;
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<G.vexnum;i++)
{
cout<<G.vexs[i].name<<endl;
}
for(i=0;i<100;i++)
{
Dist[i]=9999;
S[i]=0;
Path[i]=-1;
}
cout<<"请输入要查询路径的两个景点"<<endl;
cin>>a;
cin>>d;
v0=LocateVex(G,a);
j=LocateVex(G,d);
for(v=0;v<n;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<n;i++)
{
int min=9999;
for(w=0;w<n;w++)
if(!S[w]&&Dist[w]<min)
{
v=w;
min=Dist[w];
}//w顶点离v1顶点更近
S[v]=1;
for(w=0;w<n;w++)//更新当前最短路径及距离
if(!S[w]&&(Dist[v]+G.arcs[v][w]<Dist[w]))
{
Dist[w]=Dist[v]+G.arcs[v][w];
Path[w]=v;
}//end if
}//end for
cout<<"距离为:"<<endl;
cout<<Dist[j]<<endl;
cout<<"要经过"<<endl;
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<<G.vexs[e[v]].name<<"---->";
}
cout<<G.vexs[j].name<<endl;
cout<<"返回后台系统按0,继续删除按1"<<endl;
cin>>b;
}
}

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

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

}
}
}

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

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

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

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

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

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

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

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

G.vexnum++;

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

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

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

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

}
}
}

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

void main()//主函数
{
Mgraph G;
PassWord pw;
Creategraph(G,pw);
int n,m=1;
while(m)
{
system("cls");
cout<<"*********************欢迎使用北林游览系统************************"<<endl;
cout<<"(1)前台服务(游客身份登陆)"<<endl;
cout<<"(2)后台服务(管理员身份登陆)"<<endl;
cout<<"(0)退出"<<endl;
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<<"您的输入有误,任意键继续..."<<endl;
getch();
}
}
}

F. 求用C++编程语言做的“校园导游咨询”课程设计

/*
校园导游咨询
[问题描述]
设计一个校园导游程序,为来访的客人提供各种信息查询服务。
[基本要求]
(1)设计你的学校的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点相关信息的查询。
(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
[实现提示]
一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。顶点和边均含有相关信息。

一需求分析
1从中北大学平面图中选取10个大家熟悉的景点,抽象成一个无向带权图(如图所示)。以图中顶点表示景点,边上的权值表示两地的距离。
2本程序的目的是为用户提供路径咨询和景点查询。根据用户指定的始点和终点输出相应路径或者根据用户指定的景点输出景点的信息。




二、概要设计
1本文采用的数据结构
*/

/*包含头文件*/
#include<stdio.h>
#include<process.h>

/*定义符号常量*/
#define INT_MAX 10000
#define n 10

/*定义全局变量*/
int cost[n][n];/* 边的值*/
int shortest[n][n];/* 两点间的最短距离*/
int path[n][n];/* 经过的景点*/

/*自定义函数原型说明*/
void introce();
int shortestdistance();
void floyed();
void display(int i,int j);
2个人分工
(1)景点信息查询
(2)两景点的最短距离
(3)两个景点之间的路径

三、详细设计

void main()
{/*主函数*/
int i,j;
char k;
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
cost[i][j]=INT_MAX;
cost[1][3]=cost[3][1]=2;
cost[2][3]=cost[3][2]=1;
cost[2][4]=cost[4][2]=2;
cost[3][10]=cost[10][3]=4;
cost[1][10]=cost[10][1]=4;
cost[2][10]=cost[10][2]=4;
cost[4][10]=cost[10][4]=4;
cost[1][4]=cost[4][1]=5;
cost[4][5]=cost[5][4]=3;
cost[4][9]=cost[9][4]=4;
cost[5][9]=cost[9][5]=8;
cost[5][7]=cost[7][5]=4;
cost[5][6]=cost[6][5]=2;
cost[6][7]=cost[7][6]=1;
cost[7][8]=cost[8][7]=3;
cost[8][6]=cost[6][8]=4;
cost[1][1]=cost[2][2]=cost[3][3]=cost[4][4]=cost[5][5]=0;
cost[6][6]=cost[7][7]=cost[8][8]=cost[9][9]=cost[10][10]=0;
while(1)
{
printf("----------------欢迎使用中北大学导游系统!----------------\n");
printf("1.景点信息查询………请按 i (introc)键\n");
printf("2.景点最短路径查询…请按 s (shortestdistance)键\n");
printf("3.退出系统……………请按 e (exit)键\n");
printf("学校景点列表:\n");
printf("1:学校南门 ");
printf("2:学生公寓 ");
printf("3:柏林园 ");
printf("4:餐厅 ");
printf("5:体育馆\n");
printf("6:图书馆 ");
printf("7:重点实验室 ");
printf("8:主楼 ");
printf("9:科艺苑 ");
printf("10:国防生公寓\n");
printf("请选择服务:");
scanf("\n%c",&k);
switch(k)
{
case 'i':
printf("进入景点信息查询:");
introce();
break;
case 's':
printf("进入最短路径查询:");
shortestdistance();
break;
case 'e':
exit(0);
default:
printf("输入信息错误!\n请输入字母i或s或e.\n");
break;
}
}
}/*main*/

void introce()
{/*景点介绍*/
int a;
printf("您想查询哪个景点的详细信息?请输入景点编号:");
scanf("%d",&a);
getchar();
printf("\n");
switch(a)
{
case 1:
printf("1:学校南门\n\n 学校的正门,前面竖立着一尊彭德华的石像,气势宏伟。\n\n");break;
case 2:
printf("2:学生公寓集中的地方。 \n\n");break;
case 3:
printf("3:柏林园\n\n 晨读锻炼得地方。\n\n");break;
case 4:
printf("4:餐厅\n\n 学生老师就餐的地方\n\n");break;
case 5:
printf("5:体育馆\n\n 体育馆\n\n 学生上体育课及运动的场地,设有田径场、足球场、篮球场等。\n\n");break;
case 6:
printf("6:图书馆\n\n 学校信息资源中心,内设大量的自习室。\n\n");break;
case 7:
printf("7:重点实验室\n\n 我校的研究科研中心\n\n");break;
case 8:
printf("8:主楼\n\n 学校行政办公的主楼。\n\n");break;
case 9:
printf("9:科艺苑\n\n 有咖啡厅和放映室。\n\n\n");break;
case 10:
printf("10: 国防生公寓\n\n 国防生居住地地方。\n\n");break;
default:
printf("景点编号输入错误!请输入1->10的数字编号!\n\n"); break;
}
}/*introce*/

int shortestdistance()
{/*要查找的两景点的最短距离*/
int i,j;
printf("请输入要查询的两个景点的编号(1->10的数字编号并用','间隔):");
scanf("%d,%d",&i,&j);
if(i>n||i<=0||j>n||j<0)
{
printf("输入信息错误!\n\n");
printf(" 请输入要查询的两个景点的编号(1->10的数字编号并用','间隔):\n");
scanf("%d,%d",&i,&j);
}
else
{
floyed();
display(i,j);
}
return 1;
}/*shortestdistance*/

void floyed()
{/*用floyed算法求两个景点的最短路径*/
int i,j,k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
shortest[i][j]=cost[i][j];
path[i][j]=0;
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(shortest[i][j]>(shortest[i][k]+shortest[k][j]))
{/*用path[][]记录从i到j的最短路径上点j的前驱景点的序号*/
shortest[i][j]=shortest[i][k]+shortest[k][j];
path[i][j]=k;
path[j][i]=k;
}
}/*floyed*/

void display(int i,int j)
{/* 打印两个景点的路径及最短距离 */
int a,b;
a=i;
b=j;
printf("您要查询的两景点间最短路径是:\n\n");
if(shortest[i][j]!=INT_MAX)
{
if(i<j)
{
printf("%d",b);
while(path[i][j]!=0)
{/* 把i到j的路径上所有经过的景点按逆序打印出来*/
printf("<-%d",path[i][j]);
if(i<j)
j=path[i][j];
else
i=path[j][i];
}
printf("<-%d",a);
printf("\n\n");
printf("(%d->%d)最短距离是:%d米\n\n",a,b,shortest[a][b]);
}
else
{
printf("%d",a);
while(path[i][j]!=0)
{/* 把i到j的路径上所有经过的景点按顺序打印出来*/
printf("->%d",path[i][j]);
if(i<j)
j=path[i][j];
else
i=path[j][i];
}
printf("->%d",b);
printf("\n\n");
printf("(%d->%d)最短距离是:%5d米\n\n",a,b,shortest[a][b]);
}
}
else
printf("输入错误!不存在此路!\n\n");
printf("\n");
}/*display*/

热点内容
幼师专业怎么样 发布:2021-03-16 21:42:13 浏览:24
音乐小毛驴故事 发布:2021-03-16 21:40:57 浏览:196
昂立中学生教育闸北 发布:2021-03-16 21:40:47 浏览:568
建筑业一建报考条件 发布:2021-03-16 21:39:53 浏览:666
2017年教师资格注册结果 发布:2021-03-16 21:39:49 浏览:642
中国教师资格证查分 发布:2021-03-16 21:39:41 浏览:133
踵什么成语有哪些 发布:2021-03-16 21:38:20 浏览:962
东营幼师专业学校 发布:2021-03-16 21:35:26 浏览:467
机械电子研究生课程 发布:2021-03-16 21:33:36 浏览:875
杭州朝日教育培训中心怎么样 发布:2021-03-16 21:33:28 浏览:238