天天看點

第三次結對程式設計作業(隊友肖逸菲)一、PSP表格二、代碼設計及其實作過程三、代碼複審過程四、具體代碼五、附加功能六、單元測試八,作業完成及感悟

結對程式設計作業
GitHub項目位址 https://github.com/15565048308/PairProgramming
搭檔部落格位址 https://www.cnblogs.com/XYFWXR/
作業位址 https://www.cnblogs.com/cherish599/p/11577268.html

一、PSP表格

PSP2.1 Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 15 30
Estimate 估計這個任務需要多少時間 900 1020
Development 開發 720 840
Analysis 需求分析 (包括學習新技術) 80 120
Design Spec 生成設計文檔 20 15
Design Review 設計複審 (和同僚稽核設計文檔) 15 15
Coding Standard 代碼規範 (為目前的開發制定合适的規範) 30 20
Design 具體設計 40 60
Coding 具體編碼 450 500
Code Review 代碼複審 30 35
Test 測試(自我測試,修改代碼,送出修改) 100 120
Test Report 報告測試報告 70 120
Size Measureme 計算工作量 10 5
Postmortem & Process Improvement Plan 事後總結, 并提出過程改進計劃 60 60
合計 2445 2120

關于PSP請參閱鄒欣老師部落格

二、代碼設計及其實作過程

1 程式設計及實作

這個項目是在已有的點名系統的基礎上進一步完成的,實作點名自動将缺課學生寫入指定文檔,并根據缺課次數寫入不同的文檔,一次作為平時考勤加減分和是否重修的依據,減輕老師點名記錄負擔。

(1)随機點名,判斷該同學是否缺課

(2)将第一次缺課學生寫入FirstAbsent文檔

(3) 随機點名,周遊第一次缺課學生文檔,判斷該同學是否第二次缺課,若是寫入第二次缺課文檔并給與提示,第三次同理。

(4)課程結束,任課教師翻閱文檔,檢視缺勤資訊。

結構如下:

2 如何展現原則的

1)Design By Contract(契約式設計):

契約式設計就是按照某種規定對一些資料等做出約定,如果超出約定,程式将不再運作

如何展現:在輸入資料情況下,能得到與預期一樣的結果

(2)Information Hiding(資訊隐藏):

資訊隐藏指在設計和确定子產品時,使得一個子產品内包含的特定資訊(過程或資料),對于不需要這些資訊的其他子產品來說,是不可通路的。

如何實作:資訊隐藏就是對資訊的封裝,設定通路權限public、protect private等

(3)Interface Design(接口設計):

對接口的名字,功能,接口與接口間的繼承關系進行設計;好的接口設計可以增強代碼可讀性,易用性,可更改性。

如何實作:将不同的功能程式段寫到不同的方法中,然後包裝在同一個類中,增強可讀性,便于調用

(4)Loose Coupling 松耦合:

想讓對象與對象間松耦合,通過增加抽象類(Abstract Class)或者接口來做到

如何實作:軟體設計的一條基本原則就是“低耦合,高内聚”,降低對象與對象之間的耦合性,便于代碼設計與維護,本程式隻增加啦一個方法,所有無法提現松耦合

三、代碼複審過程

(1)代碼規範參考

(2)

四、具體代碼

(1)當停止點名事件觸發,調用方法

private void btnStop_Click(object sender, EventArgs e)
        {
            timerCallName.Stop();
            //調用記錄缺課次數的方法
            AbsentTems();
        }
           

(2)将随機被選中的字元串(姓名)帶入新方法中,進行判斷

使用MessageBox類進行提示

public  void AbsentTems()
        {
            string Str = stuList[i].Name;
           
            if (MessageBox.Show("該學生是否缺課?", "Absent OR Not?",
                MessageBoxButtons.YesNo) == DialogResult.Yes)
            {    
           

(3)進行循環,并将缺課學生姓名寫入文檔,以便檢視

if (Str.EndsWith ("S")==true  )
                {
                    stuList[i].Name += "T";
                    string Strpath3 = @"F:\軟體工程檔案\GisWinformPractice\WinformControlUse\TestFile\ThirdAbsent";
                    File.AppendAllText(Strpath3, Str + " ");
                    MessageBox.Show("取消考試資格來年重修!!!");
                }
           
else  if (Str.EndsWith ("F") == true )
                {
                    //第四次嘗試修改
                    stuList[i].Name += "S";
                    string Strpath2 = @"F:\軟體工程檔案\GisWinformPractice\WinformControlUse\TestFile\SecondAbsent";
                    File.AppendAllText(Strpath2, Str + " ");
                    MessageBox.Show("第二次缺課,離重修更進一步!!");
                }
           
else 
                {
                    stuList[i].Name += "F";
                    string Strpath1 = @"F:\軟體工程檔案\GisWinformPractice\WinformControlUse\TestFile\FirstAbsent";
                    File.AppendAllText(Strpath1, Str + " ");
                    MessageBox.Show("第一次缺課,第一次重修半價哦!");
                }
           

效果展示

第三次結對程式設計作業(隊友肖逸菲)一、PSP表格二、代碼設計及其實作過程三、代碼複審過程四、具體代碼五、附加功能六、單元測試八,作業完成及感悟
第三次結對程式設計作業(隊友肖逸菲)一、PSP表格二、代碼設計及其實作過程三、代碼複審過程四、具體代碼五、附加功能六、單元測試八,作業完成及感悟
第三次結對程式設計作業(隊友肖逸菲)一、PSP表格二、代碼設計及其實作過程三、代碼複審過程四、具體代碼五、附加功能六、單元測試八,作業完成及感悟
第三次結對程式設計作業(隊友肖逸菲)一、PSP表格二、代碼設計及其實作過程三、代碼複審過程四、具體代碼五、附加功能六、單元測試八,作業完成及感悟
第三次結對程式設計作業(隊友肖逸菲)一、PSP表格二、代碼設計及其實作過程三、代碼複審過程四、具體代碼五、附加功能六、單元測試八,作業完成及感悟

五、附加功能

此代碼是在已有代碼的基礎上進一步完成的,輔助任課教師記錄缺課名單,不足就是不能語音自動播報。若實作自動語音點名,這樣可以解決在老師嗓子不舒服的情況下(感冒生病等),也能考勤;

六、單元測試

(1)單元測試代碼

第三次結對程式設計作業(隊友肖逸菲)一、PSP表格二、代碼設計及其實作過程三、代碼複審過程四、具體代碼五、附加功能六、單元測試八,作業完成及感悟

(2)代碼測試結果

第三次結對程式設計作業(隊友肖逸菲)一、PSP表格二、代碼設計及其實作過程三、代碼複審過程四、具體代碼五、附加功能六、單元測試八,作業完成及感悟

八,作業完成及感悟

1.0 對于代碼設計很在很大問題,寫程式之前首先确定我要做什麼,然後開始做,遇到不會的邊學變寫代碼。

2.0 程式中把第一次缺課學生寫入文檔很容易,但是如何判斷是第二次逃課?就需要周遊第一次逃課名單,每個同學都有可能兩次逃課,這樣每個學生就要單獨寫一個判斷if語句,也有可能第三次缺勤就要再次周遊第二個文檔,這樣幾乎多寫800多行啰嗦重複代碼。我選擇給缺勤學生名字後加一個字元,判斷名字結尾字元就能知道第幾次逃課,節約幾百行代碼,增加程式的可讀性。

3.0 因為基礎不好,是以完成這個簡單的作業很難,幾乎都是邊學邊寫代碼,但是這樣确實進步的也快! 就是耗費時間比較多。