软工大作业报告

一、面向对象开发工具介绍

1)Intellij IDEA的安装与使用:

1、在官网下载Intellij IDEA

2、按照不走安装即可,最后可以选择免费试用

3、新建空项目

即可开始Intellij IDEA的使用。

2) 代码编辑、编译、运行的基本操作;

代码编辑:直接在代码框上输入/删除即可。

编译:点击右上角的“构建项目”键即可。

运行:点击右上角的“运行”键即可。

二、需求分析与设计

1) 教师端签到应用软件的需求分析

通过对高校实际需求的研究,将班级考勤管理系统的功能模块分为系统基础支持模块、班级学生教师档案支持模块、考勤签到支持模块、学生请假支持模块,在使用场景上分为浏览器PC端和微信小程序端。

2)系统基础支持模块

系统基础支持模块包括支撑班级考勤管理系统运行的管理模块。比如系统的菜单管理,维护了菜单的名称、前端路由、前端组件信息,是支撑系统运行的基础内容。比如日志模块,用于基础学生的登陆、打卡、请假操作,用于留档。

3)班级学生教师支持模块

班级档案、学生档案、教师档案是班级考勤管理系统的基础档案信息。班级是学生的承载体,班级和学生是一对多的关系。

班级档案包括各个年级段行政班级的档案,包含了班级名称、班级代码、年级、班主任、学生数量、学习委员等,可以通过此模块进行班级基础数据的维护。

学生档案管理是对班级内学生的信息进行管理,其中包括各个班级下学生的档案,包含了学生姓名、性别、手机号、年龄等信息,可以通过此模块进行学生基础数据的维护。

教师档案管理是对高校在职教师的信息进行管理,其中包括各分院在职教师的档案,包含了教师姓名、学历、职称、开始工作时间等,可以通过此模块进行教师基础数据的维护。

4)考勤签到管理

考勤签到管理模块,录入了教师发起的考勤信息,包括考勤的开始时间、结束时间、考勤缘由、参与班级等,可以通过此模块来发起考勤、操作考勤补录、查询考勤报表。

5)学生请假管理

高校学生可以在此模块中发起请假,该学生所属班级的班主任可以对请假单进行审批,学习委员可以查看班级学生的请假情况,班级考勤系统所有关于请假的功能,都在学生请假管理下。

三、数据库

1、用户配置表

字段名称

数据类型

长度

字段含义

备注

nickname

Varchar

255

用户姓名

非空

Username

Varchar

255

登陆账号

非空

Password

Varchar

255

登陆密码

非空

Mobile

Varchar

255

手机号

非空

Email

Varchar

255

邮箱

非空

Age

Int

10

年龄

departmentId

Varchar

255

部门ID

部门表外键

2、学生档案表

字段名称

数据类型

长度

字段含义

备注

Id

Varchar

255

学生编号

非空

userNa

Varchar

255

学生姓名

非空

studyNumber

Varchar

255

学生学号

非空

sex

Varchar

255

学生性别

非空

mobile

Varchar

255

学生电话

非空

Classid

Varchar

255

学生班级ID

班级档案表外键

Remark

Varchar

255

备注

userId

Varchar

255

用户ID

用户档案表外键

3、教师档案表

字段名称

数据类型

长度

字段含义

备注

userName

Varchar

255

教师姓名

非空

workNumber

Varchar

255

教师工号

非空

Mobile

Varchar

255

教师手机号

非空

Remark

Varchar

255

备注

userId

Varchar

255

用户ID

用户档案表外键

ClassId

Varchar

255

班主任班级

班级档案表外键

Id

Varchar

255

教师ID

主键

4、学生请假表:

字段名称

数据类型

长度

字段含义

备注

Id

Varchar

255

请假编号

主键

Type

Varchar

255

请假类型

非空

startTime

Varchar

255

请假开始时间

非空

EndTime

Varchar

255

请假结束时间

非空

Status

Varchar

255

请假状态

非空

Reason

Varchar

255

请假理由

非空

studentId

Varchar

255

学生ID

学生表外键

Remark

Varchar

255

备注

5、考勤档案表:

字段名称

数据类型

长度

字段含义

备注

Id

Varchar

255

考勤编号

主键

teacherId

Varchar

255

发起教师ID

教师表外键

Title

Varchar

255

考勤名称

非空

Date

Varchar

255

发起日期

非空

classId

Varchar

255

班级ID

班级表外键

startTime

Varchar

255

开始时间

非空

endTime

Varchar

255

结束时间

非空

Type

Varchar

255

考勤类型

非空

number

Varchar

255

签到答案

非空

Remark

Varchar

255

考勤备注

Status

Varchar

255

考勤状态

非空

 

四、界面设计与实现

  我们的班级管理系统使用了Iview组件库,该组件库封装了大量的前端组件,只需要复制已有的组件代码,再进行简单的修改即可搭建优美且实用的前端界面。

  下图为登录界面,师生可以输入账号+密码的方式进行登录,为保证安全设置了图形验证码验证,以保护系统不被频繁请求。

 下图为首页界面,高校管理员、教师、学生都可以进入系统,分别拥有不同的菜单权限,分别可以执行不同身份需要的操作。

五、教师类设计与实现

TeacherArchivesController:

这段代码是一个Java Spring Boot框架下的教师档案管理接口的控制器类。下面是代码的主要内容:

  1. 导入了所需的类和包,包括基础工具类、实体类、服务类等。
  2. 使用@RestController注解将该类声明为控制器,并使用@RequestMapping注解指定了该控制器的基本路径。
  3. 通过@Autowired注解注入了IClassArchivesService和ITeacherArchivesService两个服务类的实例。
  4. 定义了多个处理HTTP请求的接口方法,使用@RequestMapping注解指定了请求路径和请求方法,并使用@ApiOperation注解提供了接口说明。
  5. 实现了查询单个教师档案、查询所有教师档案、分页查询教师档案、新增或修改教师档案、删除教师档案等功能。
  6. 在查询教师档案的接口方法中,根据传入的条件进行查询,并使用iClassArchivesService查询关联的班级档案信息。然后将查询结果封装到ResultUtil中返回。
  7. 在设置班主任的接口方法中,根据传入的班级ID和教师ID,查询班级档案和教师档案,并进行相应的处理和更新。

TeacherArchives:

  1. 这段代码定义了一个名为TeacherArchives的教师档案实体类。下面是代码的主要内容:
  2. 导入了所需的类和包,包括基础类、注解、实体类等。
  3. 使用@Data注解,自动生成了类的Getter、Setter、equals、hashCode和toString方法。
  4. 使用@Entity注解,指示该类是一个JPA实体类。
  5. 使用@DynamicInsert和@DynamicUpdate注解,表示在插入和更新数据时,只插入和更新非null字段。
  6. 使用@Table注解,指定了数据库表的名称。
  7. 使用@TableName注解,指定了对应的MyBatis-Plus的表名。
  8. 使用@ApiModel注解,提供了对该实体类的说明。
  9. 继承了ZwzBaseEntity类,该类是一个基础实体类,可能包含了一些共有的字段和方法。
  10. 定义了教师档案的属性,包括教师姓名(userName)、教师工号(workNumber)、教师手机(mobile)、备注(remark)和用户ID(userId)。
  11. 使用@Transient注解,表示该属性不会映射到数据库表中。
  12. 使用@TableField注解,设置了在数据库表中对应的字段名。
  13. 使用@ApiModelProperty注解,提供了对属性的说明。

TeacherArchivesMapper:
这段代码定义了一个教师档案的Mapper接口,用于实现与数据库的交互操作。下面是代码的主要内容:

  1. 导入了所需的类和包,包括教师档案实体类和MyBatis-Plus的BaseMapper接口。
  2. 定义了TeacherArchivesMapper接口,并继承了BaseMapper<TeacherArchives>接口。
  3. 泛型参数指定为TeacherArchives,表示该Mapper接口操作的是TeacherArchives实体类。
  4. 通过继承BaseMapper接口,该接口已经包含了许多基本的数据库操作方法,如插入、更新、删除、查询等。
  5. 由于继承了BaseMapper接口,无需再在该接口中编写具体的SQL语句,MyBatis-Plus会根据接口的方法名和实体类的属性进行自动生成SQL语句。

ITeacherArchivesService:
这段代码定义了一个教师档案的服务接口,用于定义教师档案相关的业务方法。下面是代码的主要内容:

  1. 导入了所需的类和包,包括教师档案实体类和MyBatis-Plus的IService接口。
  2. 定义了ITeacherArchivesService接口,并继承了IService<TeacherArchives>接口。
  3. 泛型参数指定为TeacherArchives,表示该服务接口操作的是TeacherArchives实体类。
  4. 通过继承IService接口,该接口已经包含了常用的数据库操作方法,如插入、更新、删除、查询等。
  5. 由于继承了IService接口,该接口可以通过调用相应的方法来实现对教师档案的管理和操作。

ITeacherArchivesServiceImpl:
这段代码是教师档案服务的实现类,实现了ITeacherArchivesService接口。下面是代码的主要内容:

  1. 导入了所需的类和包,包括教师档案实体类、教师档案Mapper接口、MyBatis-Plus的ServiceImpl类等。
  2. 使用@Service注解将该类声明为Spring的服务类。
  3. 使用@Transactional注解表示该类中的方法需要进行事务管理。
  4. 定义了ITeacherArchivesServiceImpl类,并继承了ServiceImpl<TeacherArchivesMapper, TeacherArchives>类,同时实现了ITeacherArchivesService接口。
  5. 泛型参数指定为TeacherArchivesMapper和TeacherArchives,表示该服务实现类操作的是TeacherArchives实体类,并使用TeacherArchivesMapper进行数据访问。
  6. 通过继承ServiceImpl类,该类已经实现了ITeacherArchivesService接口中定义的方法,并提供了一些常用的数据库操作,如插入、更新、删除、查询等。

TeacherController:
这段代码是一个教师管理的控制器类,用于处理与教师相关的请求。下面是代码的主要内容:

  1. 导入了所需的类和包,包括日志记录相关的类、工具类、实体类、服务类等。
  2. 使用@RestController注解将该类声明为Spring的REST控制器。
  3. 使用@Api注解对该控制器进行标记,表示该控制器是教师管理接口。
  4. 使用@RequestMapping注解指定了请求的基础路径为/zwz/teacher。
  5. 使用@Autowired注解将ITeacherService接口的实现类注入到该控制器中。
  6. 定义了多个处理HTTP请求的方法,每个方法都使用相应的注解进行标记,如@ApiOperation、@RequestMapping等。
  7. 每个方法对应一个具体的教师管理操作,如查询单条教师、查询全部教师个数、查询全部教师等。
  8. 方法中通过调用ITeacherService接口的方法来处理具体的业务逻辑,如查询、新增、编辑、删除教师等操作。
  9. 在一些方法上使用了@SystemLog注解,用于记录日志信息。
  10. 还有一个方法用于查询图表数据,根据教师的工资信息生成一个包含标题、类型和值的AntvVo对象列表,并返回给客户端。

Teacher:
这段代码是一个教师实体类,表示教师对象的属性和方法。下面是代码的主要内容:

  1. 导入了所需的类和包,包括基础类、注解类、数据类型类等。
  2. 使用@Data注解,该注解是Lombok库提供的注解,用于自动生成属性的getter、setter、toString、equals等方法。
  3. 使用@Entity注解,表示该类是一个实体类,用于持久化操作。
  4. 使用@DynamicInsert和@DynamicUpdate注解,表示在执行插入和更新操作时,动态生成相应的SQL语句,只插入或更新非空字段。
  5. 使用@Table注解指定数据库中对应的表名为a_teacher。
  6. 使用@TableName注解指定MyBatis-Plus框架中对应的表名为a_teacher。
  7. 使用@ApiModel注解对该实体类进行标记,表示该类是一个API模型类。
  8. 继承了ZwzBaseEntity类,该类是基础实体类,可能包含一些公共的属性和方法。
  9. 定义了多个属性,表示教师的姓名、学历、年龄、毕业院校、工资、在职状态、签名、个人简历、备注等信息。
  10. 每个属性上使用了@ApiModelProperty注解,用于在Swagger文档中对属性进行描述。

TeacherMapper:
这段代码是一个教师Mapper接口,用于定义与教师数据库表相关的操作。下面是代码的主要内容:

  1. 导入了所需的类和包,包括MyBatis-Plus的BaseMapper接口和教师实体类。
  2. 定义了一个接口TeacherMapper,并继承了BaseMapper<Teacher>接口。
  3. BaseMapper<T>是MyBatis-Plus提供的通用Mapper接口,提供了一些常用的数据库操作方法,如插入、更新、删除、查询等。
  4. 泛型参数Teacher指定了该Mapper操作的实体类为Teacher,即对教师表进行操作。
  5. 该接口没有额外的方法定义,只继承了BaseMapper接口中的方法。
  6. 通过继承BaseMapper<Teacher>接口,可以直接使用继承的方法来进行教师表的增删改查等数据库操作。

ITeacherService
这段代码是一个教师Service接口,用于定义教师相关的服务方法。下面是代码的主要内容:

  1. 导入了所需的类和包,包括MyBatis-Plus的IService接口和教师实体类。
  2. 定义了一个接口ITeacherService,并继承了IService<Teacher>接口。
  3. IService<T>是MyBatis-Plus提供的通用Service接口,提供了一些常用的服务方法,如插入、更新、删除、查询等。
  4. 泛型参数Teacher指定了该Service操作的实体类为Teacher,即对教师表进行操作。
  5. 该接口没有额外的方法定义,只继承了IService接口中的方法。
  6. 通过继承IService<Teacher>接口,可以直接使用继承的方法来进行教师表的增删改查等服务操作。

ITeacherServiceImpl
这段代码是教师Service接口的实现类,用于实现教师相关的服务方法。下面是代码的主要内容:

  1. 导入了所需的类和包,包括教师Mapper接口、教师实体类、教师Service接口等。
  2. 使用@Slf4j注解,该注解是Lombok库提供的注解,用于自动生成日志记录的相关代码。
  3. 使用@Service注解,表示该类是一个Spring的服务类。
  4. 使用@Transactional注解,表示该类中的方法都需要在事务中执行。
  5. 类名为ITeacherServiceImpl,实现了ITeacherService接口,并继承了MyBatis-Plus的ServiceImpl<TeacherMapper, Teacher>类。
  6. 泛型参数TeacherMapper指定了该实现类使用的Mapper接口为TeacherMapper,泛型参数Teacher指定了该实现类操作的实体类为Teacher。
  7. 使用@Autowired注解将TeacherMapper注入到该实现类中。
  8. 实现了ITeacherService接口中定义的方法,具体的实现通过调用TeacherMapper中的方法来完成。

六、学生类设计与实现

StudentArchivesController
一个Java类StudentArchivesController,它是一个控制器类,用于处理与学生档案管理相关的请求。该类包含了一些方法,每个方法处理不同的请求路径和请求方法,并提供相应的功能。

这个控制器类实现了以下功能:

1、添加学生到班级:通过班级id和学生id,将学生添加到班级中。如果班级或学生不存在,则返回错误消息。

2、设置班级学习委员:通过班级id和学生id,将学生设置为班级的学习委员。如果班级或学生不存在,则返回错误消息。

3、分页查询学生档案:根据查询条件查询学生档案,并进行分页。查询结果包括学生档案、班级信息和班主任信息。

4、初始化学生档案到用户模块:将现有的学生档案初始化到用户模块中,即创建对应的用户并关联学生档案。

5、新增学生档案:根据提供的学生档案信息新增学生档案,并创建对应的用户。

6、编辑学生档案:根据提供的学生档案信息编辑已存在的学生档案。

7、删除学生档案:根据提供的学生id列表删除学生档案,并同时删除对应的用户。

此外,代码中还包含了一个用于校验用户名、手机号和邮箱是否已存在的辅助方法。

StudentArchives:
这段代码实现了一个Java实体类StudentArchives,用于表示学生档案的信息,并与数据库表进行映射。

具体实现的功能包括:

1、定义实体类:通过class StudentArchives定义了一个学生档案的实体类。

2、继承关系:StudentArchives类继承自ZwzBaseEntity类,可能是一个基础实体类,继承了基本的字段和方法。

3、注解和注释:使用了一些注解来提供额外的信息和配置。@Entity和@Table注解指示该类是一个JPA实体类,并指定了数据库表的名称。@ApiModel和@ApiModelProperty注解用于在生成API文档时提供模型和属性的描述信息。

4、属性定义:定义了学生档案的各种属性,包括学生姓名、学号、性别、电话、班级ID、备注和用户ID等。

5、非持久化字段:className和classMain属性使用了@Transient注解,表示这些字段不会映射到数据库表中。它们用于存储学生档案关联的班级名称和班主任名称,但不作为数据库表的列。

6、表名映射:@Table和@TableName注解分别指定了数据库表的名称为a_student_archives。

7、lombok注解:使用了@Data注解,通过lombok库自动生成了常见的getter、setter和toString方法。

StudentArchivesMapper:
这段代码实现了一个StudentArchivesMapper接口,用于对学生档案进行数据库操作。

具体实现的功能包括:

1、继承关系:StudentArchivesMapper接口继承了BaseMapper<StudentArchives>接口,其中BaseMapper是MyBatis Plus框架提供的一个通用Mapper接口。

2、泛型类型:BaseMapper<StudentArchives>中的泛型类型指定了该Mapper接口操作的实体类为StudentArchives,也就是学生档案实体类。

3、数据库操作:通过继承BaseMapper接口,StudentArchivesMapper接口继承了一系列基本的数据库操作方法,如插入、更新、删除和查询等。这些方法的具体实现由MyBatis Plus框架提供。

IStudentArchivesService:

这段代码实现了一个接口IStudentArchivesService,用于定义学生档案的服务接

口。

具体实现的功能包括:

1、继承关系:IStudentArchivesService接口继承了IService<StudentArchives>接口,其中IService是MyBatis Plus框架提供的一个通用服务接口。

2、泛型类型:IService<StudentArchives>中的泛型类型指定了该服务接口操作的实体类为StudentArchives,也就是学生档案实体类。

3、服务方法定义:IStudentArchivesService接口可以定义一些特定的服务方法,用于处理与学生档案相关的业务逻辑。这些方法的具体实现由实现该接口的类提供。

IStudentArchivesServiceImpl:

这段代码实现了学生档案服务接口IStudentArchivesService的具体实现类

IStudentArchivesServiceImpl。

具体实现的功能包括:

1、继承关系:IStudentArchivesServiceImpl类继承自ServiceImpl<StudentArchivesMapper, StudentArchives>类,其中ServiceImpl是MyBatis Plus框架提供的一个通用服务实现类。

2、实现接口:IStudentArchivesServiceImpl类实现了IStudentArchivesService接口,通过继承ServiceImpl类,已经实现了IStudentArchivesService接口中定义的方法。

3、依赖注入:通过使用@Service注解,将IStudentArchivesServiceImpl类标识为一个服务类,并由Spring容器进行管理。这样可以通过依赖注入的方式在其他组件中使用该服务。

4、事务管理:通过使用@Transactional注解,对该服务类中的方法进行事务管理。这样可以确保在方法执行期间的数据库操作符合事务的 ACID 特性。

5、Mapper依赖:在泛型参数中指定了StudentArchivesMapper,表示该服务类依赖于StudentArchivesMapper接口来进行数据库操作。通过依赖注入的方式,可以在该服务类中使用StudentArchivesMapper接口提供的方法来操作学生档案的数据。

StudentController

这段代码是一个Java类,命名为StudentController,是一个学生管理接口的控制

器。它使用了Spring MVC框架的注解来定义接口的路径和请求方法,并通过

@Autowired注解注入了IStudentService接口的实例。

下面是代码的主要结构和功能:

1、导入了一些类和包,包括日志、分页工具、结果处理工具等。

2、使用@RestController注解将该类标记为RESTful风格的控制器,它可以处理HTTP请求并返回JSON格式的响应。

3、使用@Api注解为该控制器添加了一个描述,说明它是学生管理接口。

4、使用@RequestMapping注解定义了该控制器的基本路径"/zwz/student"。

5、使用@Transactional注解将该控制器的所有方法都放在一个事务中进行处理。

6、声明了一个私有字段IStudentService iStudentService,并通过@Autowired注解自动注入该字段的实例。

7、定义了一系列接口方法,包括查询单个学生、查询全部学生个数、查询全部学生、分页查询学生、增改学生、新增学生、编辑学生和删除学生。

8、每个接口方法都使用了@SystemLog注解,该注解用于记录系统日志,包括操作描述、日志类型和操作类型。

9、每个接口方法都使用了@RequestMapping注解定义了其具体的路径和请求方法。

10、每个接口方法都使用了@ApiOperation注解来描述该接口的功能。

11、接口方法的具体实现根据功能的不同,使用了相应的业务逻辑操作,例如查询数据库、新增数据、更新数据等。

12、大部分接口方法都返回了一个Result对象,Result是一个自定义的通用结果类,用于封装接口的返回结果和状态码。

Student

这段代码定义了一个名为Student的实体类,用于表示学生对象。以下是代码实现

的主要内容:

1、导入了一些类和包,包括基础类、注解、实体类相关的注解等。

2、使用@Data注解,该注解是Lombok库提供的一个注解,用于自动生成getter、setter、toString等方法。

3、使用@Entity注解,表示该类是一个实体类,将会与数据库中的表进行映射。

4、使用@Table注解,指定了数据库表的名称为"a_student"。

5、使用@DynamicInsert注解,表示在插入数据时,会动态生成INSERT语句,只插入非空字段。

6、使用@DynamicUpdate注解,表示在更新数据时,会动态生成UPDATE语句,只更新非空字段。

7、使用@TableName注解,指定了MyBatis-Plus框架使用的表名为"a_student"。

8、使用@ApiModel注解,用于对实体类进行描述,其中"value"属性指定了该实体类的名称为"学生"。

9、继承了ZwzBaseEntity类,该类是一个基础实体类,可能包含一些通用字段,如id、创建时间、修改时间等。

10、声明了一些字段,包括姓名、性别、年龄、学号和学校,每个字段都使用了@ApiModelProperty注解来描述字段的含义。

StudentMapper:

这段代码定义了一个名为StudentMapper的接口,该接口继承自BaseMapper接口,

并指定了泛型类型为Student。以下是代码实现的主要内容:

1、导入了一些类和包,包括BaseMapper接口和Student实体类。

2、定义了一个接口StudentMapper,并声明了继承自BaseMapper<Student>。

3、BaseMapper是MyBatis-Plus框架提供的一个通用Mapper接口,它提供了一些常用的数据库操作方法,如插入数据、更新数据、删除数据和查询数据等。

4、通过继承BaseMapper<Student>,StudentMapper接口就拥有了BaseMapper中定义的这些通用方法。

5、由于StudentMapper是一个接口,没有具体的方法实现,它只是定义了接口中应该包含的方法签名。

6、StudentMapper的实际实现是由MyBatis-Plus框架在运行时动态生成的,它会根据接口的定义自动创建相应的SQL语句,并执行数据库操作。

IStudentService:

这段代码定义了一个名为IStudentService的接口,该接口继承自IService接口,

并指定了泛型类型为Student。以下是代码实现的主要内容:

1、导入了一些类和包,包括IService接口和Student实体类。

2、定义了一个接口IStudentService,并声明了继承自IService<Student>。

3、IService是MyBatis-Plus框架提供的一个通用Service接口,它提供了一些常

用的数据库操作方法,如插入数据、更新数据、删除数据和查询数据等。

4、通过继承IService<Student>,IStudentService接口就拥有了IService中定义的这些通用方法。

5、由于IStudentService是一个接口,没有具体的方法实现,它只是定义了接口中应该包含的方法签名。

6、IStudentService接口可以被具体的实现类实现,实现类需要提供具体的方法实现,用于处理与Student实体类相关的业务逻辑。

IStudentServiceImpl:

这段代码实现了一个名为IStudentServiceImpl的类,该类实现了IStudentService

接口,并继承了ServiceImpl类。以下是代码实现的主要内容:

1、导入了一些类和包,包括StudentMapper接口、Student实体类、IStudentService接口等。

2、使用@Slf4j注解,该注解是Lombok库提供的一个注解,用于自动生成日志相关的代码。

3、使用@Service注解,将该类标记为一个服务类,表示它是业务逻辑的实现类。

4、使用@Transactional注解,将该类的所有方法都放在一个事务中进行处理。

5、类定义了一个私有字段StudentMapper studentMapper,并通过@Autowired注解进行自动注入。

6、通过继承ServiceImpl<StudentMapper, Student>,IStudentServiceImpl类获得了ServiceImpl中定义的一些通用的数据库操作方法的实现。

7、IStudentServiceImpl类还实现了IStudentService接口,该接口定义了一些与Student实体类相关的业务逻辑方法。

8、IStudentServiceImpl类可以根据需要重写或调用ServiceImpl中的通用方法,来实现具体的业务逻辑操作。

9、通过@Autowired注解,将StudentMapper的实例注入到studentMapper字段中,以便在方法中使用该实例进行数据库操作。

七、签到管理类设计与实现

ClassArchivesController

这段代码实现了一个名为ClassArchivesController的RESTful API控制器类,用

于处理班级档案管理相关的请求。以下是代码实现的主要内容:

1、导入了一些类和包,包括各种实体类、服务类、工具类等。

2、使用@Slf4j注解,该注解是Lombok库提供的一个注解,用于自动生成日志相关的代码。

3、使用@RestController注解,将该类标记为一个控制器类,表示它可以处理HTTP请求并返回相应的结果。

4、使用@Api注解,定义了班级档案管理接口的描述信息。

5、使用@RequestMapping注解,指定了控制器中处理请求的基本路径。

6、类定义了一些私有字段,通过@Autowired注解进行自动注入,包括

IClassArchivesService、IStudentArchivesService和ITeacherArchivesService

的实例。

7、该类实现了多个请求处理方法,每个方法对应一个具体的请求路径和请求方法,并使用@ApiOperation注解对方法进行描述。

8、请求处理方法根据具体的业务逻辑调用相应的服务方法,进行数据查询、增加、修改和删除等操作。

9、返回结果使用ResultUtil类进行封装,以统一的格式返回响应结果。

10、通过@Transactional注解,将类中的方法都放在一个事务中进行处理。

11、在查询班级档案的方法中,使用QueryWrapper进行条件查询,并通过PageUtil对分页信息进行处理。

12、在查询班级档案的方法中,根据关联的学生档案和教师档案进行信息的补全。

13、在新增或修改班级档案的方法中,调用服务类的saveOrUpdate方法进行数据的保存或更新。

14、在删除班级档案的方法中,通过循环调用服务类的removeById方法进行数据的删除。

ClassArchives:

这段代码实现了一个名为ClassArchives的班级档案实体类。以下是代码实现的主

要内容:

1、导入了一些类和包,包括基类、注解、实体类等。

2、使用@Data注解,自动生成getter和setter方法,以及equals、hashCode和toString方法。

3、使用@Entity注解,将该类标记为一个实体类,表示它映射到数据库中的一个表。

4、使用@DynamicInsert注解,表示在插入数据时,只插入非null字段对应的列。

5、使用@DynamicUpdate注解,表示在更新数据时,只更新非null字段对应的列。

6、使用@Table注解,指定了实体类对应的表名。

7、使用@TableName注解,指定了实体类对应的表名,这个注解是MyBatis-Plus框架提供的。

8、使用@ApiModel注解,对实体类进行描述。

9、继承了ZwzBaseEntity类,表示该实体类是一个基类实体类,可能包含一些公共字段和方法。

10、定义了一些私有字段,对应于班级档案的各个属性,如班级名称、年级、学习委员ID、班主任ID、备注等。

11、使用@Transient注解,表示这两个字段不在数据库表中存在,是临时计算得到的字段。

12、使用@TableField注解,指定了这两个临时字段在数据库表中不存在。

13、使用@ApiModelProperty注解,对实体类的属性进行描述,用于生成API文档。

ClassArchivesMapper:

这段代码定义了一个名为ClassArchivesMapper的接口,它是一个MyBatis-Plus

的Mapper接口。以下是代码实现的主要内容:

1、导入了一些类和包,包括实体类和MyBatis-Plus的BaseMapper接口。

2、接口继承了BaseMapper<ClassArchives>,表示该接口是ClassArchives实体类的Mapper接口,用于对ClassArchives实体类进行数据库操作。

3、通过泛型指定了BaseMapper的类型参数为ClassArchives,这样在接口中可以使用BaseMapper提供的各种数据库操作方法,如插入、更新、删除和查询等。

4、该接口中没有定义任何方法,因为BaseMapper中已经包含了常用的数据库操作方法,可以直接使用。

IClassArchivesService:

这段代码定义了一个名为IClassArchivesService的接口,它是一个服务接口。以

下是代码实现的主要内容:

1、导入了一些类和包,包括实体类和MyBatis-Plus的IService接口。

2、接口继承了IService<ClassArchives>,表示该接口是ClassArchives实体类的服务接口,用于定义对ClassArchives实体类的业务逻辑。

3、通过泛型指定了IService的类型参数为ClassArchives,这样在接口中可以使用IService提供的各种服务方法,如插入、更新、删除和查询等。

4、该接口中没有定义任何方法,因为IService中已经包含了常用的服务方法,可以直接使用。

IClassArchivesServiceImpl:

这段代码实现了一个名为IClassArchivesServiceImpl的服务实现类,它是

IClassArchivesService接口的具体实现。以下是代码实现的主要内容:

1、导入了一些类和包,包括实体类、Mapper接口、服务接口、服务实现类等。

2、使用@Service注解,将该类标记为一个服务实现类,表示它提供了IClassArchivesService接口定义的具体服务实现。

3、使用@Transactional注解,将该类中的方法都放在一个事务中进行处理。

4、类继承了ServiceImpl<ClassArchivesMapper, ClassArchives>,表示该类是ClassArchives实体类的服务实现,同时也是IClassArchivesService接口的具体实现。

5、通过泛型指定了ServiceImpl的类型参数,第一个参数为ClassArchivesMapper,表示使用ClassArchivesMapper作为数据访问层的Mapper接口;第二个参数为ClassArchives,表示操作的实体类是ClassArchives。

6、该类中没有定义任何方法,因为ServiceImpl中已经包含了常用的服务方法,可以直接使用。

八、主程序设计与实现

Web管理系统的设计与实现

(1)登陆模块的功能设计

下图为web端班级考勤管理系统的登录界面,师生可以输入自己的工号/学号+密码的方式进行登陆,为了保证系统安全还设置了图形验证码验证,图形验证码是为了保护系统的接口不被频繁请求,维护系统的安全性。

登录系统界面

高校管理员、教师、学生都可以通过登陆模块进入系统,分别拥有者不同的菜单权限。对于高校管理员可以对系统基础的模块进行维护,对高校班级、教师、学生的数据进行增改,有权查询系统的登陆日志和有关请假、考勤的全部数据,拥有最高的权限。教师可以发起课堂签到,以及审核学生提交的请假单。学生的菜单权限则包括参与签到、发起请假、查询自己历史的请假单。

用户登录之后默认进入首页,班级考勤管理系统使用了IView组件库,该组件库封装了大量的现成前端组件,只需复制组件代码,进行少量的修改即可搭建前端界面。在首页中存放了六张图,提高界面的美观性。

首页

 

(2)高校管理员模块的功能设计

高校管理员进入系统之后,第一个大模块就是数据中心。数据中心模块包括了班级考勤系统最基础的功能,比如系统菜单、登陆角色权限、操作日志等等,给系统提供了数据支持,其中权限菜单配置页面如图所示。

系统基础模块角色权限修改

 第二大模块就是班级学生模块,其中包括了班级档案、学生档案、教师档案三个子模块。其中班级档案支持模块界面如图5-4所示,班级档案包含了行政班级的信息,其中中间区域上部分含有添加、搜索、筛选功能按钮,下方显示班级的列表,点击班级所在行的“查看学生”,可以查询当前班级下有哪些学生;点击“添加学生”按钮,可以从非本班学生中添加学生到此班级;点击“设置学习委员”按钮,可以选择本班学生作为学习委员;点击“设置班主任”按钮,可以从教师档案中选择教师作为本班班主任。同样也包含了班级的一些基本信息,如班级名称、班级代码、备注等,管理人员可以点击右侧的编辑按钮对班级基础信息进行修改操作,也可以点击删除按钮来删除整个班级。

班级档案模块实现

同理,学生管理档案如图5-5所示。高校管理员可以对学生的具体数据进行查询,支持根据学生姓名进行查询,在左上角输入框输入学生的姓名后,点击搜索按钮即可实现模拟查询功能。

点击每一行学生的编辑按钮,可以对学生的现有数据进行编辑。点击每一行学生数据的设置班级按钮,可以为学生设置所在的班级。

学生管理模块

在模块中,管理员也可以点击添加按钮,实现添加学生,在输入完成学生的项目、学号、电话、性别后,点击提交并保存即可完成学生的添加操作,如下图所示。

添加学生档案的实现

新增学生代码

@RequestMapping(value = "/insert", method = RequestMethod.POST)

@ApiOperation(value = "新增学生档案")

public Result<StudentArchives> insert(StudentArchives studentArchives){

    // 校验是否已存在

    checkUserInfo(studentArchives.getStudyNumber(), studentArchives.getMobile(), studentArchives.getMobile() + "@qq.com");

    User user = new User();

    user.setUsername(studentArchives.getStudyNumber());

    user.setNickname(studentArchives.getUserName());

    user.setPassword(new BCryptPasswordEncoder().encode("123456"));

    user.setMobile(studentArchives.getMobile());

    user.setEmail(studentArchives.getMobile() + "@qq.com");

    user.setSex(studentArchives.getSex());

    user.setDepartmentId("1464487432169852929");

    user.setDepartmentTitle("默认部门");

    user.setDescription("学生");

    iUserService.saveOrUpdate(user);

    UserRole ur = new UserRole();

    ur.setUserId(user.getId());

    ur.setRoleId("1492065084732739584");

    iUserRoleService.saveOrUpdate(ur);

    studentArchives.setUserId(user.getId());

    if(iStudentArchivesService.saveOrUpdate(studentArchives)){

        return new ResultUtil<StudentArchives>().setData(studentArchives);

    }

    return new ResultUtil<StudentArchives>().setErrorMsg("操作失败");

}

(3)教师模块的功能设计

教师在班级考勤系统中的能看到考勤支持模块,其中分为考勤档案分模块和考勤报表分模块。考勤档案分模块下设发起考勤、考勤汇总、考勤补录三个子菜单。教师可以进入发起考勤界面,完成课堂考勤的发起操作,如图所示。

发起考勤模块的实现

 此外还有考勤汇总模块,包括考勤名称、发起日期、参与班级、开始结束时间、签到类型的信息,以及考勤备注。还有查询二维码功能,如下图可以看出。

考勤档案二维码的实现

 学生请假模块包含了学生请假单具体信息的维护。该部分可帮助高校教师查看自己班级学生的请假汇总信息,包括请假的类型、请假开始结束时间、请假原因、请假是否审核、请假的备注。如图所示,当前页面为学生请假的信息,在这个页面可以对学生的请假信息进行查看,该模块也可对数据进行增删查功能,在查找部分,管理员可根据请假的类型来选择请假单。该模块可点击通过按钮即可进行审核。

请假审核模块界面

管理员可以根据自己的需求,查看学生的考勤图表,如图所示。

图A

图表分析界面B

图表分析核心代码

renderStatistic(containerWidth, text, style) {

    const {

        width: textWidth,

        height: textHeight

    } = measureTextWidth(text, style);

    const R = containerWidth / 2;

    let scale = 1;

    if (containerWidth < textWidth) {

        scale = Math.min(Math.sqrt(Math.abs(Math.pow(R, 2) / (Math.pow(textWidth / 2, 2) + Math.pow(textHeight, 2)))), 1);

    }

    const textStyleStr = `width:${containerWidth}px;`;

    return `<div style="${textStyleStr};font-size:${scale}em;line-height:${scale < 1 ? 1 : 'inherit'};">${text}</div>`;

},

(4)学生模块的功能设计

作为学生账号,也可以查询自己的历史请假记录,和历史请假的审核情况。另外也支持对已提交的请假单进行取消撤回操作,如图所示。

学生历史请假界面

学生账号还可以发起请假操作,需要输入请假的类型、请假时间、理由,提交后即可申请请假,如图所示.

学生发起请假界面

查询考勤核心代码

@RequestMapping(value = "/getMyAttendanceOnApp", method = RequestMethod.GET)

@ApiOperation(value = "查询我的考勤待办")

public Result<List<AttendanceItem>> getMyAttendance(@RequestParam String id) {

    QueryWrapper<StudentArchives> stuQw = new QueryWrapper<>();

    stuQw.eq("user_id",id);

    StudentArchives sa = iStudentArchivesService.getOne(stuQw);

    if(sa == null) {

        return ResultUtil.error("非学生用户");

    }

    QueryWrapper<AttendanceItem> itemQw = new QueryWrapper<>();

    itemQw.eq("student_id",sa.getId());

    return new ResultUtil<List<AttendanceItem>>().setData(iAttendanceItemService.list(itemQw));

}

 

(5)微信小程序的设计与实现

学生可以在微信小程序上进行登陆。对于微信小程序,也采取了手机号登录的方式,学生进入微信小程序后,点击下面的马上登陆按钮,即可跳转到登陆界面,登陆界面如图所示。

微信小程序主界面

用户可以选择使用微信绑定的手机号一键登录系统,也可以使用普通登录,输入自己的账号和密码完成系统登陆。为了简化流程,建议使用微信绑定的手机号码一键登录,既方便又快捷,如图所示。

微信小程序登陆界面

今后系统后,学生可以通过微信小程序,进入到考勤打卡模块,首先进行GPS定位,然后一键参与考勤打卡,考勤需要输入老师设置的数字密码。若考勤密码正确,即可完成考勤;若考勤密码错误,则无法进行考勤打卡,防止代打卡、非打卡地打卡的情况出现,如图所示。

微信小程序考勤打卡界面

在班级考勤系统的微信小程序端,支持学生的历史请假查询功能。学生可以进入历史请假模块,就可以看到自己历史的请假数据,时刻关心自己的考勤情况,也方便自己对自己的学习生活有个基本的了解,如图所示。

微信小程序我的请假界面

九、软件测试与优化

(1)功能测试:

1、针对系统的各项功能进行全面测试,包括学生签到、考勤记录管理、教师管理、班级管理等。

2、确保系统能够正确地处理各种场景下的数据输入、验证和处理逻辑。

3、针对不同用户角色(如教师、学生、管理员)进行测试,确保每个角色都能正常使用系统功能。

(2)兼容性测试:

1、在不同操作系统(如Windows、Mac、Linux)和浏览器(如Chrome、Firefox、Safari)上进行测试,确保系统在各种环境下都能正常运行。

2、测试系统在不同设备上的响应性,包括桌面、平板和移动设备。

(3)性能测试:

1、对系统进行负载测试,模拟多个用户同时使用系统的情况,评估系统的性能和稳定性。

2、测试系统在处理大量数据时的性能表现,包括查询、统计和报表生成等操作。

(4)安全性测试:

1、对系统的登录和权限控制进行测试,确保只有授权用户能够访问系统的敏感数据和功能。

2、检测系统是否存在潜在的安全漏洞,如SQL注入、跨站脚本攻击等。

(5)用户界面测试:

1、确保系统的用户界面易于使用和导航,并具有一致的布局和样式。

2、进行用户体验测试,收集用户反馈,改进系统的用户界面和交互设计。

(6)错误处理和异常情况测试:

1、模拟各种错误和异常情况,如无效的输入、网络中断、数据库故障等,确保系统能够正确处理并给出适当的提示和错误信息。

(7)用户反馈和持续优化:

1、收集用户的反馈和建议,了解用户需求和问题,及时进行修复和改进。

2、进行系统性能监控和日志分析,发现潜在的性能问题和瓶颈,并进行优化。

(8)定期维护和更新:

1、定期进行系统的维护和更新,修复已知问题和漏洞,保持系统的安全性和稳定性。

2、根据用户需求和市场变化,持续改进和添加新功能,提供更好的用户体验。

  • 18
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值