寒假作業(2/2)


這個作業屬於哪個課程
https://edu.cnblogs.com/campus/fzu/2020SpringW/
這個作業要求在哪里
https://edu.cnblogs.com/campus/fzu/2020SpringW/homework/10281
這個作業的目標
完成疫情統計的程序以及博客
作業正文
....
其他參考文獻
....

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個倉庫

  1. SpringAll

    • 鏈接: https://github.com/wuyouzhuguli/SpringAll
    • 簡介: 循序漸進,學習Spring Boot、Spring Boot & Shiro、Spring Cloud、Spring Security & Spring Security OAuth2,博客Spring系列源碼。
  2. spring-boot

  3. 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項目,該種子項目已經有過多個真實項目的實踐,穩定、簡單、快速。
  4. vjtools

    • 鏈接: https://github.com/vipshop/vjtools
    • 簡介: 唯品會Java開發手冊,結合唯品會的內部經驗,參考《阿里巴巴Java開發手冊》《Clean Code》、《Effective Java》等重磅資料進行了大幅定制,包含核心基礎類庫VJKit ,問題排查工具VJMap 和 VJTop 三部分。
  5. Java


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM