数据结构课程设计之全国铁路最佳路径问题.doc
《数据结构课程设计之全国铁路最佳路径问题.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计之全国铁路最佳路径问题.doc(35页珍藏版)》请在三一办公上搜索。
1、20102011年度 第 2 学期 一、需求分析 1.问题描述:这是上海铁路局目前仍在使用的行包托运软件中的一部分内部算法。该题目采用1995年年底我国铁路运输网的真实数据进行编程和运行验证。铁路运输网络中由铁路线和火车站的两个主要概念,譬如:1号铁路线表示京广线,2号铁路线表示京沪线等。铁路线对象包括铁路线编号,铁路线名称,起始站编号,终点站编号,该铁路线长度,通行标志(00B客货运禁行,01B货运通行专线,10B客运通行专线,11B客货运通行)。火车站对象包括所属铁路线编号,车站代码,车站名,车站简称,离该铁路线起点站路程及终点站路程。2.基本功能(1)查询某站所属的铁路线 (2)要求具备
2、新增铁路线的管理功能(3)要求具备新增车站的管理功能 (4)针对客运,货运情况能计算任何一个起始车站到任何一个终点站之间的最短路径。并且要求能够显示出该最短路径的各个火车站的经由顺序3.输入输出初始数据是从views.txt、lines.txt、ways.txt三个文件中读入,在读入数据后,用户可以根据选项选择相应的功能,不同的功能有不同的数据输入/输出,比如:查询的功能是要求输入要查询的站的名称,然后输出是该站的相关信息;查询最短路径的功能则是输入起点站、终点站的名称,输出则是该的路线距离和经由站等二、 概要设计1.设计思路:核心问题: 求最短路径(选址的要求就是超市到各单位权值之和最少)数
3、据模型(逻辑结构): 带权有向图 (权值计算: 距离*频度)2.数据结构设计:存储结构: 本程序采用的是文件进行数据的存储,所以才用的是顺序存储结构,如要添加数据,直接在文件里面进行操作就行。 如下为抽象数据类型定义的模板及抽象数据类型线性表的定义如下:ADT List数据对象:D=ai| ai ElemSet,i=1,2,3,n,n0数据关系:R1=| ai-1,ai D,i=1,2,3,,n基本操作:void readviews()初始条件:views.txt已经存在。操作结果:将 views.txt里面的数据一次存入数组viewsSIZE_view里,并将数组里的存储数据的个数赋值给全局
4、变量view_count;void readways()初始条件:ways.txt已经存在。操作结果:将 ways.txt里面的数据一次存入数组waysSIZE_view里,并将数组里的存储数据的个数赋值给全局变量way_count;void readlines()初始条件:lines.txt已经存在。操作结果:将 lines.txt里面的数据一次存入数组linesSIZE_view里,并将数组里的存储数据的个数赋值给全局变量line_count.void search();初始条件:viewsSIZE_view存在,且里面放有相关的数据。操作结果:根据用户输入的车站名查找该车站的相关信息并输
5、出;void addview();初始条件:views.txt已经存在。操作结果:将 views.txt里面的数据一次存入数组viewsSIZE_view里,并将数组里的存储数据的个数赋值给全局变量view_count;void addway();初始条件:ways.txt已经存在。操作结果:将 ways.txt里面的数据一次存入数组waysSIZE_view里,并将数组里的存储数据的个数赋值给全局变量way_count;void addline();初始条件:lines.txt已经存在。操作结果:将 lines.txt里面的数据一次存入数组linesSIZE_view里,并将数组里的存储数据
6、的个数赋值给全局变量line_count.void floyed();初始条件:viewsSIZE_view、waysSIZE_view、linesSIZE_view存在并且存有相关的信息操作结果:把每个车站到人一个车的最短经由路径及此路径的距离存储在path_info path_listSIZE_viewSIZE_view数组里;void shortest_path()初始条件:path_info path_listSIZE_viewSIZE_view存在且存储相关的数据;操作结果:输出输入的两个站的最短距离及经过的所有站;void adddata(int menu)初始条件:views.t
7、xt、ways.txt、lines.txt已经存在。操作结果:如果menu=1,则添加车站数据,如果menu=2,则添加路线数据;3.软件结构设计:三、 详细设计 1.定义程序中所有用到的数据及其数据结构,及其基本操作的实现;struct view_info /*车站信息结构*/ int id; /车站的id编号char name20; /车站的名字int code; /车站的编码char shortname20; /车站的简称char LName100;/经过此站的铁路线名称viewsSIZE_view;struct line_info/铁路线信息结构int Lid; /铁路线的id编号ch
8、ar 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; ;2.主函数和其他函数的代码算法
9、;(1)void main()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)coutmenu;switch(men
10、u)case 1:case 2:adddata(menu);break;case 3:while(1)search();coutdo you want to continue?(y/n)con;if(con=y);else break;break;case 4:while(1)short_path();coutdo you want to continue?(y/n)con;if(con=y);/*addline();*/else break;break;case 5:cout谢谢使用,再会!endl;exit(1);(2)void readviews()int i;ifstream infi
11、le(views.txt,ios:in); /打开文件if(!infile) /打开文件失败cerrcant open views.txt!viewsi.idviewsi.nameviewsi.codeviewsi.shortnameviewsi.LName;if(i!=0&viewsi.id=0)break;view_count=i;infile.close();/下面是测试用的代码 coutsetiosflags(ios:left); coutsetw(8)idsetw(9)namesetw(8)codesetw(12)shortnamesetw(10)LNameendl; for(i=0
12、;iview_count;i+) coutsetw(8)viewsi.idsetw(9)viewsi.namesetw(8)viewsi.codesetw(12); coutviewsi.shortnameviewsi.LNameendl; coutresetiosflags(ios:left);(3)void readways()/读文件ways.txtint i;ifstream infile(ways.txt,ios:in);/打开文件if(!infile) /打开文件失败cerrcant open ways.txt!waysi.station1waysi.station2waysi.d
13、ist;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);(4)void readlines()/
14、读文件lines.txtint i;ifstream infile(lines.txt,ios:in);/打开文件if(!infile) /打开文件失败cerrcant open lines.txt!linesi.Lidlinesi.LNamelinesi.start_id;infilelinesi.end_idlinesi.distlinesi.sign;if(i!=0&linesi.Lid=0)break;line_count=i;infile.close();/下面的代码为测试时用的coutsetiosflags(ios:left);coutsetw(8)Lidsetw(12)LName
15、setw(10)start_id;coutsetw(10)end_idsetw(8)distsignendl;for(i=0;iline_count;i+)coutsetw(8)linesi.Lidsetw(12)linesi.LNamesetw(10)linesi.start_id;coutsetw(10)linesi.end_idsetw(8)linesi.distlinesi.signendl;coutresetiosflags(ios:left); /这里输出文本中的信息(5)void search() /查询车站信息(所在的铁路线)coutsta_name; /输入要查询的名字cou
16、tendl;int i,mark;for(i=0;iview_count;i+)if(strcmp(sta_name,viewsi.name)=0)coutthe station informations is:nendl;coutsetiosflags(ios:left);coutsetw(8)idsetw(9)namesetw(8)codesetw(12)shortnamesetw(10)LNameendl;coutsetw(8)viewsi.idsetw(9)viewsi.namesetw(8)viewsi.codesetw(12);coutviewsi.shortnameviewsi.
17、LNameendl;coutresetiosflags(ios:left);break;mark=i;if(mark=view_count-1) /若没找到,输出提示coutsorry, the station is not in here!endl;(6)void addview()coutPlease enter the new views informations:endl; /输入新的车站信息coutviewsview_count-1.idviewsview_count.id;while(1)if(viewsview_count.idviewsview_count-1.id)coutv
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 全国铁路 最佳 路径 问题
链接地址:https://www.31ppt.com/p-2853762.html