ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:168.86KB ,
资源ID:12014879      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12014879.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计报告3440130.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计报告3440130.docx

1、数据结构课程设计报告3440130(此文档为word格式,下载后您可任意编辑修改!) 第15小组课程设计报告 题目:全国铁路运输网最佳经由问题 组员: 幸慧()、彭西()、 韩向檀()、夏权()、杨洁()、张磊() 班 级: 指导教师: 高永平 2015年 01 月 08 日 目录 一、需求分析1.问题描述2.基本要求二、总体设计 1. 程序流程图2. 数据结构设计三、详细设计1.程序设计思想2.软件模块结构图3.源程序四、调试分析1.测试数据2.时间复杂度分析3.上机遇到的问题及解决方案4.算法的改进设想五、用户使用手册六、心得体会一、需求分析1.问题描述该题目采用我国铁路运输网的数据进行编

2、程和运行验证。详细可在网上搜索全国铁路局管辖线路示意图,只要全国的主干线就可以了。铁路运输网络中由铁路线和火车站的两个主要概念,譬如:1号铁路线表示京广线,2号铁路线表示京沪线等。铁路线对象包括铁路线编号,铁路线名称,起始站编号,终点站编号,该铁路线长度,通行标志(00B客货运禁行,01B货运通行专线,10B客运通行专线,11B客货运通行)。火车站对象包括所属铁路线编号,车站代码,车站名,车站简称,离该铁路线起点站路程及终点站路程。2.基本要求(1)查询某站所属的铁路线(2)要求具备新增铁路线的管理功能(3)要求具备新增车站的管理功能(4)针对客运,货运情况能计算任何一个起始车站到任何一个终点

3、站之间的最短路径。并且要求能够显示出该最短路径的各个火车站的经由顺序二、总体设计1. 程序流程图2.数据结构设计存储结构:本程序部分函数采用的是文件进行数据的存储,所以采用的是顺序存储结构,如要添加数据,直接在文件里面进行操作就行了。弗洛伊德算法中采用的存储结构是图的邻接矩阵。A.如下为抽象数据类型定义的模板以及抽象数据类型线性表的定义: ADT List数据对象:D=ai| ai ElemSet,i=1,2,3,n,n0数据关系:R1=| ai-1,ai D,i=1,2,3,n基本操作:void readways()初始条件:views.txt已经存在。操作结果:将 views.txt里面的

4、数据一次存入数组viewsSIZE_view里,并将数组里面的存储数据的个数赋值给全局变量view_count;void readways()初始条件:ways.txt已经存在。操作结果:将 ways.txt里面的数据一次存入数组waysSIZE_way里,并将数组里面的存储数据的个数赋值给全局变量way_count;void readlines()初始条件:lines.txt已经存在。操作结果:将 lines.txt里面的数据一次存入数组linesSIZE_line里,并将数组里面的存储数据的个数赋值给全局变量line_count;void search();初始条件:viewsSIZE_v

5、iew存在,且里面放有相关信息。操作结果:根据用户输入的车站名查找该车站的相关信息并输出;void addview()初始条件:views.txt已经存在。操作结果:将 views.txt里面的数据一次存入数组viewsSIZE_view里,并将数组里面的存储数据的个数赋值给全局变量view_count;void addway()初始条件:ways.txt已经存在。操作结果:将 ways.txt里面的数据一次存入数组waysSIZE_way里,并将数组里面的存储数据的个数赋值给全局变量way_count;void addline()初始条件:lines.txt已经存在。操作结果:将 lines

6、.txt里面的数据一次存入数组linesSIZE_line里,并将数组里面的存储数据的个数赋值给全局变量line_count;void floyed()初始条件: viewsSIZE_view、waysSIZE_way、linesSIZE_line已经存在并且存有相关信息。操作结果:把每个车站到各个车站的最短经由路径及此路径的距离存储在path_info、path_listSIZE_viewSIZE_view数组里;void shortest_path()初始条件:path_info、path_listSIZE_viewSIZE_view存储相关的数据; 操作结果:输出输入的两个站的最短距离及

7、经过的所有站;void addadta(int menu)初始条件:views.txt、ways.txt、lines.txt已经存在。操作结果:如果menu=1,则添加车站数据,如果menu=2,则添加路线数据;B.弗洛伊德算法中,数据结构所用到的思想为图的思想,所以数据结构的设计主要的目的为便于图的操作的设计。因此我们用了下面这些数据定义。 struct view_info *城市信息结构*int id; char name20; int code; char shortname20; char LName100;经过此站的铁路线名称viewsSIZE_view;struct line_in

8、fo铁路线信息结构int Lid; char LName20; int start_id; 始发站 int end_id; 终点站 int dist; 铁路线长 char sign5; 通行标志linesSIZE_line;struct way_info 铁路度的信息结构int station1; int station2; int dist;waysSIZE_way;struct path_info 用于最短路径的查询;三、详细设计1.程序设计思想设计思路:核心问题:求最短路径(弗洛伊德算法)数据模型(逻辑结构):带权有向图输入输出:初始数据是从views.txt、lines.txt、way

9、.txt三个文件中读入,在读入数据后,用户可以根据选项选择相应的功能,不同的功能有不同的数据输入输出,比如:查询的功能是要求输入要查询的站的名称,然后输出是该站的相关信息;查询最int count; int pathSIZE_view;短路径的功能则是输入起点站、终点站的名称,输出则是该段路线距离和经由站等。程序的输入:(1)铁路线信息的输入:依次输入“铁路线代码,铁路线名称,起始站代码, 终点站代码,该铁路线长度、通行标志” ,并且中间以空格隔开。(2)火车站信息的输入:依次输入“车站代码,车站名,车站编号、车站简称,所属铁路线编号” ,并且中间以空格隔开。程序的输出格式: (1)当显示铁路

10、线或者火车站的信息时,与输入时的格式完全一致 ; (2)输出最短路径的长度,以及最短路径的经由顺序;按照程序功能要求,设计了一下各个功能模块:(1)、文件读取模块文件读取模块包括读取车站信息模块readviews、路段权值信息读取模块readlines、铁路线信息读取模块readlines。这些模块的主要功能为从文件中读取所需的信息。(2)、添加信息模块adddata添加信息模块又包括以下子功能模块:A、添加站点信息模块addview。B、添加路段权值模块addway。C、添加铁路线信息模块addline。(3)查询模块根据用户需求,查询站点信息(4)最短路径查询模块该模块为本软件设计的核心部

11、分。根据该模块可以很方便的找出两个城市的最短路径。该最短路径的算法为常用的弗洛伊德算法。(5)操作菜单模块该模块主要用于与用户的交互,一个界面友好的菜单可以提高软件的人机交互体验。2. 软件模块结构图(1)主程序模块,其中主函数为:void main() 新增火车站;新增铁路线;查询火车站的信息;针对客运、货运情况,求两站之间的最短路径及其经由顺寻;退出界面 (2) 文件模块为:void readways(); void readviews(); void readlines() (3)图模块为:Void short_path();void floyed() (4)查询函数和添加函数void

12、search();void adddata(in menu); void addway(); void addline();void addview() 函数的调用:进入主函数,调用文件模块各函数以读取数据;选择1或2,则调用void adddata(in menu),其中若选择1,则调用void addview()函数,若选择2,则调用void addline()和void addway()函数;选择3,调用void search()函数进行查询;选择4,调用void short_path()和void floyed()函数以得到最短路径。3.源程序(见附录) 四、调试分析1.测试数据数据读

13、取如下:功能测试截图:输入1,增加车站信息如下: 输入2,增加铁路线信息如下:输入3,查询车站信息如下:输入4,查询最短路径如下:输入5,退出界面如下;2.时间复杂度分析程序中图的存储结构为带权邻接矩阵, 其中对邻接矩阵的初始化的时间复杂度为O(n*n); 在求最短路径的时候,用的是弗洛伊德算法,时间复杂度主要在于求每一站到任意站的最短路径由是的for循环,那有三个for循环,所以时间复杂度为O(n3)。3.上机过程中出现的问题及其解决方案(1)刚刚看到题目要求的时候就想到了弗洛伊德算法,但是不知道如何去做,在网站搜索到类似代码,经过修改后,最终得出了源程序。(2)源程序可以运行的时候,忘记添

14、加相关文本文件,所以运行文件的时候会提示文件打开失败,无法进行接下来的功能使用,这时候才想起来要自行添加相关的文本文档,接着问题就解决了。(3)在way.text文本文档中添加各站权值的时候,一开始不知道如何添加,经过思考和查询课本后,明白了添加权值时是以各站编码代表各站,由于是有向图,所以需要添加两站往返权值。(4)在输入信息时,由于是输入汉字,系统不稳定,容易出现刷屏,这个问题,我是向学长寻求帮助并得以解决的。4.算法的改进设想1.程序界面不够美观,需要改进,作为人机交互的界面,应尽量美观舒适,提高人机交互体验。2.铁路交通网的管理还有很多方面,例如删除某些铁路线或火车站五、用户使用手册首

15、先运行可执行文件,执行文件为:test.exe。根据需要选择相应的数字代码:【1】 选择1,增加车站信息。首先输入新车站的id,输入为数字(必须大于所给提示信息),其次输入新车站名称,输入为文字,接着输入新车站的编号,输入为数字(必须大于所给信息),然后输入新车站的简称,输入为英文字母(一般为新车站拼音首字母),接着输入新车站经过的路线,输入为文字。最后选择是否继续,输入为n(不)或y(是)。【2】 选择2,增加铁路线信息。首先输入新铁路线信息的Lid,输入为数字(必须大于所给提示信息),其次输入新铁路线名称,输入为文字,接着分别输入新铁路线的起始站id和终点站id,输入为数字,然后输入距离,

16、输入为数字,通行标志:00B客货运禁行,01B货运通行专线,10B客运通行专线,11B客货运通行,接着输入权值信息,前一站和后一站的编码,输入为数字,两站的距离,输入为数字。最后选择是否继续,输入为n(不)或y(是)。【3】 选择3,查询车站信息。输入需要查询的车站名称,输入为文字。最后选择是否继续,输入为n(不)或y(是)。【4】 选择4,查询最短路径。分别输入需要查询最短路径的起始站和终点站的名称。最后选择是否继续,输入为n(不)或y(是)。【5】选择5,退出程序。六、心得体会本次课程设计我们做的是全国铁路网最经经由问题,功能都实现了,运行顺畅。对于这次的数据结构设计我觉得我们还是挺成功的

17、。以下是我在这次数据结构中的体会。我觉得相比大一做的C语言程序设计而言,这次的程序难了很多,但同时教会了我更多的知识,最重要的就是让我明白了数据结构这门课程的使用价值。以前,在课堂上老师一遍遍的讲到数据结构和编程语言的关系,自从完成了课程设计以后我突然恍然大悟,明白了数据结构和C语言等编程语言的关系。简单的说,它就是一个程序所采用的逻辑结构(有集合,线性表,树和图等)和存储结构(顺序和链表)。只有确定了这些,再加上算法才能写出一个程序。在写本次程序时,遇到了不少的问题。主要还是对编程语言的不熟悉,虽然总体思路可以明确,但是真的写起来却漏洞百出。因此,我们上网搜索相关资料,找到了类似的源程序,参

18、考源程序之后,我们进行了一系列的改错和完善。遇到不明白的部分,马上询问学长或者优秀的同学,让他们为我们指点迷津。最终把他们都解决了。虽然这次花的时间比较多,但是收获也是很大啊。最重要的收获就是:当遇到问题时,要很高兴的面对它。相信自己一定能解决这个问题。接下来,要沉住气,不断地尝试,不断地调试,最终会把问题给解决的。我认为编程遇到问题是一件很高兴的事情。只有遇到问题,才能有问题解决。解决问题也是一件很开心的事情。 通过本次课程设计,增强了我的调试程序的能力,以及分析程序,分析算法的能力。巩固了我数据结构的知识,对与去年学习的一门学科的温习,让我更了解了弗洛伊德算法,熟练掌握了函数的定义,函数的

19、调用等编程能力。我相信只有自己的能力不断地提高,才能编写出高质量的程序来。课程设计期间,不得不提的是合作。因为合作我们才能又快又好的完成任务。当今社会,需要一个会思考会设计的人,但是更需要的是一个懂合作,会合作的搭档。只有两个人默契配合,合理分工才能顺利的完成任务。我很开心能和我的搭档一组,我们分工合作,在整个课程设计中遇到问题一起商量,一起解决,让我感受到了合作的快乐。最后我想说,数据结构是一门很复杂的学科,难懂。但是只要你利用学习到的理论知识去实践,结合实践去分析和理解它,最终你会发现它也不过如此。 在实践的过程中互相帮助很重要,它能让你在困境中体会到快乐,在苦涩的学习中体会友情带来的快乐

20、!附录:#include #include #include #include #include #include #define SIZE_view 50#define SIZE_line 100#define SIZE_way 300#define MAXNODE 30 定义最多节点数 #define MAXCOST 10000using namespace std;struct view_info *城市信息结构* int id;int code;char name20;char shortname20;char LName100;经过此站的铁路线名称viewsSIZE_view;str

21、uct line_info铁路线信息结构int Lid;char LName20;int start_id; 始发站int end_id; 终点站int dist;铁路线长char sign5; 通行标志linesSIZE_line;struct way_info 铁路度的信息结构int station1;int station2;int dist;waysSIZE_way;struct path_info 用于最短路径的查询int count;int pathSIZE_view;int view_count,line_count,way_count; 用来存储文件中有多少条记录int dis

22、t_listSIZE_viewSIZE_view; 定义一个数组struct path_info path_listSIZE_viewSIZE_view; 定义一个path_info结构体变量.void readviews();彭西void readways();彭西void readlines();幸慧void search();幸慧void addview();韩向檀void addway();韩向檀void addline();杨洁void shortest_path();杨洁void floyed();夏权void adddata(int menu);夏权void main()张磊外加

23、敲代码readviews();coutendlendl;readlines();coutendlendl;readways();while(1)int menu;coutendlendl;cout 全国铁路运输网经由系统endl;cout*endl; cout 1、增加车站信息endl;cout 2、增加铁路线信息endl;cout 3、查询车站信息endl;cout 4、查询最短路径endl;cout 5、退出界面endl;cout*endl; cout请选择你要的操作代码.1-5):menu;while(menu5)couterror!please enter again:; coutme

24、nu;switch(menu)case 1:case 2:adddata(menu);break;case 3:while(1)search();coutdo you want to continue?(yn)endl; coutendl你是否要继续?(yn)con;if(con=y);elsebreak;break;case 4:while(1)shortest_path();coutdo you want to continue?(yn)endl;coutendl你是否要继续?(yn)con;if(con=y);* addline();*elsebreak;break;case 5:cou

25、t谢谢使用.再会.view_count; *if(!infile) 打开文件失败cerrcant open views.txt!endl;cerr不能打开 views.txt!view_count;先读入文件个数for(i=0;i+)infileviewsi.idviewsi.nameviewsi.codeviewsi.shortnameviewsi.LName;if(i!=0&viewsi.id=0)break;view_count=i;view_count=i;给出源文件中车站的个数infile.close();下面是测试用的代码coutsetiosflags(ios:left);cout

26、城市信息结构endlendl;coutsetw(8)idsetw(9)namesetw(8)codesetw(12)shortnamesetw(10)LNameendl;coutsetw(8)序号setw(9)名称setw(8)codesetw(12)简称setw(10)经过此站的铁路线名称endl;for(i=0;iview_count;i+)coutsetw(8)viewsi.idsetw(9)viewsi.namesetw(8)viewsi.codesetw(12);coutviewsi.shortnameviewsi.LNameendl;coutway_count;* 把文件中的记录付

27、给way_countif(!infile) 打开文件失败cerrcant open ways.txt!endl;cerr不能打开 ways.txt!waysi.station1waysi.station2waysi.dist;if(i!=0&waysi.station1=0)break;way_count=i;infile.close();测试用.输入路段的信息coutsetiosflags(ios:left);coutsetw(12)station1setw(12)station2distendl; for(i=0;iway_count;i+) coutsetw(12)waysi.station1setw(12)waysi.station2; coutwaysi.distendl; coutresetiosflags(ios:left);幸慧void readlines()读文件lines.txtint i;ifstream infile(lines

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1