结对项目
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/CSGrade22-34 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230 |
成员 | 李嘉锐(3122004951) 林进光(3122004955) |
github链接 | https://github.com/bitpurleclude/3122004951MathQuestionGenerator.git |
这个作业的目标 | 与搭档合作实现一个自动生成小学四则运算题目的命令行程序 |
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 15 |
Estimate | 估计这个任务需要多少时间 | 200 | 230 |
Development | 开发 | 70 | 70 |
Analysis | 需求分析 (包括学习新技术) | 60 | 65 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审 | 30 | 35 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 15 | 20 |
Design | 具体设计 | 60 | 60 |
Coding | 具体编码 | 100 | 100 |
Code Review | 代码复审 | 20 | 20 |
Test | 测试(自我测试,修改代码,提交修改) | 50 | 60 |
Reporting | 报告 | 20 | 30 |
Test Repor | 测试报告 | 20 | 20 |
Size Measurement | 计算工作量 | 10 | 15 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 10 |
合计 | 715 | 780 |
设计实现过程
效能分析
代码说明
ArithmeticGenerator 类中各个函数的说明:
generateExpression(Random rand, int range, int complexity):
功能: 生成一个随机的数学表达式。
findClosingParenthesis(String[] tokens, int start):
功能: 找到与给定起始位置匹配的右括号的位置。
isOperator(String token):
功能: 检查给定的字符串是否是运算符。
hasPrecedence(String op1, String op2):
功能: 检查两个运算符的优先级。
applyOperator(Fraction left, Fraction right, String operator):
功能: 对两个分数应用指定的运算符并返回结果。
parseFraction(String operand):
功能: 将操作数字符串解析为 Fraction 对象。
Fraction 类中各个函数的说明:
Fraction(int numerator, int denominator):
功能: 构造一个具有指定分子和分母的分数对象。
add(Fraction other):
功能: 将当前分数与另一个分数相加。
subtract(Fraction other):
功能: 将当前分数与另一个分数相减。
multiply(Fraction other):
功能: 将当前分数与另一个分数相乘。
divide(Fraction other):
功能: 将当前分数与另一个分数相除。
compareTo(Fraction other):
功能: 比较当前分数与另一个分数的大小。
toString():
功能: 返回分数的字符串表示形式。
reduce():
功能: 将分数化简为最简形式。
gcd(int a, int b):
功能: 计算两个整数的最大公约数。
Calculate 类中各个函数的说明:
calculateAnswer(String expression):
功能: 计算给定数学表达式的结果。
parseExpression(String expression):
功能: 将数学表达式解析为令牌列表。
evaluateTokens(List
功能: 评估解析后的令牌列表,计算表达式的结果。
applyOperator(Fraction left, Fraction right, String operator):
功能: 对两个分数应用指定的运算符并返回结果。
parseFraction(String operand):
功能: 将操作数字符串解析为 Fraction 对象。
isOperator(String token):
功能: 检查给定的字符串是否是运算符。
hasPrecedence(String op1, String op2):
功能: 检查两个运算符的优先级。
findClosingParenthesis(String[] tokens, int start):
功能: 找到与给定起始位置匹配的右括号的位置。
FileUtil 类中各个函数的说明:
writeToFile(String filename, List
功能: 将数据写入指定的文件。
readFromFile(String filename):
功能: 从指定的文件读取数据。
checkAnswers(String exerciseFile, String answerFile):
功能: 检查练习文件中的题目和答案文件中的答案,并生成评分结果。
测试运行
测试用例1:测试生成10个题目,范围为10
java -jar main.jar -n 10 -r 10
测试用例2:测试生成20个题目,范围为20
java -jar main.jar -n 20 -r 20
测试用例3:测试生成100个题目,范围为100
java -jar main.jar -n 100 -r 100
测试用例4:测试生成1000个题目,范围为10
java -jar main.jar -n 1000 -r 10
测试用例5:测试生成20个题目,范围为10并判定答案中的对错并进行数量统计
java -jar main.jar -n 20 -r 10
java -jar main.jar -e <题目文件路径> -a <答案文件路径>
测试用例6:输入无效的数值范围1
java -jar main.jar -n 10 -r 1
测试用例7:输入的题目数量为0
java -jar main.jar -n 0 -r 10
测试用例8:输入的题目数量不规范(小数)
java -jar main.jar -n 1.5 -r 10
测试用例9:输入的参数数量不正确(缺少或多出)
java -jar main.jar -n 10 -r
测试用例10:判定答案中的对错并进行数量统计时给出的文件路径找不到该文件
java -jar main.jar -n <错误的题目文件路径> -a <错误的答案文件路径>
项目小结
我们都是第一次组队写项目,互相都有些不是很适应,但经历一段时间的磨合后,我们俩之间对项目的交流也变得频繁,码字在出现bug时能够一起讨论bug的一些解决方法,逐渐对项目合作得心应手,通过这次组队项目,我们意识到团队合作不仅能够提高效率,还能够获得更好的结果,在合作过程中,互相学习和交流,共同解决问题,能够让我们取得更好的成果