zoukankan      html  css  js  c++  java
  • 软件工程 2.20194650 自动生成四则运算题第一版报告

    一、需求分析:
        1,要能随机生成运算式。
        2,能对照正确答案。
        3,没有重复的。
        4,能自选类型题。
        5,式子能在txt文档查看打印。
    二、 功能设计:
            基本功能:随机输出运算式(加减乘除,混合运算,小括号优先级)
            扩展功能:
                              1,给出答案(用户自选)
                              2,剔除重复
                              3,打印留出运算空间
                              3,提供用户选择(两位操作数,三位操作数(小括号);加减法(正负),乘除法(整分);题的个数;题的范围(操作数和结果)...)
    三、设计实现:
            1,普通加减法
            2,加减法混合运算
            3,乘除法
    四、测试运行:

    五、 比较独特的或满意的代码片段。
    1,剔除重复代码块

                         //定义数组
                        int[] strx = new int[5];
                        String[]str00 = new String[5];
                        int[]stry = new int[5];
                        //存入算式值
                        strx[i]=x;
                        str00[i]=str0[ran0];
                        stry[i]=y;
                        //定义判断参数
                        int ccc = 0;
                        //判断重复
                        for(int j=i;j>0&&j<5;j--){//从当前位置向前遍历数组元素        
                            if(strx[i]==strx[j-1]){//比较操作数x是否重复
                                if(str00[i]==str00[j-1]){//如重复比较操作符是否重复
                                    if(stry[i]==stry[j-1]){//如重复比较最后一个操作数是否重复
                                        ccc=1;
                                    }
                                }
                            }
                        }

    2,操作数范围,题目数量可定制代码块

                    //定制范围
                    System.out.println("请输入操作数的范围,100以内请输入100,1000以内请输入1000");
                    int nc = reader.nextInt();
                    //定制数量
                    System.out.println("请输入题的数量");
                    int num = reader.nextInt();
                    //循环输出num道随机题
                    for (int i=0;i<num;i++){    
                        //随机产生范围内随机数和操作符
                        int a = (int)(0+Math.random()*(nc-0+1));
                        String[] str = { "+", "-"};
                        int random = (int) ( Math.random () * 2 );
                        int b = (int)(0+Math.random()*(nc-0+1));
                        int c;
                        //给出正确答案
                        if(random==0){
                            c = a+b;
                        }else{
                            c = a-b;
                        }

    3,控制运算结果范围,打印方式,答案显示代码块

                         //运算结果控制在在0-100以内
                        if(c<=100&&c>=0){
                            //输出随机式
                            System.out.println (a+str[random]+b+"=");
                            //控制打印方式
                            System.out.println("如需留出运算行请输入1");
                            int nl = reader.nextInt();
                            if(nl==1){
                                System.out.println(" ");
                                System.out.println(" ");
                            }
                            //控制查看正确答案
                            System.out.println("如需显示答案请输入1");
                            int nd = reader.nextInt();
                            if(nd==1){
                                System.out.println(c);
                            }
                        }else{
                            //不在需求内 重新计算
                            i=i-1;
                        }

    4,正负数可控代码块

                 //操作数是否含负数(加减有无负数
                System.out.println("请选择操作数是否含有负数,是请输入1,否请输入2");
                int fs = reader.nextInt();
                if(fs==1){
                    //操作数含有负数
                    //循环输出5道随机题
                    for (int i=0;i<5&&i>=0;i++){    
                        //随机产生范围内随机数和操作符
                        int x = (int)(-100+Math.random()*(2*100+1));
                        String[] str0 = { "+", "-"};
                        int ran0 = (int) (Math.random () * 2 );
                        int y = (int)(-100+Math.random()*(2*100+1));

    5,分数可控代码块

                    //是否支持分数
                    System.out.println("请选择操作数是否含有分数,是请输入1,否请输入2");
                    int fs2 = reader.nextInt();
                    if(fs2==1){
                        //含有分数
                        //循环输出num2道随机题
                        for (int i=0;i<num2;i++)
                        {
                            //产生随机数
                            double u = (double)(0+Math.random()*(100-0+1));
                            String[] str2 = { "*", "/"};
                            int r3 = (int) ( Math.random () * 2 );
                            double v = (double)(0+Math.random()*(100-0+1));
                            double ww;
                            //计算正确答案
                            if(r3==0){
                                ww = u*v;
                            }else{
                                ww = u/v;
                            }
                            //输出随机式
                            System.out.println (u+str2[r3]+v+"="+ww);
                        }

    6,小括号混合运算可控代码块

                 System.out.println("请选择操作数是否含有小括号,是请输入1,否请输入2");
                int fsx = reader.nextInt();
                if(fsx==1){
                    //含有小括号
                    //循环输出num1道随机题
                    for (int i=0;i<num1;i++)
                    {    
                        String[] stra = { "1", "2"};
                        int aaa = (int) ( Math.random () * 2 );
                        switch(aaa){
                            case 0:
                                    //1.(a+b)+c
                                    //随机产生范围内随机数和操作符
                                    int ll = (int)(0+Math.random()*(100-0+1));
                                    String[] str1 = { "+", "-"};
                                    int rll = (int) ( Math.random () * 2 );
                                    int mm = (int)(0+Math.random()*(100-0+1));
                                    String[] str2 = { "+", "-"};
                                    int rlll = (int) ( Math.random () * 2 );
                                    int nn = (int)(0+Math.random()*(100-0+1));;
                                    //定义结果参数
                                    int gg1,gg2;
                                    //计算正确答案
                                    if(rll==0){
                                        gg1 = ll+mm;
                                    }else{
                                        gg1 = ll-mm;
                                    }
                                    if(rlll==0){
                                        gg2 = gg1+nn;
                                    }else{
                                        gg2 = gg1-nn;
                                    }
                                    //输出随机式
                                    System.out.println ("("+ll+str1[rll]+mm+")"+str2[rlll]+nn+"="+gg2);    
                                    break;
                            case 1:
                                    //2.a+(b+c)
                                    //随机产生范围内随机数和操作符
                                    int ll0 = (int)(0+Math.random()*(100-0+1));
                                    String[] str10 = { "+", "-"};
                                    int rll0 = (int) ( Math.random () * 2 );
                                    int mm0 = (int)(0+Math.random()*(100-0+1));
                                    String[] str20 = { "+", "-"};
                                    int rlll0 = (int) ( Math.random () * 2 );
                                    int nn0 = (int)(0+Math.random()*(100-0+1));;
                                    //定义结果参数
                                    int gg10=0,gg20=0;
                                    //计算正确答案
                                    
                                    if(rlll0==0){
                                        gg20 = mm0+nn0;
                                    }else{
                                        gg20= mm0-nn0;
                                    }
                                    if(rll0==0){
                                        gg10 = ll0+gg20;
                                    }else{
                                        gg10 = ll0-gg20;
                                    }
                                    //输出随机式
                                    System.out.println (ll0+str10[rll0]+"("+mm0+str20[rlll0]+nn0+")"+"="+gg10);
                                    break;
                        }
                    }

    7,生成的运算题存储到外部文件result.txt中代码块

                            //生成的运算题存储到外部文件result.txt中
                            Path debugFile = Paths.get("d:\result.txt");
                            try (OutputStream outputStream = Files.newOutputStream(debugFile, StandardOpenOption.CREATE,StandardOpenOption.APPEND);
                            PrintStream printStream = new PrintStream(outputStream, true))
                            {
                                System.setOut(printStream);
                                System.out.println (x+str0[ran0]+"("+y+")"+"="+z);
                            } catch (IOException e) {
                            e.printStackTrace();
                            }

     六、总结:
            1,从基础功能做起,逐层递增
            2,分工能块编写代码
            3,在原有基础上不断增加新的功能,每一个功能都要单独测试,防止找不到错误源。
    七、PSP

    PSP2.1

    任务内容

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

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

    Planning

    计划

    5

    10

    ·       Estimate

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

    5

    10

    Development

    开发

    670

    810

    ··       Analysis

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

    5

    10

    ·       Design Spec

    ·  生成设计文档

    0

    0

    ·       Design Review

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

    0

    0

    ·       Coding Standard

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

    5

    10

    ·       Design

      具体设计

    10

    10

    ·       Coding

      具体编码

    600

    660

    ·       Code Review

    ·  代码复审

    30

    60

    ·       Test

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

    20

    60

    Reporting

    报告

    20

    120

    ··       Test Report

    ·  测试报告

    0

    0

    ·       Size Measurement

      计算工作量

    0

    0

    ·       Postmortem & Process Improvement Plan

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

    20

    120

    具体编码耗时最多,相差最大是在编写报告上,因为运用不熟练。

  • 相关阅读:
    第13组 Beta (2/6)(俞子君)
    第13组 Beta (1/6)(俞子君)
    第13组 Alpha (6/6)(俞子君)
    第13组 Alpha (5/6)(俞子君)
    第13组 Alpha (4/6)(俞子君)
    第13组 Alpha (3/6)(俞子君)
    第13组 Alpha (2/6)(俞子君)
    番茄蛋花汤口罩识别系统汇报
    β(56/6)
    β(34/6)
  • 原文地址:https://www.cnblogs.com/wangxiangyue/p/11483374.html
Copyright © 2011-2022 走看看