我們在剛開始上課的時候介紹過乙個小學四則運算自動生成程式的例子,請實現它,要求:開發使用的語言是c++,物件導向程式設計,定義了乙個類
calculator
,具體定義如下:
class calculator
//這幾個函式用於判斷輸入資料是否非法,正確即返回true,非法即返回false
bool isright_parenthesis(char p_temp);
bool isright_decimal(char d_temp);
bool isright_num(int maxnum_temp);
bool isright_maxnum(int maxnum_temp);
bool isright_file(char f_temp);
//生成算式
string makeformula();
string makeformula_f();
};
隨機生成的浮點數,末尾會自動補0,所以需要對浮點數處理,保留小數點後兩位。具體**如下:
//除去浮點數多餘的位數
static std::string roundany(float r, int precision)
//生成整數算式
string calculator::makeformula()
else
while (left == 1 && right == count )//排除左括號在第乙個位置,右括號在最後乙個位置
}//判斷第乙個數要不要加括號
if (left == 1&&count!=2)
else
//生成的格式是「運算子+隨機數」
while (start < count)
number2 = random(1, maxnum);//生成隨機數
if (start == left && parenthesis == true)//左括號位置
else if (start == right && parenthesis == true)//右括號位置
else//不加括號
}formula += '=';
return formula;
}
該函式的實現方法與不含小數算式的實現方法一樣,唯一不同的地方在於,
對於parenthesis
decimal
isfile
這三個引數,設計了具體函式用來判斷輸入的資料是否合法,以decimal
為例,具體**實現如下:
//判斷decimal引數是否傳入,成功返回真,失敗返回假
bool calculator::isright_decimal(char d_temp)
else if ((d_temp == 'n') || (d_temp == 'n'))
else
}
而maxnum
引數與num
引數與之類似,如果引數成功輸入,返回真,否者返回假,以num
為例,具體**實現如下:
//判斷num引數是否傳入,成功返回真,失敗返回假
bool calculator::isright_num(int num_temp)
else
}
由於個人能力有限,短時間內無法寫出使用者圖形介面,所以主函式中使用控制台進行輸入。主函式中存在錯誤處理,如果輸入資料非法的話,會提示重新輸入。同時會根據輸入的資料進行判斷,呼叫哪些函式來輸出算式。具體**如下:
/*主函式中變數的含義
calc是生成隨機算式的類
temp存放的是運算子
p_temp存放的是輸入的是否有括號的字元
d_temp存放的是是否有小數的字元
quantity存放的是生成題目的數量
maxnum_temp存放的是參與運算的最大值
*/int main()
cout << "您希望參與運算的數的最大數量是多少?(預設5個數)" << endl;
cin >> num_temp;
while (!calc->isright_num(num_temp))
cout << "請輸入您期望參與運算的運算子:" << endl;
cin >> temp;
while (temp != '\n')
temp = cin.get();
} cout << "您希望算式中有括號嗎?(輸入y/n,不分大小寫)" << endl;
cin >> p_temp;
while (!calc->isright_parenthesis(p_temp))
cout << "您希望算式中有小數嗎?(輸入y/n,不分大小寫)" << endl;
cin >> d_temp;
while (!calc->isright_decimal(d_temp))
cout << "您希望把算式儲存至文件嗎?(輸入y/n,不分大小寫)" << endl;
cin >> f_temp;
while (!calc->isright_file(f_temp))
//建立檔案
ofstream outfile("formula.txt", ios::out | ios::binary);
if (!outfile)
srand((unsigned int)time(null));
while (calc->parenthesis)
outfile << endl;
}quantity--;
}} else
//有括號沒小數
outfile << endl;
}quantity--;
}} }
while (!calc->parenthesis)
outfile << endl;
}quantity--;
}} else
//沒括號沒小數
outfile << endl;
}quantity--;
}} }
delete calc;
system("pause");
}
對於生成的算式,一共有四種情況,四種算式的結果如下:
輸出到檔案
輸出到檔案
輸出到檔案
輸出到檔案
對於這次的結對程式設計任務,在知道題目之後,我和孫治朝同學沒有想到該怎麼解決問題,所以我們兩個人交替充當駕駛員與領航員的角色,這樣對於問題能有多角度的思考。我們選擇的是四則運算生成器,相對於電梯排程會容易些,但是也會出現難點,比如生成的算式如何加括號才能保證加的位置不會出錯,剛開始我們倆思考的是先生成完整的算式,然後將括號插進去。但是我們儲存算式的資料結構是字串,就需要保證插進字串正確的位置,這可就需要判斷太多的條件,所以最終這條路沒走通。
後來經過別的同學的提示,我們改變了思路,在生成算式的同時就判斷需不需要加括號,如果需要的話就加上,這樣思考的話,需要判斷的情況會少很多,所以我就嘗試著寫了段**,看最終能否成功執行。執行的結果跟我想象的差別不大,只是對於臨界條件的判斷還需要修改。我們倆就決定使用我的方法進行開發,我作為駕駛員,孫治朝作為領航員,共同完成剩下的任務。
這次的結對程式設計任務,孫治朝同學非常積極,很早就開始著手程式設計,對於問題的思考也獨特。我就比較懶了,拖延了幾天之後才開始著手思考如何解決問題,所以說積極性方面,我需要向孫治朝同學學習。同時作為領航員,孫治朝同學對於**的複審要求也很嚴格,這樣嚴謹的風格對於團隊合作有很大的幫助。
軟體工程(2019)結對程式設計第二次作業
我們在剛開始上課的時候介紹過乙個小學四則運算自動生成程式的例子,請實現它,要求 能夠自動生成四則運算練習題 可以定製題目數量 使用者可以選擇運算子 使用者設定最大數 如十以內 百以內等 使用者選擇是否有括號 是否有小數 使用者選擇輸出方式 如輸出到檔案 印表機等 最好能提供圖形使用者介面 根據自己能...
軟體工程第二次作業 結對程式設計
兩人組成一隊,進行結對程式設計 從第一次軟體工程作業中選出一人的作業作為這次作業的基礎 設計乙個圖形介面 gui 的四則運算應用程式,可以是pc桌面的圖形介面程式 網頁程式或者手機程式 設計的應用程式可以完成加法 減法 乘法 除法運算 應用程式可以完成真分數的四則運算 有退格和清屏的功能 讓程式能接...
軟體工程第二次作業 結對程式設計
黎育權 1500802033 李凡 1500802031 gui使用qt整合開發環境進行設計,ui主要由選單欄,32個label,10個lineedit,5個pushbutton,乙個lcdnumber構成,label用於重新整理和顯示資訊,lineedit用於輸入答案,pushbutton用於操作...