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


一:需求分析

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

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

(3)题目数量可定制

(4)相关参数可控制

      是否包含乘法和除法

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

      操作数是否含负数    

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

二:功能设计

基本功能:自动生成四则运算题
扩展功能:快速得出答案;四则运算依据用户的输入得出结论

三:设计实现

使用Java实现,软件Eclipse,运用while、for等多种语句

四:测试运行

运行结果

五:代码片段

生成四则表达式

 public HashSet<String> generateArithmetic(){
            HashSet<String> arithSet =new HashSet<String>();

            while(arithSet.size() < this.n){    //生成指定数量的公式
                String arithmetic = "";

                int number = this.getRandomNumber(this.m,this.i);
                int otherNumber = this.getRandomNumber(this.m,this.i);

                arithmetic += this.getNumber(number);

                // 生成指定操作数的表达式
                for(int i = 1; i < this.o; i++){
                    arithmetic += " "+ this.getRandomOperator(this.isMultiAnddiv) + " " +this.getNumber(otherNumber);
                    otherNumber = this.getRandomNumber(this.m,this.i);
                }

                Object result = this.getComputeReturn(arithmetic);   // 计算表达式结果
                // 把符合要求的结果存起来
                if (Double.parseDouble(result.toString()) < this.r){
                    arithmetic += " = " + String.format("%.3f",Double.parseDouble(result.toString()));
                    arithSet.add(arithmetic);
                }
            }
            return arithSet;
        }

计算四则表达式的结果

        private Object getComputeReturn(String arithmetic){
            ScriptEngineManager manager = new ScriptEngineManager();
            ScriptEngine se = manager.getEngineByName("js");
            Object result = null;
            try {
                result = se.eval(arithmetic);
            } catch (ScriptException e) {
                e.printStackTrace();
            }
//          System.out.println(result);
            return result;
        }

为负数加上括号,返回负数带括号的数,整数原样输出

 private String getNumber(int number){
            if (number > 0){
                return number+"";
            }else{
                return "(" + number +")";
            }
        }

生成随机操作符号

private String getRandomOperator(boolean isMultiAnddiv){
            String [] operator = {"+", "-", "*", "/"};
            Random randomOper = new Random();
            if (isMultiAnddiv){
                return operator[randomOper.nextInt(4)];
            }else{
                return operator[randomOper.nextInt(2)];
            }
        }

六:总结

这次我应该先构成整体框架,勾勒出大体的程序模式再进行程序的复查等,而不是从琐碎的小地方抓起,组装之后思绪繁琐,深刻认识到了这次的弊端,我会继续加油努力哒

七:PSP

psp2.1 任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 60 520
· Estimate 估计这个任务需要多少时间,并规划大致工作步骤 60 520
Development 开发 40 120
·· Analysis 需求分析 (包括学习新技术) 10 30
· Design Spec · 生成设计文档 10 40
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 20
·Coding · 具体编码 120 200
·Code Review · 代码复审 10 30
·Test · · 测试(自我测试,修改代码,提交修改) 10 20
·Reporting · · 报告 10 30
· Test Report · · 测试报告 10 10
· Size Measurement · · 计算工作量 10 10
· Postmortem & Process Improvement Plan · · 事后总结 ,并提出过程改进计划 10 10
优质内容筛选与推荐>>
1、单例模式
2、MOSS项目开发 周记(第十五周)
3、理解错误的 Arrays.asList()
4、爬虫--PyQuery
5、http 返回的状态码以及含义


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号