结对编程队友:软件2103-和政德
编程语言: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”的形式保存,每个账号一个文件夹。每道题目有题号,每题之间空一行;
6、个人项目9月17日晚上10点以前提交至创新课程管理系统。提交方式:工程文件打包,压缩包名为“几班+姓名.rar”。迟交2天及以内者扣分,每天扣20%。迟交2天及以上者0分。
附表-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的运算符 |
|
项目结构如下图
该同学项目结构较清晰,实现了题目要求,能正常运行各种难度的出题正常。

DateBase类的主要功能保存用户和密码,检查该用户是否存在。使用了List集合,使用List集合,List是基于Array存在的,需要耗费比Array相对更多的时间,以及更大的空间,用户数量变化是使用list集可以避免空间浪费和空间不足等问题,设计优秀,可用性强,使用效率高,操作简单

Main方法里分别调用了创建系统类,加载系统类,登录功能。

TeacherUser类定义了三个成员变量,用户名,密码账号类型。有参无参构造方法get,set方法。这些方法以后输入新的数据的检查用户信息的很方便。

PaperSystem类里面实现各种功能,

登录功能正常可以多次输入账户密码,输入错误可以重新输入。代码思路清晰。建议如果输入错账户,密码的时候输出一个提示。

生成卷子文件名格式特别标准,卷子生成完了以后他用了相对文件路径。换了台笔记本也很容易的找到题目位置。

处理右括号使用的方法很,平方后面数字与加减号之间可以放括号,有括号的的数量的与左括号。

成功生成,题目也符合要求。
队友代码分析:
使用了三个类 DataBase,Main ,PaperSystem,TeacherUser,完成了该项目,
TeacherUser类十分简洁,包含三个属性:账号名称,账号密码,账号类别。方法包括构造方法和获取这三个类别的方法。
缺点分析:
- 代码编写符合规范,各种关键字的命名方式也很正确,每个方法和类都写了注释,通过检查没有问题。
2.合理得将代码分成多个类,让每个类专注于特定的功能,整个代码清晰易读。
3.代码可复用性高,同一个方法可以被重复利用来实现想要的功能。
4.在保存文件时使用相对路径,代码有较高的可移植性和灵活性。
缺点:
有几个方法行数 超过了40行
切换难度的时候出现了一些问题有时候切换不了难度可能是jdk不一样了。
总结:
总的来说,该项目基本实现了项目需求中的所有要求,方法简洁,层层递进。很多函数的实现方法值得我去学习。后续可以优化测试用例,重构部分类的设计,以提升代码质量和扩展性