題目描述
我們在個人作業1中,用各種語言實現了一個命令行的四則運算小程序。進一步,本次要求把這個程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手機上的),成為一個有基本功能、一定價值的程序。
需求分析
1:記錄用戶的對錯總數,程序退出再啟動的時候,能把以前的對錯數量保存並在此基礎上增量計算。
2:有計時功能,能顯示用戶開始答題后的消耗時間。
3:界面支持中文簡體/中文繁體/英語,用戶可以選擇一種。
結對分工
天生(隊友):
1:有計時功能,能顯示用戶開始答題后的消耗時間。
2:界面支持中文簡體/中文繁體/英語,用戶可以選擇一種。
畢川(本人):
1:建構四則運算式的題庫。(網上找的題庫,然后自己用算法計算出題目的結果)
2:記錄用戶的對錯總數,程序退出再啟動的時候,能把以前的對錯數量保存並在此基礎上增量計算。
思維導圖
1:中綴表達式轉后綴表達式
2:后綴表達式求值
代碼展示
void inFix_postFix(string inFix, string &postFix) //中綴表達式轉化成后綴表達式
{
int len_in = inFix.size();
int k = 0;
stack<char>Q;
for (int i = 0; i < len_in; i++)
{
if (inFix[i] >= '0' && inFix[i] <= '9') //遇到數字直接輸出到postFix中
{
while (inFix[i] >= '0' && inFix[i] <= '9')
{
postFix += inFix[i];
i++;
}
i--;
postFix += ' ';
}
else if (inFix[i] == '(') //遇到左括號直接入棧
{
Q.push(inFix[i]);
}
else if (inFix[i] == ')') //遇到右括號,將棧中的元素全部輸出到postFix中,直到遇見左括號
{
while (Q.top() != '(')
{
postFix += Q.top();
Q.pop();
}
Q.pop();
}
else //遇到運算符
{
if (Q.empty() == true || Q.top() == '(' || Precedence(inFix[i], Q.top()) == false) //如果棧為空,或棧頂元素為左括號,或inFix中的運算符比棧頂的元素的級別高的話,則直接入棧
{
Q.push(inFix[i]);
}
else
{
while (Q.empty() != true && Q.top() != '(' && Precedence(inFix[i], Q.top()) == true)//棧中的元素不為空且棧頂不是右括號且輸入的運算符比棧頂的元素的優先級低,彈出
{
postFix += Q.top(); //將出棧元素放到后綴表達式的數組中
Q.pop();
}
Q.push(inFix[i]);//彈出之后再把輸入元素入棧
}
}
}
while (!Q.empty()) //把棧中剩下的元素全部放到后綴表達式的數組中
{
postFix += Q.top();
Q.pop();
}
}
算法說明
實現了四則混合運算,可以計算分數和整數的混合運算(帶小括號的)。
對於分數的處理,是使用了兩個棧,分子和分母棧。
代碼規范
變量命名的規則:以變量的功能命名,使用完整的英文描述,采用駝峰命名法。
函數傳參過程中盡量采用形式傳值
花括號“{}”不允許省略,即使只有一段代碼。
使用括號“()”來強調運算符優先級。
記得格式化代碼,eclipse里面Ctrl+Shilft+F
注釋代碼段,注釋邏輯選擇!
小結感受
1:與隊友第二次合作,但是這次的合作沒有那么順利,因為隊友用的技術我不會,所以只用了負責后端的算法和記錄用戶的對錯總數。
2:結對編程中,代碼的規范還是挺重要的!
3:結對編程,大家各有擅長的地方,可以加快開發的速度,所以1+1是大於2的。
程序鏈接
PSP(Personal Software Process)表格
PSP2.1 | Personal Software Process Stages | Time (%) Senior Student | Time (%) |
Planning | 計划 | ||
· Estimate | 估計這個任務需要多少時間 | ||
Development | 開發 | 6 | 4 |
· Analysis | 需求分析 (包括學習新技術) | 0.5 | 0.2 |
· Design Spec | 生成設計文檔 | 0.3 | 0.2 |
· Design Review | 設計復審 | 0 | 0 |
· Coding Standard | 代碼規范 | 0.2 | 0.1 |
· Design | 具體設計 | ||
· Coding | 具體編碼 | ||
· Code Review | 代碼復審 | 0.5 | 0.6 |
· Test | 測試(自我測試,修改代碼,提交修改) | 1 | 1 |
Reporting | 報告 | 2 | 3 |
·Test Report | 測試報告 | 0 | 0 |
· Size Measurement | 計算工作量 | ||
·Postmortem & Process Improvement Plan | 並提出過程改進計划 |