码迷,mamicode.com
首页 > 其他好文 > 详细

软件工程网络15结对编程作业(201521123115)

时间:2018-03-25 22:18:25      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:源代码   cep   ima   dso   mint   logs   内容   团队   http   

结对编程

改进现有代码2

团队成员:
梁林 201521123119 码云地址:https://gitee.com/ll119
龚厦彬 201521123115 码云地址:https://gitee.com/handsomecat/events

clone项目,在开发环境中运行该应用程序,修改完毕最后上传至码云,并在博客中给出链接

技术分享图片

检查大部分主要类之间的关系,画出类图

技术分享图片

核心代码展示

private static int GCD(int m, int n) {//最大公约数
        // TODO Auto-generated method stub
        while (true) {
            if ((m = m % n) == 0)
            return n;
            if ((n = n % m) == 0)
            return m;
            }
    }
    
    public static int LCM(int m, int n) {  //求最小公倍数
        return m*n/GCD(m,n);
        }
    
    public static int[] createFraction(){  //随机组成真分母
        int[] fraction=new int[2];
        int fraction1 = (int)(Math.random()*10+1);//避免分子出现零
        int fraction2 = (int)(Math.random()*10+1);//避免分母出现零
        if(fraction1!=fraction2){            //避免出现分子分母相同
            if(fraction1<fraction2){        //避免出现假分数
                fraction[0]=fraction1;
                fraction[1]=fraction2;  
                return fraction;
            }else{
                fraction[0]=fraction2; 
                fraction[1]=fraction1;  
                return fraction;
            }
        }else  
            createFraction(); 
        return fraction;
        
    }
    
    public main()//计算四则运算并输出
    {
        new Thread(myTimeRunable).start();
        int n = 0;
        MainFrame ma= new MainFrame();
        int m = (int)(Math.random()*n+1);//随机整数题目和分数题目的题量
        
        try{
            //调用初始化方法
            jbInit();
        }
        catch(Exception exception){
            exception.printStackTrace();
        }
    
        try{
            
            n= Integer.parseInt(ma.number);
            }catch(NumberFormatException e){
                //利用消息对话框提示输入失败
                JOptionPane.showMessageDialog(this,"输入错误!请重新输入");
                }

        for(int j=0;j<(n-m);j++){//整数题目
           String ans;
           int op=(int)(Math.random()*5+1);//随机选择计算符
           int num1=(int)(Math.random()*10+1);//随机两个整数
           int num2=(int)(Math.random()*10+1);
               if(op==1){//加法
                 Question.add(num1+"+"+num2+"="); 
                 Answer.add(num1+num2+"");
              }
               if(op==2){//减法,防止出现负数
                   if(num1>num2){
                     Question.add(num1+"-"+num2+"="); 
                     Answer.add(num1-num2+"");
                  }
               else{
                  Question.add(num2+"-"+num1+"="); 
                 Answer.add(num2-num1+"");
               }
               }
               if(op==3){//乘法
                 Question.add(num1+"*"+num2+"="); 
                 Answer.add(num1*num2+"");
        }
               if(op==4){//除法
                 Question.add(num1+"÷"+num2+"=");
                 if(num1%num2==0){ 
                    Answer.add(num1/num2+"");
                
                 }else{
                     int num3=GCD(num1,num2);
                     num1=num1/num3;
                     num2=num2/num3;
                     String a = num1+"/"+num2;
                     Answer.add(a+"");
                 }
               }
              if(op==5) {//乘方
                 Question.add(num1+"^"+num2+"=");
                 Answer.add(Math.pow(num1,num2)+"");

               
        }
        }
        
        for(int j=0;j<m;j++){//分数题目
               Scanner in = new Scanner(System.in);//真分数的计算
               int op=(int)(Math.random()*4+1);
               int[] f1 =createFraction();
               int[] f2 =createFraction();
               int j1=GCD(f1[0],f1[1]);
               f1[0]=f1[0]/j1;//化简分数
               f1[1]=f1[1]/j1;
               j1=GCD(f2[0],f2[1]);
               f2[0]=f2[0]/j1;
               f2[1]=f2[1]/j1;
               int gbs = LCM(f1[1],f2[1]);
                  
             if(op==1){//加法
                  Question.add("("+f1[0]+"/"+f1[1]+")+("+f2[0]+"/"+f2[1]+")="); 
                  int num1=f1[0]*f2[1]+f2[0]*f1[1];
                  int num2=f1[1]*f2[1];
                  int num3=GCD(num1,num2);
                  num1=num1/num3;
                  num2=num2/num3;
                  String a=new String();
                  if(num1==num2)
                    {
                        a="1";
                    }
                    else
                    {
                        a=num1+"/"+num2;
                    }
                  Answer.add(a+"");
                   
              }
               if(op==2){//减法
                   int num1=f1[0]*f2[1]-f2[0]*f1[1];
                   if(num1>0){  //防止出现负数 
                     Question.add("("+f1[0]+"/"+f1[1]+")-("+f2[0]+"/"+f2[1]+")="); 
                     int num2=f1[1]*f2[1];
                     String a=new String();
                     if(num1==0)
                        {
                            a="0";
                        }
                        else
                        {
                        int num3=Math.abs(GCD(num1,num2));
                        num1=num1/num3;
                        num2=num2/num3;
                        if(num1==num2)
                        {
                            a="1";
                        }
                        else
                        {
                            a=num1+"/"+num2;
                        }
                        }
                     Answer.add(a+"");
               }else{
                   Question.add("("+f2[0]+"/"+f2[1]+")-("+f1[0]+"/"+f1[1]+")="); 
                     int num11=f2[0]*f1[1]-f1[0]*f2[1];
                     int num2=f1[1]*f2[1];
                     String a=new String();
                     if(num11==0)
                        {
                            a="0";
                        }
                        else
                        {
                        int num3=Math.abs(GCD(num11,num2));
                        num11=num11/num3;
                        num2=num2/num3;
                        if(num11==num2)
                        {
                            a="1";
                        }
                        else
                        {
                            a=num11+"/"+num2;
                        }
                        }
                      Answer.add(a+"");
               }
                  }
              if(op==3){//乘法
                     Question.add("("+f1[0]+"/"+f1[1]+")*("+f2[0]+"/"+f2[1]+")="); 
                     int num1= f1[0]*f2[0]; 
                     int num2 = f1[1]*f2[1];
                     int num3=GCD(num1,num2);
                     String a=new String();
                     num1= num1/num3; 
                     num2 = num2/num3;
                  if(num1==num2)
                        {
                            a="1";
                        }
                        else
                        {
                            a=num1+"/"+num2;
                        }
                     Answer.add(a+"");  
                  }
              if(op==4){//除法
                     Question.add("("+f1[0]+"/"+f1[1]+")÷("+f2[0]+"/"+f2[1]+")="); 
                     int num1= f1[0]*f2[1]; 
                     int num2 = f1[1]*f2[0];
                     int num3=GCD(num1,num2);
                     String a=new String();
                     num1= num1/num3; 
                     num2 = num2/num3;
                     if(num1==num2)
                        {
                            a="1";
                        }
                        else
                        {
                            a=num1+"/"+num2;
                        }
                     Answer.add(a+"");  
              }
        }
        
        //输出题目
        JTextArea0.setText("");
        for(String string : Question){
            num ++;
            JTextArea0.append("("+num+")、"+string+"\n");
        }
    }

    //计时器
     private class MyRunable implements Runnable{
            private int hour = 0;
            private int min = 0;
            private int sec = 0;
            private NumberFormat format = NumberFormat.getInstance();
            private String nextSecond(){
                ++sec;
                if(sec == 60) {
                    ++min;
                    sec = 0;
                }
                 
                if(min == 60) {
                    ++hour;
                    min = 0;
                }
                return currentTime();
            }
             
            private String currentTime(){
                return format.format(hour)+":"+format.format(min)+":"+format.format(sec);
            }
             
            @Override
            public void run() {
                format.setMinimumIntegerDigits(2);
                format.setGroupingUsed(false);
                while(true) {
                    if(rootPaneCheckingEnabled) {
                        if(isRun) {
                            nextSecond();
                            jLabel4.setText(currentTime());
                        }
                    }
                    try {
                        Thread.sleep(1000);
                    }catch (InterruptedException e) {
                    }
                }
            }
             
        }
    @Override
    //菜单项事件对应的处理方法
    public void actionPerformed(ActionEvent e) {
                 // TODO Auto-generated method stub
                //点击“系统”菜单下的“退出”菜单项
                if(e.getSource()==jButton0)
                {
                    int num1=0;
                    JTextArea2.setText("");
                    for(String string : Answer){//输出正确答案
                        num1 ++;
                        JTextArea2.append("("+num1+")、"+string+"\n");
                    }
                    
                    //获取答案并对比得正确率
                         String[] ans =  JTextArea1.getText().split("\n");
                            for(int i = 0;i < ans.length;i++){
                                answer.add(ans[i]+"");
                            }
                             for(String str:answer)  
                             {  
                                 if(Answer.contains(str))  
                                 {  
                                    right++;
                                 }  
                             }
                        
                    int sum;
                    sum=right*100/num1;
                    JTextArea3.append(sum+"%");
                    isRun = false;
                }
                //计时开始
                if(e.getSource()==jButton2)
                {
                     isRun = true;
                }
                //继续做题
                if(e.getSource()==jButton1)
                {
                    MainFrame MF=new MainFrame();
                    //移除主框架上原有的内容
                    this.remove(this.getRootPane());
                    this.dispose();
                    MF.setVisible(true);
                }
    }

需求分析:针对现有代码的改进分析,新开发功能的分析。

针对现有代码出现的种种bug进行改进,例如正确率不会重新清零,且有时比对答案不正确正确率错误,所有文本框中内容均可自己修改,开始界面捕捉异常失败。

代码规范

代码风格的原则是:简明,易读,无二义性。
缩进用四个空格
行宽100字符
在复杂的条件表达式中,用括号清楚地表示逻辑优先级。
断行时每个“{”和“}”都独占一行。
分行不把多行语句放在一行上。
命名采用“匈牙利命名法”。
下划线用来分隔变量名字中的作用域标注和变量的语义。
所有的类型/类/函数名都用Pascal形式,所有的变量都用Camel形式。
复杂的注释应该放在函数头,注释(包括所有源代码)只用ASCII字符,不用中文或其他特殊字符。

团队讨论照片

技术分享图片

浏览所有代码考虑代码质量和测试覆盖率

技术分享图片

运行测试

技术分享图片
技术分享图片
技术分享图片
技术分享图片

PSP表格

技术分享图片

小结感受:这次结对编程比较赶,两个人的基础不行,代码都不能完完全全的看懂,只能是在其上面稍作修改,还要继续自学java下去才能慢慢跟上来。

软件工程网络15结对编程作业(201521123115)

标签:源代码   cep   ima   dso   mint   logs   内容   团队   http   

原文地址:https://www.cnblogs.com/handsome321/p/8647205.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!