课程设计
2017-12-19 08:48
176 查看
/*
烟台大学计算机学院
文件名称:xiangmu.cpp
作者:张帅
完成日期:2017年12月19日
问题描述:校园导游系统
*/
烟台大学计算机学院
文件名称:xiangmu.cpp
作者:张帅
完成日期:2017年12月19日
问题描述:校园导游系统
*/
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include<string.h> #include"t.h" int mai da98 n() { int S[MaxSize+1],P[MaxSize+1]; int shuru1,shuru2; int step = 1; int top = -1; int D[MaxSize+1]; int Stack[MaxSize+1]; int A[MaxSize+1][MaxSize+1]; int N=12; int path[MaxViewNum][MaxViewNum]; /*定义存贮路径*/ int shortest[MaxViewNum][MaxViewNum]; MGraph MGr; system("color 9f"); char k; init( MGr, shortest,N); printf("**********************************************************************\n"); printf("* *\n"); printf("* *\n"); printf("* *\n"); printf("* 欢迎使用烟台大学导游系统 ! *\n"); printf("* *\n"); printf("* *\n"); printf("* *\n"); printf("**********************************************************************\n"); printf("\n"); while(1) { printf("1.景点信息查询请按“1”键;\n"); printf("2.如果需要增加景点。请按“2”键;\n"); printf("3.景点最短路径查询请按“3”键;\n"); printf("4.校内景点地图查询请按“4”键;\n"); printf("5.退出系统请按“5”键;\n"); printf("请选择: \n"); scanf("%c",&k); switch(k) { case '1':printf("景点介绍查询。\n"); introduce( MGr,N);break; case '2':printf("需要增加景点"); zengjia(MGr,N);break; case '3':printf("景点最短路径查询。"); distance( MGr,N, Stack,D,top,step ,shuru1,shuru2,S,P);break;///////////////////////////////////////////////////调用distance函数////////////////////////////////////////// case '4':printf("景点地图。\n"); map();break; case '5':printf("谢谢使用!\n");exit(0); } } system("pause"); return 0; } #define MaxSize 100 #define VISITED 1 #define NOTVISITED 0 #define Infinite 1073741823 #define MaxViewNum 50 /*景点个数最大50*/ #define MaxRoad 1000 /*定义路径为无穷大*/ /*目前景点个数*/ typedef struct { char name[30]; /*景点名称*/ char number[10]; /*景点代号*/ char introduce[200]; /*景点介绍*/ }Elemtype; /*景点信息*/ typedef struct { int num; /*景点编号*/ Elemtype date; /*景点信息*/ }View; /*定义景点*/ typedef struct { View view[MaxViewNum]; /*存放顶点的一维数组,数组第零单元没有用上*/ int length[MaxViewNum][MaxViewNum]; /*存放路径长度*/ int m,n; }MGraph; void init( MGraph &MGr, int shortest[MaxViewNum][MaxViewNum],int &N); void introduce(MGraph &MGr,int &N); void display(int &i,int &j,int shortest[MaxViewNum][MaxViewNum],int path[MaxViewNum][MaxViewNum],int &N); void Push(int &value,int Stack[],int &top,int S[],int P[] ); int Pop(int Stack[],int &top ); int minD(int &N,int D[],int S[],int P[]); void input(MGraph &MGr,int &N,int D[],int &shuru1,int &shuru2,int S[],int P[]); void output_path(MGraph &MGr,int Stack[],int D[],int &top,int &shuru1,int &shuru2 ,int S[],int P[]); void distance(MGraph &MGr,int &N,int Stack[],int D[],int &top,int &step,int &shuru1,int &shuru2,int S[],int P[] ); void map(); void zengjia(MGraph &MGr,int &N); #include"t.h" #include <stdio.h> #include<string.h> #include <stdlib.h> #include <conio.h> void init(MGraph &MGr, int shortest[MaxViewNum][MaxViewNum],int &N) { MGr.view[1].num=1; strcpy(MGr.view[1].date.name,"学校南门"); strcpy(MGr.view[1].date.number,"001"); strcpy(MGr.view[1].date.introduce,"坐落于烟台大学南门,对面为运动场,有红绿灯,交通便利。"); MGr.view[2].num=2; strcpy(MGr.view[2].date.name,"图书馆"); strcpy(MGr.view[2].date.number,"002"); strcpy(MGr.view[2].date.introduce,"学生看书的地方,里面摆满书籍。"); MGr.view[3].num=3; strcpy(MGr.view[3].date.name,"综合楼"); strcpy(MGr.view[3].date.number,"003"); strcpy(MGr.view[3].date.introduce,"一共六层,常作为开会的场所"); MGr.view[4].num=4; strcpy(MGr.view[4].date.name,"七餐"); strcpy(MGr.view[4].date.number,"004"); strcpy(MGr.view[4].date.introduce,"学校目前最大的餐厅"); MGr.view[5].num=5; strcpy(MGr.view[5].date.name,"西门"); strcpy(MGr.view[5].date.number,"005"); strcpy(MGr.view[5].date.introduce,"前面为一个十字路口,右边有个公交站牌"); MGr.view[6].num=6; strcpy(MGr.view[6].date.name,"一教二教三教"); strcpy(MGr.view[6].date.number,"006"); strcpy(MGr.view[6].date.introduce,"考研的地方"); MGr.view[7].num=7; strcpy(MGr.view[7].date.name,"三元湖"); strcpy(MGr.view[7].date.number,"007"); strcpy(MGr.view[7].date.introduce,"三元胡上面有个桥,景色十分美丽。"); MGr.view[8].num=8; strcpy(MGr.view[8].date.name,"钟楼"); strcpy(MGr.view[8].date.number,"008"); strcpy(MGr.view[8].date.introduce,"学校最高的地方,里面有各种计算机大神"); MGr.view[9].num=9; strcpy(MGr.view[9].date.name,"一餐二餐三餐"); strcpy(MGr.view[9].date.number,"009"); strcpy(MGr.view[9].date.introduce,"种类比较丰富的美食,饭餐可口。"); MGr.view[10].num=10; strcpy(MGr.view[10].date.name,"老校区西门"); strcpy(MGr.view[10].date.number,"010"); strcpy(MGr.view[10].date.introduce,"西门出去正对文化路,对面就是河南牧业经济学院。"); MGr.view[11].num=11; strcpy(MGr.view[11].date.name,"北门"); strcpy(MGr.view[11].date.number,"011"); strcpy(MGr.view[11].date.introduce,"对面为新世纪,里面有各种好玩的好吃的。"); MGr.view[12].num=12; strcpy(MGr.view[12].date.name,"家属院"); strcpy(MGr.view[12].date.number,"012"); strcpy(MGr.view[12].date.introduce,"emmm里面有学校领导以及各位家长,还有学生可以租借的房子。"); int i,j; for(i=1;i<=N;i++) { for(j=1;j<=N;j++) { MGr.length[i][j]=MaxRoad; } } for(i=1;i<=N;i++) { shortest[i][j]=0; } MGr.length[1][2]=MGr.length[2][1]=50; MGr.length[2][3]=MGr.length[3][2]=50; MGr.length[3][4]=MGr.length[4][3]=60; MGr.length[3][5]=MGr.length[5][3]=100; MGr.length[5][6]=MGr.length[6][5]=100; MGr.length[6][7]=MGr.length[7][6]=220; MGr.length[6][9]=MGr.length[9][6]=80; MGr.length[7][8]=MGr.length[8][7]=250; MGr.length[8][9]=MGr.length[9][8]=100; MGr.length[8][10]=MGr.length[10][8]=150; MGr.length[9][11]=MGr.length[11][9]=50; MGr.length[10][11]=MGr.length[11][10]=60; MGr.length[11][12]=MGr.length[12][11]=40; MGr.length[1][1]=MGr.length[2][2]=MGr.length[3][3]=MGr.length[4][4]=0; MGr.length[5][5]=MGr.length[6][6]=MGr.length[7][7]=MGr.length[8][8]=0; MGr.length[9][9]=MGr.length[10][10]=MGr.length[11][11]=MGr.length[12][12]=0; } void introduce(MGraph &MGr,int &N) { int m,z,x; printf("请输入查询景点编号:\n"); scanf("%d",&m);fflush(stdin); for(z=0;z<N+1;z++) if(z==m) { printf("景点编号:%s\t",MGr.view[z].date.number); printf("景点名称:%s\n",MGr.view[z].date.name); printf("景点简介:%s\n",MGr.view[z].date.introduce); x=1; break; } if(x!=1) printf("输入序号错误。\n"); printf("\n"); } void display(int i,int j,int shortest[MaxViewNum][MaxViewNum],int path[MaxViewNum][MaxViewNum],int &N) { /*打印两个景点的路径及最短路径*/ int a,b; a=i; b=j; printf("您要查询的两景点间最短路径是: \n\n"); fflush(stdin); if(i<j) { printf("%d",b); while(path[i][j]!=0) { printf("<--%d",path[i][j]); if(i<j) j=path[i][j]; else i=path[j][i]; } printf("<-%d\n\n",a); 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\n\n",b); printf("%d->%d的最短路径是: %d 米。\n\n",a,b,shortest[a][b]); } }/*display*/ void display(int &i,int &j,int shortest[MaxViewNum][MaxViewNum],int path[MaxViewNum][MaxViewNum]) { /*打印两个景点的路径及最短路径*/ int a,b; a=i; b=j; printf("您要查询的两景点间最短路径是: \n\n"); fflush(stdin); if(i<j) { printf("%d",b); while(path[i][j]!=0) { printf("<--%d",path[i][j]); if(i<j) j=path[i][j]; else i=path[j][i]; } printf("<-%d\n\n",a); 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\n\n",b); printf("%d->%d的最短路径是: %d 米。\n\n",a,b,shortest[a][b]); } }/*display*/ void Push(int &value,int Stack[],int &top,int S[],int P[] ) { if ( top >= MaxSize ) { printf("没有路径存在!\n\n"); exit(1); } else Stack[++top] = value; } int Pop(int Stack[],int &top ) { if ( top < 0 ) { printf("没有路径存在!\n\n"); exit(1); } return Stack[top--]; } int minD(int &N,int D[],int S[],int P[]) { int i,t=0; long int minimum = Infinite;/////无限大的数 for ( i=1;i<=N;i++ ) if ( (S[i] == NOTVISITED) && D[i] < minimum ) { minimum = D[i]; t = i; } return t; } void input(MGraph &MGr,int &N,int D[],int &shuru1,int &shuru2,int S[],int P[])/////////// { int i; printf("\n请输入起始节点:"); scanf("%d",&shuru1);//// printf("\n请输入结束节点:"); scanf("%d",&shuru2);fflush(stdin);///// for ( i = 1; i <= N; i++ ) { S[i] = NOTVISITED;////0 D[i] = MGr.length[shuru1][i]; P[i] = shuru1;/////////开始节点 } S[shuru1] = VISITED;/////1 D[shuru1] = 0; } void output_path(MGraph &MGr,int Stack[],int D[],int &top,int &shuru1,int &shuru2 ,int S[],int P[]) { int node = shuru2; if ( (shuru2 == shuru1) || (D[shuru2] == Infinite) ) { printf("\n节点%d与节点%d之间没有路径存在!\n\n",shuru1,shuru2); return; } printf("\n"); while ( node != shuru1 ) { Push(node, Stack,top,S,P); node = P[node]; } printf("V%d到V%d的最短路径为:\n",shuru1,shuru2); printf(" V%d",shuru1); while( node != shuru2) { node = Pop( Stack,top); printf(" --%ld-->",MGr.length[ P[node] ][node]); printf("V%d",node); } printf("\n"); printf("\n %d->%d的最短路径是: %ld\n",shuru1,shuru2,D[shuru2]); printf("\n"); } void distance(MGraph &MGr,int &N,int Stack[],int D[],int &top,int &step,int &shuru1,int &shuru2,int S[],int P[] ) { int t,I; input(MGr,N,D,shuru1,shuru2,S,P); for ( step =2;step <=N; step++ ) { t = minD(N,D,S,P); S[t] = VISITED; for ( I=1; I <= N; I++ ) if ( (S[I] == NOTVISITED) && (D[t]+MGr.length[t][I] <= D[I]) ) { D[I] = D[t] + MGr.length[t][I]; P[I] = t; } } output_path(MGr,Stack,D,top,shuru1,shuru2,S,P); } void map() { printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"); printf("┃ ┃\n"); printf("┃ ┃\n"); printf("┃ ┃\n"); printf("┃ ┃\n"); printf("┃┏━━━━━━━━┓┏━━━━━┓ ┏━━━━━━━┓ ┃\n"); printf("┃┃11.北门 ┃┃10.家属院 ┃ ┃ 12. 南门┃ ┃\n"); printf("┃┗━━━━━━━━┛┗━━━━━┛ ┗━━━━━━━┛ ┃\n"); printf("┃ ┃\n"); printf("┃ ┃\n"); printf("┃ ┏━━━━━━┓ ┃\n"); printf("┃ ┃ 9 . ┃ ┏━━━━┓ ┃\n"); printf("┃ ┃一餐二餐三餐┃ ┃8.钟楼 ┃ ┃\n"); printf("┃ ┗━━━━━━┛ ┗━━━━┛ ┃\n"); printf("┃ ┃\n"); printf("┃┏━━━━━━━━━━━━━━┓ ┏━━━━┓ ┃\n"); printf("┃┃ 6 . 一教二教三教 ┃ ┃7.三元湖┃ ┏━━━━━━┓ ┃\n"); printf("┃┗━━━━━━━━━━━━━━┛ ┗━━━━┛ ┃ 4. ┃ ┃\n"); printf("┃┏━━━━┓ ┃ 七餐 ┃ ┃\n"); printf("┃┃5 .西门 ┃ ┃ ┃ ┃\n"); printf("┃┗━━━━┛ ┃ ┃ ┃\n"); printf("┃ ┗━━━━━━┛ ┃\n"); printf("┃ ┃\n"); printf("┃ ┃\n"); printf("┃ ┃\n"); printf("┃ ┃\n"); printf("┃ ┏━━━━━━━━━┓ ┃\n"); printf("┃ ┃ ┃ ┃\n"); printf("┃ ┃ 2.图 ┃ ┃\n"); printf("┃ ┃ 书 ┃ ┏━━━━━━┓ ┃\n"); printf("┃ ┃ 馆 ┃ ┃ 综 ┃ ┃\n"); printf("┃ ┃ ┃ ┃ 3. 合 ┃ ┃\n"); printf("┃ ┃ ┃ ┃ 楼 ┃ ┃\n"); printf("┃ ┗━━━━━━━━━┛ ┗━━━━━━┛ ┃\n"); printf("┃ ┃\n"); printf("┃ ┃\n"); printf("┃ ┃\n"); printf("┃ ┃\n"); printf("┃ ┃\n"); printf("┃ ┃\n"); printf("┃ ┏━━━━━┓ ┃\n"); printf("┃ ┃1.学校南门┃ ┃\n"); printf("┃ ┗━━━━━┛ ┃\n"); printf("┃ ┃\n"); printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"); printf("\n"); fflush(stdin); } void zengjia(MGraph &MGr,int &N) { char jingdian[50],jieshao[1000]; printf("请输入景点的名字\n"); scanf("%s",&jingdian); printf("请输入景点介绍内容\n"); scanf("%s",&jieshao);fflush(stdin); N=N+1; MGr.view .num=N; strcpy(MGr.view .date.name,jingdian); strcpy(MGr.view .date.number,"013"); strcpy(MGr.view .date.introduce,jieshao); printf("添加完成\n"); }
相关文章推荐
- java课程设计
- 课程设计—歌手大奖赛
- 课程设计备份
- 课程设计之贪吃蛇小游戏制造
- Java课程设计——学生信息系统(团队)
- 数据结构课程设计【考试报名管理系统】
- 课程设计-家谱管理系统
- 课程设计报告内容(源代码在另一个文章中)
- 数据结构课程设计【家庭财务管理系统】
- 大二时的课程设计:MiniPlay播放器
- RSA密码系统 基于大数环境编写 密码学课程设计
- 课程设计1 小学生考试系统
- 课程设计之航空订票系统
- 课程设计之学生成绩管理系统开发
- 2017大二上学期数据结构课程设计
- 数据结构课程设计-停车场管理系统
- 课程设计 学生成绩查询
- Sqlerver数据库课程设计
- Java课程设计——计算器
- 课程设计之第二次冲刺—(11.29-12.1总结)