个人作业1——四则运算题目生成程序(基于控制台)

一、需求分析

(1)除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
(2)运算符为 +, −, ×, ÷;
(3)并且要求能处理用户的输入,并判断对错,打分统计正确率;
(4)要求能处理用户输入的真分数, 如 1/2, 5/12 等。

 

二、功能设计

(1)基本功能:
       需求分析的基础需求的全部
(2)扩展功能:
       对于错误答案的四则算式,输出正确答案

 

三、设计实现

(1)能够实现生成整数和分数的式子并实现计算;
(2)能够控制生成式子的个数;
(3)能够实现判断对错并计算正确率。

 

四、代码说明

(1)求最大公约数

 int getNumerator(){
    	 return numerator;
    	 }
     
     int getDenominator(){
    	 return denominator;
    	 }
     
     int f(int a,int b){
    	 if(a < b){
    		 int c = a;
    		 a = b;
    		 b = c;
    		 }
    	 int r = a % b;
    	 while(r != 0){
    		 a = b;
    		 b = r;
    		 r = a % b;
    		 }
	       return b;
	       }

 (2)加减乘数四则运算

 Calculate add(Calculate r){
		int a = r.getNumerator();
		int b = r.getDenominator();
		int newNumerator = numerator * b + denominator * a;
		int newDenominator = denominator * b;
	    Calculate result = new Calculate(newNumerator,newDenominator);
	    return result;
	    }
     
     Calculate sub(Calculate r){
    	 int a = r.getNumerator();
    	 int b = r.getDenominator();
    	 int newNumerator = numerator * b - denominator * a;
    	 int newDenominator = denominator * b;
    	 Calculate result = new Calculate(newNumerator,newDenominator);
    	 return result;
    	 }
     
     Calculate muti(Calculate r){
    	 int a = r.getNumerator();
    	 int b = r.getDenominator();
    	 int newNumerator = numerator * a;
    	 int newDenominator = denominator * b;
    	 Calculate result = new Calculate(newNumerator,newDenominator);
    	 return result;
     }
     
     Calculate div(Calculate r){
    	 int a = r.getNumerator();
    	 int b = r.getDenominator();
    	 int newNumerator = numerator * b;
    	 int newDenominator = denominator * a;
    	 Calculate result = new Calculate(newNumerator,newDenominator);
    	 return result;
     }

 (3)主函数随机生成运算题,由答题者输入计算答案,系统判定对错,若为错则给出正确答案

public class Test {

	public static void main(String[] args) {
			int x,i;
			System.out.println("请输入题目的数量");
			Scanner scan=new Scanner(System.in);
			x=scan.nextInt();
			String shu[]=new String [x];
			int z1,z2,P,m1,m2;
			System.out.println("请输入分母的大小范围");
			P=scan.nextInt();
			
			for(i=0;i<x;i++){
				m1=1+(int)(Math.random()*P);//随机生成一个小于B的分母
				z1=1+(int)(Math.random()*m1);//生成一个比分母小的分子,实现真分数
				m2=1+(int)(Math.random()*P);//随机生成一个小于B的分母
				z2=1+(int)(Math.random()*m2);//生成一个比分母小的分子,实现真分数
				int c=(int)(Math.random()*3);//生成运算符
				
				Calculate r1=new Calculate(z1,m1);
				Calculate r2=new Calculate(z2,m2);
				Calculate result=new Calculate();
				
				if(c == 0){
					int a,b;
					System.out.println(z1+"/"+m1+"+"+z2+"/"+m2+"=");
					result=r1.add(r2);
					a = result.getNumerator();
		    		b = result.getDenominator();
		    		
		    		Scanner sc0 = new Scanner(System.in);
		    		String c1 = sc0.nextLine();
		    		String c2=(a+"/"+b);
		    		if(c1.equals(c2))
		    			System.out.println("回答正确"+"\n");  
		    		else System.out.println("回答错误"+"\n"+"运算结果为:"+a+"/"+b);
		    		}
				
				if(c == 1){
					int a,b;
					System.out.println(z1+"/"+m1+"-"+z2+"/"+m2+"=");
					result=r1.sub(r2);
					a = result.getNumerator();
		    		b = result.getDenominator();
		    		
		    		Scanner sc1 = new Scanner(System.in);
		    		String c1 = sc1.nextLine();
		    		String c2=(a+"/"+b);
		    		if(c1.equals(c2))
		    			System.out.println("回答正确"+"\n"); 
		    		else System.out.println("回答错误"+"\n"+"运算结果为:"+a+"/"+b);
		    		}
				
				if(c == 2){
					int a,b;
					System.out.println(z1+"/"+m1+"x"+z2+"/"+m2+"=");
					result=r1.muti(r2);
					a = result.getNumerator();
		    		b = result.getDenominator();
		    		
		    		Scanner sc2 = new Scanner(System.in);
		    		String c1 = sc2.nextLine();
		    		String c2=(a+"/"+b);
		    		if(c1.equals(c2))
		    			System.out.println("回答正确"+"\n");  
		    		else System.out.println("回答错误"+"\n"+"运算结果为:"+a+"/"+b);
		    		}
				
				if(c == 3){
					int a,b;
					System.out.println(z1+"/"+m1+"÷"+z2+"/"+m2+"=");
					result=r1.div(r2);
					a = result.getNumerator();
		    		b = result.getDenominator();
		    		
		    		Scanner sc3 = new Scanner(System.in);
		    		String c1 = sc3.nextLine();
		    		String c2=(a+"/"+b);
		    		if(c1.equals(c2))
		    			System.out.println("回答正确"+"\n"); 
		    		else System.out.println("回答错误"+"\n"+"运算结果为:"+a+"/"+b);
		    		}
				}
			}
	}

(5)结果展示

 

(6)总结

这次代码是软件工程的第一个作业,也是我大学以来真正自己绞尽脑汁写的代码,感受真的不太一样,虽然没有按时提交作业,但是助教的理解和鼓励给了我很多支持,还有舍友的不断帮忙,一起完成了这份代码,感谢!因为有了自己的思考而完成的代码,虽然在很多优秀的同学看来不过是很简单普通的代码,但是对于自己的意义却是完全不一样的,这份代码让我开始敢于迈出自我编程的第一步。加油!

posted @ 2017-03-14 23:01  九青小水  阅读(181)  评论(3编辑  收藏  举报