所屬課程 | 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算法的原理。