软工结对项目

suqingyi / 2024-09-27 / 原文

这个作业属于哪个课程 结对项目
这个作业要求在哪里 结对项目
这个作业的目标 合作完成一个自动生成小学四则运算题目的命令行程序

结对组合成员介绍

结对组合成员姓名 学号 GitHub项目地址
苏清仪 3222004337 GitHub项目地址
张易欣 3222004811 GitHub项目地址

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 20
Estimate 估计这个任务需要多少时间 30 30
Development 开发 200 200
Analysis 需求分析 (包括学习新技术) 80 100
Design Spec 生成设计文档 30 10
Design Review 设计复审 20 10
Coding Standard 代码规范 (为目前的开发制定合适的规范) 10 10
Design 具体设计 60 60
Coding 具体编码 100 100
Code Review 代码复审 30 30
Test 测试(自我测试,修改代码,提交修改) 80 300
Reporting 报告 50 60
Test Repor 测试报告 20 20
Size Measurement 计算工作量 20 20
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 10 20
合计 760 990

开发环境

  • 开发语言:Java
  • 编译器:IDEA 2022.1

效能分析

设计实现过程

代码说明

generateExercises函数代码如下

    private static void generateExercises() {
        Random rand = new Random();
        while (generatedExercises.size() < numberOfExercises) {
            String exercise = generateRandomExpression(rand);
            if (!generatedExercises.contains(exercise)) { 
                generatedExercises.add(exercise);
                double answer = evaluateExpression(exercise);
                answers.add(String.valueOf(answer));
            }
        }
    }

generateExercises函数生成题目集合和答案集合,调用了generateRandomExpression函数生成随机题目,调用了evaluateExpression函数计算题目生成答案

generateRandomExpression函数代码如下

    private static String generateRandomExpression(Random rand) {
        String operator = OPERATORS[rand.nextInt(OPERATORS.length)];
        String leftOperand;
        String rightOperand;
        if (operator.equals("-")) {
            // 对于减法,确保左操作数 >= 右操作数,保证结果不为负数
            leftOperand = rand.nextBoolean() ? generateNaturalNumber(rand) : generateProperFraction(rand);
            do {
                rightOperand = rand.nextBoolean() ? generateNaturalNumber(rand) : generateProperFraction(rand);
            } while (parseOperand(leftOperand) < parseOperand(rightOperand));
        } else {
            leftOperand = rand.nextBoolean() ? generateNaturalNumber(rand) : generateProperFraction(rand);
            rightOperand = rand.nextBoolean() ? generateNaturalNumber(rand) : generateProperFraction(rand);
        }
        return leftOperand + " " + operator + " " + rightOperand;
    }

generateRandomExpression函数生成随机题目,调用了generateNaturalNumber函数生成随机自然数和generateProperFraction函数生成随机真分数

evaluateExpression函数代码如下

    private static double evaluateExpression(String expression) {
        String[] tokens = expression.split(" ");
        double leftOperand = parseOperand(tokens[0]);
        double rightOperand = parseOperand(tokens[2]);
        String operator = tokens[1];

        switch (operator) {
            case "+":
                return leftOperand + rightOperand;
            case "-":
                return leftOperand - rightOperand;
            case "*":
                return leftOperand * rightOperand;
            case "/":
                return leftOperand / rightOperand;
            default:
                throw new IllegalArgumentException("Unknown operator: " + operator);
        }
    }

evaluateExpression函数计算题目

测试运行

项目小结