结对项目-Java实现四则运算题目生成器
软件工程 | 21级计科1班 |
---|---|
作业要求 | 结对项目 |
作业目标 | 了解结对合作开发流程,提高合作开发效率 |
项目成员
姓名 | 学号 |
---|---|
江卓颖 | 3121004699 |
詹慧丹 | 3221004855 |
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的使用后都解决了,两个人一起讨论思路以及分工完成代码要比一个人高效得多,合理的分工可以避免某个功能的重复编写等,让开发更高效。这次的结对项目有利于我们了解合作开发的流程比如分配任务、制定代码规范等,同时,及时的测试有利于及时发现代码问题并解决,减小对整个程序的影响。