结对编程 地铁最短路径
一、任务:
实现一个帮助进行地铁出行路线规划的命令行程序。
PSP 2.1 | Personal Software Process Stages | Time |
---|---|---|
Planning | 计划 | |
· Estimate | · 估计这个任务需要多少时间 | 7d |
Development | 开发 | |
· Analysis | · 需求分析 (包括学习新技术) | 2d |
· Design Spec | · 生成设计文档 | 1d |
· Design Review | · 设计复审 (和同事审核设计文档) | 2d |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 1d |
· Design | · 具体设计 | 2d |
· Coding | · 具体编码 | 1d |
· Code Review | · 代码复审 | 2d |
· Test | · 测试(自我测试,修改代码,提交修改) | 1d |
Reporting | 报告 | 2d |
· Test Report | · 测试报告 | 0.5d |
· Size Measurement | · 计算工作量 | 0.5d |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 1d |
合计 | 14d |
二、要求
需求1:
请各对同学实现一个支持显示地铁线路与计算换乘的程序(对于C++/C#,编译后的二进制文件名需为 subway.exe;对于Java项目,Main方法所在文件名需为 subway.java)。之后,用户可以通过命令行启动这个程序。程序在启动时,会读取不同命令对应的命令行参数。对于地铁线路信息图,我们约定它采用参数 -map 作为标志。程序启动时需要通过读取 -map 参数来获得对应的自定义地铁文件(命名为 subway.txt),从而得到地铁线路图的信息。
需求2:
用户希望查询指定地铁线经过的站点。这样,在应用程序需要支持一个新的命令行参数 -a
,它指定了用户希望查询的地铁线路。这样,在给定地铁线路时,你的程序就需要能够从线路的起始站点开始,依次输出该地铁线经过的所有站点,直到终点站。输出的文件我们使用 -o
命令行参数来指定。
需求3:
用户希望坐地铁,他希望能通过最少的站数从出发点到达目的地,这样就可以在命令行中以 -b 参数加两个地铁站点名称分别作为出发与目的,比如用户希望知道 洪湖里 到复兴路 之间的最短路线是怎样的,他就可以使用如下命令让程序将结果写入 routine.txt 中。
三、计算模块接口的设计与实现过程:
1.源数据结构说明:
一行代表一个线路,线路顺序是几号线,比如第一行就代表一号线,站台用逗号分隔,有顺序
2.实体类属性说明
定义了一个实体类Station
包含的信息如下
private String name; //地铁站名称,假设具备唯一性
public Station prev; //本站在lineNo线上面的前一个站
public Station next; //本站在lineNo线上面的后一个站
//本站到某一个目标站(key)所经过的所有站集合(value),保持前后顺序
private Map<Station,LinkedHashSet<Station>> orderSetMap = new HashMap<Station,LinkedHashSet<Station>>();
3.关键类(Subway)实现及算法思想:
//用迪杰斯特拉最短路径算法计算从s1站到s2站的最短经过路径
public void calculate(Station s1,Station s2);
//取参数station到各个站的最短距离,相隔1站,距离为1,依次类推
private Station getShortestPath(Station station);
//获取参数station直接相连的所有站,包括交叉线上面的站
private List<Station> getAllLinkedStations(Station station);
//根据内容的输出路径输出结果
public static void output(String[] content,String ouputPath);
4.项目目录展示
四.测试效果与运行
github地址为:https://github.com/zxy960828/Subway.git
五.总结
1.能力有限,部分功能无法完成,部分功能未完全按需求完成
2.项目的不足:健壮性很差;用户体验不好;跟队友分工合作还可以;代码注释没写好