20194675+自动生成四则运算第一版报告

一、需求分析

      现在学生的作业越来越高,学生的作业难度也不断增强,对学生学习和家长辅导都提出了严重的困难。所以为解决广大家长尤其是小学生家长的辅导难题,结合学生的课业要求,设计出一款可以自动生成四则运算的小程序,要求操作简单,能有效的节省时间,提高学习效率。

二、功能设计

(一)基本功能

1、自动生成10个100以内的2个操作数的四则运算(+、-、*、/),要求结果也在100以内;

2、剔除重复算式。  2 + 3 =    和  2 + 3 =     是重复算式, 2 + 3 =   和   3 + 2 =  不属于重复算式;

3、题目数量可定制;

4、相关参数可控制;

          是否包含乘法和除法

          操作数数值范围可控(如操作数 在100以内   还是1000以内)

          操作数是否含负数    

  5、生成的运算题存储到外部文件result.txt中;

(二)扩展功能

可自动生成答案并输出;

三、设计实现

在程序设计实现过程中运用了java编程语言中的主类public class ()。方法主要有主方法public static void main(String[] args) 和生成随机数的Random()方法。使用for循环语句、switch语句以及if-else语句来实现具体功能。

1、通过(int) (Math.random()*number);语句实现随机数的生成

a= (int) (Math.random()*number1+1);
 b= (int) (Math.random()*number2+1);

2、通过if-else语句来实现是否输出乘除运算

 if(number4==0) {
    d=(int) (Math.random()*2);
     }else {
       d=(int) (Math.random()*4);
         }

3、使用PrintStream ps = new PrintStream("e:/result.txt");语句,将生成的试题自动保存在result.txt文件内

PrintStream ps = new PrintStream("e:/result.txt");
System.setOut(ps);

 

四、测试运行

1、生成十道四则运算,操作数在100 以内,存在result.txt文件中

五、部分实现代码

1、提示信息代码

public static void main(String[] args) throws FileNotFoundException {
        
        PrintStream ps = new PrintStream("e:/result.txt");
        
        Random rand = new Random();//创建随机类的实例
        @SuppressWarnings("resource")
        Scanner reader =new Scanner(System.in);//创建输入类的实例
        /**
         * 定义五个全局变量
         * a,b为两个随机数的值
         * d的值用来判断是否生成乘除运算
         * i为for循环中的累加器
         * r的值用来判断是否输出答案
         */
        int a,b,d,i,r;
        /**
         * number1为操作数的数值控制范围
         * number2为题目数量的控制范围
         * number3的值用来判断运算结果是否出现负数
         */
        System.out.println("请输入操作数的控制范围:");
        int number1 = reader.nextInt();
        System.out.println("请输入题目数量的控制范围:");
        int number2 = reader.nextInt();
        System.out.println("操作数数值是否出现负数,是按1;否按0:");
        int number3 = reader.nextInt();
        System.out.println("算式中是否出现乘法和除法运算,是按1;否按0:");
        int number4 = reader.nextInt();
        System.out.println("是否输出上述等式的答案:是按1;否按0");
        int number5 = reader.nextInt();
        int sum[]=new int[number2];
        //a = rand.nextInt(number1);//在0-number1的范围内随机生成整数
        //b = rand.nextInt(number1);//在0-number1的范围内随机生成整数

2、输出加减算式代码

switch(d) {    
            //输出加法运算式
                    case 0:
                    
                        if(number3==1) {
                            switch(rand.nextInt(4)) {
                            case 0:
                                a=0-a;b=0-b;
                                System.out.println("("+a+")"+"+"+"("+b+")"+"=\n");
                                sum[i]=a+b;break;
                            case 1:
                                a=0-a;
                                System.out.printf("("+a+")"+"+"+b+"=\n");
                                sum[i]=a+b;break;
                            case 2:
                                b=0-b;
                                System.out.printf(+a+"+"+"("+b+")"+"=\n");
                                sum[i]=a+b;break;
                            case 3:
                                System.out.printf(a+"+"+b+"=\n");
                                sum[i]=a+b;break;
                            }    
                        }else {
                            System.out.printf(a+"+"+b+"=\n");
                            sum[i]=a+b;
                        }    i++;break;
            //输出减法运算式,并且控制结果是否含有负值
                    case 1:
                        if(number3==1) {
                            switch(rand.nextInt(4)) {
                            case 0:
                                a=0-a;b=0-b;
                                System.out.printf("("+a+")"+"-"+"("+b+")"+"=\n");
                                sum[i]=a-b;break;
                            case 1:
                                a=0-a;
                                System.out.printf("("+a+")"+"-"+b+"=\n");
                                sum[i]=a-b;break;
                            case 2:
                                b=0-b;
                                System.out.printf(a+"-"+"("+b+")"+"=\n");
                                sum[i]=a-b;break;
                            case 3:
                                System.out.printf(a+"-"+b+"=\n");
                                sum[i]=a-b;break;
                            }
                        }else {
                            System.out.printf(a+"-"+b+"=\n");
                            sum[i]=a-b;
                        }i++;
                        break;

 3、生成算式自动保存到外部文档中

PrintStream ps = new PrintStream("e:/result.txt");
System.setOut(ps);

 六、总结

1、用switch case选择语句确定运算符,输出算式;

2、定义一个number1变量来控制操作数范围;

3、定义一个number2变量来控制出题数量的范围;

4、定义一个number3变量来控制操作数数值是否出现负数;

5、定义一个number4变量来控制是否出现乘除算法算式;

6、定义一个number5变量来控制是否输出算式运算结果;

7、定义a,b为两个随机数的值;

通过本次作业,充分暴露出我在编程能力方面的不足,在今后的学习中我会继续努力。最后感谢在程序编写过程中为我提供帮助的同学,感谢你们的宝贵建议和思路想法。

七、PSP

PSP2.1

任务内容

计划共完成需要的时间(h)

实际完成需要的时间(h)

Planning

计划

0.5

0.7

   Estimate

 估计这个任务需要多少时间,并规划大致工作步骤

2

10

Development

开发

2

4

 Analysis

  需求分析 (包括学习新技术)

1

1

  Design Spec

  生成设计文档

0.5

1

 Design Review

  设计复审 (和同事审核设计文档)

0.5

0.8

 Coding Standard

  代码规范 (为目前的开发制定合适的规范)

1

2

Design

  具体设计

1

1.5

 Coding

  具体编码

3

4

Code Review

 代码复审

1

1

  Test

  测试(自我测试,修改代码,提交修改)

2

2.5

Reporting

 报告

0.5

1.5

 Test Report

  测试报告

0.5

1

 Size Measurement

  计算工作量

2

2

  Postmortem & Process Improvement Plan

 事后总结 ,并提出过程改进计划

0.5

0.5

 

 

posted @ 2019-09-15 22:09  长安别故里  阅读(202)  评论(3编辑  收藏  举报