个人项目互评

发布时间 2023-09-22 02:41:34作者: dbh0901

个人项目互评

一、项目需求

  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的运算符

 

二、代码分析

以下选择几段比较有代表性的代码进行分析

1.主函数

主函数用于实现用户登录和题目生成的功能,使用了异常处理:在`main`方法中使用了`try-catch`语句,可以捕获可能出现的异常,提高程序的健壮性

2.ganerate类

①随机生成初高中题目(小学同理)

代码提供了添加符号、添加括号等功能,可以生成带有符号和括号的数学公式。代码使用`Random`类生成随机数,通过随机选择符号、括号长度和位置等,可以生成多样化的数学公式

`generateMiddle`方法用于生成中学水平的数学题目,而`generateSenior`方法用于生成高中水平的数学题目。这两个方法的参数包括文件名和要生成的题目数量。在每个方法中,代码首先创建一个`SimpleDateFormat`对象来生成时间戳,用于标识生成的题目文件的时间。然后通过`Random`类创建一个随机数生成器。接下来,代码使用一个`HashSet`集合来存储生成的题目,确保生成的题目不会重复。然后,代码进入一个循环,直到集合中的题目数量达到指定数量为止。在每次循环中,代码使用随机数生成操作数的数量,并创建一个字符串数组来存储这些操作数。然后,代码使用`addmiddle`或`addsenior`方法为每个操作数添加符号(根据方法所属的是`generateMiddle`还是`generateSenior`来选择)。接下来,代码调用`addbracket`方法将操作数和操作符组合成一个完整的数学公式,并将生成的公式添加到集合中。完成循环后,代码使用迭代器遍历集合中的题目,并将题目写入文件。每个题目的格式为题目序号+题目内容。

②将文件写入题目

代码中使用`FileWriter`类将公式写入文件

3.login类

①`read()` 方法

从文件中读取教师信息并创建 `teacher` 对象,然后将对象添加到 `teachers` 数组列表中。该方法使用 `Scanner` 类从名为 "teacher.txt" 的文件中逐行读取信息,并使用空格将每行内容分割为年级、姓名和密码。然后,将这些信息用于创建 `teacher` 对象,并将对象添加到 `teachers` 列表中

②`judge()` 方法

用于判断用户输入的用户名和密码是否与已存储的教师信息匹配。方法遍历 `teachers` 列表中的每个 `teacher` 对象,与用户输入的用户名和密码进行比较。如果找到匹配的教师信息,则返回该教师的年级和姓名字符串。如果没有找到匹配的教师信息,则返回 "0" 表示登录失败。

4.teacher类

`teacher` 类继承自 `users` 类的代码。`teacher` 类具有一个构造函数,用于初始化年级、姓名和密码属性。构造函数接受三个参数:`grade`、`name` 和 `password`,并将它们分别赋值给 `this.grade`、`this.name` 和 `this.password`。此外,`teacher` 类还提供了三个 getter 方法:`getname()`、`getgrade()` 和 `getpassword()`,用于获取教师对象的姓名、年级和密码属性的值。

5.user类

定义了三个受保护的实例变量 `password`、`grade` 和 `name`

三、代码优缺点

代码使用了类和方法的封装,使得逻辑更加清晰,易于理解和维护。类和方法的封装,使得逻辑更加清晰,易于理解和维护。将不同的功能封装在不同的类中,提高了代码的可重用性和可扩展性。缺点也是存在的,比如部分代码注释和命名不清晰。但是整体代码的结构和运行没有问题,是一个完整且优秀的项目。