结对项目-Java实现四则运算题目生成器

发布时间 2023-09-28 17:31:12作者: 詹慧丹
软件工程 21级计科1班
作业要求 结对项目
作业目标 了解结对合作开发流程,提高合作开发效率

项目成员

姓名 学号
江卓颖 3121004699
詹慧丹 3221004855

Github地址

github仓库链接

PSP表

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

设计实现过程

设计思路

  • 从命令行里面获取参数:如果获取到的是题目数量以及自然数的范围则调用createProblem()函数生成题目,如果获取到的是文件名,则调用函数creatGraFile()校对答案
  • 函数createProblem():
    • 调用generate()函数随机生成输入范围内的整数或真分数、运算符组成表达式,使用该表达式的逆波兰表达式计算答案,判断是否重复,没有重复则将其添加到结果集
    • 将结果集中的表达式和答案分成两个集合,传递给creatFile()和creatAnsFile()分别导出题目和答案文件
  • 函数creatGraFile():将两个文件导入并将答案装入两个集合中进行一一比对和统计,将统计结果导出文件

关键代码说明

主要函数

函数名 参数 主要功能
createProblem( ) n(题目数量)、r(自然数范围) 调用generate( )生成表达式和答案,分成表达式集合和答案集合,调用creatFile( )和creatAnsFile( )导出文件
generate( ) n(题目数量)、r(自然数范围) 调用expression( )生成表达式,调用bolan( )计算答案,调用ifRepeat( )判断重复,没有重复则将其添加到结果集
expression( ) r(自然数范围) 随机生成r范围内的整数或真分数以及运算符组成表达式expression,返回expression字符串
bolan( ) expression(表达式字符串) 使用该表达式的逆波兰表达式计算答案
jisuan( ) num1(操作数1)、num2(操作数2),operation(运算符) 根据操作数和运算符来进行计算
ifRepeat( ) expression(表达式),result(已生成的表达式集合) 将expression与已生成的表达式集合中的表达式进行比对,返回true或false
creatFile( ) problem(问题表达式集合) 将所有问题表达式导出到文件Exercises.txt
creatAnsFile( ) answer(答案集合) 将所有答案导出到文件Answer.txt
creatGraFile( ) exerciseFile(用户答案文件名),answerFile(标准答案文件名) 文件导入后,将答案装入两个集合中进行比对和统计,将统计结果导出文件Grade.txt

关键代码

createProblem( )函数

generate( )函数

expression( )函数

bolan( )函数


jisuan( )函数



测试运行

测试覆盖率

测试类

测试生成表达式函数

测试逆波兰计算结果函数

测试计算函数



测试生成比较文件函数

测试化简函数

测试约分函数

测试表达式重复检验函数

整体测试

生成100道10以内的算式

生成100道表达式,保存在Exercises.txt中

生成100道表达式的答案,保存在answer.txt中

100道计算题算错5道的校对结果,保存在Grade.txt中

效能分析

  • 由图可以看出,char[],String,StringBuilder类型使用的最多,可以看出函数generate可以进行改进,可以使用StringBuilder来代替String进行字符串的拼接,避免过多产生新的String对象。
    然后在进行逆波兰计算表达式的结果的函数中,char[]类型使用较多,暂无改进方法

项目小结

  • 经验和感受:
    第一次两个人一起完成一个程序,在仓库的操作上出现了一些麻烦,不过在讨论和搜索学习github的使用后都解决了,两个人一起讨论思路以及分工完成代码要比一个人高效得多,合理的分工可以避免某个功能的重复编写等,让开发更高效。这次的结对项目有利于我们了解合作开发的流程比如分配任务、制定代码规范等,同时,及时的测试有利于及时发现代码问题并解决,减小对整个程序的影响。