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

结对编程

改进现有代码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下去才能慢慢跟上来。

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

时间: 2024-10-10 04:27:33

软件工程网络15结对编程作业(201521123115)的相关文章

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

Deadline: 2018-3-25 10:00PM,以提交至班级博客时间为准. 请在两周时间内完成结对编程练习,注意时间的合理安排. 参考来自http://www.cnblogs.com/xinz/p/7417960.html 题目要求: 1.改进现有代码 分析网络14部分现有程序代码(请选择其中一个) 个人博客地址1:http://www.cnblogs.com/weihui-01 ,源代码:https://coding.net/u/weh/p/software-testing/git 个

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

0.结对编程成员: 吴剑通博客地址:https://www.cnblogs.com/wjt960310/ 杨钧宇博客地址:http://www.cnblogs.com/GOB8023/ 码云地址:https://gitee.com/jmu201521123056/four_operations 源代码:https://coding.net/u/Belong033/p/java-third/git 原题目要求 http://www.cnblogs.com/happyzm/p/6472120.htm

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

一.结对编程成员: 郑子熙(201521123045): 陈文俊(201521123047): 二.对原有程序分析: 三.改进现有代码: 四.代码展示: 五.PSP: 六.实验小节: 原文地址:https://www.cnblogs.com/zhengizixi/p/8645259.html

软件工程网络15个人阅读作业2 201521123038 游舒婷

软件工程网络15个人阅读作业2 提出问题 问题1 我看了书P85这一段文字, 结对编程中有两个角色: 1.驾驶员(Driver):控制键盘输入. 2.领航员(Navigator):起到领航.提醒的作用. 这两个角色还是可以互换的. 我的疑惑是,结对编程两个人的能力不一定在同一水平线上,每个人都有自己比较擅长的地方,那么,如果两个角色可以互换,是否说明双方都要读懂对方的代码.假设,一方负责前端设计,一方负责后端开发,虽然两种技术之间有部分相关,但是这意味着两方都要了解对方的代码么? 问题2 我看了

软件工程网络15个人阅读作业1

软件工程网络15个人阅读作业1 Task1:博客账号 http://www.cnblogs.com/mz201521044152/ Task2:码云账号 https://gitee.com/mxz0/events Task3:完成博客-阅读与思考 ##阅读参考材料,并回答下面几个问题: (1)回想一下你初入大学时对网络工程专业的畅想 当初你是如何做出选择网络工程专业的决定的? 你认为过去两年中接触到的课程是否符合你对网络工程专业的期待,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗?

2016福州大学软件工程第二次结对编程作业成绩

在这里跟大家道个歉,由于国庆节基本都在参加婚礼的路上所以现在才把成绩统计汇总了一下,份子钱太吓人已经把不多的工资吃掉了,这个月要靠泡面度日了.你们可是要好好学习,好好赚钱,好出的起同学的份子钱啊.扯远了,第二次结对编程成绩统计如下: 学号 第二次结对编程 031402233 9.5 031402224 9.5 031402330 9.5 031402516 9 031402524 9 031402304 9 031402509 9 031402341 9 031402508 9 03140232

软件工程网络15个人阅读作业2-提出问题

Deadline: 2018-3-18 10:00PM,以提交至班级博客时间为准. 提出问题 快速通读教材<构建之法>,并参照提问模板,提出5个问题. 如何提出有价值的问题? 请看这个文章:http://www.cnblogs.com/rocedu/p/5167941.html ,以及 在互联网时代如何提问题. 还有这些要点: 在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文 列出一些事例或资料,支持你的提问. 说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还

软件工程15 结对编程作业

项目成员: 郑子熙 201521123045 博客地址:http://www.cnblogs.com/zhengizixi/ 码云地址:https://gitee.com/zhengzixi/four_operations 陈文俊 201521123047 博客地址:http://www.cnblogs.com/chendajia/ 码云地址:https://gitee.com/chendajia/pair_programming 改进现有代码 需求分析:针对现有代码的改进分析,功能分析 从原来

软工网络15结对编程练习(201521123007谭燕)

链接 学号:201521123006:博客链接: http://www.cnblogs.com/KimHeechul/p/8644402.html 学号:201521123007:博客链接: http://www.cnblogs.com/ty1213/p/8644960.html 码云地址: https://gitee.com/KimHeechul/pair_programming/commits/master 题目要求: 1. 改进现有代码 1.1 分析网络14部分现有程序代码 个人博客地址4