个人项目:中小学数学试卷自动生成程序--结对编程队友代码分析
数学试卷自动生成系统 & 对BWJ同学代码分析
功能需求
- 命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名、密码”,重新输入用户名、密码;
- 登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学、初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题。每道题目的操作数在1-5个之间,操作数取值范围为1-100;
- 题目数量的有效输入范围是“10-30”(含10,30,或-1退出登录),程序根据输入的题目数量生成符合小学、初中和高中难度的题目的卷子(具体要求见附表)。同一个老师的卷子中的题目不能与以前的已生成的卷子中的题目重复(以指定文件夹下存在的文件为准,见5);
- 在登录状态下,如果用户需要切换类型选项,命令行输入“切换为XX”,XX为小学、初中和高中三个选项中的一个,输入项不符合要求时,程序控制台提示“请输入小学、初中和高中三个选项中的一个”;输入正确后,显示“”系统提示“准备生成XX数学题目,请输入生成题目数量”,用户输入所需出的卷子的题目数量,系统新设置的类型进行出题;
- 生成的题目将以“年-月-日-时-分-秒.txt”的形式保存,每个账号一个文件夹。每道题目有题号,每题之间空一行;
附表一
| 账户类型 | 账户 | 密码 |
|---|---|---|
| 小学 | 张三1 | 123 |
| 小学 | 张三2 | 123 |
| 小学 | 张三3 | 123 |
| 初中 | 李四1 | 123 |
| 初中 | 李四2 | 123 |
| 初中 | 李四3 | 123 |
| 高中 | 王五1 | 123 |
| 高中 | 王五2 | 123 |
| 高中 | 王五3 | 123 |
附表二
| \ | 小学 | 初中 | 高中 |
|---|---|---|---|
| 备注要求 | +,-,*./ | 平方,开根号 | sin,cos,tan |
| 试卷难度 | 只能有+,-,*./和() | 题目中至少有一个平方 或开根号的运算符 |
题目中至少有一个sin,cos或 tan的运算符 |
对队友代码分析
优点
1. 整体结构良好

Bao同学以面对对象编程的思想,对代码各个部分进行了分类、封装等操作,隐藏对象的属性和实现细节,仅对外公开接口,当调用这些“类”的时候不需要知道它的具体实现方法,只需知道它的功能与作用。使得不同类之间的相互影响程度达到最低,同时也简化、规范化了整个项目的实现。
2. 代码书写美观
代码书写很漂亮,主要体现在函数结构整洁、缩进规范、函数功能注释清晰,让人一目了然。

3. 功能实现完备
功能需求全部完成,这里再列举几个比较好的实现。
3. 1. 操作数加括号的功能

该函数的调用十分方便,将操作数传为参数传入,之后就会返回加过括号的操作数,我的个人项目中就缺少这个功能,非常值得本人学习。
3. 2. 查重功能


这里的实现也十分巧妙,调用查重时,会将当前文件夹下txt文本的题目都提取到一个HashSet中,然后通过HashSet来进行查重。
缺点
1.交互功能略有不足
在人机交互的功能上有待完善,主要体现在:
1. 1. 用户输入语句前,控制台给出的提示信息不全面,如:

可以加个提示“账号密码之间用空格隔开”。
(虽然不用一个空格隔开,而用回车也可以实现,但是为了满足老师对本次项目提出的要求,可能加上这个提示会更好一点?)
1. 2. 生成试卷之后,没有相应的提示信息:

在生成试卷之后,建议给出提示,试卷生成成功,并指明生成试卷在本机的位置。同理,生成试卷失败也应给出失败的相关提示。
2. 对输出异常的处理不太完美

如上图所示,在输入异常语句“哈哈”后,程序虽然抛出错误提示异常,但直接退出对用户体验并不友好,此处可以加一个while循环语句,当用户输入异常时,可以抛出报错信息并让用户重新输入直到输入规范。
心得与总结
本次个人项目总体上并不难,但对比Bao同学代码后,发现了自己很多不足:
- 我写的代码不够“面向对象”,导致可维护性不够高。
- 实现的功能不够全面,比如给操作数加括号的功能。
- 部分函数编写比较繁琐复杂,技术不到位。
在拿到了Bao同学的代码之后,发现了许多值得学习的地方,虽然有一些不足,但基本无伤大雅,可以进一步完善。
在后续的组队编程中,我们会对已有项目进行优化和改进,在对代码编写更加规范的前提下,进一步完善功能。
附上本人源码:
https://github.com/Strolling707/MyGit
附上Bao同学源码:
https://github.com/ball-boom/CreateMathPaper

浙公网安备 33010602011771号