• 四则运算练习的命令行软件


    代码仓库地址:https://git.coding.net/qiuyuwutong/operation.git

    一、需求分析

      使用JAVA编程语言,独立完成一个包含3到5个运算符的四则运算练习的命令行软件开发

    二、功能设计

    (一)基础功能

    • 输入参数n,随机产生n道加减乘除(分别使用符号+-*÷来表示)练习题
    • 数字在 0 和 100 之间,运算符在3个到5个之间
    • 每个练习题至少要包含2种运算符
    • 在运算过程中不得出现负数与非整数
    • 学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中

    (二)拓展功能

    • 支持有括号的运算式
    • 扩展程序功能支持真分数的出题与运算,(只需要涵盖加减法即可

    三、设计分析及代码展示

    (一)判断输入是否合法

        输入的参数n是否合法,如果是字符,自动转化为数字;如果是非整数,提示再次输入

    try {
        int n = Integer.parseInt(args[0]);
    } catch (NumberFormatException e) {
        System.out.println("输入格式有误,请重新输入");
        e.printStackTrace();
    }

    (二)随机生成运算数和运算符

        利用math.random()类生成生成给定范围的随机数;将运算符“+,-,*,/”存储到一个数组内,利用math.random()类生成访问数组的小标,来随机生成运算符

    char[] operator= new char[]{'+','-','*','/'};
    Random random = new Random();
    for (int i = 0; i < num; i++) {
        String ex = new String();
        int n = random.nextInt(3)+3;//产生3-5个运算符
        int[] number = new int[n+1];//运算数要比运算符加一
        for (int j = 0; j <= n; j++) {
            number[j] = random.nextInt(99)+1;
        }
        for (int j = 0; j < n; j++) {
            int op = random.nextInt(4);//产生随机运算符
            ex+=String.valueOf(number[j])+String.valueOf(operator[op]);
            if(op==3){
                number[j+1] = judge(number[j],number[j+1]);
            }
        }
            ex+=String.valueOf(number[n]);
    }

      在遇到‘/’时,判断被除数是否能整除除数,如果不能,重复生成除数,直到能被被除数整除

    private static int judge(int x,int y){
        Random random = new Random();
        if(x%y!=0){
            y = random.nextInt(99)+1;
                return judge(x,y);
        }else{
            return y;
        }
    }

    (三)计算表达式

        利用js里面的eval()函数来计算生成的表达式

    static ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
    public static String calculateExpression(String ex){
        try {
            return String.valueOf(engine.eval(ex));
        } catch (ScriptException e) {
            e.printStackTrace();
            return null;
        }
    }

    (四)判断生成的算式是否正确

        如果算式结果是负数或者是小数,则重新生成算式

    int answer = Integer.valueOf(Calculate.calculateExpression(ex));
    if(answer>0){
        ex+="="+Calculate.calculateExpression(ex);
        expression.add(ex);
    }else{
        i--;
    }

    四、算法详情

      (1)随机生成运算式

        嵌套了两层for循环,外面一层用来控制生成运算式的个数,里面一层用来控制运算符和运算数的个数

      (2)计算运算式结果

        使用ScriptEngine调用js脚本即可调用eval函数,eval() 函数可计算某个字符串,并执行其中的的JavaScript代码。

    五、测试运行

    六、总结

      在实际开发这个命令行软件时,我将其分为了产生随机运算式、计算随机运算式、将运算式打印到txt文件中这三个大板块进行设计,一步步攻克了每一个板块,最后在Main函数中合在了一起。当然这过程中也有许多不足,比如,附加功能中的加入括号和真分数运算没有完成,其次,在计算随机表达式时,只是运用了js里面现成的eval()函数,没有运用到相应算法。项目比我想象中难得很多,自己查阅了许多资料,在不断出现问题,解决问题中完善着自己的代码与功能,这一过程让我收获满满。

    七、展示PSP

    PSP2.1

    任务内容

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

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

    Planning

    计划

    10

    10

    ·        Estimate

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

    10

    10

    Development

    开发

    464

    714

    ·        Analysis

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

    50

    62

    ·        Design Spec

    ·         生成设计文档

    10

    10

    ·        Design Review

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

    10

    8

    ·        Coding Standard

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

    4

    4

    ·        Design

    ·         具体设计

    15

    15

    ·        Coding

    ·         具体编码

    360

    600

    ·        Code Review

    ·         代码复审

    10

    10

    ·        Test

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

    5

    5

    Reporting

    报告

    10

    10

    ·         Test Report

    ·         测试报告

    5

    5

    ·         Size Measurement

    ·         计算工作量

    2

    3

    ·         Postmortem & Process Improvement Plan

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

    3

    2

  • 相关阅读:
    (Problem 3)Largest prime factor
    (Problem 2)Even Fibonacci numbers
    (Problem 33)Digit canceling fractions
    (Problem 28)Number spiral diagonals
    多线程与多进程
    安装非英语版本的 Microsoft Visual Studio 2008 Service Pack 1 后,智能提示变为英文的临时补丁发布
    SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的区别比较
    MSIL Instruction Table
    使用updatePanel报错 “不允许进行筛选”!
    SQLServer2008中恼人的"阻止保存要求重新创建表的更改"
  • 原文地址:https://www.cnblogs.com/yanchaoyi/p/8620576.html
Copyright © 2020-2023  润新知