針對“自動出題分類計算展示結果系統”的分析,改進建議與閱讀心得
軟體工程綜合實踐專題 第二次作業
這是來自我的合作物件龐勝(1759229)的一段程式碼,該系統的作用是隨機給出指定數量的四則運算的題目並且答案在0-100的範圍中的系統,包括了分為三個類別給出答案,設計了一系列的操作和項,來實現一組完整的基礎操作和整個出題給出答案的流程。
原始碼:
#include<iostream> #include<time.h> #include<string> using namespace std; int main() { int num; int div; int x, y, m, i, j, t,s; cout << "請輸入要定製的題數:" ; cin >> num; cout << "除數顯示:1.顯示整數;2.顯示餘數;3.顯示分數"<<endl<<"請選擇:"; cin >> div; string *res1 = new string[num]; string *res2 = new string[num]; string *res3 = new string[num]; string *a = new string[num]; string *b = new string[num]; srand(time(0)); for (i = 0; i<num;) { x = rand() % 100;//0~99 y = rand() % 100; m = rand() % 4; b[i] = to_string(x) + to_string(m) + to_string(y); for (j = 0; j < i; j++) if (a[j] == b[i]) break; if (j == i) { switch (m) { case 0: s = x + y; if (s > 0 && s < 100) { cout << x << "+" << y << "=" << "\t"; res1[i] = to_string(s); res2[i] = to_string(s); res3[i] = to_string(s); i++; } break; case 1: if (x < y) { t = x; x = y; y = t; } cout << x << "-" << y << "=" << "\t"; res1[i] = to_string(x - y); res2[i] = to_string(x - y); res3[i] = to_string(x - y); i++; break; case 2: s = x * y; if (s > 0 && s < 100) { cout << x << "*" << y << "=" << "\t"; res1[i] = to_string(s); res2[i] = to_string(s); res3[i] = to_string(s); i++; } break; case 3: if (y != 0) { cout << x << "/" << y << "=" << "\t"; res1[i] = to_string(x / y); res2[i] = to_string(x / y) + "..." + to_string(x % y); res3[i] = to_string(x) + '/' + to_string(y); i++; } } } } cout << endl; cout << "題目答案為:" << endl; switch (div) { case 1: for (i = 0; i < num; i++) cout << res1[i] << "\t"; break; case 2: for (i = 0; i < num; i++) cout << res2[i] << "\t"; break; case 3: for (i = 0; i < num; i++) cout << res3[i] << "\t"; default: break; } cout << endl; return 0; }
程式測試執行截圖:
一、程式設計風格
首先對於程式碼提供出的程式碼規則來看,對於此程式碼的程式設計者有著一定的程式設計風格,在程式的前面我們可以看到這是一個c++的程式程式碼,但是在int main()中我們很容易看到,在對變數定義的時候,程式設計者習慣使用c語言的定義風格,所有變數放在最前面一次全部定義初始化,而不是在使用時在開始定義,在定義風格上來看,除了特殊的幾個變數採用了英文的定義方式,其他的單變數全域性變數在定義時候並沒有規則而是隨機的單詞用來定義,在後期的使用中可能對於程式碼閱讀者來說就有一點的前後文聯絡困難不太利於程式碼的閱讀,當變數達到一定的長度和數量時候,這種命名方式就是的程式設計者出現記憶混亂的風險很容易出現程式碼錯誤。
在另外一個方面我們看到,程式設計者在編寫需要閱讀分享的程式程式碼時,整個程式碼段只出現了一個程式註釋,在我們的程式編寫中無論是為了自己的閱讀以及他人的使用我們建議是做到4-5行程式碼一註釋,在面對重要部分或者重要功能時也要添加註釋。
二、功能實現
首先在我們執行程式碼的時候,彈出了CMD框並且出現文字內容“ 請輸入要定製的題數 :”然後我們隨機輸入一個100又彈出一個提示內容,“ 除數的顯示:1.顯示整數,2.顯示餘數,3.顯示分數 ” 我們選擇輸入1後出現了100道四則運算,並且在下面的隨即顯示了對應題目的答案,面對除法運算的的答案以我們選擇的整數形式顯示。隨後我們分別測試了三組數子以及分別對應的三個選項,在規則提示中基本實現了我們需要的功能。
三、系統不足
1.異常處理
在使用該系統的過程中發現。改系統少了對異常操作的處理提示機制,只有簡單的錯誤輸入的判斷但是並沒有給出合適的處理方式或者提示。例如在我們開啟軟體後輸入數字為負數時,第二部的選擇依然可以進行,沒有第一步的選擇,在完成第二部的選擇後程序彈出,並未有任何提示,如果對於沒有使用意識或者錯誤操作的使用者來說就是一種誤解和不足的地方。
2.提示輸入語言
在使用的操作中,我們發現提示語句過於簡單,例如“輸入要定製的題數”“除數顯示” 等字眼,對於使用者來說或者不熟悉的使用者來說很難理解需要輸入的內容,所以在人機互動方面出現了不必要的困難,使得程式變得繁雜費時,不能夠做到高效快速的解決問題的目的。
3.輸入輸出
輸入時候沒有結束符號不適合多項的輸入,也沒有迴圈的輸入機制程式碼,使得程式單次執行,需要充分開關,在輸出的時候,排版不夠美觀,當題目過多的時候答案和題目對應就出現了困難
4.功能缺陷
程式在輸入完選擇專案後就隨即展示出所有題目和答案,這並不符合實際的操作和使用,在實際中是先給出題目,老師操控後給出答案。
四、改進建議
1.異常處理
對於一個完整的程式來說需要考慮到使用者和程式設計師的不同操作角度和熟知度的問題,所以我們需要在程式中新增對使用者輸入值的判斷條件,在不符合判斷的時候我們需要對其進行錯誤提示,給出提示後並且要求使用者重新深入,兩次輸入值都應該做到這樣的操作
2.提示語言
提示語言應該做到簡潔明瞭並且能使得使用者一眼看出來所需要輸入的內容改為“請輸入需要的四則運算的數目”,“請選擇需要輸出的除法的答案型別:1.整數型別,2.分數型別,3.小數型別”
3.輸出輸入
在輸入位置加入迴圈語句,以結束符作為結束標誌,實現多個組的運算輸出做到程式高效率執行
4.功能缺陷
在輸入中加入語句進行多一次選擇,展示完題目之後進行使用者的一次互動有使用者輸入特殊標識符合來啟用答案輸入語句的輸出,做到使用者使用體驗的最優化
五、閱讀心得
首先,在建立一個新的系統或產品時,進行詳細的需求分析以確定顧客的需要是十分必要的。這能讓我們分析和尋求新系統的解決方法來確定新系統的目的、範圍、定義和功能。
其次,在程式設計過程中我們應該遵守程式設計規範以方便他人的閱讀及日後對軟體的維護等。
最重要的就是我們的程式需要不同的測試並且有使用者來測試使用並且改進才能完善程式,對於程式設計師和使用者有一個不可避免的專業認同的問題,所以在程式的建立之前一定要對使用使用者的日常使用進行交流和定義,只有這樣才能夠使得系統功能更簡潔高效的完成使用者的目的。