结对项目:四则运算题目生成器(Java)
2021-02-19 03:18
标签:exe read 否支持 get 核心 ui界面设计 val tps return 项目Github地址:ExercisesGenerator 结对项目成员:丘丽珊 3218007877 黄钰朝 3118005005 结构说明: 上图展示了程序中核心的类和方法,其中GenerateController负责生成题目的功能,CheckController负责批卷功能,两者都依赖于底层的GenerateService,而GenerateService中进行四则运算的功能依赖于OperationService 实现思路: 实现思路: 实现思路: 这是先后两次执行生成50000道题目功能时程序的资源消耗情况,可以得到以下结论: 以下测试皆为程序执行生成10000道题目时的性能表现 这是优化前的程序执行生成10000道题目的性能表现,可以看到程序中性能消耗最大的函数是GenerateServiceImpl类的validate函数,其中执行List.contains方法的时间占用达到了96% 由于查重算法中,把题目是否重复的判断写在equals方法中,每次比较都要重新分析题目的运算次序,并且validate方法中直接调用了List.contain方法,从源码来看,contain的内部是逐个遍历再调用equals方法,效率很低,因此改成每次生成题目后,解析出题目的最简式,用一个HashSet去保存题目的最简式,查重时调用Set.contain方法,其内部实现时哈希寻址,因此效率得到提高。改进查重方法后,validate依然是消耗最大的函数,但占比已经下降到27%. 这次改进在查重算法改进的基础至上,将生成题目和输出到文件的方法进行分离,引入线程池和多线程并发执行,最终将生成10000道题的时间消耗降低至1s 结果说明: 以上为测试生成10道数值在2以内的题目的截图,可以看到题目符合要求且答案正确 修改上一步中输出的Answer.txt中奇数题号的答案,再使用批卷功能 查看输出的Grade.txt文件: 结果说明: 其中标出来奇数编号被修改的题目为错误题号,结果符合预期 在出题模式下执行生成10000道数值范围在5以内的题目的功能 查看生成的Exercises.txt文件 查看生成的Answer.txt文件 结果说明: 可以看到程序正确地执行了生成10000道题目的功能,消耗时间1s 获得的经验: 1.实现的过程中到了数据结构的知识,加深对数据结构的理解 2.对项目进行性能优化,加深对多线程知识的理解 3.增加了协作开发的经验 不足的地方: 用Java来实现数据结构的效率不够高,GUI界面没有做响应式编程 结对项目:四则运算题目生成器(Java) 标签:exe read 否支持 get 核心 ui界面设计 val tps return 原文地址:https://www.cnblogs.com/misterchaos/p/12687033.html
一、需求分析
需求描述
是否实现
控制生成题目的个数
是
控制题目中数值范围
是
计算过程不能产生负数,除法的结果必须是真分数,题目不能重复,运算符不能超过3个
是
生成的题目存入执行程序的当前目录下的Exercises.txt文件
是
题目的答案存入执行程序的当前目录下的Answers.txt文件
是
能支持一万道题目的生成
是
支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计
是
统计结果输出到文件Grade.txt
是
具有图形化的操作界面
是
二、开发计划
功能
描述
开发者
进度
生成题目
随机生成操作数和运算符,组成有效的四则运算表达式
丘丽珊
完成
计算结果
根据生成的表达式,计算生成正确的结果
丘丽珊
完成
批卷
根据指定的题目文件和答案文件,输出成绩结果
黄钰朝
完成
UI界面设计
设计软件的GUI界面
丘丽珊
完成
UI界面实现
用Javafx实现GUI界面
黄钰朝
完成
功能测试与故障修复
测试程序的功能,修复出现的故障
丘丽珊,黄钰朝
完成
性能分析与优化
分析程序执行的性能,优化性能表现
黄钰朝
完成
三、实现方案
3.1 项目结构
3.2 代码说明
3.2.1 出题功能代码
/**
* 生成指定数目包含答案的有效题目
*/
@Override
public void generateExercises(int exercisesNum, int numRange) throws IOException {
int count = 0;
while (count
3.2.3 批卷功能代码
/**
* 解析题目文件和答案文件
*/
public List
3.2.3 四则运算功能代码
/**
* 生成答案
*/
@Override
public void generateAnswer(Exercises e) {
Queue
四、效能分析
4.1 程序效能
4.2 性能优化
4.2.1 优化前:(执行过程消耗时间为:74s)
4.2.2 查重算法优化后:(执行过程消耗时间为:11s)
4.2.3 多线程并发优化后(执行过程消耗时间为:1s)
五、测试报告
5.1 测试项:生成题目和答案是否符合要求
5.2 测试项:批卷功能是否正确判断答案正确与否
5.3 测试项:能否支持一万道以上大量题目的生成
六、PSP表格
PSP2.1
Personal Software Process Stages
预估耗时(分钟)
实际耗时(分钟)
Planning
计划
30
30
· Estimate
· 估计这个任务需要多少时间
30
30
Development
开发
1755
2145
· Analysis
· 需求分析 (包括学习新技术)
130
180
· Design Spec
· 生成设计文档
60
35
· Design Review
· 设计复审 (和同事审核设计文档)
5
5
· Coding Standard
· 代码规范 (为目前的开发制定合适的规范)
10
5
· Design
· 具体设计
200
120
· Coding
· 具体编码
1200
1500
· Code Review
· 代码复审
30
120
· Test
· 测试(自我测试,修改代码,提交修改)
120
180
Reporting
报告
85
130
· Test Report
· 测试报告
60
30
· Size Measurement
· 计算工作量
10
10
· Postmortem & Process Improvement Plan
· 事后总结, 并提出过程改进计划
15
90
合计
1870
2305
七、总结
7.1 项目小结
7.2 结队感受
丘丽珊:
黄钰朝:
文章标题:结对项目:四则运算题目生成器(Java)
文章链接:http://soscw.com/index.php/essay/57337.html