结对项目

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230
这个作业的目标 组队编程实现四则运算的项目
组队成员 阿依古再丽(3222004721)、张汉洁(3222004598)

这次作业的github链接:https://github.com/fw-1208/11111111111

一、PSP表格

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

二、开发环境

开发环境:IntelliJ IDEA 2022
开发语言:Java

三、需求分析

image

四、效能分析

image
image

五、设计实现过程

1、Number类:随机生成数、运算符,并对分数格式进行处理。
2、number_string类:处理数字和分数的格式转换。
其中,zhen_fen_change 方法负责将输入字符串数组中的分数格式进行转换。
对于包含分数格式(例如带有/的字符串),调用 Number 类的 false_fraction 方法进行处理。
对于不包含/的整数(且不是运算符或空格),将其转换为分数形式,即添加 /1,以标准化处理
3、Main类:生成数学题目并将其输出到一个文本文件exercises.txt中,代码中写有查重机制,保证了题目的唯一性。
4、answer类:从一个文本文件exercises.txt中读取数学题目,计算这些题目,得到正确答案,将答案输出到另一个文本文件answer.txt中。
5、Operation类:对分数进行运算。
6、answer_student类:学生的答案进行判断。它从两个文本文件中读取数据:一个是学生的答案 (student_answer.txt),另一个是正确答案 (answer.txt)。程序逐行比较两个文件中的内容,统计正确和错误的答案数量,并记录下题号。最终,它将结果输出到一个名为 Grade.txt 的文件中,包括正确和错误答案的数量及其对应的题号。

六、代码说明

1、关键代码

生成题目时查重机制,避免题目重复

boolean flag = true;
            // 查重
            for (int i = 0; i < str0; i++) {
                if (str_num[i] != null && jieguo2 != null && str_num[i].equals(jieguo2)) {
                    flag = false;
                    break;
                }
            }

            if (!flag) {
                k--;
            } else {
                String jieguo3 = (k + 1) + ". " + jieguo + " =";
                System.out.println(jieguo3);
                str_num[k] = jieguo2; // 记录生成的结果以防重复
            }

对于“生成的题目中如果存在形如e1÷ e2的子表达式,那么其结果应是真分数”这个要求,为方便运算,将所有数字转化为真分数

 // 分数转换为真分数和整数转化为分数
    public static String[] zhen_fen_change(String[] a) {
        Number s = new Number();
        for (int i = 0; i < a.length; i++) {
            if (a[i].contains("'")) {
                a[i] = s.false_fraction(a[i]);
            }
            if (!a[i].contains("/") && !a[i].equals("×") && !a[i].equals("÷") && 
                !a[i].equals("-") && !a[i].equals("+") && !a[i].equals(" ")) {
                a[i] = a[i] + "/1"; // 将整数转化为分数
            }
        }
        return a;
    }

四则运算的代码

// 乘法
    public static String mul(String a, String b) {
        int[] c = operation.split(a);
        int[] d = operation.split(b);
        int e = c[0] * d[0];
        int f = c[1] * d[1];
        int g = operation.gongyinzi(e, f);
        return (e / g) + "/" + (f / g);
    }

    // 除法
    public static String div(String a, String b) {
        int[] c = operation.split(a);
        int[] d = operation.split(b);
        int e = c[0] * d[1];
        int f = c[1] * d[0];
        int g = operation.gongyinzi(e, f);
        return (e / g) + "/" + (f / g);
    }

    // 加减法
    public static String add_sub(String a, String b, String yunsuanfu) {
        int[] c = operation.split(a);
        int[] d = operation.split(b);
        int g = c[1] * d[1] / operation.gongyinzi(c[1], d[1]);
        int e = g / c[1] * c[0];
        int f = g / d[1] * d[0];
        int h = yunsuanfu.equals("+") ? e + f : e - f;
        return h + "/" + g;
    }

    // 算术表达式最后运算
    public static String last(String[] a) {
        for (int i = 1; i < a.length; i += 2) {
            int n = 1;
            while (a[i - n].equals("")) {
                n++;
            }
            if (a[i].equals("×")) {
                a[i - n] = operation.mul(a[i - n], a[i + 1]);
            } else if (a[i].equals("÷")) {
                a[i - n] = operation.div(a[i - n], a[i + 1]);
            }
            a[i] = "";
            a[i + 1] = "";
        }

        for (int i = 1; i < a.length; i += 2) {
            int n = 1;
            while (a[i - n].equals("")) {
                n++;
            }
            if (a[i].equals("+")) {
                a[i - n] = operation.add_sub(a[i - n], a[i + 1], "+");
            } else if (a[i].equals("-")) {
                a[i - n] = operation.add_sub(a[i - n], a[i + 1], "-");
            }
            a[i] = "";
            a[i + 1] = "";
        }
        return a[0];
    }

七、测试运行

正确运行的结果
image
当不存在题目文件exercises.txt时候,计算正确答案时候会报错
image

八、项目小结

本次项目旨在开发一个能够进行四则运算(加、减、乘、除)的程序。通过这个项目,我们提升了团队成员的编程能力、协作能力以及对基本运算逻辑在程序中的实现能力。我们在debug过程中耗费了较长的时间,遇到了环境不适配、代码冗余等问题,在搜集资料后,我们成功地解决了这个问题!

posted @ 2024-09-28 20:22  SSTwin  阅读(14)  评论(0编辑  收藏  举报