1. 程式人生 > >201571030319 201571030322 小學四則運算結對項目

201571030319 201571030322 小學四則運算結對項目

閱讀 進行 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 小學四則運算結對項目