15. 开发成绩管理功能

843 字约 2 分钟读完1253 次阅读更新于 2026/5/3

SQL

CREATE TABLE `grade` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `course_id` int(11) DEFAULT NULL COMMENT '课程ID',
  `student_id` int(11) DEFAULT NULL COMMENT '学生ID',
  `score` double(10,1) DEFAULT NULL COMMENT '分数',
  `comment` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '评语',
  `feedback` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '学生反馈',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成绩';

打分弹窗

<el-dialog width="35%" v-model="data.formVisible" title="成绩信息">
  <el-form :model="data.gradeForm" label-width="100px" label-position="right" style="padding-right: 40px">
    <el-form-item label="课程名称">
      <el-input v-model="data.gradeForm.name" autocomplete="off" disabled />
    </el-form-item>
    <el-form-item label="分数">
      <el-input v-model="data.gradeForm.score" autocomplete="off" />
    </el-form-item>
    <el-form-item label="评语">
      <el-input type="textarea" v-model="data.gradeForm.comment" autocomplete="off" />
    </el-form-item>
  </el-form>
  <template #footer>
    <span class="dialog-footer">
      <el-button @click="data.formVisible = false">取 消</el-button>
      <el-button type="primary" @click="save">保 存</el-button>
    </span>
  </template>
</el-dialog>

成绩查询的逻辑

注意要写 studentName、courseName Getter 和 Setter 方法

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.GradeMapper">

    <select id="selectAll" resultType="com.example.entity.Grade">
        select grade.*, student.name as studentName, course.name as courseName
        from grade
        left join student
        on grade.student_id = student.id
        left join course
        on grade.course_id = course.id
        <where>
            <if test="studentName != null">and student.name like concat('%', #{studentName}, '%')</if>
            <if test="courseName != null">and course.name like concat('%', #{courseName}, '%')</if>
            <if test="studentId != null">and grade.student_id = #{studentId}</if>
        </where>
        order by id desc
    </select>

</mapper>

成绩编辑的弹窗

<el-dialog width="35%" v-model="data.formVisible" title="反馈信息">
  <el-form :model="data.form" label-width="100px" label-position="right" style="padding-right: 40px">
    <el-form-item label="评分" v-if="data.user.role === 'ADMIN'">
      <el-input v-model="data.form.score" autocomplete="off" />
    </el-form-item>
    <el-form-item label="评语" v-if="data.user.role === 'ADMIN'">
      <el-input type="textarea" v-model="data.form.comment" autocomplete="off" />
    </el-form-item>
    <el-form-item label="反馈" v-if="data.user.role === 'STUDENT'">
      <el-input type="textarea" v-model="data.form.feedback" autocomplete="off" />
    </el-form-item>
  </el-form>
  <template #footer>
    <span class="dialog-footer">
      <el-button @click="data.formVisible = false">取 消</el-button>
      <el-button type="primary" @click="save">保 存</el-button>
    </span>
  </template>
</el-dialog>

成绩操作按钮需要判断角色

image.png

在管理员打分的时候要做个判断提醒

image.png

@Select("select * from grade where student_id = #{studentId} and course_id = #{courseId}")
Grade selectByCondition(Grade grade);

完整的成绩页面

完整的成绩接口