结对编程作业 王涛&张华辉

一、任务要求:实现一个能处理正确输入的命令行的计算地铁线路最短路径的程序

          1.读取 -map 参数来获得对应的自定义地铁文件(命名为 subway.txt)。

java subway -map subway.txt

 

     2.用户希望查询指定地铁线经过的站点。这样,在应用程序需要支持一个新的命令行参数 -a,它指定了用户希望查询的地铁线路。

java subway -a 1号线 -map subway.txt -o station.txt

     3.能查出两站的最短路径,并保存在 routine.txt中(路径中要包含换乘信息)

java subway -b 洪湖里 复兴路 -map subway.txt -o routine.txt

二、psp

PSP 2.1 Personal Software Process Stages Time
Planning 计划  
  · Estimate   · 估计这个任务需要多少时间  14day
Development 开发  
  · Analysis   · 需求分析 (包括学习新技术)  2day
  · Design Spec   · 生成设计文档  1day
  · Design Review   · 设计复审 (和同事审核设计文档)  1day 
  · Coding Standard   · 代码规范 (为目前的开发制定合适的规范)  0.5day 
  · Design   · 具体设计  2day
  · Coding   · 具体编码  2day 
  · Code Review   · 代码复审  1day 
  · Test   · 测试(自我测试,修改代码,提交修改)  0.5day 
Reporting 报告   
  · Test Report   · 测试报告  0.5day
  · Size Measurement   · 计算工作量  0.5day 
  · Postmortem & Process Improvement Plan   · 事后总结, 并提出过程改进计划  0.5day
  合计  11.5day

三、计算模块接口的设计与实现过程

1.subway.txt。如下图,每一条地铁线占一行,方便读取;线名号后加冒号,方便进行线名和站名分开;#是可换乘站,如西站#6可以换乘6号线,方便后续换乘处理,否则还要在所有线路中查找是否有该站。

2.代码分析

Station.java

    //站点的类,包括站点名称、所在线路、是否换乘、可换乘的线路以及其相邻站点。
    public String name;
    public String line;
    public Boolean isTransferStation;
    public List<String> lines = new ArrayList<>();
    public List<Station> adjacentStation = new ArrayList<>();

SubwayLine.java

    //地铁线路的类,包括线路名称以及该线路上的所有站点。
    public String name;
    public List<Station> stations = new ArrayList<>();

subway.java

有两个全局变量lines和stations,分别存储全部路线和全部站点;subwayMap()方法读取地图信息、getLineName()获取站点所在线路、main()读取命令行不同参数实现不同功能,如args[0]=-map就读取地图信息、如args[0]=-a实现查询线路的功能、如args[0]=-b实现查询最短路径的功能。

dijkstra.java

该类实现求最短路径结果,用到了迪杰斯特拉算法。

 

 Result.java

复制代码
//结果的类,包括起点站、终点站、两站点之间的最短距离以及该线路上所经过的站点。

    private Station startStation;
    private Station endStation;
    private int distance;
    private List<Station> passStations = new ArrayList<>();

    public Station getStartStation() {
        return startStation;
    }
    public void setStartStation(Station startStation) {
        this.startStation = startStation;
    }
    public Station getEndStation() {
        return endStation;
    }
    public void setEndStation(Station endStation) {
        this.endStation = endStation;
    }
    public int getDistance() {
        return distance;
    }
    public void setDistance(int distance) {
        this.distance = distance;
    }
    public List<Station> getPassStations() {
        return passStations;
    }
    public void setPassStations(List<Station> passStations) {
        this.passStations = passStations;
    }
复制代码

3.未实现功能

命令行下通过指令运行报错,IDEA下通过设置参数可以正常运行。

四、测试结果

1.读取线路地图信息。下图为参数设置和控制台输出信息。

2.查询线路。下图分别为参数设置和控制台输出以及station文件内容。

 

 

3.实现查询最短路径。下图为参数设置和控制台运行结果以及routine文件。

 

 五、作业测试用例和GitHub地址

1.测试用例

-a 1号线 -map subway.txt -o station.txt
-a 2号线 -map subway.txt -o station.txt
-a 3号线 -map subway.txt -o station.txt
-a 9号线 -map subway.txt -o station.txt
-a 5号线 -map subway.txt -o station.txt
-a 6号线 -map subway.txt -o station.txt
-b 洪湖里 复兴路 -map subway.txt -o routine.txt
-b 刘园 复兴路 -map subway.txt -o routine.txt
-b 曹庄 复兴路 -map subway.txt -o routine.txt
-b 小淀 复兴路 -map subway.txt -o routine.txt
-b 洪湖里 大毕庄 -map subway.txt -o routine.txt
-b 月牙河 复兴路 -map subway.txt -o routine.txt
-b 刘圆 月牙河 -map subway.txt -o routine.txt
-b 天津站 洪湖里 -map subway.txt -o routine.txt
-b 辽河北道 复兴路 -map subway.txt -o routine.txt
-b 北宁公园 复兴路 -map subway.txt -o routine.txt

2.GitHub地址: https://github.com/UnlightedOtaku/pairsubway

 六、总结

        项目代码已经提交到github系统中,在这次结对编程中, 我的结对对象是张华辉同学,他的博客园链接 https://www.cnblogs.com/zhhzsc/ 。本次项目让我回顾了java相关知识,数据结构与算法的内容,熟悉了idea开发java,了解了结对编程及其相关优势。

        在开发过程中也遇到了一些困难,比如如何用命令行指定参数,如何存储地图信息,dijsktra算法具体如何实现,文件读取的异常处理等等。

  总而言之,这次项目让我回顾了相关知识,进行了具体实践,磨合了与搭档的关系。

猜你喜欢

转载自www.cnblogs.com/wangtao8128/p/11815768.html