个人项目

本次作业所属课程 2019北航软件工程暑期师资培训

本次作业要求 实现一个帮助进行地铁出行路线规划的命令行程序。
本次作业目标 使用IDEA开发工具,实现一个帮助进行地铁出行路线规划的命令行程序;并了解GitHub管理源代码流程
本次作业的帮助 在老师帮助下使用GitHub
本项目实现一个帮助进行地铁出行路线规划的命令行程序,参照平时实际出行时情况,考虑换乘、候车的时间等代价,在求地铁线路最短路径时,也按换乘次数最少来实施的。因能力有限,程序若有不完善的地方,尽情老师谅解。

  1. 地铁线路信息等用一个名为subway.txt文本文件存储,文件内容及格式如下:

1号线:刘园,西横堤,果酒厂,本溪路,勤俭道,洪湖里,西站#6,西北角,西南角#2,二纬路,海光寺,鞍山道,营口道#3,小白楼,下瓦房#5,南楼,土城,陈塘庄,复兴门,华山里,财经大学,双林,李楼
2号线:曹庄,卞兴,芥园西道,咸阳路,长虹公园#6,广开四马路,西南角#1,鼓楼,东南角,建国道,天津站#3#9,远洋国际中心,顺驰桥,靖江路#5,翠阜新村,屿东城,登州路,国山路,空港经济区,滨海国际机场
3号线:小淀,丰产河,华北集团,天士力,宜兴埠,张兴庄#5,铁东路,北站#6,中山路,金狮桥,天津站#2#9,津湾广场,和平路,营口道#1,西康路,吴家窑,天塔,周邓纪念馆,红旗南路#6,王顶堤,华苑,大学城,高新区,学府工业区,杨伍庄,南站
5号线:北辰科技园北,丹河北道,北辰道,职业大学,淮河道,辽河北道,宜兴埠北,张兴庄#3,志成路,思源道,建昌道,金钟河大桥#6,月牙河,幸福公园,靖江路#2,成林道,津塘路,直沽#9,下瓦房#1,西南楼,文化中心#6,天津宾馆#6,肿瘤医院#6,体育中心,凌宾路,昌凌路,中医一附院,李七庄南
6号线:南孙庄,南何庄,大毕庄,金钟街,徐庄子,金钟河大桥#5,民权门,北宁公园,北站#3,新开河,外院附中,天泰路,北运河,北竹林,西站#1,复兴路,人民医院,长虹公园#2,宜宾道,鞍山西道,天拖,一中心医院,红旗南路#3,迎风道,南翠屏,水上公园东路,肿瘤医院#5,天津宾馆#5,文化中心#5,乐园道,尖山路,黑牛城道,梅江道,左江道,梅江公园,梅江会展中心,解放南路,洞庭路,梅林路
9号线:天津站#2#3,大王庄,十一经路,直沽#5,东兴路,中山门,一号桥,二号桥,张贵庄,新立,东丽开发区,小东庄,军粮城,钢管公司,胡家园,塘沽,泰达,市民广场,太湖路,会展中心,东海路

线路名称后用“:”与其后站点间隔,站点与站点间用“,”间隔;
若某站为换乘或中专站点,在其后用“#数字”,表示在此线路的这个站点上可以换乘到数字序号所指的线路上,如1号线的西站可以转到6号线,9号线的天津站可以转到2号线和3号线。
2.问题涉及到信息较简单,没有画用例图,直接在Java语言中定义了相关的类,具体有:
站点Station类:
name; // 站点名称
routerIdList; // 包括该站点所有线路的列表
线路Router类:
name; //路线名称
stations; //路线上所有站点
路径Path类
count; //路径上站点数
pathName; //路径上所有站点名称组成的字符串,空格间隔
主类中具体实现任务,具体思路:
(1) 因为是一个帮助进行地铁出行路线规划的命令行程序,会涉及到命令中的参数,需要用main方法中的args参数去实现。
(2) 功能一:获取地铁线路图的信息,执行java subway –map subway.txt 。
先将subway.txt文件中的信息生成所有的线路信息routers和站点信息stations,实现了与地铁信息文件subway.txt的解耦,然后按要求输出routers中所有数据。
功能二:获取指定线路自起始站点到终点站点的所有站点信息并存储到station.txt文件中,执行java subway -a 1号线 -map subway.txt -o station.txt(1号线只是举例,可换其他线路)。
同功能一类似,只是需具体到线路routers中取指定线路信息,按每个站点一行的格式输出到station.txt文件。
功能三:获取起始站点和目的站点间的最短路径,执行Java subway -b 洪湖里 复兴路 -map subway.txt -o routine.txt。(洪湖里、复兴路为起始站点和目的站点,可换地铁线路图上其他任何两个站点)
此功能是本程序的重点和难点,基于换乘次数最少的原则,分下面几种情况处理:
 起始站点和目的站点在同一线路上:直接计算路径的站点数和依次包含的站点名称即可
 起始站点和目的站点不在同一线路上,但两个站点分别所在的两条线路有交汇点,即中转站点,此时问题转化为求:起始站点和中转站点的路径、中转站点和目的站点的路径。
 起始站点和目的站点不在同一线路上,且两个站点分别所在的两条线路没有交汇点(如1号线和9号线),此时处理方法是首先分别获取起两条线路上的所有中转站点集合,在这两个中转站点集合里各选出一个中转站点,假如是ss站点和se站点,则构成一条自起始站点--->ss站点--->se站点--->目的站点的路径,所有这样的路径中最短的那条路径即是所求路径。
3.因无项目经验,所以项目开发流程不规范,实际程序编写过程可能不能完全对应项目开发流程,仅做一简单的用时总结,程序思路基本上用了5小时(因工作原因,先后在两天内完成),具体开始设计程序时,类的设计在功能性模块实现时有修改,具体时间不再估计;第一版程序代码完成后,进行自我测试、反复修改,这个用时较多,先后用了大概6天时间,每天4小时左右吧。
4.测试用例,存储在具体“个人项目测试用例.txt”文件中。

posted @ 2019-07-21 17:41  hdxy  阅读(445)  评论(0编辑  收藏  举报