結對項目——四則運算 “軟件”之升級版
阿新 • • 發佈:2018-10-27
inf 多少 時間 比較 更換 需求分析 perf 升級版 ets
這個作業的要求來自於:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2232
我的github遠程倉庫的地址為:https://github.com/zyd123d/zyd1
一、題目基本要求
從個人項目出發,將程序改裝成一個單機帶用戶界面(不是控制臺)的程序,這個程序最基本要達到:
- 生成題目,單個題目最多不能超過4個運算符,操作數小於100。
- 用戶可以輸入答案
- 若用戶輸入答案正確,則提示正確;若答案錯誤,則提示錯誤,並要提示正確答案是多少。
二、擴展要求
- 程序可以出帶括號的正整數四則運算,支持分數,除法保留兩位小數,如:(1/3+1)*2 = 2.67,特別註意:這裏是2.67而非2.66,或保持分數形式:8/3
- 可以出表達式裏含有負整數(負整數最小不小於-100)的題目,且負數需要帶括號,用戶輸入的結果不用帶括號。如: 2*(-4) = -8
- 用戶答題結束以後,程序可以顯示用戶答題所用的時間
- 用戶可以選擇出題的個數(最多不能超過5個題目),答題結束可以顯示用戶答錯的題目個數和答對的題目個數
- 用戶在第一次答題時,需要用戶輸入用戶名,用戶下次啟動後,程序需要記住用戶前一次輸入的用戶名
- 程序可以出單個整數階乘的題目:如:4!=24
- 程序可以設置答題時間,時間設置為整數,單位為秒,最大不能超過120秒,若超過了答題時間未答題,則提示:時間已到,不能答題。
- 程序可以設置皮膚功能,可以改變界面的顏色即可。
三、結對項目詳細設計過程
- 使用的編譯開發環境:IntelliJ IDEA 2017.2.3 x64
- 使用的編程語言:Java語言
- 實現的擴展要求
- 程序可以出帶括號的正整數四則運算,支持分數,除法保留兩位小數,如:(1/3+1)*2 = 2.67,特別註意:這裏是2.67而非2.66,或保持分數形式:8/3
- 可以出表達式裏含有負整數(負整數最小不小於-100)的題目,且負數需要帶括號,用戶輸入的結果不用帶括號。如: 2*(-4) = -8
- 用戶可以選擇出題的個數(最多不能超過5個題目),答題結束可以顯示用戶答錯的題目個數和答對的題目個數
- 程序可以出單個整數階乘的題目:如:4!=24
- 程序可以設置皮膚功能,可以改變界面的顏色即可。
- 源代碼 已上傳至我的github遠程倉庫
- 部分主要源代碼
- 用戶可以選擇出題的個數(最多不能超過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