個人項目(java實現)


一、github地址:https://github.com/Moyjing/Moy

二、psp表格

 

PSP2.1

Personal Software Process Stages

預估耗時(分鍾)

實際耗時(分鍾)

Planning

計划

 30  30

   · Estimate

   · 估計這個任務需要多少時間

 30  20

Development

開發

2010 1985

   · Analysis

   · 需求分析 (包括學習新技術)

 90  110

   · Design Spec

   · 生成設計文檔

 60  75

   · Design Review

   · 設計復審 (和同事審核設計文檔)

 30  30

   · Coding Standard

   · 代碼規范 (為目前的開發制定合適的規范)

 30  20

   · Design

   · 具體設計

 120  100

   · Coding

   · 具體編碼

 1500  1440

   · Code Review

   · 代碼復審

 60  80

   · Test

   · 測試(自我測試,修改代碼,提交修改)

 120  130

Reporting

報告

120   140

   · Test Report

   · 測試報告

 60  50

   · Size Measurement

   · 計算工作量

 30  40

   · Postmortem & Process Improvement Plan

   · 事后總結, 並提出過程改進計划

 30  50

合計

   2160  2155

 

三、解題思路分析

首先說明代碼運行的環境:eclipse,JRE System Library[J2SE-1.5]

看到題目,先把三個功能的每一點要求弄清楚,其次就是有疑問:這三個功能之間是否有依賴關系,如果要實現圖形界面,各個功能之間應該如何調用?

1)基本功能:

-c統計程序代碼的字符數,一個可行方法是利用緩沖流來一行一行讀取(readLine)文件內容,字符串有求長度的方法;

-w統計詞數,詞,何為一個詞,漢字算,英文單詞算,還有其他?參考了網上一篇博客對詞的定義:漢字+不以數字開頭(允許以下划線開頭)的連續的詞字符組成的詞,具體實現則利用java的正則表達式進行匹配,其中漢字([\u4e00-\u9fa5]),其他詞([a-zA-Z_][\\w]{0,});

-l統計行數,這里行數的定義是光標所移動到的最大的行所在的行號,實現起來也比較簡單:readLine方法可以統計所有的行包括空格行。

2)擴展功能:

-s遞歸處理多個文件,只要得到用戶要求的目錄下的所有文件路徑就好辦了,所以思路就是遞歸得到一個目錄下的所有子目錄的所有文件,首先定義一個裝文件路徑的List容器,再寫一個遞歸函數(List容器和指定目錄路徑作為參數傳進)自己調用自己,有了指定目錄下所有的文件路徑,就可以從中挑選符合指定后綴的文件,我這里分了三種情況:*.java(用戶沒有指定目錄只指定了文件后綴,此時目錄設為當前目錄);C:\java\test\*.java(用戶既指定了目錄又指定了文件后綴);C:\java(用戶只指定了目錄),采用substring和lastIndexOf這兩個方法,可以分別得到文件所在的目錄和文件的后綴,能夠靈活處理*和?等通配符,挑選出符合條件的路徑后就將其作為其他功能的參數傳進,輸出相應的統計數據;

-a處理更加程序代碼中更加復雜的行,這里的空行,注釋行,代碼行,我自己定義為互斥的三種不同類型的行(加起來為總的行數),也就是即使注釋行中有空行,也不當作空行了,只統計為注釋行,空行按照項目要求的定義,要求中的可顯示字符我理解為任意的一個能打印出來的字符。由於代碼行的注釋不被當作注釋行,因而也無需考慮雙引號里面出現// , /* , */的情況,這里仍是用正則表達式來統計。

3)高級功能:

-x圖形界面我直接布局了五個按鈕和一個文本輸出框,在選擇了文件后,文本輸出框可以將代碼顯示出來,點擊按鈕就有消息窗顯示對應統計信息。

4)總體的框架就是Counter類(計數器),繼承了JFrame,類里面定義圖形界面需要的各種組件,以及分別寫-c,-w,-l,-a,-s的函數來實現統計功能,-x命令則將已經創建好的Counter實例可視化,函數與函數之間互相調用,輸出各自的統計結果。

 

四、設計實現

一個Counter類,函數有countchar,countword,countline,countcomplex_line,dealwith_multifile,multi_file,一個構造方法(初始化圖形界面的組件)以及事件監聽函數,main函數用Scanner從命令行接收用戶輸入的命令,-c,-w,-l,-a,-s分別調用countchar,countword,countline,countcomplex_line,dealwith_multifile函數,-x命令使Counter的一個實例可視化,以-s開頭的命令處理多個文件,這個命令的第二個參數可以是-c,-w,-l,-a,也能調用其他函數輸出統計結果,multi_file是一個遞歸函數,dealwith_multifile調用multi_file獲得文件路徑,事件監聽函數里面也可以根據用戶點擊圖形界面的相應的button顯示結果。

 

 

 

五、運行測試

用戶輸入命令的格式:命令參數(-c,-w,-l,-s,-a,-x)     文件路徑

測試文件目錄

1、空文件(-c,-w,-l,-a)

  

2、只有一個字符的文件(-c,-w,-l,-a)

 

 

3、只有一個詞的文件(-c,-w,-l,-a)

 

4、只有一行的文件(-c,-w,-l,-a)

 

5、一個典型的文件

 

 6、處理多個文件(支持通配符)

 

 

 

 

7、圖形界面

      

六、項目總結

這次寫軟工作業有幾點不足之處,其一:java基礎不扎實,分析完需求之后,差不多是邊查資料邊打代碼,降低了開發的效率,所以這次的項目我在開發階段用的時間最多;其二:並沒有以一種鍛煉個人能力的態度去做這次的項目,特別是測試方面沒有做到單元測試,回歸測試,效能測試等要求,這也是我后期的其他項目需要改進的地方。總體來說收獲是蠻大的,從軟件開發的一個比較全面的流程中學到了如何用PSP表記錄開發各階段的花費時間,以及如何細致全面的分析需求,還有如何用各種測試來保證代碼的質量。

 


免責聲明!

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



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