四則運算題目生成程序
a.需求分析
看了大家對於本課程的目標和規劃,很多同學都希望能提高自己的實踐能力,沒有捷徑可走,就是練習、練習再練習!那麽就從第一個個人項目開始吧,用一周的時間完成一個基於控制臺的四則運算程序,實現一個自動生成小學四則運算題目的命令行程序
從《構建之法》第一章的 “程序” 例子出發,像阿超那樣,花二十分鐘寫一個能自動生成小學四則運算題目的命令行 “軟件”,滿足以下需求:
- 除了整數以外,還要支持真分數的四則運算,真分數的運算,例如:1/6 + 1/8 = 7/24
- 運算符為 +, ?, ×, ÷
- 並且要求能處理用戶的輸入,並判斷對錯,打分統計正確率。
- 要求能處理用戶輸入的真分數, 如 1/2, 5/12 等
- 使用 -n 參數控制生成題目的個數,例如執行下面命令將生成10個題目
Myapp.exe -n 10
b.功能設計
- 基本功能 :生成表達式,運算結果,對比答案及題目重復查找
c.設計實現
MathStart 控制臺的輸入輸出,將表達式寫入文件,引用需要使用的類,將表達式的key存放入hashtable判重
Express 生成表達式,運算結果,判斷表達式是否不符合要求,生成表達式的key。
Operator 運算符優先級定義,為Express運算結果提供幫助。
AnswerLogin 對比答案是否正確,可匹配小數,正整數,分數,帶分數,若不是以上則輸入失效,要求重新輸入。
d.代碼說明
num,oper隨機生成。
括號一定在數字的左右兩邊,按左括號,數字,右括號,運算符的順序加入表達式;
tranExp是將表達式轉為後綴表達式,方便計算。
運算的過程代碼短,行數多,簡述一下,就是將後綴表達式中,取數字放入a數組中,遇到運算符取a中兩個數,結果放回a中。像棧一樣先進後出。
在後綴表達式中遇到‘+’或‘*’時,判斷前面兩個數值大小,將小的數放到前面。生成一個String的key。
缺陷,只能判斷符號兩邊是數字的,不能判斷符號邊是表達式的如:(1+2)+(1/2)與(1/2)+(1+2)。
以上判定答案輸入,根據正則表達式驗證輸入是否符合要求,符合則設置inputErr=false。當輸入是小數時得到他的精度。分數精度為0.
最後進入Login,判定答案是否正確。
e.測試運行
6 repeat 9 即第7與第10重復。後面更改一下。
psp
PSP2.1 | Personal Software Process Stages | Time Senior Student | Time |
---|---|---|---|
Planning | 計劃 | 20 | 20 |
Estimate | 估計這個任務需要多少時間 | 5 | 5 |
Development | 開發 | 4000 | 4000 |
Analysis | 需求分析 (包括學習新技術) | 20 | 10 |
Design Spec | 生成設計文檔 | 50 | 10 |
Design Review | 設計復審 | 2 | 1 |
Coding Standard | 代碼規範 | 1 | 1 |
Design | 具體設計 | 20 | 30 |
Coding | 具體編碼 | 4500 | 4700 |
Code Review | 代碼復審 | 10 | 8 |
Test | 測試(自我測試,修改代碼,提交修改) | 50 | 120 |
Reporting | 報告 | 60 | 120 |
測試報告 | 24 | 45 | |
計算工作量 | 3 | 5 | |
並提出過程改進計劃 | 8 | 10 |
四則運算題目生成程序