武汉工商简单校园导游系统
来源:互联网 发布:minecraft mac java 编辑:程序博客网 时间:2024/04/27 22:52
这些代码是我们学校课程设计的作业,仅供参考,其中部分代码参考了csdn中大神的算法
#
- 下面是jdxx.h头文件,介绍了数据结构以及功能函数声明
#include stdio.h>
#pragma once
#define maxview 50//最大景点
#define FINITY 8888//无穷大
#define NOTVISITED 0//没有参观到
#define VISITED 1
#define MaxSize 100
//typedef int edg;//权值类型
typedef struct
{
char name[20];//景点名称
char number[10];//景点数字编号
char intro[500];//景点介绍
}xinx;//存放景点信息
typedef struct
{
int num;//顶点编号
xinx date;//景点信息
}view;//单个景点类型
typedef struct
{
int n,e;//n为实际顶点数,e为实际边数
view view1 [maxview];//存放顶点信息
int len [maxview][maxview];//路径长度
}way;//路径图类型
way mgr;//全局变量,定义mgr为way类型
void input();//录入信息
void chage();//修改信息
void map();//地图
void show();//查询景点信息
void sshort();//最短路径
void all();//所有路径
//void dfsm();//深度优先遍历
void add();//增加信息
void del();//删除信息
void creat(way *g,char *s ,int c)//辅助函数文件导入
{
int i,j,k,w; /*建立网络的邻接矩阵存储结构*/
FILE *rf ;
rf = fopen(s, "r") ; /*从文件中读取图的边信息*/
if (rf)
{
fscanf(rf,"%d%d",&g->n,&g->e); /*读入图的顶点数与边数*/
for(i=0;i<g->n;i++) /*读入图中的顶点值*/
fscanf(rf,"%1s",&g->view1[i]);
for(i=0;i<g->n;i++) /*初始化邻接矩阵*/
for(j=0;j<g->n;j++)
if (i==j) g->len[i][j]=0;//主对角全零
else g->len[i][j]=FINITY;//趋于正无穷大
for(k=0;k<g->e;k++)
{
fscanf(rf,"%d%d%d", &i,&j,&w);
g->len[i][j]=w;
if (c==0) g->len[j][i]=w; /*如果C==0则建立无向网邻接矩阵,否 则建立有向网邻矩阵*/
}
fclose(rf);
}
else g->n=0;
}//建立邻接表
//void print(way g)
//{ /*辅助函数,输出邻接矩阵表示的图g*/
// int i,j;
//
// for (i=0;i<g.n;i++)
// printf("%c ",g.view1[i]);
//
// printf("\n");
// for (i=0;i<g.n;i++)
// {
// for (j=0;j<g.n;j++)
// printf("%6d",g.len[i][j]);
// printf("\n");
// }
//}
上面代码中creat()函数表示建立邻接表存储结构,我们采用文件导入的方式建立一个图,这个图是我们自己在文件中自定义的,在我们需要的地方用creat()调用相应文件就可以达到建图目的 - 下面是我们各功能的实现代码
#include "jdxx.h"//景点信息#include<stdlib.h>#include <string.h>#define N 14//现有最大景点数void input()//存入景点信息{ mgr.view1[1].num=1; strcpy (mgr.view1[1].date.name,"校门"); strcpy (mgr.view1[1].date.number,"001"); strcpy (mgr.view1[1].date.intro,"毗邻三环,几经返修,终于形成现在的校门,正面武汉工商学院几个大字,背后是我们的校训:弘德博问,和谐拓新。"); mgr.view1[2].num=2; strcpy (mgr.view1[2].date.name,"实验楼"); strcpy (mgr.view1[2].date.number,"002"); strcpy (mgr.view1[2].date.intro,"实验楼顾名思义肯定是我大工商学子做实验的地方,此楼是我校多个实验基地,人才的发源地,旁边有一个快递收发点。"); mgr.view1[3].num=3; strcpy (mgr.view1[3].date.name,"综合楼"); strcpy (mgr.view1[3].date.number,"003"); strcpy (mgr.view1[3].date.intro,"综合楼是我们学校教学的主要地方,也是老师办公的主要集聚地,综合楼大气美丽,是我们学校楼群中的颜值担当。"); mgr.view1[4].num=4; strcpy (mgr.view1[4].date.name,"外语楼"); strcpy (mgr.view1[4].date.number,"004"); strcpy (mgr.view1[4].date.intro,"此楼全名应叫外语艺术楼,因为它一般是外语楼,一半是艺术楼,我们却更习惯以叫它外语楼,因为我们是非艺术类专业,但它的正门是有艺术与设计学院的,要找到它这几个大字是很明显的标志"); mgr.view1[5].num=5; strcpy (mgr.view1[5].date.name,"1-4栋宿舍群"); strcpy (mgr.view1[5].date.number,"005"); strcpy (mgr.view1[5].date.intro,"这四栋寝室住着我们学校各个学院的学生,其中单数是女生宿舍,双数为男生宿舍"); mgr.view1[6].num=6; strcpy (mgr.view1[6].date.name,"一食堂"); strcpy (mgr.view1[6].date.number,"006"); strcpy (mgr.view1[6].date.intro,"这里呢是有3个建筑的,一食堂、弘德楼和5栋宿舍,一食堂分两层特色各不同,味道算是可以的,和一食堂紧挨的楼栋呢就是弘德楼,也是我们学校最高的楼,这栋楼以租房的形式呢提供给老师同学自由的住宿,5栋是女生宿舍,就没什么好说的呢,只是听说有段时间,都叫它考研楼,因为有一整个宿舍都一起考上了研究生"); mgr.view1[7].num=7; strcpy (mgr.view1[7].date.name,"体育馆"); strcpy (mgr.view1[7].date.number,"007"); strcpy (mgr.view1[7].date.intro,"体育馆全名体育运动中心,室内有各种“小球”项目,室外一边是足球场一边是篮球场。学校医务室就在体育管的靠湖那边。"); mgr.view1[8].num=8; strcpy (mgr.view1[8].date.name,"足球场"); strcpy (mgr.view1[8].date.number,"008"); strcpy (mgr.view1[8].date.intro,"我们学校最大的一块活动区域,是不是会有露天活动在这举行,同时每天都会有人在这跑步、散步、运动。"); mgr.view1[9].num=9; strcpy (mgr.view1[9].date.name,"图书馆"); strcpy (mgr.view1[9].date.number,"009"); strcpy (mgr.view1[9].date.intro,"图书馆是一个大学的灵魂,我们学校也是,图书馆需刷卡进入,还会不定时举行各种读书活动,以及各类讲坛,6楼是考研的学长学姐们的聚集地"); mgr.view1[10].num=10; strcpy (mgr.view1[10].date.name,"静思湖"); strcpy (mgr.view1[10].date.number,"010"); strcpy (mgr.view1[10].date.intro,"静思湖是我们学校的内湖,有一个不能过湖的桥所以久而久之我们都叫那个桥为“回心转意桥”,同时每天也会有人去那里散步。"); mgr.view1[11].num=11; strcpy (mgr.view1[11].date.name,"二食堂"); strcpy (mgr.view1[11].date.number,"011"); strcpy (mgr.view1[11].date.intro,"总会觉得二食堂的饭会比一食堂好吃,因为本人是住在一食堂这边的。二食堂也是两层,各种风味都有"); mgr.view1[12].num=12; strcpy (mgr.view1[12].date.name,"清真食堂"); strcpy (mgr.view1[12].date.number,"012"); strcpy (mgr.view1[12].date.intro,"由于我们学校有预科班,所以就为信仰伊斯兰教的少数民族专门准备了清真食堂。"); mgr.view1[13].num=13; strcpy (mgr.view1[13].date.name,"6-13栋宿舍群"); strcpy (mgr.view1[13].date.number,"013"); strcpy (mgr.view1[13].date.intro,"6-13栋寝室的男女分布情况我就不是特别清楚了,只知道13栋是女生寝室,9栋是男寝,9栋一楼有一个小食堂一样吃东西的地方。"); mgr.view1[14].num=14; strcpy (mgr.view1[14].date.name,"黄家湖"); strcpy (mgr.view1[14].date.number,"014"); strcpy (mgr.view1[14].date.intro,"黄家湖很大,我们学校只是沾了一个黄家湖的边而已"); way g;}void add(){ while(1) {printf("请输入要添加的顶点编号:<按00结束添加>"); int a; xinx b; scanf("%d",&a); if(a==00) { break; }else{ N+1; printf("请输入要添加的景点名称:"); scanf("%s",b.name); printf("请输入要添加的景点编号:"); scanf("%s",b.number); printf("请输入要添加的景点描述:"); scanf("%s",b.intro); mgr.view1[a].num=a; strcpy (mgr.view1[a].date.name,b.name); strcpy (mgr.view1[a].date.number,b.number); strcpy (mgr.view1[a].date.intro,b.intro);} }}void chage()//修改信息 { int n,a; for(int i=0;i<N;i++) { printf("请输入要修改的景点编号<输入00结束插入>\n"); scanf("%d",&n); if(n==00) { break; } printf("********************************************************\n"); printf(" 1.顶点编号 \n"); printf(" 2.景点名称 \n"); printf(" 3.景点编号 \n"); printf(" 4.景点简介 \n"); printf(" 5.退出 \n"); printf("********************************************************\n"); printf("请按提示输入要修改的信息:"); scanf("%d",&a); switch(a) { case 1: printf("请输入顶点编号:"); scanf("%d",&mgr.view1[n].num); break; case 2: printf("请输入景点名称:"); scanf("%s",mgr.view1[n].date.name); break; case 3: printf("请输入景点编号:"); scanf("%s",mgr.view1[n].date.number); break; case 4: printf("请输入景点简介:"); scanf("%s",mgr.view1[n].date.intro); break; case 5:return; } }}void map(){ printf("|------------------------------------------------------------------------------------------------------|\n"); printf("| |-------------------------------------------------------------------| |---------------------| |\n"); printf("| | 武 汉 工 商 学 院 地 图 | | 6-12 | | | |\n"); printf("| | made in vivi | |---------| |--------| |\n"); printf("| |-------------------------------------------------------------------| | 学 生 | | 13 | |\n"); printf("| |---------| |----------| |\n"); printf("| |----------| | 公 寓 | | 13栋 | |\n"); printf("| | | 实验楼2 | |-----------------------| |\n"); printf("| | |----------| |-------------| |\n"); printf("| | |--------------| | 清 真食堂12 | |\n"); printf("|---| | 综合楼3 | ~~~~~~~~ |-------------| |\n"); printf("|校 | |--------------| /--\\ ~ 静 ~ |---------| |\n"); printf("|门 | |--- ---| ~ 思 ~ | 二 | |\n"); printf("| 1 | | 图书馆 9 | ~ 湖 ~ | 11 | |\n"); printf("|---| |-------|---| |-------------| ~ 10 ~ | 食 堂 | |\n"); printf("| | |-------|---| ~~~~~~~~ | | |\n"); printf("| | 外 语 楼 4 | |-----------------------| |---------| |\n"); printf("| | |-------|---| | 足 球 场 | |\n"); printf("| |-------|---| | 8 | |\n"); printf("| |-----------------------| ~ ~ ~ |\n"); printf("| |---------|------| |----- -----| ~ ~ ~ |\n"); printf("| | | | | 体 育 馆7 | ~ ~ |\n"); printf("| |-------|--------| |--- --| ~黄~ ~ |\n"); printf("| |1-4学生| 宿舍5 | ~ ~ |\n"); printf("| |-------|--------| ~ ~ |\n"); printf("| ~ ~家~ ~ |\n"); printf("| |-----| ~ ~ |\n"); printf("| | 弘-| |----| ~ 14 ~ |\n"); printf("| | 德-|---- ----- -----|- 5-| ~湖~ ~ |\n"); printf("| | 楼-| 一食堂 6 |-栋-| ~ ~ |\n"); printf("| |-----|__________________|----| ~ ~ |\n"); printf("| ~ ~ ~~ |\n"); printf("|------------------------------------------------------------------------------------------------------|\n");}typedef int dist[N];//距离向量类型typedef int path[N];//路径类型//typedef enum{F,T} boolean;//F为0,T为1void dijkstra(way g,int v0,path p,dist d)//迪杰斯拉算法{ int final[N]; int i,j,k,v,min,x; /*第一步 初始化集合s与距离向量d*/ for(v=0;v<g.n;v++) { final[v]=NOTVISITED; d[v]=g.len[v0][v]; if (d[v]<FINITY&&d[v]!=0) p[v]=v0; else p[v]=-1;//v无前驱 final[v0]=VISITED; d[v0]=0;//初始状态 } /*第二步 依次找出n-1个节点加入到s中*/ for (i=1;i<g.n;i++) { min=FINITY; for (k=1;k<g.n;++k)//找最小边入节点 if(!final[k]&&d[k]<min)//!final[k]表示k还在v-s中 { v=k;min=d[k]; } //printf("\n%c---%d\n",g.view1[v],min);//输出本次入选的顶点距离 if(min==FINITY) return; final[v]=VISITED; /*第三步 修改s与v-s中各节点的距离*/ for(k=1;k<g.n;++k) if(!final[k]&&(min+g.len[v][k]<d[k])) { d[k]=min+g.len[v][k]; p[k]=v; } }}void print_gpd(way g,path p,dist d)//输出路径{ int st[N],i,pre,top=-1; for(i=0;i<g.n;i++) { printf("\n距离:%7d,路径:",d[i]); st[++top]=i; pre=p[i]; while(pre!=-1) { st[++top]=pre; pre=p[pre]; } while(top>0) printf("-->%2d",st[top--]); }}typedef int dist1[N][N];//距离向量类型typedef int path1[N][N];//路径void floyd(way g,path1 p,dist1 d)//佛洛依德算法{ int i,j,k; for(i=0;i<g.n;i++)//初始化 for(j=0;j<g.n;j++) { d[i][j]=g.len[i][j]; if(/*i!=j&&*/d[i][j]<FINITY) p[i][j]=i; /* p[j][i]=i;*/ /*else p[i][j]=-1;*/ } for (k=0;k<g.n;k++)//递推求解每一对定点间的最短距离 { for(i=0;i<g.n;i++) for(j=0;j<g.n;j++) if(d[i][j]>(d[i][k]+d[k][j])) { d[i][j]=d[i][k]+d[k][j]; p[i][j]=k; /*p[j][i]=k;*/ } }}void display(way g,dist1 d,path1 p,int i,int j) { /*打印两个景点的路径及最短路径*/ int x,y; /*creat(&g,"map.txt",0);*/ x=i; y=j; printf("您要查询的两景点间最短路径是: \n\n"); fflush(stdin); if(i<j) { printf("结束点:%d",y); while(p[i][j]!=0) { printf("<--%d",d[i][j]); if(i<j) j=d[i][j]; else i=d[j][i]; } printf("<--开始点:%d\n\n",x); printf("%d->%d的最短路径是: %d 米。\n\n",x,y,p[x][y]); } else { printf("开始点:%d",x); while(p[i][j]!=0) { printf("-->%d",d[i][j]); if(i<j) j=d[i][j]; else i=d[j][i]; } printf("->%d结束点:\n\n",y); printf("%d->%d的最短路径是: %d 米。\n\n",x,y,p[x][y]); } }void sshort() { /*要查找的两景点的最短路径*/ int i,j; way g;dist1 d;path1 p; creat(&g,"map.txt",0); printf("请输入要查询的两个景点的数字编号(1->14)中间用空格间隔开。\n"); scanf("%d %d",&i,&j); if(i>N||i<0||j>N||j<0) { printf("输入信息错误!\n\n"); printf("请输入要查询的两个景点的数字编号(1->14)中间用空格间隔开。\n"); scanf("%d %d",&i,&j); } else { floyd(g,d,p); display(g,d,p,i,j); } }//void print_gpd1(way g,path1 p,dist1 d)//{// int i,j,pre;// for(i=0;i<g.n;i++)// for(j=0;j<g.n;j++)// /*if(i!=j)// {// printf("%d-->%d:",&i,&j);*/// if(d[i][j]==FINITY)// {// if(i!=j)// printf("不存在路径");// }// else// {// printf("%d->%d路径长度为%d:路径为:",i,j,d[i][j]);// printf("%d,",i);//输出路径上的// //Ppath(p,i,j); //输出路径上的中间点// printf("%d\n",j);//输出路径上的终点// /*pre=d[i][j];// while(pre!=-1)// {// pre=d[pre][j];// }// printf("%d",j);*/// }// }//void sshort()//{// way g;path1 p;dist1 d;int i,j;// creat(&g,"map.txt",0);// printf("请输入您的所在位置:");// scanf("%d",&i);// printf("请输入您要去的位置:");// scanf("%d",&j);// floyd(g,p,d);// print_gpd1(g,p,d);//}void all(){ way g;path p;dist d;int v0,v; creat(&g,"map.txt",0); printf("请输入您的所在位置v0:"); scanf("%d",&v0); if(v0>N||v0<0) { printf("输入信息错误!\n\n"); printf("请输入您的所在位置v0:"); scanf("%d ",&v0); } else{ dijkstra(g,v0,p,d); printf("从当前位置出发的所有路径如下:\n"); print_gpd(g,p,d);}}void show(){ int m; printf("请输入查询景点序号(序号以地图标识为准):\n"); scanf("%d",&m); fflush(stdin); if(m>maxview) printf("\n输入错误"); else if(m){ printf("景点编号:%s\t",mgr.view1[m].date.number); printf("景点名称:%s\n",mgr.view1[m].date.name); printf("景点简介:%s\n",mgr.view1[m].date.intro); } /* switch(m) { case m: printf("景点编号:%s\t",mgr.view1[m].date.number); printf("景点名称:%s\n",mgr.view1[m].date.name); printf("景点简介:%s\n",mgr.view1[m].date.intro); break; case 2: printf("景点编号:%s\t",mgr.view1[2].date.number); printf("景点名称:%s\n",mgr.view1[2].date.name); printf("景点简介:%s\n",mgr.view1[2].date.intro); break; case 3: printf("景点编号:%s\t",mgr.view1[3].date.number); printf("景点名称:%s\n",mgr.view1[3].date.name); printf("景点简介:%s\n",mgr.view1[3].date.intro); break; case 4: printf("景点编号:%s\t",mgr.view1[4].date.number); printf("景点名称:%s\n",mgr.view1[4].date.name); printf("景点简介:%s\n",mgr.view1[4].date.intro); break; case 5: printf("景点编号:%s\t",mgr.view1[5].date.number); printf("景点名称:%s\n",mgr.view1[5].date.name); printf("景点简介:%s\n",mgr.view1[5].date.intro); break; case 6: printf("景点编号:%s\t",mgr.view1[6].date.number); printf("景点名称:%s\n",mgr.view1[6].date.name); printf("景点简介:%s\n",mgr.view1[6].date.intro); break; case 7: printf("景点编号:%s\t",mgr.view1[7].date.number); printf("景点名称:%s\n",mgr.view1[7].date.name); printf("景点简介:%s\n",mgr.view1[7].date.intro); break; case 8: printf("景点编号:%s\t",mgr.view1[8].date.number); printf("景点名称:%s\n",mgr.view1[8].date.name); printf("景点简介:%s\n",mgr.view1[8].date.intro); break; case 9: printf("景点编号:%s\t",mgr.view1[9].date.number); printf("景点名称:%s\n",mgr.view1[9].date.name); printf("景点简介:%s\n",mgr.view1[9].date.intro); break; case 10: printf("景点编号:%s\t",mgr.view1[10].date.number); printf("景点名称:%s\n",mgr.view1[10].date.name); printf("景点简介:%s\n",mgr.view1[10].date.intro); break; case 11: printf("景点编号:%s\t",mgr.view1[11].date.number); printf("景点名称:%s\n",mgr.view1[11].date.name); printf("景点简介:%s\n",mgr.view1[11].date.intro); break; case 12: printf("景点编号:%s\t",mgr.view1[12].date.number); printf("景点名称:%s\n",mgr.view1[12].date.name); printf("景点简介:%s\n",mgr.view1[12].date.intro); break; case 13: printf("景点编号:%s\t",mgr.view1[13].date.number); printf("景点名称:%s\n",mgr.view1[13].date.name); printf("景点简介:%s\n",mgr.view1[13].date.intro); break; case 14: printf("景点编号:%s\t",mgr.view1[14].date.number); printf("景点名称:%s\n",mgr.view1[14].date.name); printf("景点简介:%s\n",mgr.view1[14].date.intro); break; default: printf("输入序号错误。\n"); break; } */ printf("\n"); }int visit[N];//标记数组//void init()//初始化标记术组//{// for(int i=0;i<N;i++)// visit[i]=0;//}//void dfsm(way g,int v)//{// // if(!visit[v])// {// printf("%d",g.len);// visit[v]=1;// }// for(int i=0;i<g.n;i++)// dfsm(g,v);//}//void dfsp()//{// way g;init();// creat(&g,"map.txt",0);// // dfsm(g,1);//}void del(){int n,a; xinx c; for(int i=0;i<N;i++) { printf("请输入要删除的景点编号<输入00结束插入>\n"); scanf("%d",&n); if(n==00) { break; } printf("********************************************************\n"); printf(" 1.顶点编号 \n"); printf(" 2.景点名称 \n"); printf(" 3.景点编号 \n"); printf(" 4.景点简介 \n"); printf(" 5.退出 \n"); printf("********************************************************\n"); printf("请按提示输入要删除的信息:"); scanf("%d",&a); switch(a) { case 1: mgr.view1[n].num=00/*mgr.view1[n+1].num*/; N-1; break; case 2: strcpy(mgr.view1[n].date.name,"删除成功"/*mgr.view1[n+1].date.name*/); N-1; break; case 3: strcpy(mgr.view1[n].date.number,"删除成功"/*mgr.view1[n+1].date.number*/); N-1; break; case 4: strcpy(mgr.view1[n].date.intro,"删除成功"/*mgr.view1[n+1].date.intro*/); N-1; break; case 5:return; } }}void menu(){ while(1) { 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("**********************************************************************\n"); int m;way g; printf("请输入你的选择:"); scanf("%d",&m); switch(m) { case 1: map(); break; case 2: show(); break; case 3: chage(); break; case 4:sshort(); break; case 5:all(); break; case 6:del(); break; case 7:add(); break; case 8: exit(0); break; default: printf("输入序号错误。\n"); break; }system("pause"); system("cls");}}void main(){ way g; input(); menu(); system("pause");}
阅读全文
1 0
- 武汉工商简单校园导游系统
- 校园导游咨询系统
- 校园导游系统
- 小型校园导游系统
- 校园导游系统
- 校园交通导游系统
- 数据结构-校园导游咨询系统
- C项目-校园导游系统
- 校园导游系统 数据结构课程设计
- 数据结构项目-校园导游系统
- 【算法设计】虎溪校园导游系统
- 数据结构-校园导游咨询系统…
- 【算法设计】虎溪校园导游系统
- 【算法设计】虎溪校园导游系统
- 程序设计——校园导游系统
- 课程实训-校园导游系统
- 【数据结构课设】校园导游系统
- 校园导游
- 单机节点Kafka配置SASL用户名密码认证
- 最新Swift学习教程-从简单到复杂 韩俊强的博客
- 微信H5支付的业务流程
- Tcltk 使用twapi小结
- ZCMU-计算机网络第四章数据链路层
- 武汉工商简单校园导游系统
- C语言开源项目及c++库大全
- 用YOLOv2训练自己的数据集
- 项目中的问题(1)----AS开发高德地图错误码提示7,32,1008
- Java内存模型
- 自定义数据绑定formate函数
- nltk使用时 ImportError: cannot import name 'format_exception_only'
- J2EE系列之MyBatis学习笔记(四)-- mybatis关系映射(一对一映射)
- 单片机延时函数实现