结对编程之---地铁路线规划问题

一.项目总体性时间规划
为了对本次项目开发有一个总体把握,减少盲目性,也为了更好的推进项目,需结合客观情况制定一个时间计划表PSP表,并和队友进行分析交流。

二.项目需求分析
根据老师给的项目要求,和队友讨论,大致分许出以下两大需求。
1.地铁线路和站点信息用txt文本文档保存,用户希望查询地铁线路。在给定地铁线路参数时,能从起点站依次输出该线路经过的站点直到终点站,并将站点信息保存在station.txt文件里。
2.用户希望查询从出发站到终点站经过站点数最少的路线信息,并输出经过的站点个数和路径。如果需要换乘,要在换乘站下一行输出换乘的线路。输出信息存入到routine.txt文件里。
综上,系统功能模块包括文件的读取和输出,最短路径的计算,输入条件的判定。最短路径的计算依赖于文件读取模块。

三.程序设计与实现
本次项目采用Java程序进行开发。站点和线路信息提前录入subway.txt文件里等待被使用。编写一个主类SubwayMap,包含两个私有类Station和Edge。站点类Station里包含属性有:String stationName、Boolean visited、int dist、Station path、String trackname;Edge类里包含属性有:Station station、String lineName、int distance。
主类里包含的方法有以下:
void fileReader(String filePath),读取指定txt文件。
void shortestPath(String s1,String s2,String routinePath),传入起点站和终点站参数,计算最短路径信息,并将信息保存到routine.txt文件里。
void ShowStation(String stationname,String stationPath),显示给定线路所对应的站点信息,并将信息保存到station.txt里。
void dijkstraTravel(Station s),迪杰斯特拉经典算最短路径算法,供函数void shortestPath(String s1,String s2,String routinePath)调用。
在主方法public static void main(String[] args)里定义文件路径。实例化主类SubwayMap,获得一个str[][]线路地图,如SubwayMap m=new SubwayMap(filePath);进行一个while循环判断输入条件,当输入为‘-a’时,调用ShowStation方法查询地铁线路信息;当输入为‘-b’时,表明求最短路径,输入起点站和终点站,调用shortestPath方法,输出结果,并将结果保存于routine.txt里。
代码轮廓如图所示:
主函数代码如图所示:

四.程序效果测试
需求一:根据用户所输入的线路参数,打印出该线路的所有站点,并保存信息到station.txt里。实现效果如下图所示:


需求二:根据用户提供的起点站和终点站信息计算最短路径,将最短路径信息输出并保存到routine.txt里。实现效果如图所示:

五.代码质量分析
本项目采用面向对象设计语言Java进行开发,整个项目只包含一个主类,主类中嵌套几个子类,结构清晰。方法与方法之间调用明确。交互过程中,有提示语句,方便用户输入。程序整体上代码简洁。
但在判断条件上,有一定缺陷。例如当想查询1号线地铁信息时,‘1号线’等价于‘一号线’,但在程序中只能识别‘1号线’,这是代码的漏洞,有待改进。

六.作业提交
为了方便老师和同学下载查看,项目源码提交到Github。地址为:https://github.com/zhuoyangli2019/ShortRoad.git

六.总结
此项目的关键就是求最短路径,所用的关键算法是迪杰斯特拉算法,所用到的思想是广度优先思想。理论上也可以采用BFS算法。
在和小伙伴结对编程过程中,由于自己的编程能力较为薄弱,大部分工作由队友完成,我提供一些想法和建议,编写一些简单的模块,例如文件的读入和数据的打印。我们在过去的两周时间里,大家相互配合,定期交流,解决了一些技术问题,在这个过程中很好的锻炼与培养了编程思维和能力,充分认识到团结协作的重要性。也进一步体会到了结对编程的优点,在以后的开发活动中,要使用这种模式。

猜你喜欢

转载自www.cnblogs.com/zhuoyang/p/11802343.html