軟件工程第八版課后答案,軟件工程作業.md

 2023-11-19 阅读 24 评论 0

摘要:Word Count作業 一.個人Gitee地址:https://gitee.com/Changyu-Guo 二.項目簡介 該項目主要是模擬Linux上面的wc命令,基本要求如下: 命令格式: 軟件工程第八版課后答案,wc.exe [para] <filename> [para] <filename> ... -o <filen

Word Count作業

一.個人Gitee地址:https://gitee.com/Changyu-Guo

二.項目簡介

該項目主要是模擬Linux上面的wc命令,基本要求如下:

命令格式:

軟件工程第八版課后答案,wc.exe [para] <filename> [para] <filename> ... -o <filename>

功能:

wc.exe -c file.c:返回文件file.c的字符數

軟件工程基礎第三版胡思康課后答案,wc.exe -w file.c:返回文件file.c的單詞總數

wc.exe -l file.c:返回文件file.c的總行數

wc.exe -o outputFile.txt:將結果輸出到指定文件

軟件工程大作業范例?要求:

-o后面必須跟一個文件

-c -w -l可以同時出現

軟件工程第八版課后作業答案?-c -w -l可以合并成 -wcl,即命令可以連寫

如果不指定輸出文件,則將結果默認保存在result.txt里面

三.PSP2.1表格

PSP2.1PSP階段預估耗時(分鐘)實際耗時(分鐘)
Planning計劃55
· Estimate· 估計這個任務需要多少時間55
Development開發340635
· Analysis· 需求分析(包括學習新技術)2030
· Design Spec· 生成設計文檔3030
· Design Review· 設計復審(和同事審核設計文檔)1015
· Coding Standard· 代碼規范(為目前的開發制定合適的規范)55
· Design· 具體設計1520
· Coding· 具體編碼200400
· Code Review· 代碼復審4030
· Test· 測試(自我測試,修改代碼,提交修改)2030
Reporting報告6050
· Test Report· 測試報告2015
· Size Measurement· 計算工作量105
· Postmortem & Process improvement Plan· 事后總結,并提出過程改進計劃3030
合計405690

四.解題思路

? 由于自己對C語言比較熟悉(主要是C語言編譯過后就是exe,其他語言還要打包,就直接用C語言寫了),因此選擇用C語言來實現這個項目。剛拿到題的時候仔細分析了一下,發現在功能上的要求不高,甚至不用校驗單詞的有效性,凡是以空格和逗號隔開的都算是單詞,因此第一次作業的難點應該在于命令行參數的解析上面。

? 接下來我用C語言寫了一個簡單的demo,嘗試著梳理一下程序構建思路,應該如何設計,模塊怎樣劃分。demo中所有的功能都在main函數里面,沒有上傳到碼云。

寫好demo后,大致整理了一下解題思路:

1.程序執行流程分析

? 根據項目的要求,該程序執行的大體流程為:首先用戶執行程序并附帶各種參數,程序首先要分析處理各種選項,校驗選項的有效性,并將各種參數和對應的文件聯系在一起,然后對不同的文件執行該文件對用的各種操作,然后將最終的結果一并保存在輸出文件中。

2.數據結構設計

? 根據對程序執行流程的分析,由于不同的文件對應著不同的操作,因此需要將文件名和其對應的操作綁定在一起,由此想到了用結構體保存一個文件的相關信息,然后使用鏈表將各個文件連起來。待命令處理完畢后,只需遍歷鏈表,即可對各個文件執行相應的操作。文件的結構體如下:

struct Node
{bool _c;          // 是否統計字符個數bool _w;          // 是否統計單詞個數bool _l;          // 是否統計行數bool _hasFile;    //是否有正確的輸入文件char inFile[100]; //輸入文件的路徑int row;          //行數int character;    // 字符數int words;        // 單詞數struct Node *next;
};

3.模塊劃分

根據程序的執行流程,可以將程序劃分為以下幾個模塊:

(1).主函數

主函數中主要是一些基本的處理和一些簡單的邏輯的處理,負責調用其他函數

(2).命令處理模塊

? 對于用戶輸入的命令的處理,有很多種辦法,其中最常用的就是遍歷數組,或者將輸入的命令編程字符串,然后解析字符串,我選擇的是將用戶輸入的各種選項和命令拼接成一個字符串,然后遍歷整個字符串,并做相應的分析。

####(3).統計模塊

? 統計模塊主要就是對每個文件做相應的統計操作,包括對行數的統計,對單詞數的統計,對字符數的統計,每個功能寫在一個單獨的函數里面。統計完字符后順便將數據寫入文件。

五.關鍵代碼分析

1.命令處理函數

// 對用戶輸入的命令進行分析
// 傳入的用戶輸入的命令的字符串,中間用空格隔開
// 如果是-開頭的,則認為是選項
// 如果檢測到-o,就立即讀取后面緊跟的輸出文件
// 如果不是-開頭的,就認為是輸入文件// 第二個參數是一串文件的頭結點
void analyseCommand(char commandStr[], struct Node *Head)
{// 遍歷整個字符串initFileNode(Head);struct Node *cur;cur = Head;for (int i = 0;; i++){// 讀出當前字符char c = commandStr[i];// 如果遍歷到了\0,說明字符串結束,則退出函數if (c == 0)return;// 如果c是-,則應該是一個選項if (c == '-'){i++;// 讀取出-后面的字符,并做判斷read:c = commandStr[i];// 如果-后面是c,就將_c置為trueif (c == 'c'){cur->_c = true;if (commandStr[++i] != ' '){goto read;}continue;}// 如果-后面是w,就將_w置為trueelse if (c == 'w'){cur->_w = true;if (commandStr[++i] != ' '){goto read;}continue;}// 如果-后面是l,就將_l置為trueelse if (c == 'l'){cur->_l = true;if (commandStr[++i] != ' '){goto read;}continue;}// 如果-后面是o,則后面緊跟的一個參數一定是filePath// 首先判斷后面是否有文件,如果有,就添加// 如果沒有,就報錯// 此時i的index是在選項上的else if (c == 'o'){i += 2; // 將i移動到char next = commandStr[i];if (next == '-' || next == '0'){printf("after -o must a para");exit(-1);}char path[100] = ""; // 用來存放輸出路徑for (int j = 0;; j++){// 讀取出命令中的文件名中的每一個字符char ch = commandStr[i++];// 如果讀取到了0,就說明文件名讀取結束,就退出if (ch == ' '){break;}path[j] = ch;}memset(outFile, 0, sizeof(outFile));strcpy(outFile, path);}else{// 如果-后面什么都沒有,就判定為錯誤printf("after - must a para");exit(-1);}}else{// 如果不是-,則判定為輸入文件// 此時i定位在輸入文件的第一個字符上char path[100] = "";for (int j = 0;; j++){char ch = commandStr[i++];if (ch == ' '){break;}path[j] = ch;}strcpy(cur->inFile, path);cur->_hasFile = true;struct Node *fileNode;fileNode = (struct Node *)malloc(sizeof(struct Node));initFileNode(fileNode);cur->next = fileNode;cur = fileNode;i--;}}// 檢測是否有輸入文件// if (strlen(cur->inFile) == 0)// {//   printf("you do not have input file");//   exit(-1);// }
}

代碼分析:該函數是這次作業中最重要的一個函數,因此單獨拿出來說一下。

要點說明:

1.使用for循環遍歷整個字符串

2.遇到-之后就認為是一個選項,就緊接著讀取他的后一個字符,如果是有效參數,就記錄在當前文件的結構體中,否則報錯

3.如果是-o,則認為后面緊跟著一個輸出文件,不做文件名有效性檢驗,不做權限檢查

4.如果是普通字符開頭,則認為是輸入文件,不做文件名有效性檢查,不做權限檢查

5.根據規則,輸出文件應該放在該文件對應參數的后面

6.遍歷完畢之后,就將相關數據都保存在了文件的結構體中,并連接成了鏈表,返回后可進行后期相關操作。

六.測試設計

根據要求,根據如下條件設計測試:

是否有輸入

是否輸入-

-后是否有參數

是否統計行數

是否統計字符數

是否統計單詞數

是否支持命令連寫

是否支持多文件統計

是否有-o

-o后是否跟文件

根據以上條件,設計了如下批處理文件:

.\wc.exe
.\wc.exe -
.\wc.exe -l
.\wc.exe -c
.\wc.exe -w
.\wc.exe -lc
.\wc.exe -lw
.\wc.exe -cw
.\wc.exe -lcw
.\wc.exe -lcw -o
.\wc.exe -lcw -o res.txt
.\wc.exe -lcw file1.c
.\wc.exe -lcw file1.c -o
.\wc.exe -lcw file1.c -o res.txt
.\wc.exe -lcw file1.c file2.c -o res.txt
.\wc.exe -lcw file1.c -lcw file2.c -o res.txt
.\wc.exe -lcw file1.c -o -lcw file2.c -o res.txt
PAUSE

測試結果如下:
在這里插入圖片描述
文件輸出結果:
在這里插入圖片描述

七.參考文獻

《構建之法–現代軟件工程》 --鄒新 [第三版]

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/183715.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息