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

结对项目

时间:2024-09-28 21:01:40浏览次数:9  
标签:分数 文件 结对 题目 项目 生成 答案 ArithmeticGenerator

这个作业属于哪个课程 计科22级12班
这个作业要求在哪里 作业要求
这个作业的目标 实现一个自动生成小学四则运算题目的命令行程序

姓名&学号:

姓名 学号
董雯霖 3122004780
陈金星 3122004774

GitHub链接: https://github.com/1534063091/Arithmometer

一、PSP表格

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

二、效能分析

​ 在改进程序性能上,主要思路是优化数学运算和文件处理的效率。特别是针对分数的加减乘除运算,减少了不必要的重复计算,并通过引入化简功能来避免生成复杂的分数。此外,文件读取和写入的部分进行了缓冲优化,减少了磁盘I/O的开销。

覆盖率:

性能分析:

1.生成10道题目时:

2.生成10000道题目时:

3.对给定的题目文件和答案文件,判定答案中的对错并进行数量统计时:

消耗最大的函数

​ 经过性能分析,发现calculateAnswer函数是程序中消耗时间最多的部分,主要因为它处理了多种运算并且包含分数和整数的不同逻辑。此函数的优化通过提前判断运算类型,减少了代码分支的复杂性,从而提高了执行效率。

1. 性能瓶颈

  • calculateAnswer 函数:这个函数是程序中的主要性能瓶颈。它需要对用户输入的算式进行解析和计算,尤其是在处理分数运算时,涉及的逻辑较复杂,分支判断多,可能导致性能下降。
  • 文件读写操作:虽然 FileHandler 类中的读写操作相对简单,但频繁的磁盘 I/O 会影响性能,尤其是在生成大量题目和答案时。使用缓冲流和批量写入可以显著提高效率。

2. 资源消耗

  • 内存使用:StringBuilder 在拼接题目和答案时有效地减少了内存的频繁分配和释放,有助于提升性能。然而,对于大规模数据的处理,仍需注意内存的使用情况。
  • 随机数生成:Random 类在生成随机数时的效率相对较高,但在高并发场景下可能出现性能问题。若需处理大规模问题,可以考虑使用更高效的随机数生成算法。

3. 优化思路

  • 减少分支判断:在 calculateAnswer 函数中,尽量减少复杂的条件判断,例如通过预先判断运算符类型来选择相应的计算逻辑,避免多次分支判断。
  • 优化分数运算:将分数的加法、减法、乘法和除法提取成单独的函数,减少冗余代码,并提高可读性和可维护性。
  • 文件操作优化:在读取文件时,可以使用 BufferedReader 来提升读取性能,同时在写入时使用 BufferedWriter 进行批量写入,从而减少频繁的磁盘I/O操作

三、设计实现过程

1. 系统架构

  • 模块化设计:项目主要分为几个核心模块,包括:
    • Main 类:程序入口,负责解析命令行参数和协调其他模块。
    • ArithmeticGenerator 类:负责生成随机算式(包括分数和整数),并计算答案。
    • Fraction 类:用于表示和处理分数,包括加、减、乘、除和化简功能。
    • FileHandler 类:负责文件的读写操作,简化文件处理逻辑。
    • AnswerChecker 类:用于检查用户答案的正确性,比较用户输入与计算结果。

2. 类之间关系

  • 依赖关系:
    • Main 类依赖于 ArithmeticGenerator 和 FileHandler 来生成题目和处理文件。
    • ArithmeticGenerator依赖于 Fraction 类来进行分数运算。
    • AnswerChecker依赖于 ArithmeticGenerator 来计算正确答案。

3. 关键函数设计

  • generateQuestion(int maxRange):随机生成题目,包含分数和整数运算,返回格式化的题目字符串。
  • calculateAnswer(String question):解析题目字符串,计算答案并返回。使用分数和整数的不同处理逻辑。
  • writeGradeFile(String fileName, List correct, List wrong):将正确和错误的题目编号写入成绩文件,提供清晰的反馈。

四、代码说明

代码说明

在本项目中,我们设计了一个数学题生成与答案检查的系统,主要思路如下:

  1. 模块化设计:将系统分为多个类,每个类负责特定功能,如 Main 类负责程序入口和参数解析,ArithmeticGenerator 类负责生成题目和计算答案,Fraction 类用于表示和操作分数,FileHandler 类用于文件读写,AnswerChecker 类负责答案的检查和记录。

  2. 题目生成:ArithmeticGenerator 类使用随机数生成器决定生成的题目类型(分数或整数)及运算符,通过封装的方法确保题目生成逻辑清晰且易于扩展。

  3. 分数处理:Fraction 类封装了分数的加减乘除运算,确保每个操作后都能返回简化后的分数,增强了代码的可重用性。

  4. 文件操作:FileHandler 类简化了文件的读取和写入过程,通过单一接口提供相关功能,使得文件操作集中管理。

  5. 答案检查:AnswerChecker 类读取用户的答案和生成的题目,进行比较,并将结果输出到成绩文件中,这一过程保证了用户反馈的有效性。

五、测试运行

1.使用 -n 参数控制生成题目的个数,使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围

2.生成的题目中计算过程不能产生负数


3.对给定的题目文件和答案文件,判定答案中的对错并进行数量统计



4.生成1万道题目

异常处理

以下是项目中关键异常处理的代码示例:

  1. 分母为零的检查(Fraction 类)

  1. 命令行参数解析(Main 类)

  1. 文件操作异常(FileHandler 类)

  1. 答案检查中的错误处理(AnswerChecker 类)

  1. 分数运算中的异常处理(ArithmeticGenerator 类)

六、项目小结

在这个项目中,我们成功实现了一个简单的算术题生成器和答案检查器,整体流程流畅,功能基本符合预期。但在这个过程中,我们也经历了许多挑战和收获。

成功之处

  1. 功能实现:项目的核心功能——生成算术题和计算答案,顺利完成,用户可以根据输入的参数生成不同数量和范围的题目。
  2. 模块化设计:代码结构清晰,模块划分合理,各个类之间的职责明确,便于后续的维护和扩展。
  3. 异常处理:我们对可能出现的异常情况进行了详细的处理,确保程序的健壮性,给用户友好的反馈。

不足之处

  1. 时间管理:在项目的早期阶段,我们对时间的估计不足,导致部分功能的实现和测试时间紧张。
  2. 测试覆盖不足:虽然我们编写了一些测试用例,但对边界条件和极端输入的测试相对较少,导致在某些情况下程序仍可能出现意外结果。

结对感受

在结对编程的过程中,我们发现彼此的优点和不足。我们都认为在下次项目中可以提前规划时间,设定更细化的计划,以便更好地控制进度。同时,可以加强对测试用例的编写,确保覆盖更全面。

标签:分数,文件,结对,题目,项目,生成,答案,ArithmeticGenerator
From: https://www.cnblogs.com/dongwenlin/p/18438396

相关文章

  • 结对项目
    这个作业属于哪个课程计科2班这个作业要求在哪里作业要求这个作业的目标<要求实现一个自动生成小学四则运算题目的命令行程序>[作业地址](https://github.com/cr1017/3122004813)一、时间预估及实际花费时间PSP表格PSP2.1PersonalSoftwareProcessS......
  • 结对项目
    这个作业属于哪个课程课程这个作业的要求在哪里结对项目这个作业的目标实现一个自动生成小学四则运算题目的命令行程序一、合作成员项目成员学号github仓库地址黄锐3222004335github王伊若3222004382PSP2.1PersonalSoftwareProcess......
  • 结对项目
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230这个作业的目标组队编程实现四则运算的项目组队成员阿依古再丽(3222004721)、张汉洁(3222004598)这......
  • 结对项目
    姓名学号Github项目地址薛秋昊3122004369https://github.com/0818XR/0818XR/tree/main/3122004369/GenerateArithmeticProblems曾俊涛3122004373一.PSP表格PSP2.1PersonalSoftwareProcessStages预估耗时(分钟实际耗时(分钟)Planning计划1010......
  • 结对项目
    这个作业属于哪个课程 软件工程课程这个作业要求在哪里 结对项目这个作业的目标 按照要求写一个四则运算生成器成员一 罗祖文3122004537成员二 郑志涛312004547GitHub地址:https://github.com/Lzw1322/3122004537PSP2.1PersonalSoftwareProcessStages预估耗时(分钟......
  • 结对项目
    姓名学号陈祥意3122004821肖商3122004837GitHub地址https://github.com/Csneer/auto_generate_formulaPSP表格PSP2.1PersonalSoftwareProcessStages预估耗时(分钟)实际耗时(分钟)Planning计划4050Estimate估计这个任务需要多少时间1460......
  • 结对项目
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230这个作业的目标学习合作编程开发项目,继续熟悉运用性能分析工具和PSP表格管理时间,养成良好编程风格......
  • 结对项目
    作业属于的课程计科22级12班作业要求要求作业目标团队合作实现一个自动生成小学四则运算题目的命令行程序姓名学号兰勇3122004783GitHub链接:链接一、PSP表格PSP2.1描述预估耗时(分钟)实际耗时(分钟)Planning·Estimate估计这个......
  • 结对项目
    这个作业属于哪个课程软件工程这个作业要求在哪里结对项目这个作业的目标组队实现一个自动生成小学四则运算题目的程序成员3122004487林丙昆成员3122004502赵衍锴GitHub地址:地址PSP2.1表格PSP2.1PersonalSoftwareProcessStages预估耗时(分钟......
  • 结对项目
    这个作业属于哪个课程计科22级12班这个作业要求在哪里结对项目这个作业的目标实现一个自动生成小学四则运算题目的命令行程序成员梁晓君(3222004682)阿丽娅·阿力木(3222004678)github地址作业github链接PSP表格PSP2.1PersonalSoftwareProcessStag......