一、项目需求
1. 命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名、密码”,重新输入用户名、密码;
2. 登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学、初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题。每道题目的操作数在1-5个之间,操作数取值范围为1-100;
3. 题目数量的有效输入范围是“10-30”(含10,30,或-1退出登录),程序根据输入的题目数量生成符合小学、初中和高中难度的题目的卷子(具体要求见附表)。同一个老师的卷子中的题目不能与以前的已生成的卷子中的题目重复(以指定文件夹下存在的文件为准,见5);
4. 在登录状态下,如果用户需要切换类型选项,命令行输入“切换为XX”,XX为小学、初中和高中三个选项中的一个,输入项不符合要求时,程序控制台提示“请输入小学、初中和高中三个选项中的一个”;输入正确后,显示“”系统提示“准备生成XX数学题目,请输入生成题目数量”,用户输入所需出的卷子的题目数量,系统新设置的类型进行出题;
5. 生成的题目将以“年-月-日-时-分-秒.txt”的形式保存,每个账号一个文件夹。每道题目有题号,每题之间空一行;
二、结果测试
三、代码分析
优点:
- 变量命名规范,采用驼峰命名法,英文单词用词准确,让人一眼就可以看出变量名和类名的含义,相对于以前所用abc的变量命名,更有利开发的顺利进行,在今后的工程实践中应该增加自己代码的可读性,否则将会增加后期代码维护人员的工作量,导致工程效率的降低;
2. 对应功能实现相应的函数,对功能模块进行了划分,有利于代码的理解,模块化的开发更是在今后的学习实践中应该注意的,有效合理的模块化有利于节省开发时间,协同合作,提高工作效率,同时提高代码的重用性,降低重复无用的劳动可能。
3. 主函数整洁,利用函数之间的调用,逻辑清晰,代码简洁。
4. 重复文件的检索与丢弃,利用了字符串进行读取,并通过contain方法实现了对相同题目的查找,实现了题目要求的去重要求,但是字符串contain方法可以用hashset的查找方法进行替换,降低查找时间,提高查找效率,尤其在数据量较大的情况下优化效果更明显。
不足:
1. 缺少注释,对于其中一些代码、变量的理解起来不是很方便,在他人对代码进行维护时,会产生过多的理解时间,有效的代码注释可以帮助后期维护人员更好的定位问题点,理解作者思路,节省后期维护人员的时间,提高工程的效率。
2. 条件判断过多,在对用户进行判断时,全部使用条件判断,造成代码冗余,让人理解有一定的困难,可以通过字符串数组的形式保存已有的用户名地址优化代码,提高代码可读性和更有利于后期对用户信息的更改。
3. 代码不够精简化,过多利用条件判断,可以利用字符串数组或字符数组对符号进行封装,利用位置读取相应位置的符号,依此来减少代码量,精简代码。
四、总结
通过这次编程的训练,让我的编程实践能力得到了很大的提升,让我在有限的时间里用自己学过的知识完成了一次实际问题的解决,给我带来了巨大的成就感,也让我感受到编程的魅力和计算机的优异。通过阅读队友的代码,我从中看到了队友的优点和不足,也从中看到了自己身上的坏习惯,让我感受到了结对编程中给我们都带了一次提升的机会,相信在接下来的学习中这样的好习惯能让我受益终生。