結對程式設計作業 | |
---|---|
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("第一次缺課,第一次重修半價哦!");
}
效果展示
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPB90dNRlT4lFVOBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4ATOyAzNwcTMwMTOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
五、附加功能
此代碼是在已有代碼的基礎上進一步完成的,輔助任課教師記錄缺課名單,不足就是不能語音自動播報。若實作自動語音點名,這樣可以解決在老師嗓子不舒服的情況下(感冒生病等),也能考勤;
六、單元測試
(1)單元測試代碼
(2)代碼測試結果
八,作業完成及感悟
1.0 對于代碼設計很在很大問題,寫程式之前首先确定我要做什麼,然後開始做,遇到不會的邊學變寫代碼。
2.0 程式中把第一次缺課學生寫入文檔很容易,但是如何判斷是第二次逃課?就需要周遊第一次逃課名單,每個同學都有可能兩次逃課,這樣每個學生就要單獨寫一個判斷if語句,也有可能第三次缺勤就要再次周遊第二個文檔,這樣幾乎多寫800多行啰嗦重複代碼。我選擇給缺勤學生名字後加一個字元,判斷名字結尾字元就能知道第幾次逃課,節約幾百行代碼,增加程式的可讀性。