- 代码:软件2102王珏
- 评价:软件2102刘良宸
一、项目介绍
用户:
小学、初中和高中数学老师。
功能:
1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名、密码”,重新输入用户名、密码;
2、登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学、初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题。每道题目的操作数在1-5个之间,操作数取值范围为1-100;
3、题目数量的有效输入范围是“10-30”(含10,30,或-1退出登录),程序根据输入的题目数量生成符合小学、初中和高中难度的题目的卷子(具体要求见附表)。同一个老师的卷子中的题目不能与以前的已生成的卷子中的题目重复(以指定文件夹下存在的文件为准,见5);
4、在登录状态下,如果用户需要切换类型选项,命令行输入“切换为XX”,XX为小学、初中和高中三个选项中的一个,输入项不符合要求时,程序控制台提示“请输入小学、初中和高中三个选项中的一个”;输入正确后,显示“”系统提示“准备生成XX数学题目,请输入生成题目数量”,用户输入所需出的卷子的题目数量,系统新设置的类型进行出题;
5、生成的题目将以“年-月-日-时-分-秒.txt”的形式保存,每个账号一个文件夹。每道题目有题号,每题之间空一行;
二、代码功能测试
登录及操作界面:
操作界面无错误信息,无逻辑错误
生成试卷:
生成的题目符合要求,每行以空行隔开且无重复题目
生成的试卷以时间为标题
综上可见功能基本完善,对错误的输入能做出反馈,程序能及时退出
三、代码评价与分析
题目生成类XXCT,CZCT,GZCT类:
其中CZCT和GZCT类中的出题方法过长且三个方法的代码逻辑有大部分相同,或许可以考虑将其中一些代码提取出来作为公共方法,以此提高代码可读性
三个方法均采用对String进行多次增添修改来生成完整的数学表达式题目,对String的多次修改可使用Stringbuilder类更易于操作
Main类:
程序主要功能以及主函数均存放在此类中,此类中包含的函数种类多且函数复杂,程序运行的逻辑中函数嵌套有些多,稍微影响了代码的可读性
获取历史试卷查重时使用了哈希表,极大地提高了检索数据时地效率
在涉及IO读写等方面都及时捕获了可能发生的 IOException,进行了异常处理
在获取时间时使用了Calendar类,因为Calendar得到的时间的数据类型是int型,这样又要通过String的转换函数转换为字符串,并且相加得到最终的时间字符串,以这样的一种方式得到时间字符串是在难免会代码偏多,运行时间变长。这里建议使用Date。
User类和GetMassage类
User类设计了用户的信息储存方式以及返回方式,GetMassage类中的方法可将txt文件中的用户账号信息读取,使得管理员能随时修改增添用户信息而程序不会发生错误
GetTest类和GetProblem类
GetTest类为虚类,其中定义了虚拟方法返回生成的题目字符串,GetProblem类继承自GetTest类,采用继承的方法,方便了后续方法的重构和修改
四、总结
优点:
有良好的注释习惯,每一个类与方法都有详细的注释
逻辑严谨,考虑了多种输入情况且具有功能保障
程序结构清晰,每个类都有其特定的功能。
通过随机数来生成不同的数学题目,增加了题目的多样性。
有足够的输入提示,并且运行时基本没有出现bug。
从代码编写上来看,基本符合代码规范。
缺点:
一些类的功能过于复杂,方法众多,而另一些类中的方法与其他方法重合部分高,或许应该平衡一下
对于类和变量还有方法命名不规范,采用了许多拼音以及大小写混用还有单字母命名的错误命名方法
有一些不太符合用户习惯的设计如在用户登录后切换为其他难度并出题后,系统会自动切换为该用户默认的出题模式,不太符合用户的一般习惯
总结:
王珏同学完成了基本完成了需求的功能,且在程序设计上有着自己独特且精巧的设计,但是在代码规范上还有进步的空间。通过王珏同学的代码我学到了不少东西,也希望在接下来的时间里我们能更上一层楼。
标签:题目,个人,项目,代码,用户,生成,互评,XX,输入 From: https://www.cnblogs.com/kirakira1918/p/17718530.html