首页 > 其他分享 >结对项目

结对项目

时间:2023-09-28 12:12:19浏览次数:45  
标签:operations 结对 题目 项目 生成 four Test public

这个作业属于那个课程 软件工程-计科21级12班
这个作业要求在哪里 结对项目
这个作业的目标 实现一个自动生成小学四则运算题目的命令行程序

一、PSP表格

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

二、效能分析

使用Intellij Profiler分析性能

三、设计实现过程

总体设计

依赖

junit,版本为4.13.2

工具类

FIleUtils

  • 功能列表
    1. 实现保存题目到文件(saveExercisesToFile)
    2. 实现保存答案到文件(saveAnswersToFile)
    3. 读取文件内容(readFileLines)
    4. 判断答案并统计写入(checkAnswers)
    5. 将结果写入统计文件(writeGradeToFile)
    6. 索引统一格式(getIndicesString)

RandomUtils

  • 功能列表
    1. 生成随机数字(generateNumber)
    2. 生成随机运算符(generateOperator)

ConstantUtils

  • 常量工具类:包含两个参数
    1. 最大运算符个数(MAX_OPERATORS = 3)
    2. 真分数分母的最大值(MAX_DENOMINATOR = 10)

CalculateUtils

  • 功能:计算结果(calculateAnswer)

业务层

接口:GenerateService

  • 方法
    1. 生成指定数量的题目(generateExercises)
    2. 生成单个题目(generateExercise)

实现类:GenerateServiceImpl

四、代码说明

  1. 定义常量,包括最大运算符个数和真分数分母的最大值。
  2. 创建了一个GenerateServiceImpl类,用于生成题目,在参数中接收题目数量、数值范围。
  3. FIleUtils类将题目文件和答案文件作为参数并保存。
  4. generateExercises()方法是生成题目的逻辑,检查重复题目并使用saveExercisesToFile()方法添加到题目列表中。
  5. generateExercise()方法用于生成一个题目。它随机生成数值和运算符,并按照一定的格式拼接成题目字符串。
  6. generateNumber()方法用于随机生成一个自然数或真分数。根据生成的随机数,确定是生成自然数还是真分数。对于真分数,根据分母的最大值生成分子和分母,并将其转换为带分数形式。
  7. generateOperator()方法用于随机生成一个运算符,包括加减乘除。
  8. calculateAnswer()方法用于计算题目的结果。它从左至右遍历题目的每个运算符和操作数,按照运算符进行四则运算。
  9. saveAnswersToFile()方法用于将答案写入文件。
  10. checkAnswer()方法用于判断答案并统计写入统计文件。
  11. main()方法是程序的入口,它解析命令行参数,并调用上述方法生成题目、计算答案并写入文件。

五、测试运行

单元测试展示

FileUtilsTest

  • 代码

    public class FileUtilsTest {
        @Test
        public void saveExercisesToFileTest() {
            List<String> list = new ArrayList<>();
            Collections.addAll(list, "1 + 5 =", "5 * 8 =", "6 / 3 =");
            FileUtils.saveExercisesToFile(list, "D:\\HYHAO\\Documents\\four-operations\\four-operations\\3121004860\\four-operation\\src\\main\\resources\\Exercises.txt");
        }
    
        @Test
        public void saveAnswersToFileTest() {
            List<String> list = new ArrayList<>();
            Collections.addAll(list, "6", "40", "2");
            FileUtils.saveAnswersToFile(list, "D:\\HYHAO\\Documents\\four-operations\\four-operations\\3121004860\\four-operation\\src\\main\\resources\\Answers.txt");
    
        }
    
        @Test
        public void checkAnswersTest() {
            FileUtils.checkAnswers("D:\\HYHAO\\Documents\\four-operations\\four-operations\\3121004860\\four-operation\\src\\main\\resources\\Exercises.txt",
                    "D:\\HYHAO\\Documents\\four-operations\\four-operations\\3121004860\\four-operation\\src\\main\\resources\\Answers.txt",
                    "D:\\HYHAO\\Documents\\four-operations\\four-operations\\3121004860\\four-operation\\src\\main\\resources\\Grade.txt");
        }
    
    }
    
  • 测试覆盖率

CalculateUtilsTest

  • 代码

    public class CalculateUtilsTest {
        @Test
        public void calculateAnswerTest() {
            CalculateUtils.calculateAnswer("1'2/7 × 4 + 3 × 3 = ");
            CalculateUtils.calculateAnswer("5 × 8 = ");
            CalculateUtils.calculateAnswer("3 + 8 - 2'1/4 = ");
        }
    }
    
  • 测试覆盖率

GenerateServiceImplTest

  • 代码

    public class GenerateServiceImplTest {
        private final GenerateService generateService = new GenerateServiceImpl();
        @Test
        public void generateExerciseTest() {
            String exercise = generateService.generateExercise(10);
            System.out.println(exercise);
        }
    
        @Test
        public void generateExercisesTest() {
            List<String> exercises = generateService.generateExercises(5, 10);
            for (String exercise : exercises) {
                System.out.println(exercise);
            }
        }
    }
    
  • 测试覆盖率

MyappTest

  • 代码

    public class MyappTest {
        private static final GenerateService GENERATE_SERVICE = new GenerateServiceImpl();  // 生成业务对象
    
        @Test
        public void totalTest() {
            // 声明文件位置
            String exercisesFile = "D:\\HYHAO\\Documents\\four-operations\\four-operations\\3121004860\\four-operation\\src\\main\\resources\\Exercises.txt";
            String answersFile = "D:\\HYHAO\\Documents\\four-operations\\four-operations\\3121004860\\four-operation\\src\\main\\resources\\Answers.txt";
            String gradeFile = "D:\\HYHAO\\Documents\\four-operations\\four-operations\\3121004860\\four-operation\\src\\main\\resources\\Grade.txt";
    
            // 生成题目
            List<String> exercises = GENERATE_SERVICE.generateExercises(5, 5);
    
            // 保存题目到文件
            FileUtils.saveExercisesToFile(exercises, exercisesFile);
    
            // 计算答案
            List<String> answers = new ArrayList<>();
            String answer;
            for (String exercise : exercises) {
                answer = CalculateUtils.calculateAnswer(exercise);
                answers.add(answer);
            }
    
            // 保存答案到文件
            FileUtils.saveAnswersToFile(answers, answersFile);
    
            // 判断答案并统计
            FileUtils.checkAnswers(exercisesFile, answersFile, gradeFile);
        }
    }
    
  • 测试覆盖率

六、项目小结

该命令行程序能够方便地生成小学四则运算题目,可以根据用户需求自定义生成的题目数量和运算符数量。通过本次项目构建,我学习到了很多新的知识以及拓展了对待问题的角度。

标签:operations,结对,题目,项目,生成,four,Test,public
From: https://www.cnblogs.com/order-god/p/17735465.html

相关文章

  • 结对项目:自动生成小学四则运算题目
    软件工程https://edu.cnblogs.com/campus/gdgy/CSGrade21-12?filter=all作业要求https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13016作业目标学习算法,完成简单的四则运算团队成员:姓名:陈鑫杰学号:3121004688姓名:黄嘉俊学号:3121004696Git链接:h......
  • 五个步骤!轻松将ASP.NET MVC项目迁移至ASP.NET Core
    TelerikUIforASP.NETCore是用于跨平台响应式Web和云开发的最完整的UI工具集,拥有超过60个由KendoUI支持的ASP.NETCore组件。它的响应式和自适应的HTML5网格,提供从过滤、排序数据到分页和分层数据分组等100多项高级功能。获取TelerikUIforASP.NETCore新版下载QQ技术交流......
  • 十一假期,就肝这些项目了!
    大家好,我是冰河~~哈哈,今天是2023年10.1假期前的最后一天,今年的中秋与国庆正好同时放假,总共8天假期。其实,跟大家一样,我也期待着放假,这样就有更多的时间为大家分享技术和项目了。前几天,就有不少小伙伴问我,冰河,你星球有哪些项目呢?我想趁着十一假期肝你星球的项目,可以吗?今天,我就给大......
  • 结对项目(王浩忠 曾铭鸿)
    学生个人信息成员学号王浩忠3121005099曾铭鸿3121005101作业信息这个作业属于哪个课程软件工程这个作业要求在哪里结对项目这个作业的目标实现一个自动生成小学四则运算的程序GitHub地址https://github.com/Binezis/Pair_ProgramPSP表格......
  • 结对项目
    姓名学号张钟杰3121005324伊尔帕提江3121005318Github结对项目github作业概述这个作业属于那个课程软件工程这个作业的要求结对项目这个作业的目标实现一个自动生成小学四则运算题目的命令行程序PSP表PSPPersonalSoftwareProcessStages预......
  • 使用vite创建vue3项目
    vite是一种新型前端构建工具,能够显著提升前端开发体验,它主要由两部分组成;一个开发服务器,它基于 原生ES模块 提供了 丰富的内建功能,如速度快到惊人的 模块热更新(HMR)。一套构建指令,它使用 Rollup 打包你的代码,并且它是预配置的,可输出用于生产环境的高度优化过的静态资......
  • Web-入门-SpringBoot快速入门 创建springboot web项目
    web入门spring官网spring发展到今天已经形成了一种开发生态圈,spring提供了若干个子项目,为每个项目用于完成特定的功能。这些框架都是基于一个基础框架:直接基于SpringFramework基础框架进行开发会有两大难题:1.配置繁琐。2.入门难度大。所以spring家族意识到了这一点,......
  • 正在开发的项目
    1、供应链spd系统:供应链管理平台-SPD-供应链管理平台   用户名密码:  jztsystem  JZTeya0 2、采供协同oms系统:采供协同平台-OMS    用户名密码:omsadmin  jztoms2022 3、数据决策bi系统:数据决策中心  用户名密码: biadmin  JZTeya0 ......
  • 在deepin上使用Fleet开发SpringBoot 3.0.0项目
    前言Fleet被称为是由JetBrains打造的下一代IDE,目前出于公测状态,可以免费下载使用。SpringBoot3.0.0最小支持是JDK17,这或许是对于JDK8的断舍离迈出的重大一步。出于对新工具和新技术的好奇,我开始尝试在deepin上用Fleet开发一个SpringBoot3.0.0项目,继续我的SpringBoot学习......
  • 结对项目
    结对项目姓名学号李嘉鹏3121005091田小古3121005098作业概述这个作业属于哪个课程班级链接这个作业要求在哪里作业链接这个作业的目标1.实现一个自动生成小学四则运算题目的命令行程序2.结对编程一、github仓库github地址二、PSP表格......