1. 程式人生 > >結對項目——四則運算 “軟件”之升級版

結對項目——四則運算 “軟件”之升級版

inf 多少 時間 比較 更換 需求分析 perf 升級版 ets

這個作業的要求來自於:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2232

我的github遠程倉庫的地址為:https://github.com/zyd123d/zyd1

一、題目基本要求

從個人項目出發,將程序改裝成一個單機帶用戶界面(不是控制臺)的程序,這個程序最基本要達到:

  • 生成題目,單個題目最多不能超過4個運算符,操作數小於100。
  • 用戶可以輸入答案
  • 若用戶輸入答案正確,則提示正確;若答案錯誤,則提示錯誤,並要提示正確答案是多少。

二、擴展要求

  1. 程序可以出帶括號的正整數四則運算,支持分數,除法保留兩位小數,如:(1/3+1)*2 = 2.67,特別註意:這裏是2.67而非2.66,或保持分數形式:8/3
  2. 可以出表達式裏含有負整數(負整數最小不小於-100)的題目,且負數需要帶括號,用戶輸入的結果不用帶括號。如: 2*(-4) = -8
  3. 用戶答題結束以後,程序可以顯示用戶答題所用的時間
  4. 用戶可以選擇出題的個數(最多不能超過5個題目),答題結束可以顯示用戶答錯的題目個數和答對的題目個數
  5. 用戶在第一次答題時,需要用戶輸入用戶名,用戶下次啟動後,程序需要記住用戶前一次輸入的用戶名
  6. 程序可以出單個整數階乘的題目:如:4!=24
  7. 程序可以設置答題時間,時間設置為整數,單位為秒,最大不能超過120秒,若超過了答題時間未答題,則提示:時間已到,不能答題。
  8. 程序可以設置皮膚功能,可以改變界面的顏色即可。


三、結對項目詳細設計過程

  • 使用的編譯開發環境:IntelliJ IDEA 2017.2.3 x64
  • 使用的編程語言:Java語言
  • 實現的擴展要求
  1. 程序可以出帶括號的正整數四則運算,支持分數,除法保留兩位小數,如:(1/3+1)*2 = 2.67,特別註意:這裏是2.67而非2.66,或保持分數形式:8/3
  2. 可以出表達式裏含有負整數(負整數最小不小於-100)的題目,且負數需要帶括號,用戶輸入的結果不用帶括號。如: 2*(-4) = -8
  3. 用戶可以選擇出題的個數(最多不能超過5個題目),答題結束可以顯示用戶答錯的題目個數和答對的題目個數
  4. 程序可以出單個整數階乘的題目:如:4!=24
  5. 程序可以設置皮膚功能,可以改變界面的顏色即可。
  • 源代碼 已上傳至我的github遠程倉庫
  • 部分主要源代碼
  1. 用戶可以選擇出題的個數(最多不能超過5個題目且不少於1個)
1  if(n>5||n<1)
2                 {
3                     //如果題目個數大於5或小於1,會彈出提示框
4                     JOptionPane.showMessageDialog(null,"輸入的題目個數不能大於5或者小於1","註意",JOptionPane.INFORMATION_MESSAGE);
5                 }

2.更換背景顏色

技術分享圖片
 1  if(e.getSource()==B4)//換皮膚
 2             {
 3                 B4.addActionListener(new ActionListener() {
 4                     @Override
 5                     public void actionPerformed(ActionEvent cc) {
 6                         Color ch = JColorChooser.showDialog(p1, "顏色選擇器",
 7                                 p1.getBackground());
 8                         if (ch != null) {
 9                             p1.setBackground(ch);
10                             p1.repaint();
11                         }
12                     }
13                 });
14             }
技術分享圖片

3.隨機生成四則運算題目(包括階乘的運算及負整數的運算)

技術分享圖片
  1 void star()
  2     {
  3         a=(int) (Math.random()*200-100);//random出來的數為0-1之間,然後取-99到99的整數
  4         b=(int) (Math.random()*200-100);
  5         c=(int) (Math.random()*200-100);
  6         d=(int) (Math.random()*200-100);
  7         j=(int) (Math.random()*4);
  8         k=(int) (Math.random()*4);
  9         if(d<0)
 10         {
 11             a=(int) (Math.random()*9+1);//隨機產生一個整數 範圍是0-9(包括0和9)
 12             s1=String.valueOf(a)+String.valueOf(h1[2]);//獲取這個數進行階乘
 13             L4.setText(s1);
 14             result=1;
 15             for(int i=1;i<=a;i++)//從1開始一直乘到這個數字本身
 16             {
 17                 result=result*i;
 18             }
 19         }
 20         else
 21         {
 22             if(b>=0&&c>=0)
 23             {
 24                 //將變量轉換成字符串
 25                 s1=String.valueOf(a)+String.valueOf(h[j])+String.valueOf(b)+String.valueOf(h[k])+String.valueOf(c);
 26                 L4.setText(s1);
 27                 System.out.println(s1);
 28             }
 29             else if(b<0&&c>=0)
 30             {
 31                 //檢測到b小於0,為負數,給b的左右兩邊加上括號運算
 32                 s1=String.valueOf(a)+String.valueOf(h[j])+String.valueOf(h1[0])+String.valueOf(b)+String.valueOf(h1[1])+String.valueOf(h[k])+String.valueOf(c);
 33                 L4.setText(s1);
 34                 System.out.println(s1);
 35             }
 36             else if(b>=0&&c<0)
 37             {
 38                 //檢測到c小於0,為負數,給c的左右兩邊加上括號運算
 39                 s1=String.valueOf(a)+String.valueOf(h[j])+String.valueOf(b)+String.valueOf(h[k])+String.valueOf(h1[0])+String.valueOf(c)+String.valueOf(h1[1]);
 40                 L4.setText(s1);
 41                 System.out.println(s1);
 42             }
 43             else
 44             {
 45                 //檢測到b、c都小於0,都為負數,給b、c的左右兩邊都加上括號運算
 46                 s1=String.valueOf(a)+String.valueOf(h[j])+String.valueOf(h1[0])+String.valueOf(b)+String.valueOf(h1[1])+String.valueOf(h[k])+String.valueOf(h1[0])+String.valueOf(c)+String.valueOf(h1[1]);
 47                 L4.setText(s1);
 48                 System.out.println(s1);
 49             }
 50             if(k>1)  //後面的計算符為乘除,先算後面兩個數;k=0時為加,k=1時為減
 51             {
 52                 if(k==2)
 53                 {
 54                     result=b*c;
 55                 }
 56                 else if(k==3)
 57                 {
 58                     result=b/c;
 59                 }
 60                 if(j==0)
 61                 {
 62                     result=result+a;
 63                 }
 64                 else if(j==1)
 65                 {
 66                     result=a-result;
 67                 }
 68                 else if(j==2)
 69                 {
 70                     result=a*result;
 71                 }
 72                 else if(j==3)
 73                 {
 74                     result=a/result;
 75                 }
 76             }
 77             else if(k<2)
 78             {
 79                 if(j==0)
 80                 {
 81                     result=b+a;
 82                 }
 83                 else if(j==1)
 84                 {
 85                     result=a-b;
 86                 }
 87                 else if(j==2)
 88                 {
 89                     result=a*b;
 90                 }
 91                 else if(j==3)
 92                 {
 93                     result=a/b;
 94                 }
 95                 if(k==0)
 96                     result=result+c;
 97                 if(k==1)
 98                     result=result-c;
 99             }
100         }
101         System.out.println(result);
102         n--;
103     }
104 
105 }
技術分享圖片


四、結對同伴

姓名:鄭永達

他的博客地址:

http://www.cnblogs.com/zyd1234/

結對學習照片:

技術分享圖片


五、程序運行結果演示

  • 四則運算系統初始用戶界面

技術分享圖片

  • 輸入題目個數(大於5小於1是彈窗提示錯誤)

技術分享圖片

  • 隨機出現階乘與帶括號的負數運算

技術分享圖片

技術分享圖片


技術分享圖片

  • 運算結束顯示正確與錯誤個數

技術分享圖片

  • 更換背景顏色

  • 技術分享圖片

技術分享圖片


六、總結

這次的結對項目比上次的個人項目要難很多。一開始的時候是用了c語言寫,已經寫完了發現要將程序改裝成一個單機帶用戶界面的程序,當時就懵了,問了老師後,了解到可以用mfc來實現。那時候查了很多很多資料,但是因為mfc需要用C#語言,但我們沒有學過這個語言,而且沒有辦法在那麽短的時間內學完一個新的語言,並且做出一個項目,後來不得已的情況下之內放棄用C環境。後來選擇了用java,因為他能比較容易地實現框體結構。不過java有一些知識點已經忘記了,所以也費了不少功夫。


七、結對軟件過程耗時估計與統計表

PSP2.1 Personal Software Process Stages Time Senior Student(h) Time(h)
Planning 計劃 3 1.5
· Estimate 估計這個任務需要多少時間 10 15
Development 開發 8 10
· Analysis 需求分析 (包括學習新技術) 2 1
· Design Spec 生成設計文檔 2 1
· Design Review 設計復審 1 1
· Coding Standard 代碼規範 0.5 1.5
· Design 具體設計 4 4.5
· Coding 具體編碼 12 13
· Code Review 代碼復審 1 2
· Test 測試(自我測試,修改代碼,提交修改) 1 1.5
Reporting 報告 1 3
· 測試報告 0 0
· 計算工作量 1 1
· 並提出過程改進計劃 0 0

結對項目——四則運算 “軟件”之升級版