所属课程 | 2019北航软件工程暑期师资培训(北京航空航天大学) |
---|---|
做业要求 | 预培训-我的项目 |
做业目标 | 实现一个帮助进行地铁出行路线规划的命令行程序。 |
要求:git
站点是以线路为顺序进行组织的,考虑到可维护性(方便修改、添加、删除站点)和语义性使用xml来进行地铁线路的存储:github
其中station包含属性:id、站点名称、站点所属线路、还有邻接站点。算法
一条线路line包含多个站点、一个地铁站包含多个线路。小程序
为了方便进行xml文件和Java对象的映射,使用了JAXB库来实现这种映射:数据结构
SubwayPojo:
函数
Line:
工具
Station:
性能
三个POJO类实现了一系列get、set方法,而且使用相应的注解和XML进行了映射。单元测试
主程序部分包含一个类:
subway
主要包括如下函数功能:
学习
主要的思路是,尽量的解耦,把命令行参数获取解耦出来,这样之后要扩展出新的调用方式只要新增一个函数就好,
不用修改原来的代码。
工具类部分主要包含一个类:
Util
为了方便对数据进行录入,Util实现了一个简单的命令行录入小程序:
有两种录入方式,一种是按线路进行录入:
一种是按站点进行录入:
同时还实现了从文件中读取地铁信息,和存地铁信息到文件:
单元测试部分主要包括一个类:
SubwayTest
使用了Junit来实现单元测试,经过比对预期文件结果和输出文件结果来判断正确性:
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 20 |
• Estimate | • 估计这个任务须要多少时间 | 30 | 20 |
Development | 开发 | 300 | 370 |
• Analysis | • 需求分析 (包括学习新技术) | 90 | 90 |
• Design Spec | • 生成设计文档 | 60 | 30 |
• Design Review | • 设计复审 | 30 | 10 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 0 | 0 |
• Design | • 具体设计 | 120 | 240 |
• Coding | • 具体编码 | 400 | 500 |
• Code Review | • 代码复审 | 50 | 50 |
• Test | • 测试(自我测试,修改代码,提交修改) | 50 | 50 |
Reporting | 报告 | 50 | 40 |
• Test Repor | • 测试报告 | 0 | 0 |
• Size Measurement | • 计算工做量 | 20 | 10 |
• Postmortem & Process Improvement Plan |
• 过后总结, 并提出过程改进计划 | 30 | 30 |
All | 合计 | 880 | 1030 |
核心算法使用Dijkstra算法,实现图的数据结构采用邻接矩阵:
算法流程图:
主要性能瓶颈在JAXB上。
经过此次我的项目,熟悉了JAXB的使用,更深刻的了解了Djkstra算法的原理。