一、需求分析
二、功能設計
- 基本功能
- 每個數字定義為一個包含分子、分母、符號的結構體
- 隨機生成數字
- 隨機生成四則運算符號
- 隨機生成括號
- 在重新定義的數字上實現通分、約分、以及加減乘除的基本操作
- 將生成的式子以及計算出的答案保存到txt文件
- 對提供的式子和答案進行打分校驗,包括查重,並將統計結果保存到txt文件
- 通過命令行傳遞參數
三、設計實現
- 整體思路是根據范圍隨機生成參數,然后隨機生成操作符和括號,然后用兩個字符串數組分別存儲txt中可讓小學生看懂的表達式格式,另一個數組存儲電腦計算的表達式格式,不太想用常規的中綴轉后綴表達式進行計算,所以直接使用eval對表達式進行 計算,不過這部分有點問題,當結果是無限小數時由於變量長度導致不能轉變為分數。
- 關於查重功能的實現。在表達式生成的時候直接按照數字的大小排序存入到字符串數組中,操作符也是類似,具體還得看代碼,,在進行打分校驗的時候,如果表達式的結果相同,就通過存儲的表達式對比進行查重,不過這種查重有很小概率會有BUG。
四、代碼說明
1 // 生成題目 2 public static String rubric(int m,int []num,int optn){ 3 char[] ch=new char[]{'+','-','*','/'}; 4 char[] ch2=new char[]{'+','-','×','÷'}; 5 char[] opt=new char[optn+1]; 6 int i=new Random().nextInt(5); 7 int fs=new Random().nextInt(10); 8 int a=0,b=0; 9 String rub; 10 // 隨機生成括號 11 if(i==0&&optn!=0){ 12 a=new Random().nextInt(optn+1); 13 while(a>=b){ 14 b=new Random().nextInt(optn+1)+1; 15 } 16 if(a==0&&b!=optn+1){ 17 rub="("+Integer.toString( num[0]); 18 } 19 else{ 20 rub=Integer.toString( num[0]); 21 b=0; 22 } 23 } 24 else{ 25 rub=Integer.toString( num[0]); 26 } 27 rubs[m]=rub; 28 // 合成四則運算表達式 29 int[] temp=new int[optn+1]; 30 for(int j=0;j<=optn;j++){ 31 int t=new Random().nextInt(4); 32 temp[j]=t; 33 opt[j]=ch[t]; 34 if(b!=0){ 35 rub=rub+opt[j]; 36 rubs[m]=rubs[m]+ch2[t]; 37 if(a!=0&&j==a-1){ 38 rub=rub+"("; 39 rubs[m]=rubs[m]+"("; 40 } 41 rub=rub+num[j+1]; 42 rubs[m]=rubs[m]+num[j+1]; 43 if(b-1==j){ 44 rub=rub+")"; 45 rubs[m]=rubs[m]+")"; 46 } 47 } 48 else{ 49 rub=rub+opt[j]+num[j+1]; 50 rubs[m]=rubs[m]+ch2[t]+num[j+1]; 51 } 52 } 53 num=sort(num); 54 for(int j=0;j<num.length;j++){ 55 houzhui[m]=houzhui[m]+String.valueOf(num[j]); 56 } 57 temp=sort(temp); 58 for(int j=0;j<temp.length;j++){ 59 houzhui[m]=houzhui[m]+ch[temp[j]]; 60 } 61 rubs[m]=rubs[m]+" ="; 62 return rub; 63 }
五、測試運行



六、PSP展示(單位:天)
PSP2.1 |
Personal Software Process Stages |
Time Senior Student |
Time |
|
Planning |
計划 |
1.5 |
1 |
|
· Estimate |
估計這個任務需要多少時間 |
1.5 |
1 |
|
Development |
開發 |
1.2 |
0.8 |
|
· Analysis |
需求分析 (包括學習新技術) |
10分鍾 |
10分鍾 |
|
· Design Spec |
生成設計文檔 |
5分鍾 |
0分鍾 |
|
· Design Review |
設計復審 |
5分鍾 |
0分鍾 |
|
· Coding Standard |
代碼規范 |
5分鍾 |
2分鍾 |
|
· Design |
具體設計 |
20分鍾 |
20分鍾 |
|
· Coding |
具體編碼 |
1天 |
0.8天 |
|
· Code Review |
代碼復審 |
10分鍾 |
5分鍾 |
|
· Test |
測試(自我測試,修改代碼,提交修改) |
20分鍾 |
10分鍾 |
|
Reporting |
報告 |
20分鍾 |
20分鍾 |
|
· |
測試報告 |
5分鍾 |
0 |
|
· |
計算工作量 |
5分鍾 |
0 |
|
· |
並提出過程改進計划 |
50分鍾 |
0 |
|
|
|
|
|
|
七、小結
此外這次作業的內容看起來並不是很難,但是真正做起來的時候還是很花時間的,尤其是在一些細節的地方,因為不太想用老師上課分享的方法做,所以作業完成度不高。