1. 程式人生 > >201571030114/201571030143《小學四則運算練習軟件》結對項目報告

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

form char roc @override targe number HA 知識 設計文檔

一:源碼

github地址:https://github.com/Lei-surely/Project3

二:項目報告

1:需求分析

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

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

技術分享圖片

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

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

技術分享圖片

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

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

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

2. 軟件設計:

技術分享圖片

(1)MainTest()類:調用四則運算模塊,即MyFrame()類。

  (2)MyFrame()類:點擊開始測試按鈕,調用CalTest()類,生成題庫;點擊提交按鈕,調用Submit()類,統計結果按鈕調用Chart()類,顯示多輪答題結果的柱狀圖。

  (3)Submit()類:顯示本輪測試的正確答案以及用戶提交的答案以及測試的正確率,並讓用戶選擇是進行下一輪還是返回統計結果界面。

  (4)CalTest():運算式生成,實現了隨機生成一百以內的混合運算。

3. 核心功能代碼展示:

(1)計算四則運算界面監聽器

//註冊監聽
 2         private void registerListener() {
 3             //計時
 4             Timer timer = new Timer(1000, new ActionListener() {
 5                 public
void actionPerformed(ActionEvent e) { 6 Date now2 = new Date(now.getTime() + 1000); 7 now = now2; 8 SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); 9 lbl.setText(formatter.format(now)); 10 } 11 }); 12 btn_begin.addActionListener(new ActionListener() { 13 public void actionPerformed(ActionEvent arg0) { 14 //開始測試函數調用 15 begin(); 16 timer.start(); 17 } 18 }); 19 btn_tj.addActionListener(new ActionListener() { 20 public void actionPerformed(ActionEvent arg0) { 21 timer.stop(); 22 try { 23 submit(); 24 } catch (IOException e) { 25 e.printStackTrace(); 26 } 27 } 28 }); 29 btn_js.addActionListener(new ActionListener() { 30 @Override 31 public void actionPerformed(ActionEvent arg0) { 32 //統計結果函數 33 counts(); 34 } 35 }); 36 }

(2)顯示測試結果

private void registerListener() {
        btn_again.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                onceagain();                
            }    
        });
        
        btn_xianshi.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                File file = new File("answer.txt");
                if (file.exists() && file.isFile()) {
                    try {
                        BufferedReader input = new BufferedReader(new FileReader(file));
                        String text;
                        while ((text = input.readLine()) != null)
                            r_answer.setText(r_answer.getText() + text + "\n");
                    } catch (IOException ioException) {
                    System.err.println("File Error!");
                   }        
                }                     
                result();//顯示測試結果函數調用
                try {
                    compare();
                } catch (IOException e) {
                    e.printStackTrace();
                }                
            }            
        });
        btn_exit.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                onceagain();
                
            }
            
        });
    }
//顯示測試結果
 2     public void result() {
 3         File file = new File("result.txt");
 4         if (file.exists() && file.isFile()) {
 5             try {
 6                 BufferedReader input = new BufferedReader(new FileReader(file));
 7                 String text;
 8                 while ((text = input.readLine()) != null)
 9                     my_answer.setText(my_answer.getText() + text + "\n");
10             } catch (IOException ioException) {
11             System.err.println("File Error!");
12            }        
13         }
14     }
15     
16     //比較結果
17     public int compare() throws IOException {
18         //封裝數據源
19         BufferedReader br_a = new BufferedReader(new FileReader("answer.txt"));
20         BufferedReader br_r = new BufferedReader(new FileReader("result.txt"));
21         //封裝目的地
22         ArrayList<String> answer = new ArrayList<String>();
23         ArrayList<String> result = new ArrayList<String>();
24         //讀取數據寫到集合中
25         String line1 = null;
26         String line2 = null;
27        
28         while((line1 = br_a.readLine())!= null){
29             answer.add(line1);
30         }
31         while((line2 = br_r.readLine())!= null){
32             result.add(line2);
33         }
34         //遍歷進行比較並計算正確率
35         int i=0;
36         int count=0;
37         for(i=0;i<answer.size();i++) 
38         {
39             String s1=answer.get(i);
40             String s2=result.get(i);
41             if(s1.equals(s2)) 
42             {
43                 count++;                        
44             }                
45         }
46         NumberFormat numberFormat = NumberFormat.getInstance();    
47         numberFormat.setMaximumFractionDigits(2);  
48         String s3 = numberFormat.format((float) count / (float)answer.size() * 100);   
49         correct.setText("您做對了"+count+"道, "+"正確率為:"+String.valueOf(s3)+"%");
50         int b=count*5;
51         return b;
52     }

(3)繪制柱狀圖

//繪制矩形  
32        g2.fillRoundRect(leftMargin+step*2, Height-(Height/110)*f-5, 30, (Height/110)*f-3,30, 0);    
33        g2.drawString("第"+(i+1)+"輪", leftMargin+step*2,Height-(Height/110)*f-10);  

4. 程序運行:

(1)程序啟動,點擊開始測試按鈕出題並開始計時

技術分享圖片

技術分享圖片

(2)答題完畢,點擊提交按鈕提交測試結果,跳轉到顯示結果頁面,點擊顯示結果按鈕後,顯示正確結果以及用戶測試結果,並計算出正確率。

技術分享圖片

(3)用戶可選擇再來一側或者返回查看測試詳細結果圖,再來一輪步驟與上面相同,不做贅述,當用戶測試幾輪完畢,返回點擊統計結果按鈕

技術分享圖片

5.描述結對的過程,

技術分享圖片

6.提供此次結對作業的PSP

PSP2.1

任務內容

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

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

Planning

計劃

30

40

· Estimate

· 估計這個任務需要多少時間,並規劃大致工作步驟

30

40

Development

開發

600

720

·· Analysis

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

60

90

· Design Spec

· 生成設計文檔

30

45

· Design Review

· 設計復審 (和同事審核設計文檔)

20

30

· Coding Standard

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

15

20

· Design

具體設計

40

65

· Coding

具體編碼

400

480

· Code Review

· 代碼復審

30

30

· Test

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

25

30

Reporting

報告

30

30

·· Test Report

· 測試報告

15

15

· Size Measurement

計算工作量

10

10

· Postmortem & Process Improvement Plan

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

10

15

7. 請使用漢堡評價法給你的小夥伴一些點評。

在這次的結對編程中,我的小夥伴是我的好朋友,我們倆人編程能力都不是很強,但是俗話說得好,兩個臭皮匠頂個諸葛亮,還是順利的把這次的項目完成了。我們已經有了很好的默契,所以在合作完成這個項目時起到了很多的作用,基本沒有出現很大的分歧,很多想法一拍即合,然後一起討論編程實現,小夥伴提出了很多好的建議,對我們完成項目至關重要,通過這次項目合作,提升了我們得能力同時也增強了我們得默契,如果以後還有合作,相信也會很順利。

8. 結對編程真的能夠帶來1+1>2的效果嗎?通過這次結對編程,請談談你的感受和體會。

我覺得結對編程帶來的效果超過了1+1>2,一個人的時候出現了問題只能自己解決要花費很長的時間,結對編程兩個人知識互補,問題很快就能得到解決。並且結對編程大大降低了出錯率,為後面的代碼測試和審查節省了好多時間,在結對編程的過程中兩個人共同學習和解決問題,知識的提升也是大於二的。

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