设计一个校园导游程序,为来访的客人提供各种信息查询服务。
(1)设计学校的校园平面图,所含景点不少于10个,以图中顶点表示校内各景息;点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信
(2)提供基本信息的修改功能;
(3)为来访客人提供图中任意景点相关信息的查询;
(4)为来访客人提供景点的问路查询,即已知一个景点,查询到某景点之间的一条最短路径及长度。
#include
#include
#include
#define inf 50
using namespace std;
const int Max_n=1000;
typedef struct {//景点相关信息
char name[Max_n];//景点名称
char number[Max_n];//景点代号
char Introduce[Max_n];
}DataType;
typedef struct {//景点
int num;//编号
DataType data;//相关信息
}ScSpot;
typedef struct {//
ScSpot Scspot[12];//十一个景点,0号位置不使用
int D[12][12];//构建矩阵,景点间的距离
}UDG;//这个类型包含了各个景点的关系,各个景点的基本信息
UDG G;
int Path[12][12];
int D[12][12];
/*初始化景点信息*/
void InitMes(){
int count=1;
G.Scspot[count].num=1;
strcpy(G.Scspot[count].data.number,"TS001");
strcpy(G.Scspot[count].data.name,"图书馆");
strcpy(G.Scspot[count].data.Introduce,"提供各种各样的书,适于阅读,学习!");
count++;
G.Scspot[count].num=2;
strcpy(G.Scspot[count].data.number,"TS002");
strcpy(G.Scspot[count].data.name,"体育馆");
strcpy(G.Scspot[count].data.Introduce,"这里有各种运动的场地!");
count++;
G.Scspot[count].num=3;
strcpy(G.Scspot[count].data.number,"TS003");
strcpy(G.Scspot[count].data.name,"北苑操场");
strcpy(G.Scspot[count].data.Introduce,"一些大型活动的举办地点!");
count++;
G.Scspot[count].num=4;
strcpy(G.Scspot[count].data.number,"TS004");
strcpy(G.Scspot[count].data.name,"南苑操场");
strcpy(G.Scspot[count].data.Introduce,"乐于运动的人的眼中好地方!");
count++;
G.Scspot[count].num=5;
strcpy(G.Scspot[count].data.number,"TS005");
strcpy(G.Scspot[count].data.name,"湿地公园");
strcpy(G.Scspot[count].data.Introduce,"安静美好,适宜游玩,拍照!");
count++;
G.Scspot[count].num=6;
strcpy(G.Scspot[count].data.number,"TS006");
strcpy(G.Scspot[count].data.name,"工业训练中心");
strcpy(G.Scspot[count].data.Introduce,"各专业金工实习地点!");
count++;
G.Scspot[count].num=7;
strcpy(G.Scspot[count].data.number,"TS007");
strcpy(G.Scspot[count].data.name,"海豚湾");
strcpy(G.Scspot[count].data.Introduce,"此地风景美好!");
count++;
G.Scspot[count].num=8;
strcpy(G.Scspot[count].data.number,"TS008");
strcpy(G.Scspot[count].data.name,"科技园");
strcpy(G.Scspot[count].data.Introduce,"emmmm还没去过!,暂无简介!");
count++;
G.Scspot[count].num=9;
strcpy(G.Scspot[count].data.number,"TS009");
strcpy(G.Scspot[count].data.name,"北苑食堂");
strcpy(G.Scspot[count].data.Introduce,"里面的饭挺好吃的,吃货们可以关注一下!");
count++;
G.Scspot[count].num=10;
strcpy(G.Scspot[count].data.number,"TS010");
strcpy(G.Scspot[count].data.name,"滴水涌泉");
strcpy(G.Scspot[count].data.Introduce,"很多活动的报名地点!");
count++;
G.Scspot[count].num=11;
strcpy(G.Scspot[count].data.number,"TS011");
strcpy(G.Scspot[count].data.name,"3号组团楼");
strcpy(G.Scspot[count].data.Introduce,"里面有一个大礼堂,可以参观一下!");
count++;
for(int i=1;i<=12;i++){
for(int j=1;j<=12;j++){
if(i==j){
G.D[i][j]=0;
D[i][j]=0;
}else{
G.D[i][j]=inf;
D[i][j]=inf;
}
}
}
G.D[1][2]=1;G.D[2][3]=9;G.D[2][4]=2;G.D[1][4]=4;
G.D[3][1]=3;G.D[3][2]=5;G.D[3][4]=8;G.D[4][3]=6;
}
/*修改景点信息*/
void ChangeSpeMes(int i){//在修改时务必输入不冲突的信息
printf("------------------------------\n");
printf("1.景点代号\n");
printf("2.景点名称\n");
printf("3.景点简介\n");
printf("------------------------------\n");
printf(">>请选择您要修改的景点信息:");
int chose;
scanf("%d",&chose);
if(chose==1){
printf("请直接输入修改后的景点后的景点代号:");
scanf("%s",G.Scspot[i].data.number);
}
else if(chose==2){
printf("请直接输入修改后的景点后的景点名称:");
scanf("%s",G.Scspot[i].data.name);
}
else if(chose==3){
printf("请直接输入修改后的景点后的景点简介:");
scanf("%s",G.Scspot[i].data.Introduce);
}
else{
printf("输入错误,请输入正确的选择.");
ChangeSpeMes(i);
}
printf("修改成功,修改后的景点信息为:\n");
printf("------------------------------\n");
printf("景点代号:%s\n",G.Scspot[i].data.number);
printf("景点名称:%s\n",G.Scspot[i].data.name);
printf("景点简介:%s\n",G.Scspot[i].data.Introduce);
printf("------------------------------\n");
system("pause");
system("cls");
}
/*修改景点信息*/
void ChangeMes(){
printf(">>请输入您要修改的景点的编号:");
int chose;
scanf("%d",&chose);
ChangeSpeMes(chose);
}
/*查看校园平面图*/
void View(){
printf("-------------------------------某高校校园平面图-------------------------------\n");
printf(" **************************************************************************** \n");
printf(" ** <1>图书馆 ** \n");
printf(" ** | ** \n");
printf(" ** <2>体育馆 _________________|____________________ <8>科技园 ** \n");
printf(" ** | ** \n");
printf(" ** | ** \n");
printf(" ** <3>北苑操场 ________ <4>南苑操场 ** \n");
printf(" ** | |____________________ <9>北苑食堂 ** \n");
printf(" ** | | ** \n");
printf(" ** | <5>湿地公园 ** \n");
printf(" ** | | ** \n");
printf(" ** | |____________________ <10>滴水涌泉 ** \n");
printf(" ** | | ** \n");
printf(" ** |________________ <6>工业训练中心 ** \n");
printf(" ** ---->东 | ** \n");
printf(" ** | |____________________ <11>3号组团楼 ** \n");
printf(" ** 北 | ** \n");
printf(" ** <7>海豚湾 ** \n");
printf(" **************************************************************************** \n");
printf(">>Enter键返回主界面继续进行选择\n");
system("pause");
system("cls");
}
/*查看景点信息*/
void ViewSpeMes(int i){
printf("编号为%d的景点的信息为:\n",i);
printf("---------------------------------------------\n");
printf("景点代号:%s\n",G.Scspot[i].data.number);
printf("景点名称:%s\n",G.Scspot[i].data.name);
printf("景点简介:%s\n",G.Scspot[i].data.Introduce);
printf("---------------------------------------------\n");
}
/*查询景点信息*/
void ViewMes(){//保证输入合法
printf("请输入您要查看的景点信息的编号:");
int chose;
scanf("%d",&chose);
ViewSpeMes(chose);
printf("查询完毕!是否继续查询?(y/n)");
char a;
scanf(" %c",&a);
if(a=='y'){
printf("您选择了继续查询!\n");
ViewMes();
}
printf("查询结束,Enter键进入主界面\n");
system("pause");
system("cls");
}
/*求出任意两点之间的最短距离*/
void ShortestPath_Floyd(){
for(int i=1;i<=12;i++){
for(int j=1;j<=12;j++){
D[i][j]=G.D[i][j];
if(D[i][j]>路径为:\n");
//printf("%s",G.Scspot[next].data.name);
while(next!=e){
printf("%s-->",G.Scspot[next].data.name);
next=Path[next][e];//当前的后继点的编号
}
printf("%s\n",G.Scspot[e].data.name);
}
/*打印最短路径及最短距离*/
void PrintPath(){
ShortestPath_Floyd();//预处理所有的最短路径
printf("对照校园平面图,输入您当前所在景点及您要去的景点的编号:");
int s,e;
scanf("%d%d",&s,&e);
if(s<=12&&s>=0&&e<=12&&e>=0){
printf(">>%s到%s的最短路径长度为: %d\n",G.Scspot[s].data.name,G.Scspot[e].data.name,D[s][e]);
OutPath(s,e);
printf(">>按Enter键返回主界面");
system("pause");
system("cls");
}else{
printf("编号输入错误,请重新输入正确的景点编号!\n");
printf("按Enter键重新输入");
system("pause");
system("cls");
PrintPath();
}
}
void Menu(){
printf("----------------欢迎进入校园导航系统----------------\n");
printf("\n----------------------------------------------------\n");
printf("1.查看校园平面图\n");
printf("2.修改景点信息\n");
printf("3.查看景点基本信息\n");
printf("4.最短路径查询\n");
printf("5.退出\n");
printf("----------------------------------------------------\n");
printf(">>请输入您要选择的功能:");
int chose;
scanf("%d",&chose);
switch(chose){
case 1: {
View();
Menu();
}
case 2: {
ChangeMes();
Menu();
}
case 3: {
ViewMes();
Menu();
}
case 4: {
PrintPath();
Menu();
}
case 5: {
exit(0);
}
default : {
printf("您的选择有误,请重新选择!");
Menu();
}
}
}
int main(){
InitMes();
printf("景点信息初始化成功,进入主界面\n");
Menu();
return 0;
}