| 這個作業屬於哪個課程 |
|
|---|---|
| 這個作業要求在哪里 |
|
| 這個作業的目標 |
|
| 作業正文 |
|
| 其他參考文獻 |
|
1.GitHub倉庫地址
2.PSP表格
| PSP2.1 | Personal Software Process Stages | 預估耗時(分鍾) | 實際耗時(分鍾) |
|---|---|---|---|
| Planning | 計划 | 40 | 40 |
| Estimate | 估計這個任務需要多少時間 | 30 | 30 |
| Development | 開發 | 2000 | 2400 |
| Analysis | 需求分析 (包括學習新技術) | 200 | 300 |
| Design Spec | 生成設計文檔 | 60 | 80 |
| Design Review | 設計復審 | 30 | 45 |
| Coding Standard | 代碼規范 (為目前的開發制定合適的規范) | 60 | 45 |
| Design | 具體設計 | 240 | 200 |
| Coding | 具體編碼 | 600 | 600 |
| Code Review | 代碼復審 | 60 | 60 |
| Test | 測試(自我測試,修改代碼,提交修改) | 90 | 100 |
| Reporting | 報告 | 45 | 60 |
| Test Report | 測試報告 | 45 | 60 |
| Size Measurement | 計算工作量 | 30 | 30 |
| Postmortem & Process Improvement Plan | 事后總結, 並提出過程改進計划 | 45 | 45 |
| 合計 | 3575 | 4095 |
3.解題思路描述
看完需求之后,我想到要用提取命令行的args來解析出各個參數,然后根據log參數和date參數來讀取相應txt文件的內容,type參數確定輸出的語句,province參數選擇需要輸出的省份,最后輸出到out參數指定的位置。其中讀取txt文件內容還需要用正則表達式來匹配和提取“省份”和“感染患者”、“疑似患者”、“治愈”、“死亡”的人數,將其存放到一個內部類里,方便后續的輸出。
至於查找資料的部分,因為對HashMap使用的不熟練,我還去找尋HashMap的原理和使用方法的資料,以及同學發的這次作業相關的博文,還有一些細節上的思路問題沒法查找的,就去問同學。在這里也非常感謝幫助我的幾位同學。

4.設計實現過程
[查看原圖](https://images.cnblogs.com/cnblogs_com/hxd1017/1646187/o_200212110009%E6%A8%A1%E5%9D%97%E7%BB%93%E6%9E%84%E5%9B%BE.png) * 首先命令行的輸入,把args提取到hashmap里存放,把參數和參數值以鍵值對形式存儲,后面把輸入的參數(值)和提供的參數(值)進行正則表達式匹配和提取,進入對應的行為中。 * 因為考慮到文檔中的關鍵數據:省份、ip、sp、cure、dead人數會反復用到,所以將這些內容放入一個province類中存儲,省份為String類型,其余四種為int型,province類中含有多種返回參數的方法和構造函數。 * 接下來是對命令參數的分析,-log和-date都是輸入的,-province是對province類的數據選擇輸出的,-type是改變輸出格式的,-out是選擇輸出文件的,故將date涵蓋在log里,完成輸入,province是中間過程,自為一體,type和out化為一體,控制輸出的格式。 * -date是要求選擇輸入指定日期前的txt文件,把txt文件的日期部分提取出來(這部分應該用正則表達式匹配,當時沒想到),轉化為日期格式,與輸入的-date參數值用isBefore方法比較先后,然后通過輸入輸出流提取文檔中的關鍵字,將8種行為分別計算結果后,將結果存放回province類中,不同省份的類用ArrayList鏈接起來,至此完成了輸入部分。 * -province比較簡單,只需要選取name屬性符合要求的province類即可,將選取后的ArrayList返回,這個參數的功能也就實現了。 * -type將選擇類的指定屬性以一定格式輸出,從輸入的命令中提取-type參數的鍵值,對比屬性名,配對則輸出屬性加上格式。 * -out則是接-type,將字符串寫到指定文件中。 **流程如下:**
[查看原圖](https://images.cnblogs.com/cnblogs_com/hxd1017/1646187/o_200212115636%E6%B5%81%E7%A8%8B%E5%9B%BE.jpg)
5.代碼說明
將省份定義為類,省份的名稱、患病人數設為屬性,創建構造函數以及各屬性的get、set方法。
用hashmap建立命令參數和參數值的對應關系,以“-”開頭的字符串判斷為命令存為key,到下一個“-”開頭的字符串之前都判斷為這個命令參數的參數值,以字符串數組的形式存儲,這樣就可以通過索引的方式獲取到參數值。
這個函數是用來處理命令參數的對應情況的,log和date管理讀取,province篩選,type和out輸出。
優先判斷date輸入的參數值是否合理,isVaildDate方法判斷是否為日期格式,將文件名中的時間部分轉為時間格式和和date參數值對比前后,在date前的以行為單位讀取文件,將結果傳到list里,正則表達式匹配提取其中的關鍵字分類8種,每種分別計算省份各種人數的增減,然后將省份類加入arraylist,用sortProvince方法將list中的省份按name屬性排序。
提取參數為province的參數值,與list中的類的name屬性對比,成功則把該類加入新list中。
將type的參數值的數組按順序與ip、sp、cure、dead對比,選擇出要輸出的屬性及其格式,out指定輸出的文件位置。
match函數將從文件中讀取的行分為8種模式,正則匹配成功就執行對應的操作,最后再加上全國的數據,返回省份類數組。
readFile、txt2String、getFile方法組合起來對讀入文件的文件名進行篩選,完成文件讀入的功能。 ##6.單元測試截圖和描述
例如測試sortProvince方法,先建一個province類的ArrayList,然后運行sortProvince方法后對表的類順序檢查是否和預期順序相符。
這是測試isBefore方法的,先定義幾個日期的字符串,然后檢查isBefore的返回值是否正確,臨界值(日期相等)、年不同、月不同、日不同的日期都進行了測試,返回值都如預期。
上面的是測試isListName方法,該方法要求輸入的字符串在list中時返回true,不在時返回false,先簡單建立一個list,可以看到,“福建”、“湖北”是在list中的,而“江蘇”不在list,返回值也都正確。 **由於測試的類過多且相似度高,參考價值不大,故沒有放上來。單元測試覆蓋率見下一模塊內容。**
7.單元測試覆蓋率優化和性能測試
單元測試覆蓋率:

由於測試的都是正確數據,所以沒有覆蓋到報錯的代碼部分。
暫未優化......
性能測試:

8.代碼規范
代碼規范的GitHub地址
點擊進入
9.心路歷程和收獲
這次作業讓我有了查缺補漏的機會,以前沒好好學的內容,現在都需要補上,所以花費時間有些長,特別是正則表達式和哈希表,相當於重新學習了一遍。這次作業也順便完成了學習計划中的Git的使用,還有其他的,如PSP表格,單元測試等對我來說的新概念的學習。因為基礎較差,所以這次實踐對我來說有一定難度,這也證明了學到的東西也非常多。讀萬卷書行萬里路,在學習中實踐,在實踐中學習,讓我對理論以及應用有了更深的理解(雖然理解還是不深刻)。
總的來說,這是一次痛並快樂着的學習過程。
10.技術路線圖相關的5個倉庫
-
SpringAll
- 鏈接: https://github.com/wuyouzhuguli/SpringAll
- 簡介: 循序漸進,學習Spring Boot、Spring Boot & Shiro、Spring Cloud、Spring Security & Spring Security OAuth2,博客Spring系列源碼。
-
spring-boot
- 鏈接: https://github.com/spring-projects/spring-boot
- 簡介: 雖然Spring的組件代碼是輕量級的,但它的配置卻是重量級的(需要大量XML配置),不過Spring Boot 讓這一切成為了過去。
-
spring-boot-api-project-seed
- 鏈接: https://github.com/lihengming/spring-boot-api-project-seed
- 簡介: Spring Boot API Project Seed 是一個基於Spring Boot & MyBatis的種子項目,用於快速構建中小型API、RESTful API項目,該種子項目已經有過多個真實項目的實踐,穩定、簡單、快速。
-
vjtools
- 鏈接: https://github.com/vipshop/vjtools
- 簡介: 唯品會Java開發手冊,結合唯品會的內部經驗,參考《阿里巴巴Java開發手冊》《Clean Code》、《Effective Java》等重磅資料進行了大幅定制,包含核心基礎類庫VJKit ,問題排查工具VJMap 和 VJTop 三部分。
-
Java
- 鏈接: https://github.com/TheAlgorithms/Java
- 簡介: 該項目用Java實現的所有算法。
