结对编程作业(地铁线路问题)
一、任务
实现一个帮助进行地铁出行路线规划的命令行程序。
1.要求:
要求1:
实现一个支持显示地铁线路与计算换乘的程序(对于C++/C#,编译后的二进制文件名需为 subway.exe;对于Java项目,Main方法所在文件名需为 subway.java)。之后,用户可以通过命令行启动这个程序。程序在启动时,会读取不同命令对应的命令行参数。对于地铁线路信息图,我们约定它采用参数 -map 作为标志。程序启动时需要通过读取 -map 参数来获得对应的自定义地铁文件(命名为 subway.txt),从而得到地铁线路图的信息。
要求2:
用户希望查询指定地铁线经过的站点。在应用程序需要支持一个新的命令行参数 -a
,它指定了用户希望查询的地铁线路。这样,在给定地铁线路时,程序需要能够从线路的起始站点开始,依次输出该地铁线经过的所有站点,直到终点站。输出的文件使用 -o
命令行参数来指定。
要求3:
用户希望坐地铁,他希望能通过最少的站数从出发点到达目的地,这样就可以在命令行中以 -b 参数加两个地铁站点名称分别作为出发与目的,比如用户希望知道 洪湖里 到复兴路 之间的最短路线是怎样的,他就可以使用如下命令让程序将结果写入 routine.txt 中。
2.PSP
PSP 2.1 | Personal Software Process Stages | Time |
Planning | 计划 | |
· Estimate | · 估计这个任务需要多少时间 | 2weeks |
Development | 开发 | |
· Analysis | · 需求分析 (包括学习新技术) | 2days |
· Design Spec | · 生成设计文档 | 1day |
· Design Review | · 设计复审 (和同事审核设计文档) | 1day |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 1day |
· Design | · 具体设计 | 2days |
· Coding | · 具体编码 | 2days |
· Code Review | · 代码复审 | 1day |
· Test | · 测试(自我测试,修改代码,提交修改) | 1day |
Reporting | 报告 | |
· Test Report | · 测试报告 | 0.5day |
· Size Measurement | · 计算工作量 | 0.5day |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 1day |
| 合计 | 15days |
二、计算模块接口的设计与实现过程
三、计算模块接口的设计与实现过程:
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.项目目录展示
四.测试效果与运行
五、总结:
通过本次结对编程完成之后,发现很多的问题,感觉自身能力不足,还是的就是出现了编程上的困难,之后在编程处理的问题中向同学请教,队友耐心的给我解释,学到了一些实际操作的知识,这次编程的训练,复习到了最短路径的两个算法 ,用到Dijkstra算法来解决最短路径的问题代码的具体实现,以及地图的存储,输入与输出的问题,总之队友的帮助还是很大,感谢我的队友让我学习了很多知识,不然靠我一人是不能够完成好这次作业。
六、Github地址:https://github.com/zxy960828/subway.git