201571030133/201571030102《小學四則運算練習軟件》結對項目報告

Github地址連接:https://github.com/J777lh7/201571030133-201571030102html

結對夥伴的博客連接:http://www.cnblogs.com/yuan1229/p/8716855.htmljava

個人學號:201571030133git

結對夥伴的學號:201571030102github

一、需求分析:編程

(1)由計算機從題庫文件中隨機選擇20道加減乘除混合算式,用戶輸入算式答案,程序檢查答案是否正確,每道題正確計5分,錯誤不計分,20道題測試結束後給出測試總分;app

(2)題庫文件可採用實驗二的方式自動生成,也能夠手工編輯生成,文本格式以下:ide

(3)程序爲用戶提供三種進階四則運算練習功能選擇:百之內整數算式(必作)、帶括號算式、真分數算式練習;學習

(4)程序容許用戶進行多輪測試,提供用戶多輪測試分數柱狀圖,示例以下:測試

(5)程序記錄用戶答題結果,當程序退出再啓動的時候,可爲用戶顯示最後一次測試的結果,並詢問用戶能否進行新一輪的測試;ui

(6)測試有計時功能,測試時動態顯示用戶開始答題後的消耗時間。

(7)程序人機交互界面是GUI界面(WEB頁面、APP頁面均可),界面支持中文簡體(必作)/中文繁體/英語,用戶能夠進行語種選擇。

二、 軟件設計

 

三、 核心功能代碼展現

 (1)gui界面部分代碼:

  1 package yn;
  2 import java.awt.event.*;
  3 import java.awt.*;
  4 import java.io.BufferedWriter;
  5 import java.io.File;
  6 import java.io.FileWriter;
  7 import java.io.IOException;
  8 import java.util.ArrayList;
  9 
 10 import javax.swing.*;
 11 public class calculate extends JFrame
 12 {
 13     public BinaryTree bTree; 
 14     public static final int DEFAULT_WIDTH = 1000;
 15     public static final int DEFAULT_HEIGHT = 1000;
 16     private JButton button1;
 17     private JButton button2;
 18     private JButton button3;
 19     private JLabel label1;
 20     private JLabel label2;
 21     private JLabel label3;
 22     
 23     private JTextArea textArea1;
 24     private JTextField field;
 25     int cnt=0;
 26     int score=0;
 27     ArrayList<Integer> scores=new ArrayList<Integer>();
 28     public  calculate()
 29     {
 30         setTitle("得分狀況");
 31         setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
 32         setLocationByPlatform(true);//能夠自行設置窗口位置 
 33         label1 = new JLabel("顯示以下:",JLabel.LEFT);
 34         label1.setFont(new Font("SansSerif", Font.BOLD + Font.ITALIC, 18));
 35         label1.setBounds(200, 50, 300,45);
 36         this.add(label1);
 37         
 38         label2 = new JLabel("輸入你的答案:",JLabel.LEFT);
 39         label2.setFont(new Font("SansSerif", Font.BOLD + Font.ITALIC, 18));
 40         label2.setBounds(200, 600, 300,45);
 41         this.add(label2);
 42         
 43         label3 = new JLabel("",JLabel.LEFT);
 44         label3.setFont(new Font("SansSerif", Font.BOLD + Font.ITALIC, 18));
 45         label3.setBounds(200, 800, 300,45);
 46         this.add(label3);
 47         
 48         button1 = new JButton("出題");
 49         button1.setBounds(800, 200, 100,25);
 50         this.add(button1);
 51         button2 = new JButton("結果");
 52         button2.setBounds(800, 400, 100,25);
 53         this.add(button2);
 54         button3 = new JButton("總結");
 55         button3.setBounds(800, 600, 100,25);
 56         this.add(button3);
 57         
 58         textArea1 = new JTextArea();
 59         textArea1.setColumns(21);
 60         textArea1.setRows(21);
 61         textArea1.setBounds(200, 100, 400,400);
 62         this.add(textArea1);
 63         
 64         field = new JTextField();
 65         field.setColumns(20);
 66         field.setBounds(400, 600, 300, 45);
 67         this.add(field);
 68         
 69         JPanel pan = new JPanel();
 70         add(pan);
 71         
 72         button1.addActionListener(new ActionListener()
 73         {
 74             public  void actionPerformed(ActionEvent  event)
 75             {         
 76                 if(cnt<20)
 77                 {
 78                     question();
 79                     cnt++;
 80                 }
 81                 else{
 82                     button1.setText("再來一次");
 83                     Start st=new Start();
 84                     st.setVisible(true);
 85                 }
 86                 
 87                           
 88             }
 89          });
 90         
 91         button2.addActionListener(new ActionListener()
 92         {
 93             public  void actionPerformed(ActionEvent  event)
 94             {
 95                 int c=0;
 96                 String n1 = field.getText();
 97                  field.setText(null);
 98                  String result = bTree.CalAndVal();
 99                  textArea1.append(n1);
100                  
101                 if(n1.equals(result))
102                      {
103                          textArea1.append("  答案正確\n");          
104                          score=score+5;     
105                      }
106                      else{
107                          textArea1.append("  答案錯誤,正確答案爲:"+result+"\n");
108                      }
109             }
110         });    
111 
112         button3.addActionListener(new ActionListener()
113         {
114             public  void actionPerformed(ActionEvent  event)
115             {
116                 scores.add(score);
117                 //for(int i=0;i<scores.size();i++)                
118                  label3.setText("你的成績爲:"+scores + "分");
119                 Chart window=new Chart(scores);
120                 window.setVisible(true);
121                 
122             }
123         });    
124         
125        
126     }
127     
128     public void question()
129     {
130         
131         bTree = new BinaryTree(2);  
132         bTree.createBTree();  
133         textArea1.append(bTree.toString() + "=" );
134     }
135     
136 }

(2)柱狀圖代碼

 1 package yn;
 2 import java.awt.Color;  
 3 import java.awt.Graphics;  
 4 import java.awt.Graphics2D;
 5 import java.util.ArrayList; 
 6   
 7 import javax.swing.JFrame;  
 8   
 9 public class Chart extends JFrame{  
10   
11     //繪製柱形統計圖  
12     ArrayList<Integer> ran=new  ArrayList<Integer>();
13     public Chart(ArrayList<Integer> scores)
14     {  
15         super();  
16         getContentPane().setForeground(Color.CYAN);
17         setForeground(Color.CYAN);
18         setBackground(Color.CYAN);
19         for(int i=0;i<scores.size();i++)
20         {
21             ran.add(scores.get(i));
22             System.out.println(scores.get(i));
23             
24             
25         }
26           
27         setTitle("繪製柱形圖");  
28         setSize(600, 400);
29         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
30     }  
31     @Override  
32     public void paint(Graphics g){
33         int Width = getWidth();
34         int Height = getHeight();
35         int leftMargin = 20;//柱形圖左邊界
36         int topMargin = 50;//柱形圖上邊界
37         Graphics2D g2 = (Graphics2D) g;
38         g2.setColor(Color.WHITE);//繪製白色背景
39         g2.fillRect(0, 0, Width, Height-100);//繪製矩形圖
40         g2.setColor(Color.black);
41          for(int i=0;i<=10;i++)
42          {
43              //繪製灰色橫線和百分比
44              g2.drawString((100-10*i)+"", 15, topMargin+30*i);
45              g2.drawLine(5, topMargin+30*i, Width, topMargin+30*i);//繪製灰色橫線
46          }
47          g2.setColor(Color.BLUE);
48          for(int i=0;i<=ran.size();i++)
49          {
50              //繪製柱形圖
51              int step = (i+1)*40;//設置每一個柱形圖的水平間隔爲40
52              //繪製矩形
53              g2.fillRoundRect(leftMargin+step*2-5,(100-ran.get(i))*3+50, 40, 300-(100-ran.get(i))*3, 40, 10);
54              //列出測試輪數
55              g2.drawString("第"+(i+1)+"輪", leftMargin+step*2, 380);
56          }    
57      }  
58 }

(3)計時器部分代碼:

 1 package yn;
 2 
 3 import java.awt.Dimension;
 4 import java.text.SimpleDateFormat;
 5 import java.util.Calendar;
 6 import javax.swing.JFrame;
 7 import javax.swing.JLabel;
 8 import javax.swing.JPanel;
 9 public class TimerThread extends JFrame implements Runnable
10 {
11      private JFrame frame;
12      private JPanel timePanel;
13      private JLabel timeLabel;
14      private JLabel displayArea;
15      private String DEFAULT_TIME_FORMAT = "HH:mm:ss";
16      private int ONE_SECOND = 1000;
17      int time = 1;    boolean isRun = true; 
18      public TimerThread()
19      {
20          timePanel = new JPanel();
21          timeLabel = new JLabel("您本次用時:");
22          displayArea = new JLabel();
23          timePanel.add(timeLabel);
24          timePanel.add(displayArea);
25          this.add(timePanel);
26          this.setDefaultCloseOperation(EXIT_ON_CLOSE);
27          this.setBounds(800, 100, 200, 80);
28      }
29      public void run()
30      {
31          while(isRun)
32          {    
33              try {
34                  displayArea.setText(+time+"s");
35                  time++;
36                  Thread.sleep(1000);
37              } catch (InterruptedException e) {
38                  e.printStackTrace();
39              }
40          }
41      }
42 }

 

四、程序運行

 

 

 

 

 

 

 

 

 

五、結對的過程

 提供兩人在討論、細化和編程時的結對照片(非擺拍)。

 

六、結對做業的PSP

 

PSP2.1

任務內容

計劃共完成須要的時間(min)

實際完成須要的時間(min)

Planning

計劃

10

15

·       Estimate

·  估計這個任務須要多少時間,並規劃大體工做步驟

10

25

Development

開發

400

650

··       Analysis

  需求分析 (包括學習新技術)

40

60

·       Design Spec

·  生成設計文檔

5

8

·       Design Review

·  設計複審 (和同事審覈設計文檔)

4

6

·       Coding Standard

  代碼規範 (爲目前的開發制定合適的規範)

3

3

·       Design

  具體設計

120

200

·       Coding

  具體編碼

180

300

·       Code Review

·  代碼複審

7

9

·       Test

·  測試(自我測試,修改代碼,提交修改)

13

21

Reporting

報告

15

24

··       Test Report

·  測試報告

10

20

·       Size Measurement

  計算工做量

2

1

·       Postmortem & Process Improvement Plan

·  過後總結 ,並提出過程改進計劃

3

3

  

七、漢堡評價法給你的小夥伴一些點評(漢堡評價法:http://www.cnblogs.com/xinz/archive/2011/08/22/2148776.html

       我和結對夥伴,日常在一塊兒的時間比較多,有很好的默契。這個項目是咱們第一次合做編程,但因爲彼此的熟悉,溝通交流很是愉快,中間咱們遇到不少問題,經過一塊兒研究、討論,基本都有了解決的方法。咱們兩個的基礎都不是很好,須要上網搜索、查書、請教同窗的地方比較多,完成的較慢,也存在有些問題的解決處理不是很到位,但實驗項目仍是能夠基本完成,也很是開心。

八、結對編程真的可以帶來1+1>2的效果嗎?經過此次結對編程,請談談你的感覺和體會

經過此次結對編程,我認爲結對編程能夠給咱們帶來了1+1>2的效果。在之前的編程過程當中,因爲獨立編程,常存在思路比較侷限,對問題的發現處理不及時的問題,但在此次的結對編程中,經過與結對夥伴的分析、討論,擴展了思路,對問題有了新的理解,並能夠及時指出彼此的錯誤進行改正,讓我感覺到合做的重要性。

相關文章
相關標籤/搜索