zoukankan      html  css  js  c++  java
  • 20194641——自动生成四则运算测试报告

    一、需求分析:

    编写一个适合小学生计算的四则运算小程序,程序相关参数可以定制,并把生成的等式存储到外部result.txt文件中。

    二、功能实现:

    ·基本功能

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

    (2)剔除重复算式。  2 + 3 =    和  2 + 3 =     是重复算式      2 + 3 =   和   3 + 2 =  不属于重复算式

    (3)题目数量可定制

    (4)相关参数可控制

              是否包含乘法和除法

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

              操作数是否含负数    

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

    ·拓展功能

    (1)对输出的等式进行了优化:通过给所有的为负值的操作数添加括号,极大的提高了等式的整洁度,增强了等式的可读性。

     三、设计实现:

    (1)利用rand.nextInt()语句和(int) (Math.random()*number);语句实现随机数的生成

    int    a = rand.nextInt(100);//在0-100的范围内随机生成整数
    int b = rand.nextInt(100);//在0-100的范围内随机生成整数
    Asum[i]=(int) (Math.random()*number1);
    Bsum[i]=(int) (Math.random()*number1);

     (2)将四则运算符储存到char类型的数组中,利用(int) (Math.random()*number)语句随机生成四则运算式;

    char Opera[]= {'+','-','*','/'};//Opera[0]~Opera[3]依次输出“+”,“-”,“*”,“/”
    int r=(int) (Math.random()*number3);//判断输出+,-,*,/

     (3)利用PrintStream sun = new PrintStream("d:/result.txt");语句将生成的等式保存在result.txt文档中;

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

    (4)利用int number1 = reader.nextInt();实现题目数量可控;

    System.out.println("输入等式的数量");
            int number2 = reader.nextInt();
            int Bsum[]=new int[number2];

    (5)实现操作数数值范围可控;

    System.out.println("输入控制数范围");
            int number1 = reader.nextInt();
            int Asum[]=new int[number1];

    6)实现负值运算;

    char Opera2[]= {' ','-'};//Opera[0]~Opera[1]依次输出“ (空格)”,“-”
    int n=(int) (Math.random()*number4);//第一个数值是否为负数
    int m=(int) (Math.random()*number4);//第二个数值是否为负数

    (7)实现给全部负值加括号;

    char Opera3[]= {' ','(',')'};//Opera[0]~Opera[2]依次输出“ (空格)”,“(”,“)”
    int r=(int) (Math.random()*number3);//判断输出+,-,*,/

    (8)实现等式的除重操作;

    Asum[0]=(int) (Math.random()*number1);
                Bsum[0]=(int) (Math.random()*number2);
            for(int i=1;i<number2;) {
                Asum[i]=(int) (Math.random()*number1);
                Bsum[i]=(int) (Math.random()*number1);
                if(Asum[i]!=Asum[i-1]) {
                    i++;
                }
            }

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

    for(int i=0;i<10;){
            int    a = rand.nextInt(100);//在0-100的范围内随机生成整数
            int    b = rand.nextInt(100);//在0-100的范围内随机生成整数
            
                    switch(rand.nextInt(4)) {    
                        case 0:
                            i++;
                            if(a+b<=100) {
                            System.out.printf("%d + %d=%n",a,b);
                            
                            }else {
                                a=(int)a/2;
                                b=(int)b/2;
                                System.out.printf("%d + %d=%n",a,b);
                            }
                            break;
                        case 1:
                            i++;
                            if(a>b) {
                                
                                System.out.printf("%d - %d=%n",a,b);
                            }else {
                                System.out.printf("%d - %d=%n",b,a);
                            }
                                break;
                        case 2:
                            i++;
                            if(a*b<=100) {
                             System.out.printf("%d * %d=%n",a,b);
                            }else {
                                a=a%10;
                                b=b%10;
                                System.out.printf("%d * %d=%n",a,b);
                            }
                            break;
                        case 3:
                            i++;
                            if(a%b==0) {
                            System.out.printf("%d / %d=%n",a,b);
                            }else {
                                    b=(int)(b/10);
                                    a=(int)(a%10);
                                    a=a*b;
                                    System.out.printf("%d / %d=%n",a,b);    
                            }
                            break;
                        }    
                }    

     四、测试运行:

    (1)基本需求测试运行

     (2)拓展需求测试运行

    五、比较满意的代码片段:

    char Opera[]= {'+','-','*','/'};//Opera[0]~Opera[3]依次输出“+”,“-”,“*”,“/”
    char Opera2[]= {' ','-'};//Opera[0]~Opera[1]依次输出“ (空格)”,“-”
    char Opera3[]= {' ','(',')'};//Opera[0]~Opera[2]依次输出“ (空格)”,“(”,“)”
    
     
    
    for(int i=0;i<number2;i++) {
    int n=(int) (Math.random()*number4);//第一个数值是否为负数
    int m=(int) (Math.random()*number4);//第二个数值是否为负数
    int r=(int) (Math.random()*number3);//判断输出+,-,*,/
    
    System.setOut(ps);
    System.out.printf("%c%c%d%c%c%c%c%d%c=
    ",Opera3[n*1],Opera2[n],Asum[i],Opera3[n*2],Opera[r],Opera3[m*1],Opera2[m],Bsum[i],Opera3[m*2]);
    System.out.println();
    }

    六、总结:

    对新技术的学习能力还需要加强。把所有的方法和对象都放到了一个类中进行了实现,代码的结构层次不明显。

    七、PSP

    PSP2.1任务内容计划共完成需要的时间(h)实际完成需要的时间(h)
    Planning 计划 0.5 1
    · Estimate · 估计这个任务需要多少时间,并规划大致工作步骤 18.3 27.4
    Development 开发 5 8
    ·· Analysis 需求分析 (包括学习新技术) 3 5
    · Design Spec · 生成设计文档 0.5 0.6
    · Design Review · 设计复审 (和同事审核设计文档) 0.5 0.5
    · Coding Standard 代码规范 (为目前的开发制定合适的规范) 0.2 0.4
    · Design 具体设计 2 2
    · Coding 具体编码 2 2
    · Code Review · 代码复审 1 1.5
    · Test · 测试(自我测试,修改代码,提交修改) 3 6
    Reporting 报告 0.5 0.5
    ·· Test Report · 测试报告 0.2 0.2
    · Size Measurement 计算工作量 0.2 0.2
    · Postmortem & Process Improvement Plan · 事后总结 ,并提出过程改进计划 0.5 0.5
  • 相关阅读:
    Session攻击(会话劫持+固定)与防御
    console调试命令
    javascript获取当前url
    搞不清FastCgi与PHP-fpm之间是个什么样的关系
    MySQL基本语句优化10个原则
    PHP获取类名及所有函数名
    js闭包
    字段、方法、属性
    python面向对象之类成员修饰符
    实现Python代码发送邮件
  • 原文地址:https://www.cnblogs.com/sunshuaiqun/p/11524998.html
Copyright © 2011-2022 走看看