• 01571030328 实验三 软件工程结对项目


    github 源码地址:https://github.com/yanlong001/demo3

    小伙伴学号:201571030308

    需求分析:      

    (1)由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道题测试结束后给出测试总分;

     (2)题库文件可采用实验二的方式自动生成,也可以手工编辑生成,文本格式如下:

     

    (3)程序为用户提供三种进阶四则运算练习功能选择:百以内整数算式(必做)、带括号算式、真分数算式练习;

    (4)程序允许用户进行多轮测试,提供用户多轮测试分数柱状图,示例如下:

     

    (5)程序记录用户答题结果,当程序退出再启动的时候,可为用户显示最后一次测试的结果,并询问用户可否进行新一轮的测试;

    (6)测试有计时功能,测试时动态显示用户开始答题后的消耗时间。

    (7)程序人机交互界面是GUI界面(WEB页面、APP页面都可),界面支持中文简体(必做)/中文繁体/英语,用户可以进行语种选择。

    核心代码展示:

    界面

        int a=0,b=0;  
        String op="";  
        double result=0;  
        DecimalFormat df=new DecimalFormat("#.00");  
        /** 
         * 出题方法 
         * @param e 
         */  
        public void updateQuestion(ActionEvent e){  
            if(isFirst){  
                startTime=System.currentTimeMillis();  
            }  
            if(isOver==true){  
                listDisp.clear();  
                listScore.clear();  
                labResult.setVisible(false);  
                listScore.setVisible(false);  
            }  
            isOver=false;  
            a=(int)(Math.random()*9+1);  
            b=(int)(Math.random()*9+1);  
            int c=(int)(Math.random()*4);  
            switch (c) {  
            case 0:  
                op="+";  
                result=a+b;  
                break;  
            case 1:  
                op="-";  
                result=a-b;  
                break;  
            case 2:  
                op="*";  
                result=a*b;  
                break;  
            case 3:  
                op="/";  
                result=(a*1.0)/b;  
                //若两个数除不尽,则按四舍五入保留2位小数  
                if(String.valueOf(result).length()>10){  
                    result=Double.parseDouble(df.format((a*1.0)/b));  
                }  
                break;  
            }  
            labA.setText(String.valueOf(a));  
            labB.setText(String.valueOf(b));  
            labOp.setText(op);  
            label5.setText("=");  
            txtAnswer.setText("");  
            isFirst=false;  
              
        }  
        /** 
         * 判断结果 
         * @param e 
         */  
        public void judge(ActionEvent e){  
            try{  
                double value=Double.parseDouble(txtAnswer.getText());  
                String resultStr=(total+1)+"、 "+a+op+b+"="+value;  
                if(value==result){  
                    resultStr+=" 	正确";  
                    right++;  
                    score+=5;  
                }else{  
                    resultStr+=" 	错误 正确答案:"+result;  
                    error++;  
                }  
                listDisp.add(resultStr);  
                total++;  
            }catch(NumberFormatException ignored){  
            }  
        }  
        /** 
         * 统计分数 
         * @param e 
         */  
        public void scorePerformed(ActionEvent e){  
            isOver=true;  
            listScore.clear();  
            listScore.setVisible(true);  
            String exitStr="本次共答题"+total+"道";  
            listScore.add(exitStr);  
            listScore.add("累计用时:"+(System.currentTimeMillis()-startTime)/1000+"秒");  
            listScore.add("答对:"+right+"个");  
            listScore.add("答错:"+error+"个");  
            listScore.add("得分:"+score+"分");  
            getContentPane().add(listScore);  
            score=0;  
            right=0;  
            error=0;  
            total=0;  
              
        }  
          //产生算是
        /** 
         * 校验输入是否位数字 
         * @param numberStr 
         * @return 
         */  
        public boolean isNumber(String numberStr){  
            boolean isNumber=true;  
            try{  
                Double.parseDouble(numberStr);  
            }catch(NumberFormatException e){  
                isNumber=false;  
            }  
            return isNumber;  
        }  
    }  

    出题并运算

    import java.awt.Color;  
    import java.awt.Font;  
    import java.awt.Label;  
    import java.awt.List;  
    import java.awt.TextField;  
    import java.awt.event.ActionEvent;  
    import java.awt.event.KeyEvent;  
    import java.awt.event.KeyListener;  
    import java.text.DecimalFormat;  
      
      
    import javax.swing.JFrame;  
      
    @SuppressWarnings("serial")
    public class Gui extends JFrame{  
        Label labRule=new Label();//规则描述标签  
        Label labA=new Label();//第一个数字标签  
        Label labOp=new Label();//加减乘除标签  
        Label labB=new Label();//第二个数字标签  
        Label label5=new Label();//等于号“=”标签  
        Label labWarn=new Label();//输入合法性校验提示标签  
        Label labQues=new Label();//答题列表标签  
        Label labResult=new Label();//判分标签  
        TextField txtAnswer=new TextField();//输入答案输入框  
          
        int total=0;//记录答题总数  
        int right=0;//记录答题正确数量  
        int error=0;//记录答题错误数量  
        int score=0;//记录答题总分  
        boolean isOver=false;//一轮结束后标识  
        boolean isFirst=true;//程序第一次运行标识  
          
        long startTime;//每一轮运行开始时间  
          
        List listDisp=new List();//答题列表展示框  
        List listScore=new List();//分数展示框  
          
        public static void main(String[] args){  
            Gui score=new Gui();  
        }  
          
        public Gui(){  
            init();  
            setSize(450,630);  
            setDefaultCloseOperation(EXIT_ON_CLOSE);  
            setVisible(true);  
        }  
              
        public void init(){  
            setLayout(null);  
            setSize(450,630);  
          
            labRule.setText("规则:每组十道题,每题10分,按ENTER键开始,小数保留2位");  
            labRule.setBounds(36, 10, 390, 72);  
            labRule.setFont(new Font("Dialog",Font.PLAIN,12));  
            getContentPane().add(labRule);  
              
            labA.setText("x");  
            labA.setBounds(36,82,36,36);  
            labA.setFont(new Font("Dialog",Font.PLAIN,24));  
            getContentPane().add(labA);  
              
            labOp.setText("+");  
            labOp.setFont(new Font("Dialog",Font.PLAIN,24));  
            labOp.setBounds(72, 82, 45, 36);  
            getContentPane().add(labOp);  
              
            labB.setText("y");  
            labB.setFont(new Font("Dialog",Font.PLAIN,24));  
            labB.setBounds(118, 82, 33, 36);  
            getContentPane().add(labB);  
              
            label5.setText("=");  
            label5.setFont(new Font("Dialog",Font.PLAIN,24));  
            label5.setBounds(168, 82, 24, 36);  
            getContentPane().add(label5);  
              
              
            labWarn.setFont(new Font("Dialog",Font.PLAIN,12));  
            labWarn.setBackground(Color.RED);  
            labWarn.setBounds(320, 82, 80, 36);  
            labWarn.setVisible(false);  
            getContentPane().add(labWarn);  
              
            labQues.setText("答题列表:");  
            labQues.setFont(new Font("Dialog",Font.PLAIN,12));  
            labQues.setBounds(36, 148, 100, 20);  
            getContentPane().add(labQues);  
              
            labResult.setText("分数统计:");  
            labResult.setFont(new Font("Dialog",Font.PLAIN,12));  
            labResult.setBounds(36,420,100,20);  
            labResult.setVisible(false);  
            getContentPane().add(labResult);  
              
            txtAnswer.setFont(new Font("Dialog",Font.PLAIN,24));  
            txtAnswer.setBounds(216, 82, 100, 36);  
            getContentPane().add(txtAnswer);  
              
              
            listDisp.setFont(new Font("Dialog",Font.PLAIN,16));  
            listDisp.setBounds(36, 174, 282, 230);  
            getContentPane().add(listDisp);  
              
            listScore.setFont(new Font("Dialog",Font.PLAIN,16));  
            listScore.setBounds(36,450,282,135);  
              
            MyKey myKey=new MyKey();// 答案输入框,键盘按键监听类  
            txtAnswer.addKeyListener(myKey);  
              
        }  
          
        class MyKey implements KeyListener{  
      
            @Override  
            public void keyTyped(KeyEvent e) {  
                  
            }  
      
            @Override  
            public void keyPressed(KeyEvent e) {  
                if(e.getSource()==txtAnswer){  
                    if(e.getKeyCode()==KeyEvent.VK_ENTER){  
                        if(isOver || isFirst){  
                            updateQuestion(null);  
                        }else if("".equals(txtAnswer.getText())){  
                            labWarn.setText("请输入答案!");  
                            labWarn.setVisible(true);  
                        }else{  
                            labWarn.setVisible(false);  
                            if(!isNumber(txtAnswer.getText())){  
                                labWarn.setText("请输入数字!");  
                                labWarn.setVisible(true);  
                            }else if(total<19){  
                                judge(null);  
                                updateQuestion(null);  
                            }else{  
                                judge(null);  
                                labResult.setVisible(true);  
                                scorePerformed(null);  
                            }  
                        }  
                    }  
                }  
                  
            }  
      
            @Override  
            public void keyReleased(KeyEvent e) {  
                  
            }  
              
        } 

    运行截图:

    结对:

    psp:

    PSP2.1任务内容计划完成的时间(min)实际完成需要的时间(min)
    PLanning 计划 50 80
    Estimate 估计这个任务需要多少时间,并规划大致工作步骤 40 60
    Developmet 开发 600 800
    Analysis 需求分析(包括学习新技术) 30 40
    Design Spec 生成设计文档 20 25
    Design Revie 设计复审(和同事审核设计文档) 20 30
    Coding Standard 代码规范 120 240
    Design 具体设计 60 80
    Coding 具体编码 300 420
    Code Review 代码复审 30 40
    Test 测试(自我测试,修改代码,提交修改) 20 30
    Reporting 报告 30 40
    Test Report 测试报告 20 20
    Size Measurement 计算工作量 20 30
    Postmortem & Process Improvement Plan 事后总结,并提出过程改机计划 40 45

     
     
    汉堡评价小伙伴:
    本次实验中,开始我们都有很多问题,针对这些问题我们进行了积极地讨论,我的小伙伴他提多了很多自己的想法,后期还对我们的代码和界面进行了优化,这对我们来说不仅是完成了一次作业,而且让我们对合作有了进一步的理解,我们试着去接受对方的想法,通过本次实验我们的水平也有所提高。
     
    结对编程真的能够带来1+1>2的效果吗?
    对于这个问题,我想答案是肯定的,一个人的能力毕竟有限,但合作的力量就不一样了,出现问题时一个人可能解决不了,但是两个人积极讨论就能解决了,每个人都有自己擅长的领域,也有自己的不足,两个人取长补短,就能达到1+1>2的效果。

     

     

  • 相关阅读:
    使用SQLCOMMAND以及SQLADAPERT 调用存储过程
    将表A的数据复制到表B,以及关于主表和子表的删除办法
    登录次数验证,可能还是有些不足的,希望大家指正
    MVC过滤器
    sql数据库delete删除后怎么恢复,这是网上找的答案。。希望大神验证指教一下
    淘宝前后端分离实践
    P1852 [国家集训队]跳跳棋
    P2154 [SDOI2009]虔诚的墓主人
    P4208 [JSOI2008]最小生成树计数
    P2467 [SDOI2010]地精部落
  • 原文地址:https://www.cnblogs.com/yanlong0017/p/8719222.html
Copyright © 2020-2023  润新知