C语言校园导游系统课程设计
c语言课程设计校园导航
![c语言课程设计校园导航](https://img.taocdn.com/s3/m/4eb6c8547dd184254b35eefdc8d376eeaeaa17aa.png)
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语言基础语法及控制结构第二周:数组与字符串操作第三周:函数与模块化编程第四周:结构体与文件操作第五周:校园导航系统设计与实现(含小组讨论、编程实践与调试)教学内容科学、系统,符合教学实际。
c语言课程设计校园导航
![c语言课程设计校园导航](https://img.taocdn.com/s3/m/c0e2e74fec630b1c59eef8c75fbfc77da269973d.png)
c语言课程设计校园导航一、教学目标本课程的目标是使学生掌握C语言编程的基本知识和技能,能够运用C语言进行简单的校园导航系统开发。
通过本课程的学习,学生将能够理解C语言的基本语法、数据类型、运算符、控制结构等,并能够运用这些知识编写简单的程序。
同时,学生将能够通过实践,提高问题解决能力和团队合作能力。
二、教学内容教学内容将按照C语言的基本语法和编程技巧进行。
首先,将介绍C语言的基本概念和环境配置,然后逐步深入到数据类型、运算符、控制结构等核心内容。
接下来,将讲解函数、数组和指针等高级概念,最后通过实例讲解面向对象编程的基本思想。
三、教学方法为了提高学生的学习兴趣和主动性,将采用多种教学方法。
首先,通过讲授法,为学生提供C语言的基本概念和理论知识。
然后,通过讨论法,引导学生主动思考和探索问题。
接下来,通过案例分析法,让学生通过分析实际案例,掌握C语言的编程技巧。
最后,通过实验法,让学生通过动手实践,巩固所学知识。
四、教学资源为了支持教学内容和教学方法的实施,将选择和准备适当的教学资源。
教材方面,将选择经典的C语言教材,如《C程序设计语言》。
参考书方面,将推荐学生阅读一些优秀的C语言编程书籍,如《C Primer Plus》。
多媒体资料方面,将制作一些教学视频和演示文稿,以帮助学生更好地理解C语言的编程原理。
实验设备方面,将准备计算机和网络设施,以供学生进行编程实验和实践。
五、教学评估本课程的评估方式将包括平时表现、作业和考试三个部分。
平时表现将根据学生在课堂上的参与度、提问和回答问题的积极性等进行评估。
作业将根据学生的编程实践能力和解决问题的能力进行评估。
考试将包括笔试和上机考试两部分,笔试主要测试学生对C语言理论知识的理解和掌握,上机考试主要测试学生的编程能力和实际操作能力。
六、教学安排本课程的教学进度将按照教材的章节进行安排,每个章节将安排2-3次的课堂讲授和实践操作。
教学时间将安排在每周的周二和周四下午,每次课2小时。
(校园导游系统)c语言
![(校园导游系统)c语言](https://img.taocdn.com/s3/m/5e11f978ae1ffc4ffe4733687e21af45b307fe6c.png)
校园导游咨询一、目的1、对自己学过的知识进一步的加深理解,对数据构造的算法思想要有更深的理解。
2、通过课程设计,学会通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵敏运用并深化理解典型数据构造在软件开发中的应用。
3、学会综合运用数据构造课程中学到的数据构造和算法,如图的存储构造,数组,迪杰斯特拉算法和Floyd算法等自行实现一个较为完好的应用系统的设计与开发。
二、需求分析1、功能需求〔1〕在菜单中显示校园景点地图。
〔2〕可以查找任意景点的途径。
〔3〕可以自动查找用户键入始点景点和终点景点的最短途径。
〔4〕用户可以查询任意景点的景点信息。
2、输入根据菜单提示键入相应的数字键已完成相应的操作。
例如:在菜单界面中键入数字3,再根据系统提示键入始点和终点对应的编号,系统便会输出相应的途径。
3、输出程序将根据用户键入的数字键,调用相应函数,完成查找过程,并将结果输出到屏幕。
三、概要设计1、变量定义typedef struct //图中顶点表示主要景点,存放景点的编号、名称、简介{char name[30];int num;char introduction[100];//简介}infotype;typedef struct ArCell //定义构造体变量来储存途径长度{int adj; //途径长度}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUMtypedef struct //景点信息的构造体定义:{infotype vexs[MAX_VERTEX_NUM];AdjMatrix arcs;int vexnum,arcnum;}MGraph;MGraph b;2.函数模块void cmd( );//菜单项选择择模块MGraph InitGraph( );//赋值函数void Menu(void);//菜单函数void Browser(MGraph *G);//阅读景点信息的函数void ShortestPath_DIJ(MGraph * G);//迪杰斯特拉算法void Floyd(MGraph *G);//Floyd 算法void Search(MGraph *G);//查找景点信息函()(MGraph *G);//初始化图形void print(MGraph *G);//校园全景显示函数3、流程图四、详细设计MGraph * CreatUDN(MGraph *G)//初始化图形,承受用户输入{int i,j,k,w;char v1[20],v2[20];printf("请输入图的顶点数,弧数:");scanf("%d %d",&G->vexnum,&G->arcnum);printf("请输入景点的编号:、名称、简介:\n");for(i=0;i<G->vexnum;i++){printf("景点编号:");scanf("%d",&G->vexs[i].num);printf("景点名称:");scanf("%s",G->vexs[i].name);printf("景点简介:");scanf("%s",G->vexs[i].introduction);}for(i=0;i<G->vexnum;i++)for(j=0;j<G->vexnum;j++)G->arcs[i][j].adj=INFINITY;printf("请输入途径长度:\n");for(k=0;k<G->arcnum;k++){printf("第%d条边:\n",k+1);printf("景点对(x,y):");scanf("%s",v1);scanf("%s",v2);printf("途径长度:");scanf("%d",&w);i=LocateVex(G,v1);j=LocateVex(G,v2);if(i>=0&&j>=0){G->arcs[i][j].adj=w;G->arcs[j][i]=G->arcs[i][j];}}return G;}void ShortestPath_DIJ(MGraph * G){int v,w,i,min,t=0,x,flag=1,v0;int final[20], D[20], p[20][20];while(flag){printf("请输入一个起始景点编号:");scanf("%d",&v0);if(v0<0||v0>G->vexnum){printf("景点编号不存在!请重新输入景点编号:"); scanf("%d",&v0);}if(v0>=0&&v0<G->vexnum)flag=0;}for(v=0;v<G->vexnum;v++){final[v]=0;D[v]=G->arcs[v0][v].adj;for(w=0;w<G->vexnum;w++)p[v][w]=0;if(D[v]<INFINITY){p[v][v0]=1;p[v][v]=1;}}D[v0]=0;final[v0]=1;for(i=1;i<G->vexnum;i++){min=INFINITY;for(w=0;w<G->vexnum;w++)if(!final[w])if(D[w]<min)final[v]=1;for(w=0;w<G->vexnum;w++)if(!final[w]&&(min+G->arcs[v][w].adj<D[w])) {D[w]=min+G->arcs[v][w].adj;for(x=0;x<G->vexnum;x++)p[w][x]=p[v][x];p[w][w]=1;}}for(v=0;v<G->vexnum;v++){if(v0!=v) printf("%s",G->vexs[v0].name);for(w=0;w<G->vexnum;w++){if(p[v][w]&&w!=v0) printf("-->%s",G->vexs[w].name);t++;}if(t>G->vexnum-1&&v0!=v)printf(" 总道路长%dm\n\n",D[v]); }}//迪杰斯特拉算法Floyd 算法:void Floyd(MGraph *G){int v,u,i,w,k,j,flag=1,p[10][10][10],D[10][10];for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++){D[v][w]=G->arcs[v][w].adj;for(u=0;u<G->vexnum;u++)p[v][w][u]=0;if(D[v][w]<INFINITY){p[v][w][v]=1;p[v][w][w]=1;}}for(u=0;u<G->vexnum;u++)for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++)if(D[v][u]+D[u][w]<D[v][w]){D[v][w]=D[v][u]+D[u][w];for(i=0;i<G->vexnum;i++)p[v][w][i]=p[v][u][i]||p[u][w][i];}while(flag){printf("请输入出发点和目的地的编号:");scanf("%d%d",&k,&j);if(k<0||k>G->vexnum||j<0||j>G->vexnum){printf("景点编号不存在!请重新输入出发点和目的地的编号:");scanf("%d%d",&k,&j);}if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum)flag=0;}printf("%s",G->vexs[k].name);for(u=0;u<G->vexnum;u++)if(p[k][j][u]&&k!=u&&j!=u)printf("-->%s",G->vexs[u].name);printf("-->%s",G->vexs[j].name);printf(" 总道路长%dm\n",D[k][j]);}//Floyd end五、调试分析1、在设计校园全景图的时候,由于在main函数中加了清屏功能的system("cls");,造成地图总是一闪而过出如今界面中。
校园导游程序c课程设计
![校园导游程序c课程设计](https://img.taocdn.com/s3/m/a43b3e4c876fb84ae45c3b3567ec102de2bddffb.png)
校园导游程序c课程设计一、课程目标知识目标:1. 学生能理解并掌握C语言中数组、函数、指针等基本概念及其应用;2. 学生能运用结构体、文件操作等知识模块,实现校园导游程序的基本功能;3. 学生了解并掌握程序设计中模块化、结构化的基本方法。
技能目标:1. 学生能运用C语言编写具有实用价值的程序,具备一定的编程能力;2. 学生通过校园导游程序的设计,培养解决实际问题的能力;3. 学生能够进行程序调试与优化,提高程序性能。
情感态度价值观目标:1. 学生在课程学习中,培养对编程的兴趣和热情,树立自信心;2. 学生通过团队合作,培养沟通、协作能力,增强团队意识;3. 学生能够关注校园文化,将课程与实际生活相结合,提高社会责任感。
课程性质分析:本课程为C语言编程实践课,旨在让学生通过实际项目的开发,巩固所学知识,提高编程能力。
学生特点分析:学生已具备C语言基础,具有一定的编程能力,但实际应用经验不足。
教学要求:结合学生特点,课程注重实践操作,引导学生运用所学知识解决实际问题,提高学生的编程素养。
将目标分解为具体的学习成果,以便后续的教学设计和评估。
1. C语言基础知识回顾:数组、函数、指针、结构体、文件操作等;2. 程序设计方法:模块化、结构化编程;3. 校园导游程序功能需求分析:地图展示、路径规划、景点介绍等;4. 校园导游程序设计与实现:- 数据结构设计:景点结构体定义、路径数组等;- 功能模块实现:地图展示、路径规划算法、景点信息查询等;- 界面设计:命令行界面设计、功能菜单编写等;5. 程序调试与优化:调试技巧、性能优化方法;6. 团队合作与项目展示:分组合作、项目汇报与评价。
教学大纲安排:1. 第一周:C语言基础知识回顾,理解并掌握基本概念;2. 第二周:程序设计方法学习,分析校园导游程序需求;3. 第三周:校园导游程序数据结构设计,功能模块划分;4. 第四周:实现各功能模块,编写界面代码;5. 第五周:进行程序调试与优化,确保程序稳定运行;6. 第六周:团队合作,完成项目展示与评价。
(完整word版)校园导游系统课程设计
![(完整word版)校园导游系统课程设计](https://img.taocdn.com/s3/m/3cc5748831b765ce040814c0.png)
西安邮电大学(计算机学院)数据结构课程设计报告题目:校园导游系统专业名称:班级:学生姓名:学号(8位):指导教师:设计起止时间:一. 设计目的1.数据结构课程设计是让学生综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的应用系统的设计与开发2.通过课程设计,使学生通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
二. 设计内容1.完成校园导游咨询系统。
2.校园平面图(景点、路径等信息)3.利用深度优先和广度优先搜索搜索所有景点4.查询图中任意景点的相关信息5.问路信息(查询任意两个景点之间的一条最短的简单路径,任意两景点之间的所有路径)校园图的关节点、多个景点的最佳访问路线6.校园导游图的界面仿真。
7.添加删除道路信息。
三.概要设计1.功能模块图;选择显示标识信息2.各个模块详细的功能描述。
1.登录模块进入后可添加删除道路信息。
2.路线选择模块选择路线,在右侧窗口显示最短路径3.其他查询景点信息,查看深度优先遍历查看广度优先遍历四.详细设计*重点设计及编码//结点function Node(vexdata){this.vexdata=vexdata;this.node=[];this.weight=[];}//类定义function AdjList(vexnum,arr){this.vexnum=vexnum;this.arcnum=0;this.vertex=[];=[];//名称r=[];//信息this.flag=[];//标记this.arr=[];//存储路径this.ar=[];//存储路径2for(var i=0;i<this.vexnum;i++){this.vertex[i]=new Node(arr[i]);this.flag.push(0);}//增加结点this.addarc=addarc;//增加边this.addvex=addvex;//深度优先搜索this.dfs=dfs;this.edfs=edfs;//广度优先搜索this.guangdu=guangdu;this.guang=guang;//输出存储结构this.printf=printf;//求最短路径this.getpath=getpath;//输出景点信息函数this.printinfor=printinfor;}function addarc(a1,a2,weight){this.vertex[a1].node.push(a2);this.vertex[a1].weight.push(weight);this.vertex[a2].node.push(a1);this.vertex[a2].weight.push(weight);this.arcnum++;}function addvex(v){var temp=new Node(v);this.vertex.push(temp);this.vexnum++;}function edfs(flag,v,g,arr){arr.push(v);flag[v]=1;for(var i=0;i<g.vertex[v].node.length;i++){if(1!=flag[g.vertex[v].node[i]]){edfs(flag,g.vertex[v].node[i],g,arr);}}}function dfs(){var temp=parseInt(document.getElementById('last').value);this.arr=[];for(var i=0;i<this.vexnum;i++)this.flag[i]=0;edfs(this.flag,temp,this,this.arr);for(var i=0;i<this.vexnum;i++){if(this.flag[i]!=1) edfs(this.flag,i,this,this.arr);}var showpath="<b>深度遍历路线:</b>";for(var i=0;i<this.arr.length;i++){showpath+="->";showpath+=[this.arr[i]];}document.getElementById('footer').innerHTML=showpath; }function guangdu(temp,g){var v,k,w=temp;var que=[];que.push(w);g.flag[w]=1;while(que.length!=0){w=que[0];g.ar.push(que[0]);que.splice(0,1);k=0;v=parseInt(g.vertex[w].node[k++])while(k<g.vertex[w].node.length){if(g.flag[v]!=1){g.flag[v]=1;que.push(v);}v=parseInt(g.vertex[w].node[k++]);}}}function guang(){var temp=parseInt(document.getElementById('last').value);this.ar=[];for(var i=0;i<this.vexnum;i++)this.flag[i]=0;guangdu(temp,this);for(var i=0;i<this.vexnum;i++)if(this.flag[i]!=1)guangdu(i,this);var showpath="<b>广度遍历路线:</b>";for(var i=0;i<this.ar.length;i++){showpath+="->";showpath+=[this.ar[i]];}document.getElementById('footer').innerHTML=showpath; }function printf(){for(var i=0;i<this.vexnum;i++){document.write('<br>'+this.vertex[i].vexdata+" :");for(var j=0;j<this.vertex[i].node.length;j++)document.write('->'+this.vertex[i].node[j]+":"+this.vertex[i].weight[j]);}}function getpath(/*start,end*/){var start=parseInt(document.getElementById('first').value);var end=parseInt(document.getElementById('last').value);var mindist;var k;var a=[];var path=new Array(this.vexnum);//初始化for(var i=0;i<this.vexnum;i++){document.getElementById('b'+i).style.color='#000';}for(var i=0;i<this.vexnum;i++){path[i]=[];}for(var i=0;i<this.vexnum;i++){a[i]=10000;path[i][0]=0;}path[start][0]=1;for(var i=0;i<this.vertex[start].node.length;i++){a[this.vertex[start].node[i]]=this.vertex[start].weight[i];path[this.vertex[start].node[i]].push(start);}//找各条最短路径for(var i=1;i<this.vexnum;i++){mindist=10000;//找最小权值路径for(var j=0;j<this.vexnum;j++){if(!path[j][0]&&a[j]<mindist){k=j;mindist=a[j];}}if(10000==mindist) return;path[k][0]=1;//改变记录for(var j=0;j<this.vertex[k].node.length;j++){if(!path[this.vertex[k].node[j]][0]&&a[this.vertex[k].node[j]]>a[k]+this.vertex[k].weight[j]){a[this.vertex[k].node[j]]=a[k]+this.vertex[k].weight[j];path[this.vertex[k].node[j]]=[0];for(var t=1;t<path[k].length;t++){path[this.vertex[k].node[j]].push(path[k][t]);}path[this.vertex[k].node[j]].push(k);}}}//返回最短路径var showpath="路线:";for(var i=1;i<path[end].length;i++){document.getElementById('b'+path[end][i]).style.color='#fff';showpath+=[path[end][i]];showpath+="->";}document.getElementById('b'+end).style.color='#fff';showpath+="<b>"+[end]+"</b>";document.getElementById('path').innerHTML=showpath;}function printinfor(){var last=document.getElementById('last').value;document.getElementById('footer').innerHTML=r[parseInt(last)]; }五.测试数据及运行结果六.调试情况,设计技巧及体会每当写完一个函数的时候,都会出现很多错误,就这样坚持着改错误,慢慢的发现其实很多是由于自己粗心造成的,别的错误改多了就习惯了。
c语言校园导游课程设计
![c语言校园导游课程设计](https://img.taocdn.com/s3/m/41e1844c4531b90d6c85ec3a87c24028905f8508.png)
c语言校园导游课程设计一、教学目标本课程旨在通过C语言编程,使学生掌握基本的编程技能,并应用于校园导游系统的开发。
具体目标如下:1.理解C语言的基本语法和数据结构。
2.掌握函数的定义和调用。
3.了解面向对象编程的基本概念。
4.能够使用C语言编写简单的程序。
5.能够利用面向对象编程设计校园导游系统。
6.能够进行程序调试和优化。
情感态度价值观目标:1.培养学生的创新意识和解决问题的能力。
2.培养学生团队合作和沟通的能力。
3.培养学生对编程和计算机科学的兴趣。
二、教学内容教学内容将按照以下大纲进行:1.C语言基础:介绍C语言的基本语法和数据结构,包括变量、运算符、控制语句等。
2.函数:讲解函数的定义、声明和调用,包括递归函数和作用域规则。
3.面向对象编程:介绍类和对象的概念,讲解构造函数、析构函数和继承等。
4.校园导游系统设计:引导学生利用C语言编程实现校园导游系统的基本功能,如景点介绍、路径规划等。
三、教学方法将采用多种教学方法相结合,以激发学生的学习兴趣和主动性:1.讲授法:讲解C语言基础知识和编程技巧。
2.案例分析法:分析典型的校园导游系统案例,引导学生思考和解决问题。
3.实验法:安排实验课,让学生动手编写代码和调试程序。
4.讨论法:学生进行小组讨论,促进团队合作和沟通。
四、教学资源将提供以下教学资源,以支持教学内容和教学方法的实施:1.教材:《C语言程序设计教程》2.参考书:《C Primer Plus》、《C++ Primer》3.多媒体资料:PPT课件、编程实例视频教程4.实验设备:计算机、编程环境(如Visual Studio、Code::Blocks)5.在线资源:编程论坛、开源校园导游系统项目五、教学评估教学评估将采用多元化的方式,全面客观地评价学生的学习成果。
评估方式包括:1.平时表现:通过课堂参与、提问和小组讨论等环节,评估学生的学习态度和参与度。
2.作业:布置编程作业,评估学生的编程能力和解决问题的能力。
c语言校园导游系统课程设计
![c语言校园导游系统课程设计](https://img.taocdn.com/s3/m/fa15926ab80d6c85ec3a87c24028915f804d8431.png)
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语言课程设计-校园导游咨询系统
![C语言课程设计-校园导游咨询系统](https://img.taocdn.com/s3/m/e8186dda5fbfc77da369b111.png)
大连科技学院C语言课程设计题目校园导游咨询系统学生姓名专业班级计算机(Z) 13-1 指导教师职称助教所在单位信息科学系计算机教研室教学部主任完成日期 2014年12月13日课程设计成绩考核表综合评定:(优、良、中、及格、不及格)指导教师签字:2014年12月13 日课程设计任务书1.设计(研究)内容和要求研究内容:设计并编写一个完善的C语言程序,并要求达到以下几点:(1)系统功能要求:系统功能完善,具有简洁的操作流程。
(2)以软件工程理论为指导,按照进度计划,完成系统需求分析、系统的概要设计与系统的详细设计等。
要求能够对系统进行全面测试和调试,及时更正错误,直至系统运行稳定可靠,要求报告中具有系统测试内容。
(3)完成课程设计报告的编辑工作,报告要求在3000字以上,包括综述、系统总体设计、系统实现、运行调试、结论等,参考文献数量至少2篇,论文书写格式按学校规定来写。
(4)工作量要饱满,具备两周课程设计的基本要求,代码行达到300行左右。
原始依据:对学过的C语言程序设计课程进行巩固和加深印象。
了解C语言的基础知识,有一定的语言编程基础,能够熟练运用C语言进行程序设计。
通过用C语言完成的题目的编写与设计,以提高用C语言解决实际问题的能力。
2.系统环境硬件环境:CPU的主频在500MHZ以上,内存在128MB以上软件环境:编程语言及工具:C语言;操作系统:Windows 操作系统3.参考文献[1] 李瑞. 徐克圣. 刘月凡. 戚海英. C程序设计基础[M]. 北京:清华大学出版社.2009.7[2] 布鲁志著.吴丹等译.面向对象的软件工程—构建复杂且多变的系统.清华大学出版社.2002.10[3] 霍顿(美).杨杰(译). 北京:清华大学出版社. 2008[4] 薛圆圆.C语言开发手册. 北京:电子工业出版社. 2011.4[5] 肯奈斯.艾.瑞克(美).徐波(译).C和指针.北京:人民邮电出版社[6] 宋旭.黄明.C语言课程设计.北京:电子工业出版社[7] 宋丽芳.C语言程序设计.北京:现代教育出版社目录1 需求分析 (1)1.1 系统概述 (1)1.2 系统运行环境 (1)1.3 功能需求描述 (1)2 总体设计 (1)2.1 开发与设计的总体思想 (1)2.2 系统模块结构 (2)2.3 模块设计 (2)2.4 系统流程描述 (3)2.5 界面设计 (3)3 详细设计 (6)3.1 应用部署图 (6)3.2 查询功能模块 (7)3.3 删除功能模块 (9)3.4 系统维护模块 (12)4 系统测试 (16)总结 (16)参考文献 (17)1 需求分析1.1 系统概述随着现代社会生活节奏的加快,人们外出旅行以寻求放松的时间越来越多。
c++数据结构课程设计校园导游设计代码
![c++数据结构课程设计校园导游设计代码](https://img.taocdn.com/s3/m/d60daa985122aaea998fcc22bcd126fff6055d50.png)
C++数据结构课程设计——校园导游设计代码1. 引言在现代高校教育中,数据结构课程的重要性不言而喻。
而在C++语言中,有关数据结构的课程设计更是相当重要。
本文将探讨如何利用C++语言设计校园导游系统的代码,并给出详细的设计方案和代码实现。
2.设计思路校园导游系统主要包括地图信息的输入、导游路线的规划、用户信息的管理和景点信息的展示。
我们将采用图的数据结构和Dijkstra算法来实现导游路线的规划,采用链表和栈的数据结构来实现用户信息的管理,采用数组和哈希表的数据结构来实现景点信息的展示。
3.系统架构3.1 地图信息的输入为了实现地图信息的输入,我们将采用图的数据结构来描述校园内的各个景点之间的相互关系。
每个景点将作为图的一个节点,而景点之间的路径将作为图的一条边。
我们将设计一个函数来输入景点之间的相互关系,并将其存储在图的邻接矩阵中。
3.2 导游路线的规划为了实现导游路线的规划,我们将采用Dijkstra算法来求解最短路线。
我们将设计一个函数来实现Dijkstra算法,并根据用户的起始点和终点来输出最短路线。
3.3 用户信息的管理为了实现用户信息的管理,我们将采用链表和栈的数据结构来存储用户的历史操作信息。
我们将设计一个函数来实现用户信息的录入和查询,并将其存储在链表和栈中进行管理。
3.4 景点信息的展示为了实现景点信息的展示,我们将采用数组和哈希表的数据结构来存储校园内各个景点的相关信息。
我们将设计一个函数来实现各个景点信息的录入和展示,并将其存储在数组和哈希表中进行管理。
4. 代码实现以下是校园导游系统的C++代码实现:```// TO DO```5. 结语通过以上的设计方案和代码实现,我们成功利用C++语言设计了一个校园导游系统。
该系统能够实现地图信息的输入、导游路线的规划、用户信息的管理和景点信息的展示。
希望本文能够给读者在学习C++数据结构课程设计时提供一定的帮助。
除了以上提到的功能,校园导游系统还可以增加更多的特色功能,比如语音导览、虚拟现实导览、导游路线的可视化展示等。
c语言校园导游课程设计
![c语言校园导游课程设计](https://img.taocdn.com/s3/m/a2ab63faf424ccbff121dd36a32d7375a517c641.png)
c语言校园导游课程设计一、课程目标知识目标:1. 学生能理解并掌握C语言中数组、函数、指针等基本概念及其在程序设计中的应用。
2. 学生能够运用C语言编写具有实际意义的程序,如校园导游系统,实现对校园景点信息的存储、查询和展示。
3. 学生了解结构体和文件操作在C语言中的应用,能够实现对校园导游系统中数据的组织、存储和读取。
技能目标:1. 学生掌握C语言编程的基本技巧,具备分析问题、设计算法和编写程序的能力。
2. 学生能够运用所学知识,独立设计并实现一个简单的校园导游系统,提高实际编程能力。
3. 学生通过课程学习,培养解决实际问题的能力,提高逻辑思维和团队协作能力。
情感态度价值观目标:1. 学生对C语言编程产生兴趣,树立学习信心,形成积极的学习态度。
2. 学生在学习过程中,培养良好的编程习惯,注重程序的可读性和可维护性。
3. 学生通过课程学习,认识到编程在解决实际问题中的重要性,激发对计算机科学技术的热爱。
课程性质:本课程为C语言程序设计实践课程,结合实际应用场景,培养学生的编程能力和解决实际问题的能力。
学生特点:学生具备一定的C语言基础,对编程感兴趣,但实际编程经验不足。
教学要求:教师应注重理论与实践相结合,引导学生运用所学知识解决实际问题,关注学生的个体差异,提高学生的编程能力和综合素质。
教学过程中,将课程目标分解为具体的学习成果,以便进行有效的教学设计和评估。
二、教学内容1. 数组与函数:回顾数组的使用,强调其在存储大量数据时的优势;讲解函数的定义、调用和参数传递,强调模块化编程的重要性。
- 教材章节:数组、函数- 内容列举:一维数组、二维数组、函数定义、函数调用、局部变量、全局变量2. 指针与结构体:介绍指针的概念,讲解指针的使用方法;引入结构体,展示如何利用结构体组织相关数据。
- 教材章节:指针、结构体与联合- 内容列举:指针变量、指针运算、结构体定义、结构体变量、结构体数组3. 文件操作:讲解文件的基本概念,介绍文件读写操作,为校园导游系统数据存储提供支持。
c语言课程设计_导游系统方案
![c语言课程设计_导游系统方案](https://img.taocdn.com/s3/m/2e34b996866fb84ae45c8dc7.png)
《数据结构》课程设计报告西湖导游系统学号:姓名:专业班级:日期:信息科学与工程系目录1课程设计的目的 (1)1.1课程设计题目 (1)1.2课程设计目的 (1)2课程设计的内容 (1)2.1 题目分析 (1)2.2 系统程序模块设计 (1)2.2.1景点信息查询 (1)2.2.2 景点地图 (1)2.2.3景点最短路径查询 (1)2.2.4退出系统 (1)3景点信息查询及求最短路径问题的实现 (1)3.1景点信息查询及求最短路径系统涉及的物理结构 (1)3.1.1 图的逻辑结构和物理结构 (1)3.1.2 Floyd的逻辑结构和物理结构 (2)3.2景点信息查询及求最短路径系统主要模块的设计 (2)3.2.1 景点基本信息和路径的定义 (2)3.2.2 Floyd求最短路径的实现 (5)3.2.3选择函数 (8)4西湖导游系统的测试及运行效果 (9)4.1 主界面 (9)4.2 景点信息查询 (9)4.3地图显示 (9)4.4 最短路径查询 (9)4.5 功能选项选择错误 (10)4.6 查询最短路径景点输入错误 (10)5系统设计遇到的问题及解决方案 (11)6总结与收获 (12)附西湖导游系统程序源代码 (12)1课程设计的目的1.1课程设计题目西湖导游系统1.2课程设计目的这个课程设计是为了方便的查询景点信息,找出景点之间的最短路径,其中把景点信息用图的数组存储,求两点之间的最短路径用Floyd算法。
正确分析题目中的数据涉及的数据结构,并将数据结构的逻辑结构、物理结构及其算法应用于解决实际问题,即理论与实际结合起来,提高编写程序的能力。
掌握模块化程序设计方法以及程序的调试方法和技巧。
2课程设计的内容2.1 题目分析这次的课程设计中需要把多个景点的信息存储,所以用了图的数组法来存储景点信息,求最短路径问题上,Floyd是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题。
校园导游课程设计
![校园导游课程设计](https://img.taocdn.com/s3/m/c6efb3fde009581b6bd9ebc5.png)
校园导游课程设计一、问题描述:用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。
要求能够回答有关景点介绍、游览路径等问题。
二、实验内容:基本要求:查询各景点的相关信息;查询图中任意两个景点间的最短路径;查询图中任意两个景点间的所有路径;增加、删除、更新有关景点和道路的信息。
选作内容:①求多个景点的最佳(最短)游览路径。
②区分机动车道和人行道。
③实现导游图的仿真界面。
三、数据结构:typedef struct message{int num;//景点代码char name[100];//景点名称char pro[500];//简介}Ciceroni;Ciceroni school[10]={{1,"行政楼\n"},{2,"食堂\n"},{3,"赛博楼,信息分院办公室所在地\n"},{4,"求是楼,实验楼计算机中心\n"},{5,"格致楼,法学管理学院"},{6,"工程实习中心,金工实习\n"},{7,"仰仪楼,机电计测分院\n"},{8,"体育馆,旁边有篮球场`足球场`还有网球场\n"},{9,"一号教学楼,主要以阶梯教室为主\n"},{10,"二号教学楼,小教室为多\n"}}; /*景点名称和简介*/操作:/*给景点之间的路径赋最大值*//*最短路径的C语言函数*//*输出最短路径和最短距离函数*//*输入景点代码查景点名称和简介*//*输入景点代码查到其它景点的最短距离*/四、需求分析:现在大多数学校由于不断扩张,造成学校面积大而造成人们人出游困难的问题,人们如果不熟悉该地点。
找到一个地方就会很困难,然而如果有一个校园导游系统,人们出行就会方便很多。
校园导游咨询系统数据结构课程设计c语言
![校园导游咨询系统数据结构课程设计c语言](https://img.taocdn.com/s3/m/fcdc3a1fb5daa58da0116c175f0e7cd18525187e.png)
校园导游咨询系统数据结构课程设计c语言校园导游咨询系统数据结构课程设计c语言一、课程设计的目的本次课程设计旨在通过C语言程序设计实现校园导游咨询系统,学生能够了解并掌握数据结构的基本概念、算法和编程技术,培养学生的编程能力和解决实际问题的能力。
二、系统需求分析(1)用户管理系统需要实现学生、教师、管理员三种用户的管理,分别具有不同的权限等级。
要实现用户注册、登录、退出等基本功能。
(2)地图导航系统需要实现校内地图的导航功能,包括校门、教学楼、图书馆、宿舍等位置的标注,提供校园内部的导航和查找服务。
(3)建筑信息系统需要提供校内建筑的信息查询功能,包括建筑名称、位置、使用情况等,方便师生查询。
(4)在线咨询系统需要提供在线咨询功能,方便学生、教师等用户在线咨询学校相关事宜,并实现客服人员的消息处理。
三、数据结构设计(1)用户信息表采用哈希表作为用户信息表的数据结构,将用户信息存储在表中,方便用户登录和信息的管理。
哈希表的键值是用户名,值是用户信息(包括用户名、密码、权限等级等)。
(2)建筑信息采用结构体数组作为建筑信息的数据结构,将建筑信息存储在数组中,方便查询和展示。
结构体包含建筑名称、位置、使用情况等信息。
(3)校内地图为方便地图导航,采用邻接矩阵作为校内地图的数据结构,将校内各个建筑之间的距离存储在矩阵中。
矩阵的行和列分别表示建筑的编号,矩阵元素表示建筑之间的距离。
(4)消息队列为实现在线咨询功能,采用队列作为消息队列的数据结构,将用户发送的消息存储在队列中。
消息队列的队首指针和队尾指针分别表示最早和最晚的消息,方便客服人员的处理。
四、代码实现(1)用户管理用户管理实现了注册、登录和退出等功能。
用户密码使用MD5加密,保证用户信息的安全性。
管理员可以添加、删除学生和教师用户。
(2)地图导航地图导航实现了最短路径算法和深度优先搜索算法,方便用户查询和展示校内地图。
用户可以查找建筑的详细信息,包括位置、使用情况等。
校园导游程序课程设计
![校园导游程序课程设计](https://img.taocdn.com/s3/m/28115674b5daa58da0116c175f0e7cd1842518dc.png)
校园导游程序课程设计一、课程目标知识目标:1. 学生能够理解程序设计的基本概念,掌握运用流程图进行程序设计的思路。
2. 学生能够运用所学编程语言,实现校园导游程序中的主要功能,如路径规划、景点介绍等。
3. 学生了解并掌握程序测试与调试的基本方法,提高程序的正确性和可靠性。
技能目标:1. 学生能够运用编程软件进行程序设计,培养编程实践能力。
2. 学生通过小组合作,提高沟通与协作能力,共同完成校园导游程序的设计与实现。
3. 学生能够运用信息技术解决实际问题,提高问题解决能力。
情感态度价值观目标:1. 学生培养对计算机科学的兴趣和爱好,激发学习编程的热情。
2. 学生通过参与课程,增强自信心,培养勇于克服困难的意志品质。
3. 学生在小组合作中,学会尊重他人,培养团队协作精神。
4. 学生关注校园环境,提高爱护学校、爱护公共设施的意识。
分析课程性质、学生特点和教学要求,本课程目标具体、可衡量,旨在帮助学生掌握编程技能,培养实际应用能力,同时注重培养学生的情感态度和价值观,使学生在课程学习中得到全面发展。
后续教学设计和评估将围绕以上课程目标展开。
二、教学内容1. 程序设计基本概念:变量、数据类型、运算符、控制结构(条件语句、循环语句)。
2. 编程语言基础:运用教材中推荐的编程语言(如Python),进行基本语法学习与实践。
3. 流程图绘制:学习如何使用流程图表达程序设计思路,分析校园导游程序需求,绘制流程图。
4. 程序设计方法:根据流程图,编写校园导游程序代码,实现路径规划、景点介绍等功能。
5. 程序测试与调试:学习程序测试方法,对校园导游程序进行测试,发现问题并进行调试。
6. 小组合作与项目实践:分组进行项目实践,共同完成校园导游程序的设计与实现。
教学内容安排和进度:第一周:程序设计基本概念学习,熟悉编程环境。
第二周:编程语言基础学习,完成简单程序设计。
第三周:流程图绘制,分析校园导游程序需求。
第四周:编写校园导游程序代码,实现基本功能。
数据结构课程设计——校园导游咨询系统
![数据结构课程设计——校园导游咨询系统](https://img.taocdn.com/s3/m/9621c5ffaf45b307e971972d.png)
数据结构课程设计——校园导游咨询系统1:需求分析:(1)任务:编制一个为来访客人进行最短路径导游的程序(2)要求:从学校的平面上选取n个有代表性的景点,根据用户指定的起点和终点输出相应路径。
2:概要设计:(1)1)a)AdjMGraph.h图操作的函数所放的头文件b) AdjMGraphCreate.h图的创建函数所放的头文件c) Dijkstra.h狄克斯特拉函数设计所放的头文件d) SeqList.h存放顺序表的头文件2)SchoolGuide.c文件包括以下三个函数void SgPrint(AdjMGraph g,int n,int distance[],int path[],int j)函数,其功能是将源点到各个结点的最短距离和最短路径的结果输出;void Sgblueprint()函数,其功能是将校园平面图输出;void main(void)函数,主函数,功能是调用测试数据值,显示主菜单,根据用户输入的i进行不同功能操作,随后根据用户输入的ch值进行不同功能操作。
(2)该程序所使用的存储结构是顺序存储;(3)流程图:图1-1主函数main()流程图图1-2 SgPrint函数流程图3:详细设计:(1)/*顺序表头文件SeqList.h*/typedef struct{DataType list[MaxSize];int size;}SeqList;void ListInitiate(SeqList *L) /*初始化顺序表L*/ {L->size=0; /*定义初始化数据元素个数*/}int ListLength(SeqList L) /*返回顺序表L的当前数据元素个数*/{return L.size;}int ListInsert(SeqList *L,int i,DataType x)/*在顺序表L的第i(0≤i≤size)个位置前插入数据元素值x*//*插入成功返回1,插入失败返回0*/{int j;if(L->size>=MaxSize){printf("顺序表已满无法插入!\n");return 0;}else if(i<0||i>L->size){printf("参数i不合法!\n");return 0;}else{/*为插入做准备*/for(j=L->size;j>i;j--)L->list[j]=L->list[j-1];L->list[i]=x;/*插入x*/L->size++;/*元素个数加1*/return 1;}}int ListDelete(SeqList *L,int i,DataType *x){/*删除顺序表L中位置为i(0≤i≤size-1)的数据元素并存放到x中*/ /*删除成功返回1,删除失败返回0*/int j;if(L->size<=0){printf("顺序表已空无数据元素可删!\n");return 0;}else if(i<0||i>L->size-1){printf("参数i不合法");return 0;}else{*x=L->list[i]; /*保存删除的元素到x中*//*依次前移*/for(j=i+1;j<=L->size-1;j++)L->list[j-1]=L->list[j];L->size--;return 1;}}int ListGet(SeqList L,int i,DataType *x)/*取顺序表L中第i个数据元素存于x中,成功返回1.失败返回0*/ {if(i<0||i>L.size-1){printf("参数i不合法!\n");return 0;}else{*x=L.list[i];return 1;}}(2)/*AdjMGraph.h图操作的函数所放的头文件*/#include"Seqlist.h"/*包含顺序表头文件*/typedef struct{SeqList Vertices;/*存放结点的顺序表*/int edge[MaxVertices][MaxVertices];/*存放边的邻接矩阵*/ int numOfEdges;/*边的条数*/}AdjMGraph;/*图的结构体定义*/void Initiate(AdjMGraph *G,int n)/*初始化*/{int i,j;for(i=0;i<n;i++)for(j=0;j<n;j++){if(i==j) G->edge[i][j]=0;else G->edge[i][j]=MaxWeight;}G->numOfEdges=0;/*边的条数置为0*/ListInitiate(&G->Vertices);/*顺序表初始化*/}void InsertVertex(AdjMGraph *G,DataType vertex)/*在图G中插入结点vertex*/{ListInsert(&G->Vertices,G->Vertices.size,vertex);/*顺序表尾插入*/}void InsertEdge(AdjMGraph *G,int v1,int v2,int weight)/*在图G中插入边<v1,v2>,边<v1,v2>的权为weight*/if(v1<0||v1>G->Vertices.size||v2<0||v2>G->Vertices.size){printf("参数v1或v2越界出错!\n");exit(1);}G->edge[v1][v2]=weight;G->numOfEdges++;}void DeleteEdge(AdjMGraph *G,int v1,int v2)/*在图G中删除边<v1,v2>*/{if(v1<0||v1>G->Vertices.size||v2<0||v2>G->Vertices.size){printf("参数v1或v2越界出错!\n");exit(1);}G->edge[v1][v2]=MaxWeight;G->numOfEdges--;}void DeleteVerten(AdjMGraph *G,int v)/*删除结点V*/{int n=ListLength(G->Vertices),i,j;DataType x;for(i=0;i<n;i++)/*计算删除后的边数*/for(j=0;j<n;j++)if((i==v||j==v)&&G->edge[i][j]>0&&G->edge[i][j]<MaxWeight) G->numOfEdges--;/*计算被删除边*/for(i=v;i<n;i++) /*删除第v行*/for(j=0;j<n;j++)G->edge[i][j]=G->edge[i+1][j];for(i=0;i<n;i++) /*删除第v列*/for(j=v;j<n;j++)G->edge[i][j]=G->edge[i][j+1];ListDelete(&G->Vertices,v,&x);/*删除结点v*/}int GetFirstVex(AdjMGraph G,int v)/*在图G中寻找序号为v的结点的第一个邻接结点*//*如果这样的邻接结点存在,返回该邻接结点的序号;否则,返回-1*/int col;if(v<0||v>G.Vertices.size){printf("参数v越界出错\n");exit(1);}for(col=0;col<G.Vertices.size;col++)if(G.edge[v][col]>0&&G.edge[v][col]<MaxWeight)return col;return -1;}int GetNextVex(AdjMGraph G,int v1,int v2)/*在图G中寻找v1结点的邻接结点v2的下一个邻接结点*//*如果这样的邻接结点存在,返回该邻接结点的序号;否则,返回-1*//*v1和v2都是相应结点的序号*/{int col;if(v1<0||v1>G.Vertices.size||v2<0||v2>G.Vertices.size){printf("参数v1或v2越界出错!\n");exit(1);}for(col=v2+1;col<G.Vertices.size;col++)if(G.edge[v1][col]>0&&G.edge[v1][col]<MaxWeight) return col;return -1;}(3)/*AdjMGraphCreate.h图的创建函数所放的头文件*/typedef struct{int row;/*行下标*/int col;/*列下标*/int weight;/*权值*/}RowColWeight;/*边信息结构体定义*/void CreatGraph(AdjMGraph *G,DataType V[],int n,RowColWeight E[],int e) /*在图G中插入n个结点信息V和e条边信息E*/{int i,k;Initiate(G,n);/*结点顺序表初始化*/for(i=0;i<n;i++)InsertVertex(G,V[i]);/*结点插入*/for(k=0;k<e;k++)InsertEdge(G,E[k].row,E[k].col,E[k].weight);/*边插入*/}(4)/* Dijkstra.h狄克斯特拉函数设计所放的头文件*/void Dijkstra(AdjMGraph G,int v0,int distance[],int path[])/*带权图G从下标v0结点到其他结点的最短距离distance*//*和最短路径下标path*/{int n=G.Vertices.size;int *s=(int *)malloc(sizeof(int)*n);int minDis,i,j,u;/*初始化*/for(i=0;i<n;i++){distance[i]=G.edge[v0][i];s[i]=0;if(i!=v0&&distance[i]<MaxWeight) path[i]=v0;else path[i]=-1;}s[v0]=1;/*标记结点v0已从集合T加入到集合S中*//*在当前还未到最短路径的结点集中选取具有最短距离的结点u*/for(i=1;i<n;i++){minDis=MaxWeight;for(j=0;j<n;j++)if(s[j]==0&&distance[j]<minDis){u=j;minDis=distance[j];}/*当已不再存在最短路径时算法结束;此语句对非连通图是必须的*/if(minDis==MaxWeight)return;s[u]=1;/*标记结点u已从集合T加入到集合S中*//*修改从v0到其他结点的最短距离和最短路径*/for(j=0;j<n;j++)if(s[j]==0&&G.edge[u][j]<MaxWeight&&distance[u]+G.edge[u][j]<distance[j]) {/*结点v0经结点u到其他结点的最短距离和最短路径*/distance[j]=distance[u]+G.edge[u][j];path[j]=u;}}}(5)/*SchoolGuide.c文件*/#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef char DataType;#define MaxSize 100#define MaxVertices 10#define MaxWeight 10000#include"AdjMGraph.h"#include"AdjMGraphCreate.h"#include"Dijkstra.h"void SgPrint(AdjMGraph g,int n,int distance[],int path[],int j){ /*输出源点到其他各结点的最短距离和最短路径*/int i;/*从源结点到其他各结点的最短路径及其距离分别为:*/printf("从该结点%c到其他各结点的最短路径及其距离分别为:\n",g.Vertices.list[j]);printf("\n");//输出换行符for(i=0;i<n;i++){ /*从源结点到当前结点的最短路径为*/printf("从结点%c到结点%c的最短路径为:",g.Vertices.list[j],g.Vertices.list[i]);printf("(");//输出左括号if(path[i]!=-1)//源点到其他结点的最短路径的前一结点判断{ if(path[path[i]]!=-1)//该前一结点的前一结点进行判断{if(path[path[path[i]]]!=-1)//该前一结点的前一结点的前一结点进行判断{printf("%c,",g.Vertices.list[path[path[path[i]]]]);//输出相应存在的前一结点}printf("%c,",g.Vertices.list[path[path[i]]]);//输出应存在的前一结点}printf("%c,",g.Vertices.list[path[i]]);//输出应存在的前一结点}printf("%c",g.Vertices.list[i]);//输出当前结点printf(")");//输出换行符右括号printf(",其最短距离为%d;\n",distance[i]);//输出源点到其他结点的最短距离printf("\n");//输出换行符}}void Sgblueprint(){/*显示校园平面图*/printf(" ——————校园平面图——————\n");printf(" B(学生宿舍)———————————————————E(商业街)\n");printf(" / \\ / | \n");printf(" / \\ / | \n");printf(" / \\(B到D) /| \n");printf(" / \\ / | \n");printf(" / \\ / | \n");printf("A(校门口) ———————————————————D(学校食堂和 | \n");printf("| 学校田径场(学校田径场在学校食堂后面)) \\ | \n");printf("| \\(D到F)| \n");printf("| \\| \n");printf("C(第一、第二教学楼和校办) ———————————————————F(第三教学楼和实验楼)\n");}void main(void){AdjMGraph g;char a[]={'A','B','C','D','E','F'};RowColWeightrcw[]={{0,2,5},{0,3,30},{1,0,2},{1,4,8},{2,1,15},{2,5,7},{4,3,4},{5,3,10},{5,4,18}};int i,j,n=6,e=9;//i为控制控制菜单项的数值,j为选取源点的数值char ch;int distance[6],path[6];printf(" 校园导游咨询系统------您身边的导游 \n");printf("\n");printf("\n");printf("\n");/*菜单选项*/printf(" 1:请求校园导游帮组(即咨询校园各景点最短路径)\n");printf(" 2:显示校园平面图\n");printf(" 3:退出校园导游咨询系统\n");printf("请输入你所想进行的功能选项:\n");scanf("%d",&i); //输入控制控制菜单项的数值i的值CreatGraph(&g,a,n,rcw,e);//创建图switch(i){ //选择菜单项的操作case 1:system("cls");/*调用输出校园平面图函数并输出校园平面图*/Sgblueprint();/*提示用户输入起点的序列号*/printf("请输入你所在地或起点的序列号(A-F的序列号为依次0,1,2,3,4,5):\n");scanf("%d",&j);//用户输入起点的序列号i的值/*调用狄克斯特拉函数计算源点的其他各结点的最短路径及其距离*/Dijkstra(g,j,distance,path);/*提示用户参照校园平面图以了解各景点的代号的含义*/printf("提示:下列A、B、C等均是各景点的代号,如有问题,请参考上面的校园平面图\n");/*调用输出源点到其他各结点的最短距离和最短路径函数并输出相应的最短路径和最短距离*/SgPrint(g,n,distance,path,j);break;case 2:system("cls");Sgblueprint();//调用输出校园平面图函数并输出校园平面图break;case 3:exit(1);break;//退出程序}while(3)//判断程序是否继续运行{printf("\n您是否还想进行其他操作(y/n):\n");//提示用户是否还需继续进行其他操作scanf("%s",&ch);//用户输入y/n以选择是否仍需进行其他操作if(ch=='Y'||ch=='y')//判断用户所输入的ch值是否为y/Y,以判断用户是否进行其他操作{system("cls");printf(" 校园导游咨询系统------您身边的导游 \n");printf("\n");printf("\n");printf("\n");/*菜单选项*/printf(" 1:请求校园导游帮组(即咨询校园各景点最短路径)\n");printf(" 2:显示校园平面图\n");printf(" 3:退出校园导游咨询系统\n");printf("请输入你所想进行的功能选项:\n");scanf("%d",&i);switch(i){ //选择菜单项的操作case 1:system("cls");/*调用输出校园平面图函数并输出校园平面图*/Sgblueprint();/*提示用户输入起点的序列号*/printf("请输入你所在地或起点的序列号(A-F的序列号为依次0,1,2,3,4,5):\n");scanf("%d",&j);//用户输入起点的序列号i的值/*调用狄克斯特拉函数计算源点的其他各结点的最短路径及其距离*/Dijkstra(g,j,distance,path);/*提示用户参照校园平面图以了解各景点的代号的含义*/printf("提示:下列A、B、C等均是各景点的代号,如有问题,请参考上面的校园平面图\n");/*调用输出源点到其他各结点的最短距离和最短路径函数并输出相应的最短路径和最短距离*/SgPrint(g,n,distance,path,j);break;case 2:system("cls");Sgblueprint();//调用输出校园平面图函数并输出校园平面图break;case 3:exit(1);break;//退出程序}}else return;//退出程序}}4:调试分析:(1)a)测试数据:char a[]={'A','B','C','D','E','F'};RowColWeightrcw[]={{0,2,5},{0,3,30},{1,0,2},{1,4,8},{2,1,15},{2,5,7},{4,3,4},{5,3,10},{5,4,18}}; int n=6,e=9;b)测试结果:(2)所遇到的问题:1)SgPrint函数中的形参如何设置,通过仔细分析图的操作等头文件和主函数,最终分析函数SgPrint中应加入形参AdjMGraph g,int n,int distance[],int path[],int j;2)Sgblueprint函数中输出语句中想输出’\’,直接键入’\’发现不能输出’\’,最终查看消息窗口的提示信息和联系C语言中有关转义字符的相关知识,知道了如果相输出转义字符’\’本身就必须书写成’\\这样的格式;3)在进行菜单项操作时,如何做到清除原有屏幕的操作,通过上网查资料了解到,只需加入“system(“cls”);”该语句即可;4)SgPrint函数中如何实现输出如“从结点A到结点B的最短路径为:(A,C,B),其最短距离为20;”格式,通过分析Dijkstra.h和主函数,最终想到只需添加“if(path[i]!=-1){ if(path[path[i]]!=-1){if(path[path[path[i]]]!=-1){printf("%c,",g.Vertices.list[path[path[path[i]]]]);}printf("%c,",g.Vertices.list[path[path[i]]]);}printf("%c,",g.Vertices.list[path[i]]);}”这些代码,对源点到其他结点的最短路径的前一结点以及该前一结点的前一结点进行判断,并将这些结点输出,就能够解决上述问题。
C语言课设(校园导游)
![C语言课设(校园导游)](https://img.taocdn.com/s3/m/ef5a0763f7ec4afe04a1dfcb.png)
校园导游目录摘要 ......................................................................................... 错误!未指定书签。
1绪论 .......................................................................................... 错误!未指定书签。
2系统分析 .................................................................................. 错误!未指定书签。
2.1功能需求 ........................................................................... 错误!未指定书签。
2.2数据需求............................................................................ 错误!未指定书签。
2.3性能需求 ........................................................................... 错误!未指定书签。
3总体设计 .................................................................................. 错误!未指定书签。
3.1系统设计方案.................................................................... 错误!未指定书签。
3.2功能模块设计.................................................................... 错误!未指定书签。
C语言校园导游系统课程设计
![C语言校园导游系统课程设计](https://img.taocdn.com/s3/m/d6ab55b6caaedd3382c4d307.png)
海南大学课程名称数据结构(基于C语言)课程设计题目校园导游程序的设计及实现院系_信息科学技术学院____班级__通信工程B班_学生姓名___史兵全________指导教师吴泽辉日期_2014.12.15.-2015.1.7__软件专题训练任务书校园导游程序一、简介1.设计目的:通过校园导游程序的设计及实现,熟练掌握图型结构在实际问题中的应用。
2.问题的描述:设计一个校园模拟导游程序,为新生或来访的客人通过及机器的“对话“提供最短路径的信息查询服务。
1.任意选取n个场所,构成一个无向带权图,图中顶点表示场所,边上的权值表示两点间的距离,图的存储结构可采用带权的邻接矩阵。
2.咨询以用户和计算机的对话方式进行,由用户输入起始点和终点,输出信息:最短路径是多少?并指出所经过的场所。
3、计算并记录从校门口到各个场所的最短路径,即求单源点到其它各个场所的最短路径。
4、提供校园中任意场所的问路查询,即求任意两点之间的最短路径。
二、数据结构的设计:由于各个场所通过校园中的道路相连,各个场所和连接它们的道路构成了整个校园的地理环境,所以使用图这种数据结构对他们去进行描述。
以图中的顶点表示校园内各个场所,应包含场所名称、代号、简介等信息;以边表示连接各个场所的道路,应包含路径的长度等信息;顶点和边均使用结构体定义,整个图的数据结构采用教材中介绍的带权的邻接矩阵方法。
二、数据结构的设计:typedef struct ArCell{int adj; //路径长度}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM] ;typedef struct //图中顶点表示主要景点,存放景点的序号、名称、介绍等信息,{char name[30];int num;char introduction[100];//简介}infotype;typedef struct{infotype vexs[MAX_VERTEX_NUM];AdjMatrix arcs;int vexnum,arcnum;}MGraph;MGraph b;void cmd(void){int i;b=InitGraph();Menu();scanf("%d",&i);while(i!=4){switch(i){case 1:Browser(&b);Menu();break;case 2:ShortestPath_DIJ(&b);Menu();break; case 3:Floyd(&b);Menu();break;case 4:exit(1);break;default: printf("输入序号不存在,请重新输入");break; }scanf("%d",&i);}MGraph InitGraph(void){MGraph G;int i,j;G.vexnum=10;G.arcnum=14;for(i=0;i<G.vexnum;i++)G.vexs[i].num=i;strcpy(G.vexs[0].name,"海南大学北门");strcpy(G.vexs[0].introduction,"高大威武");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,"3号教学楼");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,"外有建设银行");for(i=0;i<G.vexnum;i++)for(j=0;j<G.vexnum;j++)G.arcs[i][j].adj=INFINITY;G.arcs[0][1].adj=100;G.arcs[0][2].adj=80;G.arcs[0][6].adj=100;G.arcs[1][7].adj=120;G.arcs[2][3].adj=50;G.arcs[3][6].adj=110;G.arcs[3][4].adj=150;G.arcs[4][5].adj=60;G.arcs[4][9].adj=280;G.arcs[5][9].adj=250;G.arcs[6][7].adj=190;G.arcs[6][9].adj=180;G.arcs[7][8].adj=130;G.arcs[8][9].adj=100;for(i=0;i<G.vexnum;i++)for(j=0;j<G.vexnum;j++)G.arcs[j][i].adj=G.arcs[i][j].adj;return G;}//InitGraph end用的是一个switch语句实现输入不同的序号操作选项,调用不同的函数进入不同的操作板块// 迪杰斯特拉算法计,v0为始点void ShortestPath_DIJ(MGraph * G){int v,w,i,min,t=0,x,flag=1,v0;int final[20], D[20], p[20][20];while(flag){printf("请输入起始点序号:");scanf("%d",&v0);if(v0<0||v0>G->vexnum){printf("输入错误,景点序号不存在!请再次输入景点序号:");scanf("%d",&v0);}if(v0>=0&&v0<G->vexnum)flag=0;}for(v=0;v<G->vexnum;v++){final[v]=0;D[v]=G->arcs[v0][v].adj;for(w=0;w<G->vexnum;w++)p[v][w]=0;if(D[v]<INFINITY){p[v][v0]=1;p[v][v]=1;}}D[v0]=0;final[v0]=1;for(i=1;i<G->vexnum;i++){min=INFINITY;for(w=0;w<G->vexnum;w++)if(!final[w])if(D[w]<min){v=w;min=D[w];}final[v]=1;for(w=0;w<G->vexnum;w++)if(!final[w]&&(min+G->arcs[v][w].adj<D[w])){D[w]=min+G->arcs[v][w].adj;for(x=0;x<G->vexnum;x++)p[w][x]=p[v][x];p[w][w]=1;}}for(v=0;v<G->vexnum;v++){if(v0!=v) printf("%s",G->vexs[v0].name);for(w=0;w<G->vexnum;w++){if(p[v][w]&&w!=v0) printf("-->%s",G->vexs[w].name); t++;}if(t>G->vexnum-1&&v0!=v)printf(" 总路线长%dm\n\n",D[v]);}}//ShortestPath_DIJ endvoid Floyd(MGraph *G){int v,u,i,w,k,j,flag=1,p[10][10][10],D[10][10];for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++){D[v][w]=G->arcs[v][w].adj;for(u=0;u<G->vexnum;u++)p[v][w][u]=0;if(D[v][w]<INFINITY){p[v][w][v]=1;p[v][w][w]=1;}}for(u=0;u<G->vexnum;u++)for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++)if(D[v][u]+D[u][w]<D[v][w]){D[v][w]=D[v][u]+D[u][w];for(i=0;i<G->vexnum;i++)p[v][w][i]=p[v][u][i]||p[u][w][i];}while(flag){printf("请输入始点和终点的序号:");scanf("%d%d",&k,&j);if(k<0||k>G->vexnum||j<0||j>G->vexnum){printf("景点序号错误!请再次输入始点和终点的序号:");scanf("%d%d",&k,&j);}if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum) flag=0;}printf("%s",G->vexs[k].name);for(u=0;u<G->vexnum;u++)if(p[k][j][u]&&k!=u&&j!=u)printf("-->%s",G->vexs[u].name);printf("-->%s",G->vexs[j].name);printf(" 总路线长%dm\n",D[k][j]);}//Floyd endint LocateVex(MGraph *G,char* v){int c=-1,i;for(i=0;i<G->vexnum;i++)if(strcmp(v,G->vexs[i].name)==0){c=i;break;}return c;}MGraph * CreatUDN(MGraph *G){int i,j,k,w;char v1[20],v2[20];printf("输入图的顶点数,弧数:");scanf("%d%d",&G->vexnum,&G->arcnum); printf("输入景点的编号:、名称、介绍:\n"); for(i=0;i<G->vexnum;i++){printf("景点序号:");scanf("%d",&G->vexs->num); printf("景点名称:");scanf("%s",G->vexs[i].name);printf("景点介绍:");scanf("%s",G->vexs->introduction); }for(i=0;i<G->vexnum;i++)for(j=0;j<G->vexnum;j++)G->arcs[i][j].adj=INFINITY;printf("请输入路径长度:\n");for(k=0;k<G->arcnum;k++){printf("第%d条边:\n",k+1);printf("景点对(x,y):");scanf("%s",v1);scanf("%s",v2);printf("路径长度:");scanf("%d",&w);i=LocateVex(G,v1);j=LocateVex(G,v2);if(i>=0&&j>=0){G->arcs[i][j].adj=w;G->arcs[j][i]=G->arcs[i][j];}}return G;}void print(MGraph *G){int v,w,t=0;for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++){ if(G->arcs[v][w].adj==INFINITY) printf("∞");else printf("%-7d",G->arcs[v][w].adj);t++;if(t%G->vexnum==0)printf("\n");}}旅客进行查询:1. 查看校园各景点2. 查看所有游览线路;3. 选择始点和终点4. 退出程序三、功能(函数)设计:一.本程序从总体上分为四个功能模块,分别为:(1)查看校园各景点,这一功能主要为来客提供要查的信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
海南大学课程名称数据结构(基于C语言)课程设计题目校园导游程序的设计与实现院系_信息科学技术学院____班级__通信工程B班_学生姓名___史兵全________指导教师吴泽辉日期_ 2014.12.15.-2015.1.7__软件专题训练任务书校园导游程序一、简介1.设计目的:通过校园导游程序的设计与实现,熟练掌握图型结构在实际问题中的应用。
2.问题的描述:设计一个校园模拟导游程序,为新生或来访的客人通过与机器的“对话“提供最短路径的信息查询服务。
1.任意选取n个场所,构成一个无向带权图,图中顶点表示场所,边上的权值表示两点间的距离,图的存储结构可采用带权的邻接矩阵。
2.咨询以用户和计算机的对话方式进行,由用户输入起始点和终点,输出信息:最短路径是多少?并指出所经过的场所。
3、计算并记录从校门口到各个场所的最短路径,即求单源点到其它各个场所的最短路径。
4、提供校园中任意场所的问路查询,即求任意两点之间的最短路径。
二、数据结构的设计:由于各个场所通过校园中的道路相连,各个场所和连接它们的道路构成了整个校园的地理环境,所以使用图这种数据结构对他们去进行描述。
以图中的顶点表示校园内各个场所,应包含场所名称、代号、简介等信息;以边表示连接各个场所的道路,应包含路径的长度等信息;顶点和边均使用结构体定义,整个图的数据结构采用教材中介绍的带权的邻接矩阵方法。
二、数据结构的设计:typedef struct ArCell{int adj; //路径长度}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct //图中顶点表示主要景点,存放景点的序号、名称、介绍等信息,{char name[30];int num;char introduction[100];//简介}infotype;typedef struct{infotype vexs[MAX_VERTEX_NUM]; AdjMatrix arcs;int vexnum,arcnum;}MGraph;MGraph b;void cmd(void){int i;b=InitGraph();Menu();scanf("%d",&i);while(i!=4){switch(i){case 1:Browser(&b);Menu();break;case 2:ShortestPath_DIJ(&b);Menu();break;case 3:Floyd(&b);Menu();break;case 4:exit(1);break;default: printf("输入序号不存在,请重新输入");break;}scanf("%d",&i);}MGraph InitGraph(void){MGraph G;int i,j;G.vexnum=10;G.arcnum=14;for(i=0;i<G.vexnum;i++)G.vexs[i].num=i;strcpy(G.vexs[0].name,"海南大学北门");strcpy(G.vexs[0].introduction,"高大威武");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,"3号教学楼");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,"外有建设银行");for(i=0;i<G.vexnum;i++)for(j=0;j<G.vexnum;j++)G.arcs[i][j].adj=INFINITY;G.arcs[0][1].adj=100;G.arcs[0][2].adj=80;G.arcs[0][6].adj=100;G.arcs[1][7].adj=120;G.arcs[2][3].adj=50;G.arcs[3][6].adj=110;G.arcs[3][4].adj=150;G.arcs[4][5].adj=60;G.arcs[4][9].adj=280;G.arcs[5][9].adj=250;G.arcs[6][7].adj=190;G.arcs[6][9].adj=180;G.arcs[7][8].adj=130;G.arcs[8][9].adj=100;for(i=0;i<G.vexnum;i++)for(j=0;j<G.vexnum;j++)G.arcs[j][i].adj=G.arcs[i][j].adj;return G;}//InitGraph end用的是一个switch语句实现输入不同的序号操作选项,调用不同的函数进入不同的操作板块// 迪杰斯特拉算法计,v0为始点void ShortestPath_DIJ(MGraph * G){int v,w,i,min,t=0,x,flag=1,v0;int final[20], D[20], p[20][20];while(flag){printf("请输入起始点序号:");scanf("%d",&v0);if(v0<0||v0>G->vexnum){printf("输入错误,景点序号不存在!请再次输入景点序号:"); scanf("%d",&v0);}if(v0>=0&&v0<G->vexnum)flag=0;}for(v=0;v<G->vexnum;v++){final[v]=0;D[v]=G->arcs[v0][v].adj;for(w=0;w<G->vexnum;w++)p[v][w]=0;if(D[v]<INFINITY){p[v][v0]=1;p[v][v]=1;}}D[v0]=0;final[v0]=1;for(i=1;i<G->vexnum;i++){min=INFINITY;for(w=0;w<G->vexnum;w++)if(!final[w])if(D[w]<min){v=w;min=D[w];}final[v]=1;for(w=0;w<G->vexnum;w++)if(!final[w]&&(min+G->arcs[v][w].adj<D[w])) {D[w]=min+G->arcs[v][w].adj;for(x=0;x<G->vexnum;x++)p[w][x]=p[v][x];p[w][w]=1;}}for(v=0;v<G->vexnum;v++){if(v0!=v) printf("%s",G->vexs[v0].name);for(w=0;w<G->vexnum;w++){if(p[v][w]&&w!=v0) printf("-->%s",G->vexs[w].name);t++;}if(t>G->vexnum-1&&v0!=v)printf(" 总路线长%dm\n\n",D[v]);}}//ShortestPath_DIJ endvoid Floyd(MGraph *G){int v,u,i,w,k,j,flag=1,p[10][10][10],D[10][10];for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++){D[v][w]=G->arcs[v][w].adj;for(u=0;u<G->vexnum;u++)p[v][w][u]=0;if(D[v][w]<INFINITY){p[v][w][v]=1;p[v][w][w]=1;}}for(u=0;u<G->vexnum;u++)for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++)if(D[v][u]+D[u][w]<D[v][w]){D[v][w]=D[v][u]+D[u][w];for(i=0;i<G->vexnum;i++)p[v][w][i]=p[v][u][i]||p[u][w][i]; }while(flag){printf("请输入始点和终点的序号:");scanf("%d%d",&k,&j);if(k<0||k>G->vexnum||j<0||j>G->vexnum){printf("景点序号错误!请再次输入始点和终点的序号:"); scanf("%d%d",&k,&j);}if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum)flag=0;}printf("%s",G->vexs[k].name);for(u=0;u<G->vexnum;u++)if(p[k][j][u]&&k!=u&&j!=u)printf("-->%s",G->vexs[u].name);printf("-->%s",G->vexs[j].name);printf(" 总路线长%dm\n",D[k][j]);}//Floyd endint LocateVex(MGraph *G,char* v){int c=-1,i;for(i=0;i<G->vexnum;i++)if(strcmp(v,G->vexs[i].name)==0){c=i;break;}return c;}MGraph * CreatUDN(MGraph *G){int i,j,k,w;char v1[20],v2[20];printf("输入图的顶点数,弧数:");scanf("%d%d",&G->vexnum,&G->arcnum);printf("输入景点的编号:、名称、介绍:\n"); for(i=0;i<G->vexnum;i++){printf("景点序号:");scanf("%d",&G->vexs->num);printf("景点名称:");scanf("%s",G->vexs[i].name);printf("景点介绍:");scanf("%s",G->vexs->introduction);}for(i=0;i<G->vexnum;i++)for(j=0;j<G->vexnum;j++)G->arcs[i][j].adj=INFINITY;printf("请输入路径长度:\n");{printf("第%d条边:\n",k+1); printf("景点对(x,y):");scanf("%s",v1);scanf("%s",v2);printf("路径长度:");scanf("%d",&w);i=LocateVex(G,v1);j=LocateVex(G,v2);if(i>=0&&j>=0){G->arcs[i][j].adj=w;G->arcs[j][i]=G->arcs[i][j]; }}return G;}void print(MGraph *G){int v,w,t=0;for(v=0;v<G->vexnum;v++){ if(G->arcs[v][w].adj==INFINITY)printf("∞ ");else printf("%-7d",G->arcs[v][w].adj);t++;if(t%G->vexnum==0)printf("\n");}}旅客进行查询:1. 查看校园各景点2. 查看所有游览线路; 3. 选择始点和终点 4. 退出程序三、功能(函数)设计:一.本程序从总体上分为四个功能模块,分别为: (1)查看校园各景点,这一功能主要为来客提供要查的信息。