github地址:https://github.com/Lei-surely/Project3
git
二:項目報告 github
1:需求分析編程
(1)由計算機從題庫文件中隨機選擇20道加減乘除混合算式,用戶輸入算式答案,程序檢查答案是否正確,每道題正確計5分,錯誤不計分,20道題測試結束後給出測試總分;ide
(2)題庫文件可採用實驗二的方式自動生成,也能夠手工編輯生成,文本格式以下:函數
(3)程序爲用戶提供三種進階四則運算練習功能選擇:百之內整數算式(必作)、帶括號算式、真分數算式練習;學習
(4)程序容許用戶進行多輪測試,提供用戶多輪測試分數柱狀圖,示例以下:測試
(5)程序記錄用戶答題結果,當程序退出再啓動的時候,可爲用戶顯示最後一次測試的結果,並詢問用戶能否進行新一輪的測試;編碼
(6)測試有計時功能,測試時動態顯示用戶開始答題後的消耗時間。spa
(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,一我的的時候出現了問題只能本身解決要花費很長的時間,結對編程兩我的知識互補,問題很快就能獲得解決。而且結對編程大大下降了出錯率,爲後面的代碼測試和審查節省了好多時間,在結對編程的過程當中兩我的共同窗習和解決問題,知識的提高也是大於二的。