个人项目互评及功能代码分析:中小学数学卷子自动生成程序

发布时间 2023-09-20 20:37:44作者: DearFish

代码作者:桑健康

评价人:李明胜

 项目语言:Java

 

一、项目需求:

用户:

小学、初中和高中数学老师。

功能:

1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名、密码”,重新输入用户名、密码;

2、登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学、初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题。每道题目的操作数在1-5个之间,操作数取值范围为1-100;

3、题目数量的有效输入范围是“10-30”(含10,30,或-1退出登录),程序根据输入的题目数量生成符合小学、初中和高中难度的题目的卷子(具体要求见附表)。同一个老师的卷子中的题目不能与以前的已生成的卷子中的题目重复(以指定文件夹下存在的文件为准,见5);

4、在登录状态下,如果用户需要切换类型选项,命令行输入“切换为XX”,XX为小学、初中和高中三个选项中的一个,输入项不符合要求时,程序控制台提示“请输入小学、初中和高中三个选项中的一个”;输入正确后,显示“”系统提示“准备生成XX数学题目,请输入生成题目数量”,用户输入所需出的卷子的题目数量,系统新设置的类型进行出题;

5、生成的题目将以“年-月-日-时-分-秒.txt”的形式保存,每个账号一个文件夹。每道题目有题号,每题之间空一行;

附表:小学、初中、高中题目难度要求

 

小学

初中

高中

 

难度要求

+,-,*./

平方,开根号

sin,cos,tan

 

备注

只能有+,-,*./和()

题目中至少有一个平方或开根号的运算符

题目中至少有一个sin,cos或tan的运算符

 

 

二、功能测试

1.登录功能

登陆成功并输出相应提示文字信息,测试正常,此模块没有发现BUG

提示的引导信息比较详细

 输入错误密码或账户,测试正常

 

2.切换功能

正确输入,切换成功,提示功能正确

 接下来测试非法输入,测试结果正常,没有出现越界等异常,而且切换难度不符合要求时也有相应处理。

 

 3.出题功能

1)生成小学试卷:

测试功能正常,试题通过相对路径存储,命名符合规范,而且每次生成试卷都会提示题库本地路径,便于用户查找。

查看题库,可以看到生成的题目满足需求:每道题目的操作数在1-5个之间,操作数取值范围为1-100,而且包括加减乘除运算符号,但有一点可以进行完善,小学试题并没有添加括号,实际小学题库还是应该考虑加入括号。

2)生成初中试卷:

经测试,初中题目中至少有一个平方或开根号的运算符,符合要求。

 3)生成高中试卷:

高中题目中至少有一个sin,costan的运算符

4)错误输入测试

 

4.退出功能

 切换类型后退出重新登陆

 测试小结:全部功能测试完毕,总体来说用户体验良好,提示信息完备且简单易懂,考虑了各种用户异常输入,保证程序正常运行。

 

 三、代码流程分析

文件架构

 运行流程:

1.实例化Teacher对象,调用Main中Login()方法进行登录

2.账号密码输入正确后,登录成功,提示输入信息:当前选择为xx出题,准备生成xx数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登陆):

3.用户继续输入(切换或者出题或退出),当用户输入数字时,调用Main中generatePaper()方法,进行数字大小格式判断,合法则调用user.generatePapers(number),之后再进行创建文件、生成并写入题目。

当用户输入切换为xx时,调用Main中switchMode()方法,提示用户输入,合法则调用user.setQuestionType,进行更改账户类型。

 

四、优缺点总结

优点:

1.代码命名规范,符合Google编码规范,大部分类和方法有对应的Javadoc。

2.结构清晰,封装性良好。

3.账号密码及类型以txt文件形式存储,便于修改。

4.测试功能均正常,异常处理完备,避免用户错误输入导致程序终止。

5.用户交互体验良好,生成试卷时会输出路径提示,方便用户查找。

6.合理使用枚举类,代码更简洁。

 7.使用Stream API(内置异常处理)来读取文件,充分利用多核处理器性能,Files.lines()方法返回一个惰性加载的Stream,只在需要时逐行读取文件内容,节省了内存。

 

 缺点:

 1.虽然大部分类和方法配有Javadoc,但是注释比较少,可再适当增加注释以提高可读性。

2.代码在单一职责原则方面上有待改进,Main 方法的职责较多,包括用户登录、解析输入、调用用户类型切换和生成试卷等,可以考虑拆分细化Main方法功能。

3.生成的小学题目中无括号,虽然并未硬性规定,但结合实际需求,小学试题还是应该考虑包含括号。