軟件工程作業——WC Java實現
Github項目地址:https://github.com/2youyou/2youyou
項目要求:
實現一個統計程序,它能正確統計程序文件中的字符數、單詞數、行數,以及還具備其他擴展功能,並能夠快速地處理多個文件。
- 具體功能
- -c 返回文件字符數
- -w 返回詞的數目
- -l 返回行數
- 擴展功能
- -s 遞歸處理目錄下符合條件的文件
- -a 返回更復雜的數據(代碼行 / 空行 / 註釋行)
- 高級功能
- -x 命令行輸入-x參數,程序顯示圖形界面,用戶可以通過界面選取單個文件,程序就會顯示文件的字符數、行數等全部統計信息。
解題思路描述:
看到這個題目,我首先想到的就是利用java裏面的IO流,要統計文件中的行數,可以選擇利用BufferReader來按行讀出文件中的內容,然後設置一個整型變量來統計行數,直到整個文件全部讀完;統計字符數可以通過將讀出的文件內容變成字符串的形式,然後計算字符串的長度及為字符的數量。至於統計單詞的數量這個功能,每個人大概都不一樣吧,因為每個人對單詞的定義都不一樣,究竟怎麽樣才算一個單詞,每個人有每個人的看法,正如那句老話,一千個人,就有一千個哈姆雷特。我對單詞的定義是利用空格以及換行來界定單詞,只要是連續的字符,就算一個單詞。然後利用字符串的分割,返回一個數組,單詞數量就等於數組的長度。這樣,就粗略的實現了基本的三個功能。
設計實現過程
這個項目因為比較簡單,所以我只寫了了一個類,裏面有四個方法,分別是統計字符數、單詞數、行數的方法及檢測文件是否存在並執行統計的方法;main方法就是調用執行方法,作為一個程序入口的存在。
代碼說明:
主要的代碼部分就是三個統計方法:
(1)統計行數的方法 c()
設計思路:使用BufferedReader(),按行讀入,並將讀到的內容賦值給字符串"s",之後計算字符串的長度即為字符的數量。
具體實現:
(2)統計單詞的方法 w()
設計思路:使用BufferedReader(),按行讀入,每讀完一行就將內容賦值給字符串"s"並加一個換行符,然後進行字符串的分割,計算分割後返回數組的長度。
具體實現:
(3)統計行數的方法 l()
設計思路:這個方法相對來說比較簡單,直接使用BufferedReader()按行讀入,每次讀入時進行計數,直到全部的行全部讀完。
具體實現:
除了以上的統計方法,還有一個fileExist()方法,這個方法是對用戶的輸入的文件路徑進行判斷,若文件存在,則運行三個統計方法,若不存在,則報錯。
測試運行:
測試文件:
測試結果:
各部分預計耗費時間和實際耗費時間:
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 30 | 50 |
· Estimate | · 估計這個任務需要多少時間 | 50 | 70 |
Development | 開發 | 600 | 800 |
· Analysis | · 需求分析 (包括學習新技術) | 180 | 200 |
· Design Spec | · 生成設計文檔 | 30 | 60 |
· Design Review | · 設計復審 (和同事審核設計文檔) | 120 | 150 |
· Coding Standard | · 代碼規範 (為目前的開發制定合適的規範) | 60 | 50 |
· Design | · 具體設計 | 60 | 80 |
· Coding | · 具體編碼 | 180 | 200 |
· Code Review | · 代碼復審 | 30 | 50 |
· Test | · 測試(自我測試,修改代碼,提交修改) | 50 | 30 |
Reporting | 報告 | 60 | 90 |
· Test Report | · 測試報告 | 30 | 60 |
· Size Measurement | · 計算工作量 | 20 | 30 |
· Postmortem & Process Improvement Plan | · 事後總結, 並提出過程改進計劃 | 20 | 30 |
合計 | 1520 | 1950 |
代碼覆蓋率:
項目小結:
這次的項目只實現了基本的功能,因為好久沒有使用Java編程,對java的相關知識有點遺忘,通過這次的項目,又重新拿起書本,復習了一遍java的相關知識,對Java有了新的理解,也算收獲良多。這次項目的實現起來並不復雜,主要是IO流與字符串的種種方法,采用控制臺輸出的方式顯示結果,並沒有專門設計圖形界面。
雖然項目不是很復雜,但是體驗了如何從零開始做一個項目,並不只是簡單的編程,更包括對測試,估計項目耗時的,對軟件編寫有了新的認識。同時,還學會了使用GitHub來記錄項目開發過程,這是之前沒有接觸過的,也算是一個重大收獲。
軟件工程作業——WC Java實現