一:需求分析

(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|