201571030319 201571030322 小學四則運算結對項目
阿新 • • 發佈:2018-04-05
閱讀 進行 analysis frame process trend src create tde
- GitHub源碼地址:https://github.com/nigulasiletai/Demo2
- 1.需求分析:
- (1)隨機選擇20道混合運算;
-
(2)用戶輸入答案,給出結果;
(3)程序檢查答案結果,正確計5分,錯誤不計分;
(4)20道測試題結束給出總分;
(5)帶括號算式,真分數算式;
(6)程序允許用戶進行多輪測試,給出多輪測試分數柱狀圖;
(7)程序記錄用戶答題結果,當程序退出再啟動的時候,可為用戶顯示最後一次結果,並詢問用戶可否進行新一輪測試;
(8)測試有記時功能,動態顯示答題後的消耗時間;
(9)程序人機交互界面是GUI界面;
2.功能設計:
(1)算式引用實驗二的代碼;
(2)生成的題庫顯示在QuestionBank.docx 中;並隨機產生20道算式;
(3)調用包JfreeChart-1.0.13包;來生成柱狀圖;
(4)倒計時用Thread.sleep和循環來完成;
(5)多輪測試彈出框用JOptionPane類來完成;
3.設計實現:
(1)隨機產生的20道算式放在ArrayList集合中,然後傳參調入Gu類中;
(2)倒計時時間設置為30分鐘,以消耗的形式動態展現;
(3)隨機產生的算式得出的結果放在counter中,然後以傳參形式放在Score類中,形成柱狀圖;
4.核心代碼:
Gu類(界面)
package cn.longteng.demo; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.FileNotFoundException; import java.util.ArrayList; import javax.swing.*; public class Gu extends JFrame { static JFrame j; static JPanel jp, p1, p2; JLabel[] lab = new JLabel[20]; JLabel[] lab3 = new JLabel[20]; static JTextField[] txt = new JTextField[20]; static JButton btn; static JLabel lab1; String[] str = new String[200]; int[] num = new int[200]; String[] sr = new String[20]; static int[] nm = new int[20]; static long time = 1800; static Main m = new Main(); static int[] res=new int[20]; static int counter=0; static String[] srs=new String[20]; static int n; static int w; static ArrayList<Integer> lis=new ArrayList(); public Gu() { } public void Jiemian(){ j = new JFrame("小學生在線混合運算題庫"); j.setSize(1366, 735); jp = new JPanel(); jp.setLayout(new BorderLayout()); p1 = new JPanel(); p1.setLayout(new BorderLayout()); p2 = new JPanel(); p2.setLayout(new GridLayout(10, 5, 10, 40)); btn = new JButton("提交"); lab1 = new JLabel(); for (int k = 0; k < 20; k++) { lab[k] = new JLabel(""); txt[k] = new JTextField(" "); lab3[k] = new JLabel(" "); } for (int i = 0; i < 20; i++) { p2.add(lab3[i]); p2.add(lab[i]); p2.add(txt[i]); } p1.add(lab1, BorderLayout.WEST); p1.add(btn, BorderLayout.EAST); j.add(jp); jp.add(p1, BorderLayout.NORTH); jp.add(p2, BorderLayout.CENTER); j.setVisible(true); j.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); } public void SetLab(Main s) { try { s.Num(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.str = Main.ts; this.num = Main.s; int i = 0; for (int l = 0; l < 200; l = l + 10) { while (i < 20) { sr[i] = str[l]; nm[i] = num[l]; lab[i].setText(sr[i]); i++; break; } } } public void Time() { while(time >0) { long mm = time / 60 % 60; long ss = time % 60; lab1.setText("剩余答題時間:" + mm + ":" + ss); time--; try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void Chann(){ btn.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource()==btn){ for(int x=0;x<20;x++){ srs[x]=txt[x].getText().replaceAll(" ",""); if(srs[x].equals("")){ res[x]=0; } else{ res[x]=Integer.parseInt(srs[x].replaceAll(" ", "")); if(res[x]==nm[x]){ counter+=5; } } } lis.add(counter); n=JOptionPane.showConfirmDialog(j, "是否提交?","系統提示",JOptionPane.INFORMATION_MESSAGE); if(n==JOptionPane.YES_OPTION){ j.dispose(); w++; new Score(); } else{ return; } } } }); } public void Ch(){ if(time==0){ for(int k=0;k<20;k++){ srs[k]=txt[k].getText().replaceAll(" ",""); if(srs[k].equals("")){ res[k]=0; }else{ res[k]=Integer.parseInt(srs[k].replaceAll(" ", "")); if(res[k]==nm[k]){ counter+=5; } } } lis.add(counter); j.dispose(); w++; new Score(); } } }
Score類
package cn.longteng.demo; import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; import javax.swing.JFrame; import javax.swing.JOptionPane; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer3D; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; public class Score extends JFrame{ ChartPanel frame1; static JFrame frame; static Gu gu=new Gu(); static Main m = new Main(); static ArrayList<Integer> lis=new ArrayList(); public Score(){ CategoryDataset dataset=getData(gu); JFreeChart chart=ChartFactory.createBarChart3D("小學生在線測試分數結果", "測試的次數", "分數", dataset, PlotOrientation.VERTICAL, true, false,false); CategoryPlot plot=chart.getCategoryPlot(); CategoryAxis domainAxis=plot.getDomainAxis(); domainAxis.setLabelFont(new Font("黑體",Font.BOLD,14)); //水平底部標題 domainAxis.setTickLabelFont(new Font("宋體",Font.BOLD,12)); //垂直標題 domainAxis.setUpperMargin(0.2); //設置距離圖片右端距離 domainAxis.setLowerMargin(0.1); //透明度 // plot.setForegroundAlpha(1.0f); ValueAxis rangeAxis=plot.getRangeAxis();//獲取柱狀 rangeAxis.setLabelFont(new Font("黑體",Font.BOLD,15)); chart.getLegend().setItemFont(new Font("黑體", Font.BOLD, 15)); chart.getTitle().setFont(new Font("宋體",Font.BOLD,20));//設置標題字體 BarRenderer3D renderer = new BarRenderer3D();//3D屬性修改 plot.setRenderer(renderer);//將修改後的屬性值保存到圖中 renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setBaseItemLabelsVisible(true); renderer.setBaseItemLabelPaint(Color.BLUE);// frame1=new ChartPanel(chart,true); frame=new JFrame("小學生在線混合運算測試統計圖"); frame.setLayout(new GridLayout(2,2,10,10)); frame.add(getChartPanel()); //添加柱形圖 frame.setBounds(300, 50, 600, 650); frame.setVisible(true); Clos(); } public CategoryDataset getData(Gu g) { // TODO Auto-generated method stub DefaultCategoryDataset dataset = new DefaultCategoryDataset(); this.lis=g.lis; for(int i=0;i<g.w;i++){ dataset.addValue(lis.get(i),"","第"+i+"輪測試"); } return dataset; } public ChartPanel getChartPanel(){ return frame1; } public static void Clos(){ frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ int i=JOptionPane.showConfirmDialog(null, "是否再次測試","系統提示",JOptionPane.INFORMATION_MESSAGE); if(i==JOptionPane.YES_OPTION){ Gu g = new Gu(); g.Jiemian(); g.SetLab(m); g.Chann(); frame.dispose(); //g.Time(); g.Ch(); } else { System.exit(0); } } }); } }
5.測試結果截圖:
結對時:
6.PSP:
PSP2.1 任務內容 計劃完成需要的時間(min) 實際完成的時間(min) planning 計劃 30 40 Estimate 估計這個任務需要多少時間 40 55 Development 開發 100 120 Analysis 需求分析 8 20 Design Spec 生成設計文檔 8 19 Design Review 設計審查 5 5 Coding Standard 代碼規範 14 9 Design 具體設計 20 31 Coding 具體編碼 60 110 Code Review 代碼復審 38 15 Test 測試(自我測試,修改代碼,提交修改) 8 20 Reporting 報告 16 14 Test Report 測試報告 10 13 Size Measurement 計算工作量 4 6 Postmortem & Process
Improvement
事後總結 10 12 - 7.總結
- 通過本次的結對項目明白了團結合作的重要性,同時也清楚了自身的不足 ,在這次的結對項目實驗中我的小夥伴馬中山充分展現了他的能力,每當遇到難題時,總是他在第一時間反應過來,找出正確的方向,並且解決問題,這一點我應該向他學習。而我的問題是對代碼的理解與閱讀不夠,需要在課後多加練習,希望在今後的項目中能展顯出更好的成績。
201571030319 201571030322 小學四則運算結對項目