zoukankan      html  css  js  c++  java
  • 软工网络15--结对编程练习

    结对编程

    改进现有代码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+"
    ");
            }
    	}
    
    	//计时器
    	 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+"
    ");
    			        }
    			        
    			        //获取答案并对比得正确率
    			             String[] ans =  JTextArea1.getText().split("
    ");
    			          		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);
    				}
    	}
    

    代码规范

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

    团队讨论照片

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

    运行测试




    PSP表格

    小结

    初次结对编程,感觉很是不习惯,没有1+1>2的感觉,可能是默契度不够,磨合一段时间应该就好了。

  • 相关阅读:
    C++ FFLIB之FFXML: 极简化TinyXml 读取
    使用ffpython嵌入和扩展python
    Json 备忘录
    一位软件工程师的6年工作总结
    Sql Server 备忘录
    走出软件作坊
    asp.net 使用Jquery 调用WebService返回JSON 类型数据
    .NET 页面间传值的几种方法
    CKeditor安全使用
    新浪短信Web Service
  • 原文地址:https://www.cnblogs.com/ll321/p/8646942.html
Copyright © 2011-2022 走看看