HNU个人项目互评——中小学数学卷子自动生成程序
结对编程互评
- 代码作者:软件2104 潘胜蓝
- 互评作者:软件2104 苏晨阳
题目分析:
-
项目要求
-
1.1 用户类型:
小学、初中和高中数学老师。 -
1.2 功能要求:
- 1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名、密码”,重新输入用户名、密码;
- 2、登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学、初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题。每道题目的操作数在1-5个之间,操作数取值范围为1-100;
- 3、题目数量的有效输入范围是“10-30”(含10,30,或-1退出登录),程序根据输入的题目数量生成符合小学、初中和高中难度的题目的卷子(具体要求见附表)。同一个老师的卷子中的题目不能与以前的已生成的卷子中的题目重复(以指定文件夹下存在的文件为准,见5);
- 4、在登录状态下,如果用户需要切换类型选项,命令行输入“切换为XX”,XX为小学、初中和高中三个选项中的一个,输入项不符合要求时,程序控制台提示“请输入小学、初中和高中三个选项中的一个”;输入正确后,显示“”系统提示“准备生成XX数学题目,请输入生成题目数量”,用户输入所需出的卷子的题目数量,系统新设置的类型进行出题;
- 5、生成的题目将以“年-月-日-时-分-秒.txt”的形式保存,每个账号一个文件夹。每道题目有题号,每题之间空一行;
-
附表-1:账户、密码
| 账户类型 | 账户 | 密码 |
|---|---|---|
| 小学 | 张三1 | 123 |
| 小学 | 张三2 | 123 |
| 小学 | 张三3 | 123 |
| 初中 | 李四1 | 123 |
| 初中 | 李四2 | 123 |
| 初中 | 李四3 | 123 |
| 高中 | 王五1 | 123 |
| 高中 | 王五2 | 123 |
| 高中 | 王五3 | 123 |
附表-2:小学、初中、高中题目难度要求
| 阶段 | 小学 | 初中 | 高中 |
|---|---|---|---|
| 难度要求 | +,-,*./ | 平方,开根号 | sin,cos,tan |
| 备注 | 只能有+,-,*./和() | 题目中至少有一个平方或开根号的运算符 | 题目中至少有一个sin,cos或tan的运算符 |
一、摘要
- 该作业是由潘胜蓝同学使用Java语言完成的“中小学数学卷子自动生成程序”。
- 在代码设计方面,对小学教师、初中教师、高中教师三种角色属性进行了抽象提取,利用java抽象类和继承的优点进行编写;通过自行编写package、使用二叉树进行运算式的查重和用户的各项功能划分,使得代码结构清晰明朗;通过遵循Google Java的代码规范,潘胜蓝同学的代码也非常的美观;
- 在功能实现方面,实现了用户的登录和退出、账号角色的分配和切换以及各角色对应题目类型的生成及输出;通过对题目文件生成路径的设置,该程序可以在工程所在的相对路径下生成账号文件夹及以当前系统时间作为名称的题目文件;同时,该程序也实现了对非标准输入的过滤,拥有较高的鲁棒性,降低了程序崩溃的概率,大大提高用户体验。
二、技术栈
- 编程语言:Java;
- 编译平台:Intelij IDEA 2023;
- 操作系统:Windows 10/Windows 11;
三、代码结构
1、Main.java
该文件内包含main函数,为程序入口。

设置Node类、Account类接收相应参数;


User类继承UserAccount抽象类,设置了多个public成员变量及数据结构,同时对各项功能进行分方法编写,包括登录、账号密码校验、获得当前账号出题类型、输入各项出题参数、生成题目并查重以及最终将题目保存至指定文件夹内等;代码整洁有序,方法之间调用关系明确,可读性强;

程序入口main函数当中,通过调用预制接口实现各类功能;
2、package useraccount
该包内包含抽象类声明文件。
①UserAccount.java

声明public属性的基类,并声明成员变量和无参/有参构造函数,方便子类的继承。
四、运行测试
1、登录

2、生成题目

3、切换账号类型

4、退出登录

五、优缺点总结
1、优点
- 代码结构方面:通过各项功能的实现和整体代码的编写,足以看出潘胜蓝同学熟知Java代码编写规范,并且能够应用到具体的编写过程中去;变量和函数的命名均采用了驼峰命名法,使得代码的美观程度进一步提高,有利于后续的功能迭代和多人合作编写;
- 数据结构选择方面:使用树结构作为题目生成和去重的载体,巧妙利用了树结构在表示中缀、后缀表达式时清晰的结构和优异的性能,同时设计了相应的算法对题目去重的时间复杂度和空间复杂度都进行了优化,较为合理的平衡了去重程度和程序运行速度,是一种不错的思路,值得学习;
2、不足
- 类的编写略显臃肿:在User类中编写了过多的方法,使得程序的种种方法和User类的耦合度较高,不利于后续迭代;
- 注释部分:代码中必要的注释较少,在面向多人合作编程时会对他人理解代码产生一定的阻碍。
浙公网安备 33010602011771号