軟體工程第一次作業(WC)

来源:https://www.cnblogs.com/3116005131-duanhaobin/archive/2018/09/14/9648864.html
-Advertisement-
Play Games

Github項目地址:https://github.com/3116005131/3116005131.git PSP2.1 Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘) Planning 計劃 · Estimate · 估計這個任務需要多少時 ...


Github項目地址:https://github.com/3116005131/3116005131.git

PSP2.1

Personal Software Process Stages

預估耗時(分鐘)

實際耗時(分鐘)

Planning

計劃

20 15

· Estimate

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

5 5

Development

開發

660 1045

· Analysis

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

300 660

· Design Spec

· 生成設計文檔

100 120

· Design Review

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

20 15

· Coding Standard

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

10 30

· Design

· 具體設計

60 20

· Coding

· 具體編碼

120 180

· Code Review

· 代碼覆審

20 10

· Test

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

30 10

Reporting

報告

100 120

· Test Report

· 測試報告

30 40

· Size Measurement

· 計算工作量

30 40

· Postmortem & Process Improvement Plan

· 事後總結, 並提出過程改進計劃

40 40

total

合計

780 1180

解題思路統計文件的字元數量,首先我要學慣用C#讀取文件,因為之前只是做過處理基本數據類型的一些類和方法。所以估計在這方面的學習要花費大量的時間。學習的方法是先,上網查找,在其他人代碼中,當需要調用文件的讀寫操作,他們是用什麼函數,方法實現的。發現代碼中出現FileStream類,然後就查找書本---《C#程式設計教程》,系統的學習FileStream類,以及與其一起使用的StreamReader類。學習後發現。由於只翻閱了一本參考書籍就找到了需要學習的內容,並有詳細的介紹,故能快速的掌握,節省了不少學習的時間。在開始編程時,又遇到了第二個問題,設計文檔雖然寫好,由於太久沒使用C#語言編程,但是不斷的出現語法錯誤。導致不得不停下來,把C#的面向對象編程部分開完,並開了一個新建的命令行視窗項目來練習C#的語法。編譯成功後,完成了三個基本功能,打算做下一步的單元測試,可發現單元測試必須是公共類或公共方法,而我把代碼全都寫在了main函數中,為實現單元測試不得,把代碼寫到類wc中。

設計實現過程:由於統計字元器,還算是邏輯簡單的程式,所以打算只用一個公共類完成功能,使用預設的創造函數,輸入函數,處理函數,輸出函數。為了使代碼更簡潔,加多了一個執行函數調用另外三個函數。使main函數中更簡潔。由於邏輯都比較簡單,基本都是使用if的二分支選擇語句,所以沒有畫流程圖。

代碼說明

public class wc
        {
            string path;    //需統計文件的路徑
            char[] types = { 'c', 'C', 'w', 'W', 'l', 'L' };    //目前所能統計的類型(字元,單詞,行數)
            int n;  //統計結果
            char[] type;      //當前統計的類型
            public void NCount()    //統計方法
            {
                GetMessage();
                Count();
                Show();
            }
            public void GetMessage()    //輸入信息
            {
            ......
            }   
            public void Count()     //統計數量
            {
             ......   
            }
            public void Show()      //輸出結果
            {
            ......               
            }
        }            

輸入函數

1             public void GetMessage()    //輸入信息
2             {
3                 Console.Write("WC.exe -");
4                 string Message = Console.ReadLine();
5                 string[] CategoryInfomation = Message.Split(' ');
6                 path = CategoryInfomation[1];
7                 type = CategoryInfomation[0].ToCharArray();
8             } 

處理函數

 1             public void Count()     //統計數量
 2             {
 3                 int c=0, w=0, l=0;//字元數,單詞數,行數
 4                 int WFlag=0;        //單詞標識符
 5                 FileStream fs = null;
 6                 StreamReader reader = null;
 7                 try
 8                 {
 9                     fs = new FileStream(path, FileMode.Open, FileAccess.Read);
10                     reader = new StreamReader(fs);
11                     reader.BaseStream.Seek(0, SeekOrigin.Begin);
12                     int i = reader.Read();
13                     while (i!=-1)
14                     {
15                         c++;
16                         if ((i<=90&&i>=65)||(i>=97&&i<=122))
17                         {
18                             if (WFlag == 0)
19                             {
20                                 w++;
21                                 WFlag = 1;
22                             }
23                            
24                         }
25                         else WFlag = 0;
26                         char character = (char)i;
27                         if (character == '\n')
28                         {
29                             l++;
30                         }
31                         i = reader.Read();
32                     }
33                 }
34                 catch (Exception)        //path輸入有誤
35                 {
36                     Console.WriteLine("輸入的地址有誤,找不到該文件");
37                 }
38                 finally
39                 {
40                     if(reader!=null)reader.Close();
41                     if(fs!=null)fs.Close();
42                 }
43                 if (type[0] == 'c' || type[0] == 'C')
44                 {
45                     n = c;
46                 }
47                 else if (type[0] == 'w' || type[0] == 'W')
48                 {
49                     n = w;
50                 }
51                 else if (type[0] == 'l' || type[0] == 'L')
52                 {
53                     n = l;
54                 }
55             }

 

 

輸出函數

 1             public void Show()      //輸出結果
 2             {
 3                 if (type[0] == 'c' || type[0] == 'C')
 4                 {
 5                     Console.WriteLine("字元數為{0}", n);
 6                 }
 7                 else if (type[0] == 'w' || type[0] == 'W')
 8                 {
 9                     Console.WriteLine("單詞數為{0}", n);
10                 }
11                 else if(type[0] == 'l' || type[0] == 'L')
12                 {
13                     Console.WriteLine("行數為{0}", n);
14                 }
15                 else
16                 {
17                     Console.WriteLine("Word count does not support this type of statistics.");     //輸入的參數有誤,n=0
18                 }
19             }  

測試運行

項目小結:這次能成功完成作業,幸好因為WC需要實現的基本功能邏輯簡單,只要掌握基本的語法就能完成。也多虧所有使用到的類的使用都能在一本書中全部找到,不然恐怕是完成不了項目。由於學習C#語法花費了太多時間,導致沒有時間學習如何進行單元測試。完成項目後必須花費時間把單元測試做了,為下次的項目做充足的準備,不能在把絕大部分時間用來學習上了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 利用ZYNQ驗證演算法的一大優勢在於,可以在上位機發送指令藉助CPU的控制能力和C語言易開發特點,實時配置演算法模塊的工作模式、參數等對來對其演算法模塊性能進行全面的評估。最重要的是無需重新綜合硬體模塊。 接著上篇該系列博文,在sysGen中設計模塊功能為:根據模式選擇輸入,來完成乘2或除2兩種運算,0乘 ...
  • 基於PHP的數據爬取 [官方網站站點][1] 簡單、 靈活、強大的PHP採集工具,讓採集更簡單一點。 簡介: QueryList使用jQuery選擇器來做採集,讓你告別複雜的正則表達式;QueryList具有jQuery一樣的DOM操作能力、Http網路操作能力、亂碼解決能力、內容過濾能力以及可擴展 ...
  • __reversed__ 返回集合的倒敘迭代器,如果沒有實現這個方法,reversed()會去使用__getitem__和__len__來實現介紹__next__和 __iter__方法需要瞭解下可迭代對象(iterable)和迭代器(iterator): 標準的迭代器都有兩個方法__next__和 ...
  • 一大早醒來,發現女神昨晚發來三條消息,但是顯示都已撤回,OMG,我錯過了什麼?群里有一個漂亮妹紙的爆照照片撤回了,想看又看不到!群里大佬分享的經典語錄被撤回了,感覺錯過一個億!怎麼辦?用無所不能的 Python 就可以將這些撤回的消息發給你的微信,讓你從此走上人生巔峰 項目環境 語言:Python3 ...
  • 執行後,輸出的結果為: ...
  • GitHub代碼鏈接 1.項目相關要求 •基本功能列表: -c 統計文件中字元的個數 -w 統計文件中的詞數 -l 統計文件中的行數 •拓展功能: -a 統計文件中代碼行數、註釋行數、空行 2.PSP2.1 PSP2.1 Personal Software Process Stages 預估耗時(小 ...
  • 在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 1.二維數組,行row從左到右遞增,列col從上到下遞增 2.定左下角為比較點,比它大的位於它右邊,因此c... ...
  • 簡單紹一下如何將ASP.NET Core 應用發佈到Linux (Ubuntu)伺服器上,都是文檔的東西。 伺服器結構 ASP.NET Core 2.x 有兩種server: HTTP.sys 只支持Windows,並支持一些Windows獨有的特性。 Kestrel,跨平臺的伺服器,高度優化,這個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...