C语言校园导航系统
校园导航系统的两个代码
#1 数据结构实验之校园导游咨询#include<stdlib.h>#include<stdio.h>#include<iostream.h>#include<string.h>#include<math.h>#include "stdio.h"#define null 0#define num 20#define maxdist 10000typedef struct{char data[num];int edges[num][num];}graph;void dijkstra(graph g,int n,int i,int d[num],int p[num]) {int s[num];int mindist,dist;int j,k,u;for(j=0;j<n;j++){d[j]=g.edges[i][j];s[j]=0;if((d[j]<maxdist)&&(d[j]!=0)) p[j]=i;elsep[j]=-1;}s[i]=1;for(j=0;j<n-1;j++){mindist=maxdist;u=i;for(k=0;k<n;k++)if((s[k]==0)&&(d[k]<mindist)) {u=k;mindist=d[k];}s[u]=1;for(k=0;k<n;k++)if(s[k]==0){dist=d[u]+g.edges[u][k];if(dist<d[k]){d[k]=dist;p[k]=u;}}}void opdijk(int v0,int n,int d[],int p[]) {int i,pre;for(i=0;i<n;i++)if(i!=v0){printf("\n%d",i);pre=p[i];while(pre!=-1){printf("<--%d",pre);/****************************/ pre=p[pre]; }if(d[i]==maxdist)printf("<--%d",v0);printf("\tshortestway:%d",d[i]);}}void floyd(graph g,int n,int d[][num],int p[][num]){int i,j,k;for(i=0;i<n;i++)for(j=0;j<n;j++){d[i][j]=g.edges[i][j];if((d[i][j]<maxdist)&&(d[i][j]!=0))p[i][j]=j;elsep[i][j]=-1;}for(i=0;i<n;i++)d[i][i]=0;for(k=0;k<n;k++)for(i=0;i<n;i++)for(j=0;j<n;j++)if(d[i][j]>d[i][k]+d[k][j]){d[i][j]=d[i][k]+d[k][j] ;p[i][j]=p[i][k];}}void opfloy(int n,int d[][num],int path[][num]) {int i,j,next;for(i=0;i<n;i++){printf("\n\nyuandian is v%d:",i);for(j=0;j<n;j++){printf("\nthe shortest way from%dto%dis:\n",i,j);printf("%d",i);next=path[i][j];while(next!=-1){printf("->%d",next);next=path[next][j];}if(d[i][j]==maxdist)printf("<-%d",j);/***************************/ printf("\t%d",d[i][j]);}}}void main(){graph g;int i,j,k,n;int d[num],p[num],sd[num][num],sp[num][num];//clrscr();n=11;g.data[0]='a';g.data[1]='b';g.data[2]='c';g.data[3]='d';g.data[4]='e';g.data[5]='f';g.data[6]='g';g.data[7]='h';g.data[8]='i';g.data[9]='j';g.data[10]='k';for(i=0;i<n;i++)for(j=0;j<n;j++)g.edges[i][j]=maxdist; for(j=0;j<n;j++)g.edges[i][j]=0;g.edges[0][2]=30;g.edges[0][5]=40;g.edges[0][1]=20;g.edges[1][5]=60;g.edges[1][4]=40;g.edges[1][6]=30;g.edges[2][3]=35;g.edges[2][7]=40;g.edges[3][10]=20;g.edges[3][8]=15;g.edges[4][9]=30;g.edges[4][8]=35;g.edges[4][10]=10;g.edges[5][10]=10;g.edges[5][8]=45;g.edges[5][2]=20;g.edges[6][0]=70;g.edges[7][0]=50;g.edges[8][9]=20;g.edges[9][1]=55;g.edges[10][0]=125;//clrscr();printf("\t --WELCOME TOU USE GUIDE!!--\n");printf("\t*****************************************\n");printf("\t* *\n");printf("\t*\tINFOMATION-i\tVISIT-v\t\t*\n\t*\t ABOUT ME-a\tQUIT-q\t\t*\n");printf("\t*\t\t\t\t\t*\n\t*\t\t\t\t\t*\n\t*\t\t\t\t\t*\n\t*\t\t\t\t\t*\n \t*\t\t\t\t\t*\n");printf("\t*****************************************\n");printf("\t*PLEASE ENTER AN ORDER:i? v? m? q?\t*\n");printf("\t*CLEAR THE SCREEN:c\t\t3\t*\n");printf("\t*****************************************\n");do{/*gets(t);*/switch(getchar()){case'a':{printf("NAME:****** CLASS:02computer(3)\n"); printf("PRIVATE EMAIL:devo800@\n"); }break;/* case'g':{FILE *tp;*//* break; */case'i':{FILE *tp;char ch;if((tp=fopen("d:\\info.txt","rt"))==null) {printf("\ncan't open!");getchar();exit(1);}ch=fgetc(tp);while(ch!=EOF){putchar(ch);ch=fgetc(tp);}fclose(tp);}break;case'c':break;case'v':{do{printf("\nINPUT JIE DIAN(0-10):\n"); scanf("%d",&i);{dijkstra(g,n,i,d,p);printf("\n\nyuandian is v%d:",i); opdijk(i,n,d,p);}}while(1);}break;default: exit(1);}}while(getchar());getchar();}*--------------------校园导游系统------------------*/#include<stdio.h>#include<process.h>#define INT_MAX 1000000#define n 10int cost[n][n];//边的值int shortest[n][n];//两点间的最短距离int path[n][n];//经过的景点的;void floyed();int display(int i,int j);void introduce()//introduce of the palce{ int a;printf("Place 1:凯旋门\n"); printf("Place 2:图书馆\n");printf("Place 3:行政楼\n"); printf("Place 4:飞翔门\n"); printf("Place 5:大广场\n");printf("Place 6:ABC教学楼\n"); printf("Place 7:体育场\n"); printf("Place 8:月亮湾\n"); printf("Place 9:English Coner\n"); printf("Place 10:树人广场\n");do{printf("您想查询哪个景点的详细信息?请输入景点编号:");scanf("%d",&a);getchar();switch(a){case 1:。
c语言校园导航最短距离-floyd算法
校园导航最短距离-Floyd算法一、引言在现代社会中,校园导航成为了大学生、教师、甚至游客日常生活中的重要组成部分。
特别是大一新生,对校园的地理布局尚不熟悉,更需要一种高效的导航方式来帮助他们更快地找到教学楼、食堂、宿舍等地点。
而作为计算机科学领域的重要一环,C语言通过应用Floyd算法来解决校园导航最短距离的问题,给校园导航增添了新的可能性。
二、校园导航最短距离-Floyd算法的基本概念在介绍C语言以及Floyd算法在校园导航中的应用之前,我们先来了解一下校园导航最短距离-Floyd算法的基本概念。
Floyd算法是一种用于寻找加权图中顶点对之间最短路径的算法,主要用于解决多源点之间的最短路径问题。
在校园导航中,可以将校园内不同的地点看作图中的顶点,而顶点之间的路径长度则可以看作边的权重,Floyd算法就可以帮助我们快速找到任意两个地点之间的最短路径。
而C语言作为一种结构化程序设计语言,其高效、灵活的特性可以很好地支持Floyd算法的实现。
三、C语言在校园导航最短距离中的应用1. 基于邻接矩阵的图表示在C语言中,我们可以利用二维数组来表示图的邻接矩阵,用来存储不同地点之间的路径长度。
通过邻接矩阵的方式,我们可以方便地在程序中存储校园内各个地点之间的距离,为Floyd算法的实现提供了基础。
2. Floyd算法的实现在C语言中,我们可以通过嵌套循环来实现Floyd算法。
我们需要初始化一个二维数组来存储任意两个地点之间的最短距离,然后通过三重循环来不断更新这个数组,直到找到所有顶点对之间的最短路径。
C 语言的结构化特性使得Floyd算法的实现变得简洁清晰,同时也可以充分利用C语言的指针和数组操作来提高算法的效率。
四、校园导航最短距离-Floyd算法的个人观点和理解作为一名计算机科学专业的学生,我对校园导航最短距离-Floyd算法的应用深感兴趣。
我认为Floyd算法的高效性和C语言的灵活性为校园导航提供了新的可能性,可以帮助校园内的师生更快捷、准确地找到目的地。
校园导航系统 数据结构课程设计 C++开发
分类号编号华北***大学North China Institute of Water Conservancy andHydroelectric Power课程设计题目校园导航院系信息工程学院专业计算机科学与技术姓名******学号201117000指导教师*****2012年7月6 日目录1.需求分析 (1)1.1问题描述 (1)1.2课程设计目的 (1)1.3设计要求 (1)2.概要设计 (2)2.1任务定义 (2)2.2数据结构 (2)2.3 校园平面图展示 (2)2.4系统功能图 (4)3.详细设计 (4)3.1各个模块名称和功能 (4)3.2具体函数模块详解 (5)3.2.1校园平面图展示 (5)3.2.2任意两点的所有路径 (5)3.2.3校园基础设施介绍 (6)3.2.4指定两点间最短路径 (6)3.2.5单点到其他左右顶点间最短路径 (6)3.2.6华北水利水电学院简介 (7)3.2.7访客留言 (7)3.2.8浏览访客留言 (7)3.3 主要算法思想描述 (7)3.4各函数之间的调用关系示意图 (7)4.测试与分析 (8)4.1测试显示 (8)4.2调试分析 (12)4.2.1调试过程中遇到的问题与解决方案 (12)4.2.2算法的时空复杂度分析 (12)5.用户使用说明 (12)6.实验总结 (14)7.参考文献 (14)8.附件 (15)校园导航系统1.需求分析1.1问题描述我们熟悉一个地方的地形情况通常是借助于一张地图,通常的地图包含的信息十分的有限,而且具体到某一个建筑物,你不能了解到它的进一步的详细的情况。
因此,导航系统就应运而生了。
具体到本系统,作为用户浏览校园时,只拿着学校的地图是能够游遍全校,但是各建筑内部的情况就必须实地考察才能了解,既费时又费力。
有了我们的校园的导航系统,用户可以根据自己的需要,迅速找到所关心的地点,并且可以看到它的详细的信息。
1.2课程设计目的本课程设计的目的就是要达到理论与实际应用相结合,使我们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,培养程序设计技能如下:(1)了解并掌握数据结构算法的设计方法,具备初步的独立分析和设计能力;(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(3) 独立完成,提高运用所学的理论知识和方法独立分析和解决问题的能力;1.3设计要求设计一个校园导航系统,为来访的客人提供导航服务,具体要求:(1) 设计学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。
c语言课程设计校园导航
c语言课程设计校园导航一、课程目标知识目标:1. 理解C语言基础语法,掌握变量声明、数据类型、运算符等基本概念;2. 学会使用C语言控制结构,包括顺序、选择和循环结构;3. 了解数组、字符串和函数在C语言中的应用;4. 掌握结构体和文件操作,为校园导航系统设计提供数据结构支持。
技能目标:1. 培养学生运用C语言进行问题分析、设计和编程的能力;2. 培养学生运用所学知识解决实际问题的能力,如设计校园导航系统;3. 提高学生的逻辑思维能力和编程技巧,使其能够编写高效、可维护的代码;4. 培养学生的团队协作和沟通能力,以便在项目开发过程中进行有效的分工与协作。
情感态度价值观目标:1. 培养学生对计算机编程的兴趣和热情,激发他们主动探索新技术;2. 培养学生的创新意识,鼓励他们在项目中提出新观点、新方法;3. 培养学生的责任感和敬业精神,使其认识到编程对实际生活的影响;4. 培养学生遵守国家法律法规,尊重知识产权,树立正确的道德观念。
本课程针对高中年级学生,结合C语言课程特点,以实用性为导向,培养学生具备编程思维和解决实际问题的能力。
通过设计校园导航系统,使学生将所学知识应用于实际项目中,提高他们的学习兴趣和积极性。
课程目标具体、可衡量,便于教师进行教学设计和评估。
在课程实施过程中,教师需关注学生个体差异,提供个性化指导,确保学生能够达到预期学习成果。
二、教学内容1. C语言基础语法- 变量声明与赋值- 数据类型与运算符- 控制结构(顺序、选择、循环)2. 数组与字符串- 一维数组- 二维数组- 字符串操作3. 函数与模块化编程- 函数定义与调用- 作用域规则- 模块化设计4. 结构体与文件操作- 结构体定义与使用- 文件读写操作- 数据存储与检索5. 校园导航系统设计与实现- 需求分析- 功能模块划分- 编程实现与调试教学内容依据课程目标,结合教材相关章节,制定以下教学大纲:第一周:C语言基础语法及控制结构第二周:数组与字符串操作第三周:函数与模块化编程第四周:结构体与文件操作第五周:校园导航系统设计与实现(含小组讨论、编程实践与调试)教学内容科学、系统,符合教学实际。
数据结构-算法实验报告——校园导航系统
数据结构与算法分析课程设计报告设计题目:校园导航咨询系统专业学号姓名2013 年3 月3 日一、问题描述设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)(参考课本P186-P192)。
二、需求分析本程序分为五个模块,分别是显示校园全景、查询景点信息、问路查询系统、查看游览路线和退出系统。
(1)显示校园全景展示校园概貌图和各景点编号、名称。
(2)查询景点信息输入要查询的景点编号,显示景点的编号、名称和景点的简单介绍。
(3)问路查询系统输入要参观的两个景点的编号(按从大到小输入),显示两个景点间的最短路径游览方式和最短路径长。
(4)查看游览路线查询某个景点到其他景点的所有路径,并显示其长度。
(5)退出系统查询完毕关闭窗口,显示退出系统的界面三、概要设计1、主要函数:void main() 主函数,程序入口csinfo() 初始化景点信息csroad() 初始化道路信息showpath() 显示校园全景search() 查询景点信息floyd() 弗洛伊德函数,查询两个景点之间的最短路径所要经过的中间节点print(int i,int j) 打印两个景点的路径及最短距离shortpath() 问路查询,求最短路径ShortestPath_DIJ(Maph * M) 利用Dijkstra算法来计算出起点到各个顶点之间的最短路径,以v0为起点menu() 显示菜单选项2、主要变量:ps[MaxPointNum] 定义主要景点信息,存放景点的编号、名称、简要介绍等信息char name[20] 景点名称char number[15] 景点编号char info[100] 景点简介信息MaxPointNum 最大景点个数INFINITY 近似无穷大,表示两景点不可达Maph M 全局变量,定义M为Maph类型int shortest[MaxPointNum][MaxPointNum] 定义全局变量存贮最短路径int path[MaxPointNum][MaxPointNum] 定义存贮路径3、存储结构:3.1 图的类型定义typedef struct{char name[20]; //景点名称char number[15]; //景点代号char info[100]; //景点信息}Elemtype; //景点类型3.2 定义景点typedef struct{int num; //顶点编号Elemtype data; //顶点信息}Point; //定义顶点3.3定义全局变量typedef struct{Point ps[MaxPointNum]; //存放顶点的一维数组int road[MaxPointNum][MaxPointNum];//存放路径的长度(邻接矩阵)int poinum,arcnum; //顶点数,边数}Maph;4、求解算法:迪杰斯特拉算法求解无向图的最短路径四、详细设计详细参见C语言源程序1.调试分析运行程序进行调试:1.进入主界面,出现校园导航咨询系统主菜单。
c语言课程设计校园导航
c语言课程设计校园导航一、教学目标本课程的目标是使学生掌握C语言编程的基本知识和技能,能够运用C语言进行简单的校园导航系统开发。
通过本课程的学习,学生将能够理解C语言的基本语法、数据类型、运算符、控制结构等,并能够运用这些知识编写简单的程序。
同时,学生将能够通过实践,提高问题解决能力和团队合作能力。
二、教学内容教学内容将按照C语言的基本语法和编程技巧进行。
首先,将介绍C语言的基本概念和环境配置,然后逐步深入到数据类型、运算符、控制结构等核心内容。
接下来,将讲解函数、数组和指针等高级概念,最后通过实例讲解面向对象编程的基本思想。
三、教学方法为了提高学生的学习兴趣和主动性,将采用多种教学方法。
首先,通过讲授法,为学生提供C语言的基本概念和理论知识。
然后,通过讨论法,引导学生主动思考和探索问题。
接下来,通过案例分析法,让学生通过分析实际案例,掌握C语言的编程技巧。
最后,通过实验法,让学生通过动手实践,巩固所学知识。
四、教学资源为了支持教学内容和教学方法的实施,将选择和准备适当的教学资源。
教材方面,将选择经典的C语言教材,如《C程序设计语言》。
参考书方面,将推荐学生阅读一些优秀的C语言编程书籍,如《C Primer Plus》。
多媒体资料方面,将制作一些教学视频和演示文稿,以帮助学生更好地理解C语言的编程原理。
实验设备方面,将准备计算机和网络设施,以供学生进行编程实验和实践。
五、教学评估本课程的评估方式将包括平时表现、作业和考试三个部分。
平时表现将根据学生在课堂上的参与度、提问和回答问题的积极性等进行评估。
作业将根据学生的编程实践能力和解决问题的能力进行评估。
考试将包括笔试和上机考试两部分,笔试主要测试学生对C语言理论知识的理解和掌握,上机考试主要测试学生的编程能力和实际操作能力。
六、教学安排本课程的教学进度将按照教材的章节进行安排,每个章节将安排2-3次的课堂讲授和实践操作。
教学时间将安排在每周的周二和周四下午,每次课2小时。
校园导航系统
目录摘要 (2)正文 (3)1设计目的及要求 (3)2 设计原理 (3)2.1 C/C++语言简介 (3)2.2 开发环境 (3)2.3系统模块分析 (4)3设计内容 (4)3.1方案设计与论证 (4)3.2数据结构描述与定义 (5)3.3主要函数的说明 (6)3.4设计结果验证 (11)总结与致谢 (14)参考文献 (15)附录 (16)摘要与传统的地图相比较,地理信息系统有着不可比拟的优势,信息量大,切换方便,可扩展性强。
校园导航问题是基于校园中的不同的景点,从陌生人的角度,为来往的客人提供校园景点相关信息的查询以及为来往的客人提供校园中任意景点的问路查询,以便客人能用最短的时间从某一地点到达想要去的地方。
大大节约了旅客参观校园的时间。
本文是采用C++作为开发语言,又最大程度上用了C语言的有关的语法。
以visual c++6.0为开发工具。
旨在实现校园导航系统中,学校的简介,景点的介绍,路线查询等基本的问题。
为来往客人参观校园提供方便。
关键字:visual c++6.0 ;校园导航系统;正文1设计目的及要求1. 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3. 独立完成,提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4. 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
5. 设计学校平面图,至少包括10个以上场所,校园导航系统能自动找出校园平面图中任意起始点与终点的最佳路径(最短路径)。
求并输出路径及路径长度。
2 设计原理2.1 C/C++语言简介C语言是一种计算机程序设计语言。
它既具有高级语言的特点,又具有汇编语言的特点。
它由美国贝尔研究所的D.M.Ritchie于1972年推出。
1978后,C语言已先后被移植到大、中、小及微型机上。
校园导航问题(c语言)
#include<stdio.h>#include<string.h>#define MAXNUM 20#define INF 6789typedef struct {int adj;//该弧所指向的顶点的位置int *info;/* 该弧相关信息 */}sceneinfo;typedef struct adjlist{int num;// 景点编号char *sight;// 景点名称char *description; /*景点描述*/}adjlist;typedef struct algraph{adjlist ver[MAXNUM];sceneinfo arcs[MAXNUM][MAXNUM];int vexnum,arcnum;/* 图的当前顶点数和弧数*/} algraph;algraph m;// 把图定义为全局变量int visited[MAXNUM];// 全局数组,用来记录各顶点被访问的情况int r[MAXNUM];//全局数组。
用来存放路径上的各个顶点int p=11;//记录当前景点的个数int w=16;//记录当前景点边数的个数int a=0;// 全局变量,用来记录每对顶点之间的所有路径的条数int menu(void)// 用户操作界面{ int i;printf("\n---------------------------------------------\n");printf("1.图中任意景点的相关信息查\n");printf("2.任意两个景点间的最短路径\n");printf("3.任意两个景点间的所有路径\n");printf("4.增加有关景点和道路的信息\n");printf("5.删除更新有关景点和道路的信息 \n");printf("6.更新有关景点和道路的信息\n");printf("7.退出该系统 \n ");printf("---------------------------------------------\n");printf(" 请输入你要进行的操作:");scanf("%d",&i);return(i);}void picture(void)//创建图的函数{ int i,j;m.vexnum=11;m.arcnum=16;for(i=0;i<m.vexnum;i++)// 将每个景点进行编号m.ver[i].num=i;m.ver[0].sight="xiaomen";m.ver[1].sight=" 会通楼 ";m.ver[2].sight=" 大成楼 ";m.ver[3].sight=" 孔安道 ";m.ver[4].sight=" 体育馆 ";m.ver[5].sight=" 柳明湖 ";m.ver[6].sight=" 求知楼 ";m.ver[7].sight=" 清风楼 ";m.ver[8].sight=" 学生活动中心";m.ver[9].sight=" 信息楼 ";m.ver[10].sight=" 基础楼 ";m.ver[1].description=" 教学楼 1 及机电学院办公室";m.ver[2].description=" 教学楼 2 及经管学院办公室";m.ver[3].description=" 教学楼 3 及文学院办公室";m.ver[4].description=" 篮球场和羽毛球场";m.ver[5].description=" 公园和人工湖";m.ver[6].description=" 用于做学生的实验";m.ver[7].description=" 食堂 ";m.ver[8].description=" 举办各种学生活动和课外竞赛";m.ver[9].description=" 电信学院及办公室";m.ver[10].description=" 教学楼 4 及理学院办公室";for(i=0;i<m.vexnum;++i)// 将两景点间的距离初始化为 0 for(j=0;j<m.vexnum;++j)m.arcs[i][j].adj=INF;m.arcs[1][2].adj=m.arcs[2][1].adj=100;m.arcs[1][3].adj=m.arcs[3][1].adj=100;m.arcs[2][6].adj=m.arcs[6][2].adj=210;m.arcs[3][5].adj=m.arcs[5][3].adj=300;m.arcs[1][4].adj=m.arcs[4][1].adj=220;m.arcs[4][5].adj=m.arcs[5][4].adj=600;m.arcs[4][9].adj=m.arcs[9][4].adj=150;m.arcs[4][6].adj=m.arcs[6][4].adj=650;m.arcs[5][7].adj=m.arcs[7][5].adj=30;m.arcs[6][8].adj=m.arcs[8][6].adj=60;m.arcs[10][9].adj=m.arcs[9][10].adj=190;m.arcs[7][10].adj=m.arcs[10][7].adj=350;m.arcs[7][9].adj=m.arcs[9][7].adj=280;m.arcs[8][9].adj=m.arcs[9][8].adj=110;}void sceneplace(void)// 输出景点的名称{ int i;for(i=1;i<p;i++){if(m.ver[i].sight==NULL){ printf("%d. ",i);printf(" 该景点已被删除 \t");}elseprintf("%d.%s\t",i, m.ver[i].sight);}printf("\n\n");}void checkscene(algraph g)// 查询各个景点的信息{int i,j; charch;while(1){ sceneplace();printf(" 请输入你要查询的景点的编号:");scanf("%d",&i);if(i>p || i<0)printf(" 输入错误!! \n");else{for(j=0;j<=p;j++){ if(i==j){printf(" 你要查询的景点的相关信息如下:\n");printf("%d\t\t%s\n",g.ver[i].num,g.ver[i].sight);printf("%s\n",g.ver[i].description);}}}printf(" 是否继续查询 ?(y|n):");scanf("%s",&ch);if(ch=='N'||ch=='n')break;}}void ppath(algraph g,int path1[],int i,int v0)/* 输出最短路径 */{int k;k=path1[i];if(k==v0)/* 找到最短路径,则返回*/return;ppath(g,path1,k,v0);/* 否则,递归调用之 */ printf("%s->",g.ver[k].sight);/* 依次输出路径中的景点名称 */}void dispath(algraph g,int dist[],int path1[],int s[],int n,int v0,int i)//由 path1 计算从v0到i 的最短路径{if(s[i]==1&& i!=v0)//当v0 不等于i,且i∈ s{printf("从 %s 到 %s 的最短游览路径是:\n",g.ver[v0].sight,g.ver[i].sight);printf("%s->",g.ver[v0].sight);ppath(g,path1,i,v0);// 调用ppath 函数,输出路径中的顶点printf("%s",g.ver[i].sight);printf(" 路径长度: %d 米 \n",dist[i]);}}void Dijkstra(algraph g)// 采用狄克斯特拉算法求从顶点v0 到顶点po 的最短路径{char ch;int path1[MAXNUM]; int dist[MAXNUM];//path1[i]中存放顶点i 的当前最短路径上该点的前趋顶点;//dist[i] 中存放顶点i 的当前最短路径长度int s[MAXNUM];//s 为已找到最短路径的终点集合,若s[i]=1, 则 i ∈s;int mindis,i,j,u,n=p;int l,k;int v0,po;while(1){sceneplace();printf(" 请输入出发景点的序号:");scanf("%d",&v0);printf(" 请输入目的景点的序号:");scanf("%d",&po);//在网中找到其编号与输入的目地景点的编号相同的顶点for(i=0;i<n;i++){dist[i]=g.arcs[v0][i].adj;//距离初始化s[i]=0;//s[] 置空if(g.arcs[v0][i].adj!=INF)// 路径初始化path1[i]=v0;elsepath1[i]=-1;}s[v0]=1;path1[v0]=0;for(i=0;i<n;i++){mindis=INF;u=-1;for(j=0;j<n;j++)if(s[j]==0 && dist[j] < INF){u=j;mindis=dist[j];//源点编号 v0// 选取不在放入 s 中s 中具有最小距离的顶点u}s[u]=1;// 顶点u 加入s 中for(j=0;j<n;j++)//修改不在s 中的顶点的距离if(s[j]==0)if(g.arcs[u][j].adj< INF&&dist[u]+g.arcs[u][j].adj<dist[j])// 修正 dist[i],path1[i]{dist[j]=dist[u]+g.arcs[u][j].adj;path1[j]=u;}}dispath(g,dist,path1,s,n,v0,po);//输出最短路径printf("\n 是否继续查询 ?(y|n):");scanf("%s",&ch);if(ch=='N'||ch=='n')break;}}void path(algraph g,int i,int j,int k)// 输出任意两个景点的所有路径{int s,ko;if(r[k]==j)// 找到一条路径{a++;//路径的条数值加1printf(" 第 %d 条 :",a);for(s=0;s<=k-1;s++)//输出一条路径{printf("%s",g.ver[r[s]].sight);printf("-->");}printf("%s\n",g.ver[r[s]].sight);}s=0;while(s<g.vexnum){if(s!=i)// 保证找到的是简单路径{ ko=r[k];if(g.arcs[ko][s].adj != INF && visited[s]==0)// 当 vk 与 vs 之间有边存在且vs 未被访问过{visited[s]=1;// 置访问标志位为 1,即已访问的r[k+1]=s;//将顶点 s 加入到 p 数组中path(g,i,j,k+1);// 递归调用之visited[s]=0;// 重置访问标志位为0,即未访问的,以便该顶点能被重新使用}}s++;}}void alldistance(algraph g)// 查询图中任意两个景点间的所有路径{int i,j,k,l;char sh;while(1){ sceneplace();// 输出景点的名称printf("\n 请选择出发景点的序号: ");scanf("%d",&i);printf("\n 请选择目地景点的序号: ");scanf("%d",&j);for(k=0;k<g.vexnum;k++)//g.vexnum 表示网中的顶点个数if(i==g.ver[k].num) i=k;// 在网中找到其编号与输入的出发景点的编号相同的顶点for( l=0;l<g.vexnum;l++)if(j==g.ver[l].num) j=l;// 在网中找到其编号与输入的目地景点的编号相同的顶点printf(" 从 %s 到 %s 的所有游览路径有:\n",g.ver[i].sight,g.ver[j].sight);/*输出出发景点和目地景点的名称 */r[0]=i;for(k=0;k<1;k++){ visited[i]=0;//初始化各顶点的访问标志位,即都为未访问过的a=0;// 初始化路径的条数path(g,i,j,0);//通过调用path 函数,找到从vi 到 vj 的所有路径并输出}printf(" 继续查询 ?(y|n):");scanf("%s",&sh);if(sh=='N'||sh=='n')break;}}void addscene(algraph g)// 增加有关景点和道路的信息{int j,i,b;char yi,mon[10],moh[100];while(1){ sceneplace();g.ver[p].num=p;printf(" 请输入新景点的名称: ");scanf("%s",mon);m.ver[p].sight=(char*)malloc(10);strcpy(m.ver[p].sight,mon);printf("\n 请输入新景点的相关简介: ");scanf("%s",moh);m.ver[p].description=(char*)malloc(100);strcpy(m.ver[p].description,moh);g.vexnum=g.vexnum+1;for(j=0;j<p;++j){m.arcs[p][j].adj=INF;m.arcs[j][p].adj=INF;}printf("\n请问有几个景点与该景点直接相通:");scanf("%d",&i);printf("\n请输入与该景点相通的景点的序号及它们之间的距离:");for(j=0;j<i;j++){ printf("\n 请输入第 %d 个景点的序号 :",j+1);scanf("%d",&b);printf("\n 请输入该两个景点之间的距离: ");scanf("%d",&g.arcs[p][b].adj);g.arcs[b][p].adj=g.arcs[p][b].adj;m.arcs[b][p].adj=g.arcs[p][b].adj;m.arcs[p][b].adj=m.arcs[b][p].adj;}printf(" 你输入的景点信息是:\n");printf("%d \t%s \t%s\n\n", g.ver[p].num,m.ver[p].sight,m.ver[p].description);g.arcnum=g.arcnum+i;p=p+1;m.vexnum=p;sceneplace();printf(" 是否继续添加 ?(y|n):");scanf("%s",&yi);if(yi=='N'||yi=='n')break;}}void delscene(algraph g)// 删除有关景点和道路的信息{ int i,j,k,l;char sh;while(1){sceneplace();printf("\n请输入你将要删除的景点序号:");scanf("%d",&i);for(k=0;k<g.vexnum;k++)//g.vexnum 表示网中的顶点个数if(i==g.ver[k].num) j=k; //在网中找到其编号与输入的出发景点的编号相同的顶点m.ver[j].sight=NULL;for(l=1;l<m.vexnum;++l){m.arcs[l][j].adj=INF;m.arcs[j][l].adj=INF;}m.vexnum=m.vexnum-1;sceneplace();printf(" 删除继续 ?(y|n):");scanf("%s",&sh);if(sh=='N'||sh=='n')break;}}void change(algraph g)//更新有关景点和道路的信息{ int i,b,j,th,fh,k;char sh,mon[10],moh[100];while(1){sceneplace();printf(" 请输入你将要修改信息的景点序号:");scanf("%d",&i);for(k=0;k<g.vexnum;k++)//g.vexnum 表示网中的顶点个数if(i==g.ver[k].num) j=k; //在网中找到其编号与输入的出发景点的编号相同的顶点printf("-----------------------------------------\n");printf("1. 景点名称 \t2.景点简介 \t3.道路消息 \n");printf("-----------------------------------------\n");printf("请输入你要进行的操作的序号:");scanf("%d",&th);switch(th){ case 1:printf(" 请输入新景点名称:");scanf("%s",mon);g.ver[j].sight=mon;m.ver[j].sight=g.ver[j].sight;break;case 2:printf(" 请输入新景点简介:");scanf("%s",moh);m.ver[j].description=(char*)malloc(100);strcpy(m.ver[j].description,moh);break;case 3:printf(" 请输入要修改的与该景点相通的景点的距离的序号个数:");scanf("%d\n",&fh);for(k=0;k<fh;k++){ printf(" 请输入要修改的第 %d 个景点的序号 :",j+1);scanf("%d\n",&b);printf(" 请重新输入该两个景点之间的距离:");scanf("%d",&m.arcs[j][b].adj);m.arcs[b][j].adj=m.arcs[j][b].adj;}}sceneplace();printf(" 继续修改 ?(y|n):");scanf("%s",&sh);if(sh=='N'||sh=='n')break;}}int main(){picture();printf("\n---------欢迎进入佛科院校园导航系统-------------\n");sceneplace();for(;;){switch(menu()){ case 1:checkscene(m);break;// 查询各个景点的信息case 2:Dijkstra(m);break;// 查询图中任意两个景点间的最短路径case 3:alldistance(m);break;// 查询图中任意两个景点间的所有路径case 4:addscene(m);break;// 增加有关景点和道路的信息case 5:delscene(m);break;//删除有关景点和道路的信息case 6:change(m);break;//更新有关景点和道路的信息case 7:printf(" 感谢你使用该系统!! 再见 !!\n");exit(0);default:printf(" 输入错误 !! 请重新输入你要进行的操作!!\n");}}}。
c语言校园导游系统课程设计
c语言校园导游系统课程设计一、课程目标知识目标:1. 理解C语言基础语法,掌握结构体、数组、指针等基本概念;2. 学会使用C语言进行基本的输入输出操作;3. 了解文件操作,掌握文件读写方法;4. 掌握C语言中的模块化编程,理解函数的定义与调用。
技能目标:1. 能够运用C语言编写简单的校园导游系统程序;2. 能够设计合理的程序结构,实现模块化编程;3. 能够使用结构体、数组等数据结构存储和处理信息;4. 能够利用文件操作保存和读取导游系统的数据。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习C语言的积极性;2. 培养学生团队合作精神,学会在团队中分享和交流;3. 培养学生解决问题的能力,增强面对困难的信心;4. 培养学生的创新意识,鼓励提出独特见解。
课程性质:本课程为实践性较强的学科,旨在让学生通过实际项目开发,掌握C语言编程技能。
学生特点:学生已具备一定的C语言基础,对编程有一定了解,但实际操作能力有待提高。
教学要求:结合学生特点,注重实践操作,以项目为导向,引导学生主动探究,培养编程兴趣和团队协作能力。
将课程目标分解为具体的学习成果,以便在教学设计和评估中逐一落实。
二、教学内容1. C语言基础语法复习:包括变量定义、数据类型、运算符、表达式、控制语句等;相关教材章节:第一章至第四章。
2. 结构体、数组与指针:理解结构体的定义和使用,掌握一维数组和二维数组的应用,了解指针的概念和操作;相关教材章节:第五章、第六章。
3. 函数与模块化编程:掌握函数的定义、调用、参数传递,了解模块化编程的原理;相关教材章节:第七章。
4. 文件操作:学习文件读写方法,掌握文件打开、关闭、读写等基本操作;相关教材章节:第十章。
5. 校园导游系统设计与实现:结合实际项目,运用所学知识设计并编写校园导游系统,包括景点信息展示、路径查询等功能;相关教材章节:综合应用。
教学进度安排:1. 第一周:C语言基础语法复习;2. 第二周:结构体、数组与指针;3. 第三周:函数与模块化编程;4. 第四周:文件操作;5. 第五周至第七周:校园导游系统设计与实现,分阶段完成项目。
c语言gps课程设计
c语言 gps课程设计一、教学目标本课程的目标是让学生掌握C语言在GPS领域的应用。
通过本课程的学习,学生将能够:1.理解GPS系统的基本原理和工作流程。
2.掌握C语言的基本语法和编程技巧。
3.能够使用C语言进行GPS数据的采集、解析和处理。
4.能够利用C语言实现简单的GPS导航功能。
二、教学内容本课程的教学内容主要包括以下几个部分:1.GPS系统的基本原理和工作流程。
2.C语言的基本语法和编程技巧。
3.GPS数据的采集、解析和处理。
4.GPS导航功能的实现。
三、教学方法为了达到本课程的教学目标,我们将采用多种教学方法,包括:1.讲授法:用于讲解GPS系统的基本原理和工作流程,以及C语言的基本语法和编程技巧。
2.案例分析法:通过分析具体的GPS应用案例,让学生了解GPS技术的实际应用。
3.实验法:通过实验让学生亲手操作,掌握GPS数据的采集、解析和处理方法,以及实现简单的导航功能。
四、教学资源为了支持本课程的教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用合适的C语言和GPS相关教材,为学生提供理论学习的参考。
2.参考书:提供相关的参考书籍,拓展学生的知识面。
3.多媒体资料:制作课件和视频资料,直观地展示GPS系统和C语言的相关内容。
4.实验设备:准备GPS接收器、计算机等实验设备,让学生进行实际操作。
五、教学评估为了全面、客观地评估学生在C语言GPS课程中的学习成果,我们将采取以下评估方式:1.平时表现:通过学生在课堂上的参与度、提问回答、小组讨论等表现来评估其学习态度和理解程度。
2.作业:布置与课程内容相关的编程作业,评估学生对C语言编程和GPS应用的掌握情况。
3.考试:定期进行理论知识考试和编程实践考试,全面评估学生的知识掌握和实际应用能力。
4.项目报告:要求学生完成一个GPS相关的编程项目,通过项目报告评估学生的综合应用能力。
六、教学安排本课程的教学安排如下:1.教学进度:按照教材和大纲进行,确保覆盖所有重要知识点。
C语言实现导航功能
C语⾔实现导航功能本⽂实例为⼤家分享了C语⾔实现导航功能的具体代码,供⼤家参考,具体内容如下#include<stdio.h>#include<string.h>#define NUM 25#define INFINITY 32767#define False 0#define True 1typedef struct{int number;//顶点的编号const char *sight;//顶点的信息} VertexType;//顶点的类型typedef struct{VertexType vex[NUM];//存放顶点信息int arcs[NUM][NUM];//邻接矩阵数组int vexnum;//顶点个数}MGraph;MGraph G;/**由传⼊的节点个数创建图**/void GreateMGraph(int v){G.vexnum=v;//传⼊节点个数for(int i=1;i<G.vexnum;i++){G.vex[i].number=i;}//配置顶点编号/**编辑顶点信息**/G.vex[0].sight="各景点名字";G.vex[1].sight="⼤门⼝";G.vex[2].sight="⾏政办公楼";G.vex[3].sight="北区教室实训中⼼";G.vex[4].sight="⼀号教学楼";G.vex[5].sight="⼆号教学楼";G.vex[6].sight="实验楼";G.vex[7].sight="三号教学楼";G.vex[8].sight="图书馆";G.vex[9].sight="开⽔房";G.vex[10].sight="超市";G.vex[11].sight="榴馨苑";G.vex[12].sight="洗浴中⼼";G.vex[13].sight="骊秀苑";G.vex[14].sight="综合楼";G.vex[15].sight="游泳池";G.vex[16].sight="主⽥径场";G.vex[17].sight="综合⽂体馆";/**先将所有顶点之间的距离设置为INFINITY**/for(int i=1;i<=G.vexnum;i++){for(int j=1;j<=G.vexnum;j++){G.arcs[i][j]=INFINITY;}}/**设置各顶点之间的距离**/G.arcs[1][2]=G.arcs[2][1]=255;G.arcs[1][4]=G.arcs[4][1]=501;G.arcs[1][5]=G.arcs[5][1]=535;G.arcs[1][6]=G.arcs[6][1]=705;G.arcs[1][7]=G.arcs[7][1]=722;G.arcs[1][8]=G.arcs[8][1]=790;G.arcs[2][3]=G.arcs[3][2]=530;G.arcs[2][4]=G.arcs[4][2]=450;G.arcs[2][5]=G.arcs[5][2]=484;G.arcs[2][6]=G.arcs[6][2]=654;G.arcs[2][7]=G.arcs[7][2]=663;G.arcs[2][8]=G.arcs[8][2]=748;G.arcs[3][8]=G.arcs[8][3]=1054;G.arcs[3][17]=G.arcs[17][3]=713;G.arcs[4][5]=G.arcs[5][4]=436;G.arcs[4][6]=G.arcs[6][4]=158;G.arcs[4][7]=G.arcs[7][4]=527;G.arcs[4][8]=G.arcs[8][4]=534;G.arcs[5][6]=G.arcs[6][5]=688;G.arcs[5][7]=G.arcs[7][5]=561;G.arcs[5][8]=G.arcs[8][5]=603;G.arcs[6][7]=G.arcs[7][6]=428;G.arcs[6][8]=G.arcs[8][6]=329;G.arcs[6][9]=G.arcs[9][6]=547;G.arcs[7][8]=G.arcs[8][7]=254;G.arcs[8][11]=G.arcs[11][8]=421;G.arcs[8][17]=G.arcs[17][8]=879;G.arcs[9][10]=G.arcs[10][9]=178;G.arcs[10][11]=G.arcs[11][10]=213;G.arcs[10][12]=G.arcs[12][10]=114;G.arcs[12][13]=G.arcs[13][12]=415;G.arcs[13][14]=G.arcs[14][13]=104;G.arcs[13][16]=G.arcs[16][13]=427;G.arcs[13][15]=G.arcs[15][13]=576;G.arcs[14][17]=G.arcs[17][14]=688;G.arcs[15][16]=G.arcs[16][15]=213;G.arcs[16][17]=G.arcs[17][16]=214;}/**展⽰校园地图**/void Map(){printf("\n\n\n");printf(" **************************河南财经政法⼤学*******************************"); printf("\n\n\n");printf(" ------------------------15游泳池 \n");printf(" | | \n");printf(" | | \n");printf(" 12洗浴中⼼----------------13骊绣苑---------------------16主⽥径场 \n");printf(" | | | \n");printf(" 10超市----11榴馨苑 14综合楼 | \n");printf(" | | |----------------------17综合⽂体馆 \n");printf(" 9开⽔房 | | \n");printf(" | ------------8图书馆--------------------------| \n");printf(" | | | \n");printf(" |-------------6实验楼------|--------7三号教学楼 | \n");printf(" | | | | \n");printf(" | | | | \n");printf(" 4⼀号教学楼------|--------5⼆号教学楼 | \n");printf(" | | \n");printf(" | | \n");printf(" |---2⾏政楼---------------3北区 \n");printf(" | \n");printf(" | \n");printf(" 1⼤门⼝ \n");}/**介绍校园各景点概况**/void Info(int sight_num,char data[][200]){if(sight_num==1)puts(data[1]);if(sight_num==2)puts(data[2]);if(sight_num==3)puts(data[3]);if(sight_num==4)puts(data[4]);if(sight_num==5)puts(data[5]);if(sight_num==6)puts(data[6]);if(sight_num==7)puts(data[7]);if(sight_num==8)puts(data[8]);if(sight_num==9)puts(data[9]);if(sight_num==10)puts(data[10]);if(sight_num==11)puts(data[11]);if(sight_num==12)puts(data[12]);if(sight_num==13)puts(data[13]);if(sight_num==14)puts(data[14]);if(sight_num==15)puts(data[15]);if(sight_num==16)puts(data[16]);if(sight_num==17)puts(data[17]);if(sight_num==18)puts(data[18]);if(sight_num==19)puts(data[19]);if(sight_num==20)puts(data[20]);if(sight_num==21)puts(data[21]);if(sight_num==22)puts(data[22]);if(sight_num==23)puts(data[23]);if(sight_num==24)puts(data[24]);if(sight_num==25)puts(data[25]);}/**开始菜单**/int Menu(){int c;Map();printf("\t\t欢迎使⽤河南财经政法⼤学导航图系统\n");printf("\t\t 1.查询地点路径 \n");printf("\t\t 2.地点信息简介 \n");printf("\t\t 3.退出 \n");printf(" **************************河南财经政法⼤学*******************************\n");printf("请输⼊您的选择:");scanf("%d",&c);return c;}/**地图的导航功能**//**输出任意两点之间的最短路径**/void guide_Dispath_two(MGraph g,int dist[],int path[],int S[],int v,int i)//v为起点,i为终点 {int apath[NUM],d=0; //存放⼀条最短的路径以及顶点个数(路径中终点为⾸) int j,k; //k⽤来存放终点的前⾯的节点if(S[i]==1 && i!=v){printf("从顶点%d到顶点%d的路径长度为:%d\t路径为:",v,i,dist[i]);apath[d]=i; //把终点放在数组中的⾸位k=path[i];if(k==-1)printf("⽆路径");/**利⽤循环将最短路径中的各节点存⼊apath数组**/else{while(k!=v){d++;apath[d]=k;k=path[k];}}d++; apath[d]=v; //将起点添加进去printf("%d",apath[d]); //输出起点for(j=d-1;j>=0;j--){printf("->%d",apath[j]); //循环输出最短路径中的各节点}}}//以编号为v的顶点为起点,w为终点void guide_Dijkstra(MGraph g,int v,int w){int dist[NUM],path[NUM];int S[NUM]; //S[i]=1表⽰顶点i在S中,S[i]=0表⽰顶点i在U中int MINdis,i,j,u;for(i=1;i<=g.vexnum;i++){dist[i]=g.arcs[v][i]; //距离初始化(距顶点v的距离)S[i]=0; //S[]置空if(g.arcs[v][i]<INFINITY) //路径初始化path[i]=v; //顶点v到顶点i有边时,置顶点i的前⼀个顶点为顶点velsepath[i]=-1; //顶点v到顶点i没边时,置顶点i的前⼀个顶点为-1}S[v]=1;path[v]=0; //源点编号v放⼊S中for(i=1;i<=g.vexnum-1;i++) //循环直到所有顶点的最短路径都求出{MINdis=INFINITY; //MINdis置最⼤长度初值for(j=1;j<=g.vexnum;j++) //选取不在S中(即U中)且具有最⼩最短路径长度的顶点u {if(S[j]==0 && dist[j]<MINdis){u=j;MINdis=dist[j];}}S[u]=1; //顶点u加⼊S中for(j=1;j<=g.vexnum;j++) //修改不在S中(即U中)的顶点的最短路径{if(S[j]==0)if(g.arcs[u][j]<INFINITY && dist[u]+g.arcs[u][j]<dist[j]){dist[j]=dist[u]+g.arcs[u][j];path[j]=u;}}}guide_Dispath_two(g,dist,path,S,v,w); //输出最短路径}/**将⽂件中的景点信息载⼊数组**/void load_sight_data(char data[][200],MGraph g)FILE *fp;int i;if((fp=fopen("C:\\Users\\admin\\Desktop\\导航\\sight_data.txt","r"))==NULL){printf("File can't open");return;}for(i=1;i<=g.vexnum;i++){fgets(data[i],200,fp);}fclose(fp);}/**修改景点信息**/void change_sight_data(char user_change_data[200],MGraph g){FILE *fin,*ftp;int i;fin=fopen("C:\\Users\\admin\\Desktop\\导航\\sight_data.txt","r");//读打开原⽂件ftp=fopen("C:\\Users\\admin\\Desktop\\导航\\temp.txt","w");//写打开临时⽂件if(fin==NULL || ftp==NULL){printf("打开⽂件失败");return;}for(i=1;i<=g.vexnum;i++){char change_data[200];fgets(change_data,200,fin);if(change_data[0]==user_change_data[0] && change_data[1]==user_change_data[1]){fputs(user_change_data,ftp);//⽽⽤fputs直接将user_change_data直接写⼊⽂件没有换⾏符,需要添加换⾏符 fprintf(ftp,"\n");}else{fputs(change_data,ftp);//在使⽤fgets函数得到change_data数组时换⾏符会被保存,此处不需要加换⾏符}}fclose(fin);fclose(ftp);remove("C:\\Users\\admin\\Desktop\\导航\\sight_data.txt");rename("C:\\Users\\admin\\Desktop\\导航\\temp.txt","C:\\Users\\admin\\Desktop\\导航\\sight_data.txt");}/**增添景点到⽂件内**/void add_sight_data(char change_data[200],MGraph g){FILE *fp;if((fp=fopen("C:\\Users\\admin\\Desktop\\导航\\sight_data.txt","a"))==NULL){printf("File can't open");return;}fprintf(fp,"\n");fputs(change_data,fp);fprintf(fp,"\n");rewind(fp);fclose(fp);}/**修改密码,保存到密码⽂件中**/void change_password(char password[30]){FILE *fp;fp=fopen("C:\\Users\\admin\\Desktop\\导航\\password_temp.txt","w");if(fp==NULL){printf("打开⽂件失败");return;}fputs(password,fp);fclose(fp);remove("C:\\Users\\admin\\Desktop\\导航\\password.txt");rename("C:\\Users\\admin\\Desktop\\导航\\password_temp.txt","C:\\Users\\admin\\Desktop\\导航\\password.txt"); }/**将密码装进密码数组中**/void load_password(char password[30]){FILE *fp;if((fp=fopen("C:\\Users\\admin\\Desktop\\导航\\password.txt","r"))==NULL){printf("File can't open");return;}fgets(password,30,fp);fclose(fp);}int admin_Menu(){int c;printf("**************管理系统****************\n");printf("\t\t欢迎使⽤管理员操作系统\n");printf("1.修改登录密码\n");printf("2.添加新景点\n");printf("3.修改景点信息\n");printf("4.新建景点路径\n");printf("5.退出\n");printf("**************************************\n");printf("请输⼊您的选择:");scanf("%d",&c);return c;}int main(){GreateMGraph(17);char sight_data[NUM][200];char password[30];int choice;int Menu_choice;int start,end;do{printf("欢迎使⽤河南财经政法⼤学导航系统\n");printf("请问您的⾝份是:1.管理员 2.游客 3.退出\n");scanf("%d",&choice);if(choice==2){do{Menu_choice=Menu();if(Menu_choice==1){printf("请输⼊您现在的位置:");scanf("%d",&start);printf("\n");printf("请输⼊您想要到达的位置:");scanf("%d",&end);guide_Dijkstra(G,start,end);}if(Menu_choice==2){int sight_num;load_sight_data(sight_data,G);printf("请输⼊您要查询的景点编号:");scanf("%d",&sight_num);Info(sight_num,sight_data);}if(Menu_choice==3){break;}}while(1);}if(choice==1){getchar();load_password(password);char user_input_psw[30];printf("请输⼊管理员登录密码:");gets(user_input_psw);if(strcmp(password,user_input_psw)==0){printf("密码正确!\n");int admin_choice;do{admin_choice=admin_Menu();if(admin_choice==1){getchar();char user_change_psw[30];printf("请输⼊新的密码:\n");gets(user_change_psw);change_password(user_change_psw);load_password(password);printf("密码修改成功!\n");}if(admin_choice==2){getchar();char uadd_sight_data[200];printf("请输⼊您要添加的景点以及该景点信息:\n"); gets(uadd_sight_data);add_sight_data(uadd_sight_data,G);load_sight_data(sight_data,G);G.vexnum++;char *p;p=strtok(uadd_sight_data," ");p=strtok(NULL," ");G.vex[G.vexnum].number=G.vexnum;G.vex[G.vexnum].sight=p;printf("添加成功!\n");}if(admin_choice==3){getchar();char user_sight_data[200];printf("请输⼊您要修改的景点信息:\n");gets(user_sight_data);change_sight_data(user_sight_data,G);load_sight_data(sight_data,G);printf("修改成功!\n");}if(admin_choice==4){int new_start,new_end;int length;printf("请输⼊您想要在哪两点之间添加路线:\n"); printf("起点:");scanf("%d",&new_start);printf("\n");printf("终点:");scanf("%d",&new_end);printf("请输⼊两顶点之间的距离:\n");scanf("%d",&length);printf("\n");G.arcs[new_start][new_end]=G.arcs[new_end][new_start]=length;printf("路线添加成功!\n");}if(admin_choice==5){break;}}while(1);}if(strcmp(password,user_input_psw)!=0){printf("密码错误! \n");}}if(choice==3){break;}}while(1);return 0;}password.txt⽂件⽤来存放密码sight_data.txt⽂件⽤来存放景点信息:1 ⼤门⼝出⼊学校的必经之路2 ⾏政办公楼学校最⽓派的建筑之⼀3 北区⾦⼯实训中⼼,还有⼏排具有历史沧桑感的教室4 ⼀号教学楼主要有⼩教室,⽤来上英语课和专业课5 ⼆号教学楼主要⽤来上专业课,五六楼有语⾳室6 实验楼学⽣上各种实验课的地点7 三号教学楼有⼤教室,⼀般安排⽤来上基础课8 图书馆学校为同学们提供学习和⾃习的地⽅,也是学校的藏书最多的地⽅9 开⽔房学校唯⼀⼀个为同学提供热⽔的地点10 超市学校唯⼀⼀个中型超市,在这⾥可以买到各种⽣活⽤品11 榴馨苑环境较好的学⽣⾷堂,这⾥因为离⼥⽣公寓较近,所以这个⾷堂⼥⽣较多12 洗浴中⼼环境还⾏就是规模太⼩,每天都是供不应求13 骊秀苑主要经营⾯⾷。
基于C的智能校园管理系统设计与实现
基于C的智能校园管理系统设计与实现智能校园管理系统是一种利用现代信息技术手段,对学校内部各项管理工作进行智能化、自动化处理的系统。
本文将介绍基于C语言的智能校园管理系统的设计与实现,包括系统的整体架构、功能模块设计、关键技术实现等内容。
一、系统整体架构设计智能校园管理系统主要包括学生信息管理、教师信息管理、课程管理、考勤管理、成绩管理等功能模块。
系统采用C语言作为开发语言,具有良好的跨平台性和高效性,适合用于开发中小型应用程序。
在系统整体架构设计上,可以采用模块化设计思想,将各个功能模块分解为独立的子模块,通过接口进行交互。
同时,可以采用面向对象的编程思想,定义学生、教师、课程等对象,并封装其属性和方法,提高代码的可维护性和扩展性。
二、功能模块设计1. 学生信息管理模块学生信息管理模块包括学生基本信息录入、修改、查询和删除功能。
可以通过C语言中的结构体来定义学生对象,包括学号、姓名、性别、年龄等属性,并实现相应的操作函数。
2. 教师信息管理模块教师信息管理模块包括教师基本信息录入、修改、查询和删除功能。
同样可以通过结构体定义教师对象,并实现相关操作函数。
3. 课程管理模块课程管理模块包括课程信息录入、修改、查询和删除功能。
可以定义课程对象,包括课程编号、名称、学分等属性,并实现相应操作函数。
4. 考勤管理模块考勤管理模块包括学生考勤记录的录入和查询功能。
可以通过文件操作实现考勤记录的存储和读取,保证数据的持久性。
5. 成绩管理模块成绩管理模块包括学生成绩录入、修改、查询和统计功能。
可以定义成绩对象,包括学号、课程编号、成绩等属性,并实现相关操作函数。
三、关键技术实现1. 文件操作通过C语言中的文件操作函数,实现对学生信息、教师信息、课程信息、考勤记录和成绩记录的读写操作,保证数据的可靠性和持久性。
2. 数据结构利用C语言中的数组、链表等数据结构,实现对学生信息、教师信息、课程信息等数据的存储和管理,提高系统的效率和灵活性。
校园导航系统(数据结构大作业要求)
校园导航问题【问题描述】以我校为例,设计一个校园导航系统,主要为来访的客人提供信息查询。
系统有两类登陆账号,一类是游客,使用该系统方便校内路线查询;一类是管理员,可以使用该系统查询校内路线,可对校园景点路线可编辑。
【需求分析】设计学校的平面图,至少包括10个以上景点(场所),每两个景点间可以有不同道路,且路长也可能不同,找出在游人所在景点到其他景点的最短路径,或游人输入的任意两个景点的最短路径。
要求:(1)以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,路径权重为路径长度。
(2)为游人提供任意景点相关信息查询。
(3)为游人提供任意景点的问路查询,即任意两个景点之间的最短路径。
实现提示:一般情况下,校园道路是双向通行的,可设计校园平面图是一个无向图。
顶点和边均含有相关信息。
选做内容:(1)提供图的编辑功能:增删景点;增删道路;修改已有信息等。
(2)校园导游图的仿真界面。
【概要设计】1. 抽象数据类型定义:(1)景点顶点名称代号顶点信息简介Typedef struct{Int num;Char name[100];Char features[200];} VertexType;(2)图的存储结构:Typedef int EdgeType;Typedef struct{VertexType vexs[MaxVertexNum];EdgeType edges[MaxVertexNum][MaxVertexNum];Int n, e;} MGraph;2 主要功能模块(1)创建图的邻接矩阵存储结构void create( Graph *G );(2)浏览图中任一景点介绍VertexType GetVex(Graph *G, int v);(3)修改景点信息void PutVertex(Grahp *G, int v);(4)增加景点信息void InsertVertex(Graph*G, VertexType v);(5)删除景点信息void DeleteVertex(Graph *G, VertexType v);(6)增加道路void InsertArc(Graph *G,int v, int w);(7)删除道路void DeleteArc(Graph*G ,int v,int w);(8)查找某一景点到其他景点的最短路径void ShortestPath(Graph *G, int P[ ], int D[ ]); (9)查找任一两个景点之间的最短路径。
c++课设校园寻径系统可视化界面
c++课设校园寻径系统可视化界面
C++课程设计校园寻径系统可视化界面是一个用C++编写的程序,旨在为用户提供一个可视化的界面,以便他们可以在校园内寻找最短路径。
下面是该系统的一些重要功能和实现方式的解释。
1. 地图显示和交互功能:
- 程序可以读取校园地图的数据,并在可视化界面上显示出来。
地图可以用图形表示,包括建筑物、道路、行人通道等。
- 用户可以通过鼠标或键盘与地图进行交互,例如缩放、拖动和选择建筑物等。
2. 路径规划算法:
- 系统应该实现一种或多种最短路径算法,例如Dijkstra算法或A*算法,以便根据用户输入的起点和终点确定最短路径。
- 算法将根据地图上的道路网络和建筑物位置计算出最短路径,并将其在可视化界面上显示出来。
3. 搜索和导航功能:
- 用户可以输入起点和终点的位置,系统将自动计算最短路径并显示在地图上。
- 用户还可以通过搜索功能查找特定建筑物或地点,并将其高亮显示在地图
上,以便更方便地导航。
4. 数据管理和持久化:
- 系统需要能够管理地图数据和用户输入的起点和终点信息。
这些数据可以通过文件读写或数据库来存储和获取,以实现数据的持久化。
总之,C++课设校园寻径系统可视化界面是一个基于C++编写的程序,通过可视化界面展示校园地图,并提供路径规划、搜索和导航功能。
该系统需要实现地图显示和交互、路径规划算法、搜索和导航功能以及数据管理和持久化等功能。
C语言校园导航系统
课程设计报告课程设计题目:校园导航专业:计算机科学与技术班级:1230701学号:2学生姓名:胡玖龙指导教师:刘志锋2014年6月19日1 / 17实验题目:校园导航系统实验时间:2014/6/16-2014/6/19实验地点:软件楼402实验目的:综合运用所学的数据结构知识解决一个关于学校导航系统的问题,侧重对图的相关内容特别是求最短路径的应用,使得能进一步熟悉掌握数据结构的基础知识,进一步提升自己的解决问题和编程调试能力,为后续专业课程的学习打下基础。
实验要求:设计学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从某个场所到达另一场所的最佳路径。
求最短路径用Dijkstra或Floryd算法实现。
2 / 17实现思路:先分析需求,本程序的主要目的是提供本学校地点的路径查询,并提供其他各种信息查询服务。
需求:1、提供校园平面图,使得能直观的了解学校。
2、提供地点信息查询,为各地点提供简短的介绍。
3、提供任意两地点间最短路径查询,并计算总路程。
根据要求,先将校园平面图信息抽象为无向网,用邻接矩阵存储。
需求1:定义map()函数,功能是输出校园的平面图。
可简单的通过printf()函数实现。
需求2:定义Query()函数,功能是查询输出地点信息。
可直接输出无向网中的顶点信息。
需求3:根据输入的起点和终点,运用Floryd算法,求出最短路径,计算路径长度并输出。
考虑到使用者并不一定需要使用所有的功能,所以开始时需要一个选择菜单。
定义Menu()函数,功能是提供功能选择。
输入1,选择查看学校平面图输入2,选择查看各地点信息输入3,选择查找两地点间最短路径输入4,退出程序3 / 17总流程图:4 / 17平面图模块流程图:地点信息查询模块流程图:5 / 17求最短路径模块流程图:实现过程:从学校的平面图中选取出12个比较重要的地点,将其抽象成无向带权网并用邻接矩阵来表示。
华科控制C语言课程设计交通模拟导航系统
C语言课程设计报告题目:交通模拟导航系统指导老师:周纯洁周凯波何顶新彭刚院系:控制年级:11 级小组成员:翔羽目录引言 (3)1.1背景 (3)1.2参考资料 (4)需求分析 (4)2.1需求分析 (4)2.2运行环境 (6)系统设计 (7)3.1模块划分 (7)3.2功能简介 (7)3.3时间安排 (8)3.4程序简要流程图 (9)3.5核心算法 (10)源代码 (11)引言1.1背景车载导航仪:随着汽车的普及和道路的建设,城际间的经济往来更加,活动的区域也越来越大;为了提高生活质量,大量的休闲活动、探险活动的举行使我们并不局限在自己认识的一小块区域中,不认识道路,找不到目的地的情况也屡有发生,就此,车载GPS导航仪将会以合适的价位走入车主的世界,成为车上的基本装备。
车载GPS导航仪解决方案,其实是最灵活和最复杂的,车载GPS导航仪有很多种解决方案可以满足车载的需要。
GPS汽车导航是将GPS和地理信息系统、现代通讯技术综合在一起,研制成的一种新型汽车导航定位设备,具备监控、调度、报警、遥控熄火和遥控断油、自动存档、系统自检等功能。
它可将汽车的任何动态位置随时准确无误地显示在仪器的电子地图上。
导航仪的电子地图自动跟踪显示汽车当前位置及周边情况,驾驶员可随时在导航仪上查询周边一定半径地区内的地理信息。
交通模拟导航系统能够简单地模拟GPS汽车导航系统。
在建立一个简单的小型化城市地图的基础上,能对该城市内指定的车辆提供导航。
1.2参考资料1.王士元. C高级实用程序设计. 北京: 清华大学出版社. 19962.周纯杰,刘正林等. 标准C语言程序及应用. 武汉: 华中科技大学出版社. 20053.姚远. 高级C语言程序设计技巧与实例. 北京: 机械工业出版社,19954.陈清华, 朱红. C语言课程设计. 南京: 东南大学出版社, 20035.潭浩强. C语言程序设计. 北京: 清华大学出版社, 20006.刘振安,苏仕华. C语言图形设计北京:人民邮电出版社,19957.潘建华,卫跃文. C语言实用软件界面设计西安:西安电子科大出版社,19958.鸿健编译. c语言高级程序员编程指南北京:北京希望电脑公司公司,1991 好友指导:彭军才程攀需求分析2.1需求分析由于所具有的全天候、高精度和自动测量的特点,作为先进的测量手段和新的生产力,已经融入了国民经济建设、国防建设和社会发展的各个应用领域。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告课程设计题目:校园导航专业:计算机科学与技术班级:1230701学号:2学生姓名:胡玖龙指导教师:刘志锋2014年6月19日1 / 17实验题目:校园导航系统实验时间:2014/6/16-2014/6/19实验地点:软件楼402实验目的:综合运用所学的数据结构知识解决一个关于学校导航系统的问题,侧重对图的相关内容特别是求最短路径的应用,使得能进一步熟悉掌握数据结构的基础知识,进一步提升自己的解决问题和编程调试能力,为后续专业课程的学习打下基础。
实验要求:设计学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从某个场所到达另一场所的最佳路径。
求最短路径用Dijkstra或Floryd算法实现。
2 / 17实现思路:先分析需求,本程序的主要目的是提供本学校地点的路径查询,并提供其他各种信息查询服务。
需求:1、提供校园平面图,使得能直观的了解学校。
2、提供地点信息查询,为各地点提供简短的介绍。
3、提供任意两地点间最短路径查询,并计算总路程。
根据要求,先将校园平面图信息抽象为无向网,用邻接矩阵存储。
需求1:定义map()函数,功能是输出校园的平面图。
可简单的通过printf()函数实现。
需求2:定义Query()函数,功能是查询输出地点信息。
可直接输出无向网中的顶点信息。
需求3:根据输入的起点和终点,运用Floryd算法,求出最短路径,计算路径长度并输出。
考虑到使用者并不一定需要使用所有的功能,所以开始时需要一个选择菜单。
定义Menu()函数,功能是提供功能选择。
输入1,选择查看学校平面图输入2,选择查看各地点信息输入3,选择查找两地点间最短路径输入4,退出程序3 / 17总流程图:4 / 17平面图模块流程图:地点信息查询模块流程图:5 / 17求最短路径模块流程图:实现过程:从学校的平面图中选取出12个比较重要的地点,将其抽象成无向带权网并用邻接矩阵来表示。
以图中的顶点代表地点,存放地点名称、编号、简介等信息,权值代表两地之间的距离。
最短路径用Floyd算法求出。
地点间距离用地图软件测出。
6 / 17将得到的信息绘制成无向网:程序用到的函数:MGraph InitGraph(MGraph &G) //构造校园图void Menu() //初始菜单void Map() //校园平面图V oid Number() //输出地点编号,在其他操作中会用到void Query(MGraph G) //查找函数,可以输出地点名称和介绍void floyd(MGraph G) //floyd算法void shortestPath_Floyd(MGraph &G) //求最短路径void main(); //主函数(1)图的存储结构:typedef struct{char name[30]; //地点名称int num; //地点编号char introduction[200]; //地点介绍1.体育馆2.北区宿舍3.图书馆4.樱花广场5.三教6.东门7.青春广场8.西区食堂9.西区宿舍10.南区食堂11.南区宿舍12.南门7 / 17}VertexType;typedef struct{VertexType vexs[MAX]; //地点int arcs[MAX][MAX]; //存储图的邻接矩阵int vexNum,arcNum; //地点数,路径数}MGraph;(2)构造校园图:MGraph InitGraph(MGraph &G) //构造校园图{int i,j;G.vexNum=12;G.arcNum=16;for(i=1;i<=G.vexNum;i++)G.vexs[i].num=i;strcpy(G.vexs[1].name,"体育馆");strcpy(G.vexs[1].introduction,"有田径场及各种体育活动场馆");strcpy(G.vexs[2].name,"北区宿舍");strcpy(G.vexs[2].introduction,"学校北区的宿舍");strcpy(G.vexs[3].name,"图书馆");strcpy(G.vexs[3].introduction,"有着丰富的藏书,是学习、自习的好地方");strcpy(G.vexs[4].name,"樱花广场");strcpy(G.vexs[4].introduction,"有很多樱花树,适合早读");strcpy(G.vexs[5].name,"三教");strcpy(G.vexs[5].introduction,"学校的教学区");strcpy(G.vexs[6].name,"东门");strcpy(G.vexs[6].introduction,"学校的正门");strcpy(G.vexs[7].name,"青春广场");strcpy(G.vexs[7].introduction,"经常有各种各样的社团活动");strcpy(G.vexs[8].name,"西区食堂");strcpy(G.vexs[8].introduction,"西区的食堂,饭菜很好吃");strcpy(G.vexs[9].name,"西区宿舍");strcpy(G.vexs[9].introduction,"学校西区的宿舍,既有男生宿舍也有女生宿舍");strcpy(G.vexs[10].name,"南区食堂");strcpy(G.vexs[10].introduction,"南区食堂,饭菜很好吃");strcpy(G.vexs[11].name,"南区宿舍");strcpy(G.vexs[11].introduction,"学校南区的宿舍,全是男生宿舍");strcpy(G.vexs[12].name,"南门");strcpy(G.vexs[12].introduction,"学校的南门,比较小");for(i=0;i<G.vexNum;i++)8 / 17for(j=0;j<G.vexNum;j++){G.arcs[i][j]=INFINITY; //不存在的路径长度设为无穷大G.arcs[0][1]=170;G.arcs[1][2]=200;G.arcs[1][4]=150;G.arcs[2][3]=30;G.arcs[2][4]=150;G.arcs[2][5]=300;G.arcs[3][4]=30;G.arcs[4][6]=170;G.arcs[4][7]=160;G.arcs[5][6]=500;G.arcs[5][10]=570;G.arcs[6][7]=100;G.arcs[7][8]=160;G.arcs[8][9]=180;G.arcs[9][10]=100;G.arcs[10][11]=20;}for(i=0;i<G.vexNum;i++) //无向网的邻接矩阵关于对角线对称for(j=0;j<G.vexNum;j++)G.arcs[j][i]=G.arcs[i][j];return G;}(3)菜单模块:void Menu() //初始菜单{printf("\n\n 东华理工大学校园导游系统\n");printf(" ┏━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf(" ┃编号┃功能┃\n");printf(" ┣━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf(" ┃1 ┃查看学校平面图┃\n");printf(" ┃2 ┃查看地点信息┃\n");printf(" ┃3 ┃查找两地点间最短路径┃\n");printf(" ┃4 ┃退出┃\n");printf(" ┗━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");printf("输入你的选择:");}9 / 17(4)平面图模块:void Map() //校园平面图{printf("\n");printf(" ┏━━━━━━━┓\n");printf(" ┃┃ \n");printf(" ┃ 1.体育馆┃\n");printf(" ┃┃\n");printf(" ┗━━━┳━━━┛\n");printf(" ┃\n");printf(" ┏━━━┻━━━┓\n");printf(" ┃┃\n");printf(" ┏━━━━━━━━━┳━━━┫ 2.北区宿舍┣━━━┓\n");printf(" ┃┃┃┃┃\n");printf(" ┃┃┗━━━━━━━┛┃\n");printf(" ┃┏━━━━━━━┓┃┃\n");printf(" ┃┃┃┃┃\n");printf(" ┏━━┓┃┃┃┃┣┓\n");printf(" ┃┣╋┫ 3.图书馆┣┫┃┃6. \n");printf(" ┃4. ┃┃┃┃┃┃┃东\n");printf(" ┃樱┃┃┃┃┣━━━━━━━━━━━━━━━┫┃门\n");printf(" ┃花┃┃┗━━━━━━━┛┃┃┃\n");printf(" ┃广┃┃┏━━━━━━━┓┃┃┃\n");printf(" ┃场┃┃┃┃┃┣┛\n");printf(" ┃┃┃┃┃┃┃\n");printf(" ┃┣┻┫ 5.三教┣┫┃\n");printf(" ┗━━┛┃┃┃┃\n");printf(" ┃┃┃┃\n");printf(" ┗━━━━━━━┛┣━━━━┳━━━━━━━━━━┫\n");printf(" ┃┏━━━┻━━━┓┃\n");printf(" ┏━━━━━━━┓┃┃┃┃\n");printf(" ┃┃┃┃┃┃\n");printf(" ┃┃┃┃7.青春广场┃┃\n");printf(" ┃8.西区食堂┣╋┫┃┃\n");printf(" ┃┃┃┃┃┃\n");printf(" ┃┃┃┃┃┃\n");printf(" ┗━━━━━━━┛┃┗━━━━━━━┛┃\n");printf(" ┃┃\n");printf(" ┏━━━━━━━┓┃┃\n");printf(" ┃┃┃┃\n");printf(" ┃┃┃┃\n");printf(" ┃9. ┃┃┃\n");printf(" ┃西┃┃┃\n");printf(" ┃区┣┫┃\n");10 / 17printf(" ┃宿┃┃┃\n");printf(" ┃舍┃┃┃\n");printf(" ┃┃┃┃\n");printf(" ┃┃┃┃\n");printf(" ┃┃┃┃\n");printf(" ┗━━━━━━━┛┃┃\n");printf(" ┃┃\n");printf(" ┃┏━━━━━━━━━━━┓┃\n");printf(" ┏━━━━━━━┓┃┃┃┃\n");printf(" ┃┃┃┃┃┃\n");printf(" ┃┃┃┃┃┏┻┓\n");printf(" ┃10.南区食堂┣┻┫11.南区宿舍┣━┫┃\n");printf(" ┃┃┃┃┗━┛\n");printf(" ┃┃┃┃12.南门\n");printf(" ┗━━━━━━━┛┃┃\n");printf(" ┗━━━━━━━━━━━┛\n");printf("请按任意键继续!");getch();}(5)地点编号函数:V oid Number() //输出地点编号,在其他操作中会用到{int v;printf("\n\n┏━━┳━━━━━━┓\n");printf("┃编号┃地点名称┃\n");for(v=1;v<=G.vexNum;v++){printf("┃%-4d┃%-12s┃\n",G.vexs[v].num,G.vexs[v].name);}printf("┗━━┻━━━━━━┛\n");}(6)地点信息查询模块:void Query(MGraph G) //查找函数,可以输出地点名称和介绍{int k,i=1;Number();while(i){printf("请输入要查询的地点编号,输入0退出:");scanf("%d",&k);if(k<0||k>G.vexNum){printf("地点编号不存在!请重新输入地点编号:");scanf("%d",&k);}printf("%d.%s %-62s\n\n",G.vexs[k].num,G.vexs[k].name,G.vexs[k].introduction);if(k==0)i=0;}}(7)Floyd算法求最短路径:int D[MAX][MAX],Path[MAX][MAX];void floyd(MGraph G) //Floyd算法{int i,j,k;for(i=0;i<G.vexNum;i++)for(j=0;j<G.vexNum;j++){D[i][j]=G.arcs[i][j];if(i!=j&&G.arcs[i][j]<INFINITY) Path[i][j]=i;else Path[i][j]=-1;}for(k=0;k<G.vexNum;k++)for(i=0;i<G.vexNum;i++)for(j=0;j<G.vexNum;j++)if(D[i][k]+D[k][j]<D[i][j]){D[i][j]=D[i][k]+D[k][j];Path[i][j]=Path[k][j];}}void shortestPath_Floyd(MGraph &G) //求最短路径{int i,j,p,m,k;int b[100];floyd(G);Number();do{printf("请输入起点编号:");scanf("%d",&i);printf("请输入终点编号:");scanf("%d",&j);if(i==j)printf("起点和终点一样,请重新输入\n");else if(i>12||i<0||j>12||j<0)printf("输入错误,请重新输入\n");}while(i==j||i>12||i<0||j>12||j<0);i=i-1;j=j-1;if(i!=j){printf("起点:%s,终点:%s\n最短路径:",G.vexs[i+1].name,G.vexs[j+1].name);p=Path[i][j];if(p==-1) printf("empty\n");else{m=0;b[m++]=j;while(p!=i){b[m++]=p; p=Path[i][p];}b[m]=i;for(k=m;k>0;k--) printf("%s->",G.vexs[b[k]+1].name);printf("%s,路程为%d米\n",G.vexs[b[0]+1].name,D[i][j]);}}printf("\n\n按任意键继续\n\n");getch();}(8)主函数:void main() //主函数{InitGraph(G);int i;Menu(G);scanf("%d",&i); //输入选择while(i!=4) //输入4,则退出{switch(i){ //每次选择后会调用清屏函数,使界面美观case 1:system("CLS");Map();Menu(G);break; //若输入1,则输出平面图case 2:system("CLS");Query(G);Menu(G);break; //若输入2,则查找并输出地点名称和介绍case 3:system("CLS");shortestPath_Floyd(G);Menu(G);break; //若输入3,则找出最短路径case 4:;break;default:printf("输入错误,清重新输入\n");}scanf("%d",&i);}}运行结果:图1:初始菜单,输入1查看学校平面图,输入2查看地点信息,输入3查找两地点间最短路径,输入4退出。