结对项目:四则运算题目生成器

2024-04-09 14:33:20
这个作业属于哪个课程 软件工程2024 这个作业要求在哪里 结对项目 这个作业的目标 学会两个人合作完成一个项目,了解如何分工合作 Github地址:点击进入仓库 队员介绍 成员姓名 学号 杨文琦 3222004727 韦兰健 3222004724 一、PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 20 20 · Estimate · 估计这个任务需要多少时间 20 20 Development 开发 1120 865 · Analysis · 需求分析 (包括学习新技术) 120 60 · Design Spec · 生成设计文档 20 15 · Design Review · 设计复审 (和同事审核设计文档) 10 30 · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 20 20 · Design · 具体设计 20 40 · Coding · 具体编码 800 600 · Code Review · 代码复审 30 40 · Test · 测试(自我测试,修改代码,提交修改) 100 60 Reporting 报告 40 35 · Test Report · 测试报告 20 20 · Size Measurement · 计算工作量 10 5 · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 10 10 合计 1180 920 二、需求分析 题目:实现一个自动生成小学四则运算题目的命令行程序(也可以用图像界面,具有相似功能) 说明: 自然数:0, 1, 2, …。 真分数:1/2, 1/3, 2/3, 1/4, 1’1/2, …。 运算符:+, −, ×, ÷。 括号:(, )。 等号:=。 分隔符:空格(用于四则运算符和等号前后)。 算术表达式: e = n | e1 + e2 | e1 − e2 | e1 × e2 | e1 ÷ e2 | (e), 其中e, e1和e2为表达式,n为自然数或真分数。 四则运算题目:e = ,其中e为算术表达式。 需求: 使用 -n 参数控制生成题目的个数,例如 Myapp.exe -n 10 将生成10个题目。 使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围,例如 Myapp.exe -r 10 将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然 数。该参数必须给定,否则程序报错并给出帮助信息。 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1− e2的子表达式,那么e1≥ e2。 生成的题目中如果存在形如e1÷ e2的子表达式,那么其结果应是真分数。 每道题目中出现的运算符个数不超过3个。 程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两 道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。 生成的题目存入执行程序的当前目录下的Exercises.txt文件,格式如下: 四则运算题目1 四则运算题目2 …… 其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。 在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件,格式如下: 答案1 答案2 特别的,真分数的运算如下例所示:1/6 + 1/8 = 7/24。 程序应能支持一万道题目的生成。 程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计,输入参数如下: Myapp.exe -e .txt -a .txt 统计结果输出到文件Grade.txt,格式如下: Correct: 5 (1, 3, 5, 7, 9) Wrong: 5 (2, 4, 6, 8, 10) 其中“:”后面的数字5表示对/错的题目的数量,括号内的是对/错题目的编号。为简单起见,假设输入的题目都是按照顺序编号的符合规范的题目。 三、效能分析 性能分析图: Memory占用图: 四、设计实现 1、类名: CalculateStack 方法 addFirstElem: 检查栈顶元素是否为+, -, *, /操作符,如果是,则弹出栈顶元素和栈顶的下一个元素,执行相应的计算,并将结果压入栈中。如果不是,则将当前元素压入栈中。 returnsCalculate: 遍历栈中的所有元素,执行相应的计算,并将结果压入栈中,返回栈顶元素的值。 calculate: 计算两个数字和一个操作符的结果 类 NumberRecord:用于处理分数加减乘除 createNumberRecord: 根据输入的字符串,创建一个NumberRecord对象,如果输入的字符串包含分隔符,则将字符串分为整数部分和分数部分,分别处理。 addNumberRecord: 计算两个NumberRecord对象的加法。 multiNumberRecord: 计算两个NumberRecord对象的乘法。 subtractionNumberRecord: 计算两个NumberRecord对象的减法。 divisionNumberRecord: 计算两个NumberRecord对象的除法。 2、TitleAnswer类:用于存储问题描述和答案 getProblemDescription:返回问题描述。 setProblemDescription:设置问题描述。 getAnswer:返回答案。 setAnswer:设置答案。 toString:返回类对象的字符串表示。 3、CheckUtils类: readAnswersFromFile方法:用于从指定文件路径的文件中读取答案,返回答案列表 gradeWrite方法:用于将统计结果写入指定文件路径的文件中 4、MathProduceUtils类 produceMaths方法:生成指定数量和范围的数学题,并在生成完成后返回生成的题目和答案列表 produceMathsInt方法:传入的数字限制生成整数运算题目。 produceMathsModule方法:传入的数字列表生成具体的问题和答案。 produceFraction方法:传入的数字限制生成分数运算题目。 operationChoice方法:传入的随机数选择运算符。 produceMathsIntMixFraction方法:根据传入的数字限制生成一个整数运算题目,包括分数运算 operationChoice方法:根据传入的随机数选择运算符 5、main类:生成数学题并检查答案 读取用户输入的题目数量和题目大小限制,并调用produceMaths方法生成题目。 将生成的题目和答案写入文件,并提示用户输入答案。 定期检查答案文件是否有新内容输入,如果有新内容,则计算正确率和错误率,并将结果写入结果文件。 当结果文件存在且内容更新时,循环结束,程序退出。 五、测试运行 测试覆盖率: 部分结果: 10道题目 20道题目 更多题目 六、总结 杨文琦:很高兴与兰健同学完成这次的结对项目,我觉得她的闪光点是她的设计与测试。她设计的用户界面简洁明了,并且从多方面进行测试,保障程序的正确性。我们在这次合作 中,积极沟通,合作愉快。 韦兰健:我的搭档文琦同学,我觉得她的闪光点是编程能力和逻辑思维很强。我们两个都是初学Java,但是她学习能力很强,在我不懂的地方给了我很直白的讲解,并且我们两个的沟通与合作非常愉快。 总结:我们一开始先确认使用Java编写代码,以及对项目的需求进行分析,然后进行分工。在合作过程中,遇到问题我们及时相互沟通并且确定好解决方法,不懂的知识点就在网上找学习资源。但是由于我们对Java的学习还不够深入,项目完成了但还有不足之处,警示我们需要不断学习。这次的结对项目是一次很有意义的经历,我们学到了如何与他人合作,还提升了自己的沟通能力,以及编写代码的能力。
作者:小李
点赞3043
已输入3个字
全部评论
快来抢沙发