1. 程式人生 > >小學生四則運算練習軟件

小學生四則運算練習軟件

lap 記錄 rul result eve pac roc 程序流程圖 imp

結對夥伴博客地址:http://www.cnblogs.com/zhangcunhui/

Github倉庫主頁鏈接地址:https://github.com/huicunzhang/Sizeyunsuan2

  • 需求分析

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

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

技術分享圖片

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

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

技術分享圖片

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

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

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

  • 設計類圖:

技術分享圖片

Start類:用來創建進入系統的界面;

SimpleFrame類:做題界面、隨機出題、調用shishi3類中的計時功能;

Sort類:成績匯總界面,以柱狀圖的形式展現,用數組記錄每次測試的結果。

  • 程序流程圖:

技術分享圖片

  • 核心代碼:

判斷結果對錯的代碼:

技術分享圖片
 1
if( Expressions.get(0).equals(answers.get(0)) ) 2 {answer1.setText("正確 "); sum++;} 3 else 4 answer1.setText("錯誤"); 5 6 if( Expressions.get(1).equals(answers.get(1)) ) 7 {answer2.setText("正確 "); sum++;}
8 else 9 answer2.setText("錯誤"); 10 11 if( Expressions.get(2).equals(answers.get(2)) ) 12 {answer3.setText("正確 "); sum++;} 13 else 14 answer3.setText("錯誤"); 15 16 if( Expressions.get(3).equals(answers.get(3)) ) 17 {answer4.setText("正確 "); sum++;} 18 else 19 answer4.setText("錯誤"); 20 21 22 23 num.add(sum*5+""); 24 //num.add(sum+""); 25 //將判斷結果存入文件 26 try { 27 File f = new File("result.txt"); 28 FileWriter fw = new FileWriter(f,true); 29 PrintWriter pw = new PrintWriter(fw); 30 for(String con:num) 31 { 32 pw.println(con); 33 } 34 35 fw.close(); 36 37 } catch (IOException e) { 38 // TODO Auto-generated catch block 39 e.printStackTrace(); 40 }
View Code

計時器代碼:

技術分享圖片
 1 class shishi3 extends Thread {
 2             private long noww = 0l;
 3             private long start = System.currentTimeMillis();// 程序啟動時間的毫秒值
 4             private long time;
 5             public void run() {
 6                 int i=0;
 7                 while (true) {
 8 
 9                     noww = System.currentTimeMillis();// 獲取一秒之後的毫秒值
10                     time = noww - start;// 兩個時間相減的到毫秒差
11                     timetime=time;
12                     String ssss=String.format("%02d:%02d:%02d\n",
13                             time / (1000 * 60 * 60) % 60/**/, 
14                             time / (1000 * 60)% 60/**/, 
15                             (time / 1000 % 60)/**/);// 格式化字符串輸出
16                
17                         l1.setText(ssss);
18                         i++;
19                         try {
20                             Thread.sleep(1000);
21                         } catch (InterruptedException e) {
22                             e.printStackTrace();
23                         }
24                     
25                 }
26             }
27         }
View Code

柱狀圖代碼:

技術分享圖片
int Width = 400;
        int Height = 450; 
        Random ran = new Random();
        int leftMargin = 15;//柱形圖左邊界  
        int topMargin = 50;//柱形圖上邊界  
        Graphics2D g2 = (Graphics2D) g;
        g2.translate(50, 100);
        int ruler = Height-topMargin-5;  
        int rulerStep = ruler/10;//將當前的高度評分為10個單位  
        g2.setColor(Color.gray);//繪制白色背景  
        g2.fillRect(0, 0, Width, Height);//繪制矩形圖  
        g2.setColor(Color.LIGHT_GRAY);  
        for(int i=0;i<=10;i++)
     {//繪制灰色橫線和百分比  
            g2.drawString((100-10*i)+"", 10, topMargin+rulerStep*i);//寫下百分比  
            g2.drawLine(10, topMargin+rulerStep*i, Width, topMargin+rulerStep*i);//繪制灰色橫線  
        }  
        g2.setColor(Color.PINK);  
        for(int i=0;i<4;i++)
     {//繪制柱形圖  
            int value =save[i]*4;// ran.nextInt(Height-topMargin-10)+10;//隨機產生柱形的百分比  
            int step = (i+1)*35;//設置每隔柱形圖的水平間隔為40  
            //繪制矩形  
            g2.fillRoundRect(leftMargin+step*2, Height-value-10, 40, value, 40, 10); 
            //g2.fillRoundRect(leftMargin+step*2, Height-value, 40, value, 40, 10);  
            //列出產品的編號  
            g2.drawString("測試"+(i+1), leftMargin+step*2, Height-value-15); 
            
        }
View Code
  • 運行結果:

技術分享圖片技術分享圖片

技術分享圖片

  • 結對過程:

技術分享圖片

  • 總結與評價:

在本次結對過程中,我和我的小夥伴先通過查閱資料對軟件系統進行了詳細的設計,並作了合理的分工,但理想很豐滿,現實過於骨感吶,由於雙方編程基礎都比較弱,開始去編程的時候出現了很多的困難,沒辦法,只好再次進行設計,去了很多復雜的東西,從簡單的功能入手,等到程序能運行之後再慢慢進行補充。由於雙方都不是很要強的那種,加之關系也好,在合作過程中能比較愉快地交流。

對於結對編程真的能夠帶來1+1>2的效果的說法,我自己是很贊同的,以前一個人編程完成實驗項目,就算完成了也仍然會存在很多的問題,發現問題不及時,後知後覺的,但在此次結對過程中,我深切體會到了合作的力量,結對完成項目,無論在設計還是編程實現過程中,都能讓該過程實現得堪稱完美,存在的問題能得到及時的反饋、糾正,但前提是溝通要到位。結對完成還能收獲其他的很多東西,比方說合作能力,通過結對,合作能力能得到不斷提升。

  • PSP:

PSP2.1

任務內容

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

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

Planning

計劃

10

10

· Estimate

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

10

10

Development

開發

1302

1065

·· Analysis

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

10

20

· Design Spec

· 生成設計文檔

5

5

· Design Review

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

2

5

· Coding Standard

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

5

5

· Design

具體設計

30

25

· Coding

具體編碼

1200

960

· Code Review

· 代碼復審

30

20

· Test

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

20

25

Reporting

報告

25

28

·· Test Report

· 測試報告

10

5

· Size Measurement

計算工作量

5

3

· Postmortem & Process Improvement Plan

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

10

20

小學生四則運算練習軟件