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

前提需求

要求:使用C或Java语言完成一个自动生成四则运算试题的程序

软件基本功能如下。

  1. 自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内
  2. 剔除重复算式。2+3 和 2+3 是重复算式,2+3 和 3+2 不属于重复算式
  3. 题目数量可定制
  4. 相关参数可控制
    1. 是否包含乘法和除法
    2. 操作数数值范围可控
    3. 操作数是否含负数
  5. 生成的运算题存储到外部文件result.txt中

需求分析

某幼儿园,老师要每天出30道加减乘除法题目给孩子做。于是,想写一个脚本完成这件事。

功能设计

  • 基本功能
    • 可配置题目数量
    • 支持加减乘除
    • 可配置操作数范围
    • 支持操作数正负性质
  • 扩展功能
    • 可输出答案
    • 可控制题目中数字数量
    • 自动保存到文件

设计实现

项目已开源, 开源地址: https://github.com/Tomotoes/arithmetic-generator

点击此处下载应用

项目中所用到的库如下:

项目的入口函数:

package com.tomotoes;

import lombok.val;

public class Main {
    public static void main(String[] args) {
        Option option = Args.parse(args);
        Generator generator = new Generator(option);
        val arithmetics = generator.getArithmetics();
        Log log = new Log("./result.txt");
        arithmetics.forEach(log::toFile);
        log.close();
    }
}

其中Args 类用来解析命令行参数, 并配置成 Option 对象

Option 类,是项目的统一配置信息

Generator 类负责生成四则运算方程式

public void generate() {
  StringBuilder formula = new StringBuilder();

  IntStream.range(0, quantity).forEach(i -> {
    String num = number.getRandom();

    val isDiv = formula.toString().trim().endsWith("/");
    if(isDiv){
      while ("0".equals(num)) {
        num = number.getRandom();
      }
    }
    formula.append(number.getRandom());

    if (i != this.quantity - 1) {
      formula.append(' ').append(operator.getRandom()).append(' ');
    }
  });

  if (!arithmetics.contains(formula.toString())) {
    this.arithmetics.add(formula + " = " + Script.resolve(formula.toString()));
    return;
  }
  generate();
}

Log 类负责打印结果,和保存结果

测试运行

后记

呃.. java 的轮子真圆~

PS: 能不能使用其他语言开发...

PSP

PSP2.1 任务内容 计划完成需要时间(min) 实际完成需要时间(min)
Planning 计划 5 10
Estimate 估计时间,规划步骤 5 10
Development 开发 30 145
Analysis 需求分析 5 20
Coding 具体编码 20 120
Test 测试 5 5
Reporting 报告 20 40
Postmortem&Process Improvement Plan 总结改进 20 40

猜你喜欢

转载自www.cnblogs.com/jinma/p/11483298.html