课程设计报告内容.doc_第1页
课程设计报告内容.doc_第2页
课程设计报告内容.doc_第3页
课程设计报告内容.doc_第4页
课程设计报告内容.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一. 设计目的1. 强化上机动手能力,在理论和实践的基础上进一步巩固数据结构课程学习的内容,掌握工程化软件设计的基本方法;2. 掌握图的创建和应用;3. 掌握迪杰斯特拉以及Prim等基本算法思想;4. 掌握if语句及switch语句的运用方法及嵌套应用方法;5. 掌握C语言主函数和被调用函数之间的参数传递方式,学会函数的调用过程和方法;6. 掌握结构体类型变量的定义和使用;7. 掌握指针变量和指向指针的指针变量的定义及使用,进一步了解指向结构体的指针变量的概念及使用方法;8. 能够采用模块化思想调试程序;9. 学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力;10. 为后续各门计算机课程的学习打下坚实基础。二. 设计内容用C语言编写了西邮校园导游咨询系统,通过使用循环、条件、数组、结构体、函数、指针、等相关C语言知识学习编写较大的程序,结合数据结构中的算法思想实现一个导游咨询系统基本的功能。三概要设计1功能模块图;退出界面西邮沿途风景,ATM机介绍新鲜资讯修改景点信息,新西邮两个景点间的最短距离输入出发点和目的地获取所有游览线路从某一景点出发的最短连通路线从一个景点到其他所有景点的最短距离查看景点信息浏览校园全景西邮校园导游咨询系统2各个模块详细的功能描述。(1)浏览校园全景可让用户浏览校园平面全景图,图上信息包括景点名称,路径长度,风景位置,ATM机位置等,一目了然。(2). 查看景点信息 用户根据界面显示的校园景点信息表,输入要查询的景点名称,可以查看景点信息。(3). 从一个景点到其他所有景点的最短距离利用迪杰斯特拉算法,由用户输入要查询的景点编号,查询该景点到其余所有景点的最短路径,以及最短路径长度。(4). 从某一景点出发的最短连通路线 利用Prim算法求最短连通图,也就是说,让用户输入起始的景点名称就可以查询由该景点出发的所有最短连通图。(5). 用户输入出发点和目的地获取所有游览线路 利用图的深度遍历,调用递归的思想逐个遍历景点,找到由出发点到目的地的所有游览路线,并打印出来。(6). 两个景点之间的最短距离 在菜单中通过switch语句进入排序功能,同样使用迪杰斯特拉算法求出图中两个节点之间的最短路径,这里由用户输入两个景点的名称就可查询两个景点之间的最短路径,以及路径长度。(7). 修改景点信息,新西邮在菜单中通过switch语句进入修改功能,输入要修改的景点信息数目以及要修改景点的序号,输入新的信息以及修改的路径,即修改成功,重新查询就可查询到新的景点信息。(8). 西邮沿途风景,ATM机介绍新鲜资讯在菜单中通过switch语句进入查询功能,改模块主要是方便用户了解西邮的推荐景点的位置以及常用的ATM机的位置,每天会更新“旭日苑”和“美食广场”推荐的美食,我觉得是个比较贴近生活的模块。 (9).安全退出 用exit(0)实现,退出导游系统;(10).main 函数 通过主函数main()将各个模块结合起来,main()函数主要调用了menu()菜单。四详细设计1功能函数的调用关系图 主函数main()Case1:显示校园全景图Case2:查看景点信息Case3:从一个景点到其余所有景点最短路径Case4:从一个景点出发的最短连通图Case5:出发点到目的地的所有路径Case6:两个景点之间的最短距离Case7:修改景点信息Case8:景点位置,ATM机介绍,今日资讯Case9:退出系统菜单menu()2各功能函数的数据流程图录入信息模块 开始邻接矩阵存储申请空间依次设置景点编号输入路径长输入介绍输入名称景点信息存储在邻接矩阵中查找信息模块输入要查找的景点名称调用locate()函数所查询景点序号存在输出信息不存在返回主菜单选择2两景点最短路径模块输入两个景点的名称调用Dijkstra()函数按景点序号依次比较找最短路径返回主菜单选择6输出最短路径和长度两景点所有路径模块输入两个景点的名称调用path()函数由该景点开始试探有无到终点的路径,递归再找下一个顶点返回主菜单选择3输出两景点所有路径一景点出发的最短连通路径模块输入出发景点的名称调用Prim()函数从该景点出发选择与它关联的最小权值的边,加入到最小生成树中的集合返回主菜单选择4输出最小生成树修改景点信息模块调用Newgraph()函数函数修改景点的基本信息,以及边的信息返回主菜单选择7修改成功,查询信息已变3重点设计及编码/利用Dijkstra算法求得从起点景点到终点景点的最短路线void Dijkstra(AdjMatrix *G,int start,int end,int dist,int pathMAX)int mindist,i,j,k,t=1; for(i=0;ivexnum;i+)/初始化disti=G-arcsstarti;if(G-arcsstarti!=INFINITY)pathi1=start;pathstart0=1;for(i=1;ivexnum;i+)/寻找各终点mindist=INFINITY;for(j=0;jvexnum;j+)/选择路线最短的线路if(!pathj0&distjmindist)k=j;mindist=distj;if(mindist=INFINITY)return;pathk0=1;for(j=0;jvexnum;j+)/修改路线if(!pathj0&G-arcskjarcskjarcskj;t=1;while(pathkt!=0)/记录最新的最短路线pathjt=pathkt;t+;pathjt=k;pathjt+1=0;for(i=0;ivexnum;i+)if(i=end) break;printf(%s-%s最短路线为:,G-,G-);for(j=1;pathij!=0;j+)printf(%s,G-);printf(-%s距离为%dmn,G-,disti);/寻找最短路线void Shortroute(AdjMatrix *G)char sightMAX;int start,end;int distMAX,pathMAXMAX=0;system(cls);menu1();printf(请输入起始景点:);scanf(%s,sight);start=Locate(G,sight);printf(请输入终止景点:);scanf(%s,sight);end=Locate(G,sight);Dijkstra(G,start,end,dist,path);/修改创建新的图int Newgraph(AdjMatrix * G)int changenum; /计数。用于记录要修改的对象的个数int i,m,n,t,distance,v0,v1;system(cls);menu1();printf(n下面请输入你要修改的景点的个数:n);scanf(%d,&changenum);while(changenumG-vexnum )printf(n输入错误!请重新输入);scanf(%d,&changenum);for(i=0; );printf(n请输入景点的简介:);scanf(%s,&G-roduction );printf(n下面请输入你要更新的边数);scanf(%d,&changenum);while(changenumG-arcnum )printf(n输入错误!请重新输入);scanf(%d,&changenum); printf(n下面请输入更新边的信息:n);for(i=1;i=0&n=0)G-arcsmn =distance;G-arcsnm =G-arcsmn ;return 1;/打印序号为m,n景点间的长度不超过8个景点的路径void path(AdjMatrix *G, int m,int n,int k) int s,x=0;int t=k+1; /t 记载路径上下一个中间顶点在d数组中的下标if(dk=n & k8) /dk存储路径顶点。若dk是终点n且景点个数=8,则输出 /递归出口,找到一条路径for(s=0;s,G-); /输出该路径。s=0 时为起点mprintf(%s,G-); /输出最后一个景点名printf(nn); elses=0;while(svexnum) /从第m个顶点,试探至所有顶点是否有路径if(G-arcsdksINFINITY) & (visiteds=0) /初态visiteds=1;dk+1=s; /存储顶点编号s 至dk+1中path(G,m,n,t); /打印出一条m至n的路径visiteds=0; s+; /试探从下一个顶点 s 开始是否有到终点的路径/打印两景点间的景点个数不超过8的所有路径int Allpath(AdjMatrix * G)int k,m,n;char sight1MAX;char sight2MAX;system(cls);menu1();printf(nn请输入你要查询的两个景点名称:nn);scanf(%s%s,sight1,sight2);printf(nn);m=Locate(G,sight1); /确定该顶点是否存在。若存在,返回该顶点编号n=Locate(G,sight2);d0=m; /存储路径起点m (int d数组是全局变量)for(k=0;kvexnum;k+) /全部顶点访问标志初值设为0visitedk=0;visitedm=1; /第m个顶点访问标志设置为1path(G,m,n,0); /k=0,对应起点d0=m。k为d数组下标return 1;五测试数据及运行结果1正常测试数据和运行结果2异常测试数据及运行结果六调试情况,设计技巧及体会1改进方案这次课程设计时间比较短,问题比较多,最大的问题就是求所有路径和最短路径,这个花了我很多时间,通过实践知道调试的时候可以多加一些printf()语句查错。另外自己再外观上通过调用DOS命令玩了很多花样比如说换背景颜色。需要改进的就是存储问题,我用的是初始化,这样修改不是很方便,我想如果有时间的话,我会改成文件存储,这样会更好,更方便。2体会通过这次课程设计,我发现自己对图还很不熟,栈的运用也不是很娴熟,在这之前曾编过两个跟图有关的题,做这个的时候才不那么束手无策。发现其实程序要写得好,关键在于它的移植性,可以多次调用,代码才会简单。有些程序就是在我以前的程序上作了修改直接拿过来用的。通过这次课程设计发现自己连c语言的门都没入。C语言要学好并不是那么简单,光听老师讲就行了。有很多问题是在自己动手编的时候发现的。只有程序编得多,问题出来得多,自己才有经验,下次遇到才知道该怎么做,而不是一头雾水。自己做的系统太简陋了,无法运用不到实际生活中,与真正的系统相差甚远,实用性很差,界面也不好看。功能特不完善。对于数据结构来说,我们还只是菜鸟级别。以后要学的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论