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

news/发布时间2024/5/15 20:58:12
这个作业属于哪个课程 软件工程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表示对/错的题目的数量,括号内的是对/错题目的编号。为简单起见,假设输入的题目都是按照顺序编号的符合规范的题目。

三、效能分析

  1. 性能分析图:
    性能分析图

  2. Memory占用图:
    Memory占用图

四、设计实现

1、类名: CalculateStack
  1. 方法

    addFirstElem: 检查栈顶元素是否为+, -, *, /操作符,如果是,则弹出栈顶元素和栈顶的下一个元素,执行相应的计算,并将结果压入栈中。如果不是,则将当前元素压入栈中。

    returnsCalculate: 遍历栈中的所有元素,执行相应的计算,并将结果压入栈中,返回栈顶元素的值。

    calculate: 计算两个数字和一个操作符的结果

  2. 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类:生成数学题并检查答案
  1. 读取用户输入的题目数量和题目大小限制,并调用produceMaths方法生成题目。

  2. 将生成的题目和答案写入文件,并提示用户输入答案。

  3. 定期检查答案文件是否有新内容输入,如果有新内容,则计算正确率和错误率,并将结果写入结果文件。

  4. 当结果文件存在且内容更新时,循环结束,程序退出。

五、测试运行

测试覆盖率:

部分结果:

  • 10道题目

  • 20道题目

  • 更多题目

六、总结

杨文琦:很高兴与兰健同学完成这次的结对项目,我觉得她的闪光点是她的设计与测试。她设计的用户界面简洁明了,并且从多方面进行测试,保障程序的正确性。我们在这次合作
中,积极沟通,合作愉快。

韦兰健:我的搭档文琦同学,我觉得她的闪光点是编程能力和逻辑思维很强。我们两个都是初学Java,但是她学习能力很强,在我不懂的地方给了我很直白的讲解,并且我们两个的沟通与合作非常愉快。

总结:我们一开始先确认使用Java编写代码,以及对项目的需求进行分析,然后进行分工。在合作过程中,遇到问题我们及时相互沟通并且确定好解决方法,不懂的知识点就在网上找学习资源。但是由于我们对Java的学习还不够深入,项目完成了但还有不足之处,警示我们需要不断学习。这次的结对项目是一次很有意义的经历,我们学到了如何与他人合作,还提升了自己的沟通能力,以及编写代码的能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/33707352.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

【EF Core】EFCore 8.0 -CodeFirst方式生成SQLite实体对象

EFCoreFirst使用流程 1、引入工具包Microsoft.EntityFrameworkCore.SqlServer 核心程序包,封装了关键的核心代码,使用EF必须引用这个包Microsoft.EntityFrameworkCore.Design 设计包,用于在命令行工具下EF Core开发的工具套件Microsoft.EntityFrameworkCore.Tools 用于数据库…

【EF core】模型可视化 EF Core Power Tools 【工具】

Visual Studio中的EF Core Power Tools 扩展来可视化模型。编程是个人爱好

模型可视化 EF Core Power Tools 【工具】

Visual Studio中的EF Core Power Tools 扩展来可视化模型。编程是个人爱好

四则运算项目

四则运算器实现这个作业属于哪个课程 软件工程这个作业要求在哪里 四则运算这个作业的目标 总结成败得失,分享经验,总结教训你可以在GitHub上找到本项目并下载所有的算法和查看日志 Slave 使用手册 计划 第二次使用PSP方法进行软件实现,本次编程吸取上一次的经验,在实现一个…

04-python数据容器

列表 元组 定义 变量名称 = (x,y,z) #定义空元组 t1 = ()或tuple()ps: 定义单个元素的元组时,必须加上逗号,不然就是单个元素的类型,而不是元组类型 t1 = ("hello") print(type(t1)) #str t2 = ("hello",) print(type(t2)) #tuple元组的操作# 取元组…

计算机/网安 面试例题(十)

计算机/网安 面试例题(十)—— 渗透测试信息收集服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等) 网站指纹识别(包括,cms,cdn,证书等),dns记录 whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等) 子域名收集,旁站,C段等 google hack…