学生成绩管理系统-需求分析

本文介绍了学生成绩管理系统的项目需求分析,包括角色分析(学生、教师、管理员等)、成绩管理(权限和成绩归属)、班级管理(学生与班级、教师与班级的关联关系)以及初步的数据库结构设计,强调了在软件开发中分析问题和解决问题的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在软件编程的学习过程中,笔者始终秉承着以项目驱动学习的思路,在实际遇到问题再取学会分析问题,解决问题这个思路的过程很重要。软件只有在不使用的时候没有bug,在使用后会发现有着许多意想不到的问题,这个时候我们分析问题,解决问题的思路就异常重要。本系列文章将从学生成绩管理系统入手,带大家去了解并学习一个完成软件开发的流程,以及分析相关开发时候遇到问题,如何去思考以及解决相关的问题的。本文将从项目的开始需求分析一点点的去剖析整个项目。

1. 角色分析

现在基本上所有的系统都有一个权限管理来划分各个用户的权限,如商城系统,有着买家和卖家,还有内容审核者。在如OA审批流,有着申请人,审批人…等等系统。在学生成绩管理系统,也有五种角色如下:

角色名称功能权限
学生查看各科成绩,本班成绩,查看年级成绩
老师查看学生成绩,修改本科成绩,查询所教班级成绩
班主任查看学生成绩,修改本科成绩,修改各科成绩,查询所教班级成绩
教导员查看学生成绩,查看各班成绩,修改学生各科成绩
家长查看孩子成绩,查看班级成绩,查看年级成绩

如上述表格,不同的角色有着不同的功能,根据不同的角色有着不同的分类。而且需要找出关联性性最大的那个对象,在这里,核心对象是学生,因为学生和其他对象都有所关联。

角色表
其中仅仅每个角色只有一些基本的属性,如姓名,编号等等,还没有涉及相关的关联关系。

2. 成绩管理

如上的功能描述,学生的成绩是本系统的核心,在设计中,成绩因为不同角色的权限,导致不同的角色所看到的成绩不一样,同时操作到的成绩也不一样。在这里就不仅仅只是将单个成绩插入数据库即可,还涉及到成绩的所属的问题,但是每个成绩所属的还是可以归集到学生身上,在通过学生相关的权限将成绩展示或者修改相关成绩内容。因此可以建立成绩表,使之一对一的对应关系,添加相应的成绩表。如下图:
成绩表

3.班级管理

由于每个学生所述为一个班级,班级有被一个班主任所管理,以及被几个老师所管理。因此对于学生和班级的关系是一对一的关系,即在学生表里面加一个class_id字段来表明所述班级。而每个班级和老师的关系是多对多的关系,因为老师不会只交这一届班级,还有其他的班级,在此处设计为多对多的关系。因此添加一个新的表class_teacher_relation的关系表来表明所述的关系。同理,教导主任和班级的关系也是多对多的关系,只不过教导主任的权限可以扩充为整个年级,对整个年级的同学的成绩都有操作权限。而教导主任的权限也应该是多对多的关系,因为有着历史年级的问题。从上述分析可知,其关联关系图为:
在这里插入图片描述

4. 数据库结构

通过对上述功能分析,总结得出其对整个项目需要搭建什么样的效果,以及相关的功能进行分析,其整体的数据结构关系如下:
数据关系
相应的导出为建表语句为:

-- -----------------------------------------------------
-- Schema score
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `score` ;

-- -----------------------------------------------------
-- Schema score
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `score` DEFAULT CHARACTER SET utf8 ;
USE `score` ;

-- -----------------------------------------------------
-- Table `score`.`student`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `score`.`student` ;

CREATE TABLE IF NOT EXISTS `score`.`student` (
  `id` INT NOT NULL auto_increment,
  `name` VARCHAR(45) NULL COMMENT '学生名字',
  `class_id` INT(11) NULL COMMENT '所属班级',
  `student_no` VARCHAR(45) NULL COMMENT '学号\n',
  `is_deleted` INT NOT NULL DEFAULT '0' COMMENT '是否删除',
  `create_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '创建用户',
  `create_time` DATETIME NULL DEFAULT NULL COMMENT '创建时间',
  `modify_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '修改用户',
  `modify_time` DATETIME NULL DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci
COMMENT = '学生';


-- -----------------------------------------------------
-- Table `score`.`class_grade`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `score`.`class_grade` ;

CREATE TABLE IF NOT EXISTS `score`.`class_grade` (
  `id` INT NOT NULL auto_increment,
  `grade` VARCHAR(45) NULL,
  `name` VARCHAR(45) NULL COMMENT '班级名称',
  `teacher_id` VARCHAR(45) NULL COMMENT '班主任',
  `year` VARCHAR(45) NULL COMMENT '入学年份\n',
    `is_deleted` INT NOT NULL DEFAULT '0' COMMENT '是否删除',
  `create_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '创建用户',
  `create_time` DATETIME NULL DEFAULT NULL COMMENT '创建时间',
  `modify_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '修改用户',
  `modify_time` DATETIME NULL DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci
COMMENT = '班级';


-- -----------------------------------------------------
-- Table `score`.`teacher`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `score`.`teacher` ;

CREATE TABLE IF NOT EXISTS `score`.`teacher` (
  `id` INT NOT NULL auto_increment,
  `name` VARCHAR(45) NULL COMMENT '名称',
  `teacher_no` VARCHAR(45) NULL COMMENT '老师编号',
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci
COMMENT = '老师';


-- -----------------------------------------------------
-- Table `score`.`instructor`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `score`.`instructor` ;

CREATE TABLE IF NOT EXISTS `score`.`instructor` (
  `id` INT NOT NULL auto_increment,
  `name` VARCHAR(45) NULL,
  `instructor_no` VARCHAR(45) NULL,
    `is_deleted` INT NOT NULL DEFAULT '0' COMMENT '是否删除',
  `create_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '创建用户',
  `create_time` DATETIME NULL DEFAULT NULL COMMENT '创建时间',
  `modify_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '修改用户',
  `modify_time` DATETIME NULL DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci
COMMENT = '教导主任';


-- -----------------------------------------------------
-- Table `score`.`student_parent`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `score`.`student_parent` ;

CREATE TABLE IF NOT EXISTS `score`.`student_parent` (
  `id` INT NOT NULL auto_increment,
  `name` VARCHAR(45) NULL COMMENT '名字',
  `student_id` VARCHAR(45) NULL COMMENT '学生',
    `is_deleted` INT NOT NULL DEFAULT '0' COMMENT '是否删除',
  `create_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '创建用户',
  `create_time` DATETIME NULL DEFAULT NULL COMMENT '创建时间',
  `modify_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '修改用户',
  `modify_time` DATETIME NULL DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci
COMMENT = '学生家长';


-- -----------------------------------------------------
-- Table `score`.`achievement`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `score`.`achievement` ;

CREATE TABLE IF NOT EXISTS `score`.`achievement` (
  `id` INT NOT NULL auto_increment,
  `subject` VARCHAR(45) NULL COMMENT '科目',
  `student_id` INT NULL COMMENT '学生',
  `exam_id` INT NULL,
    `is_deleted` INT NOT NULL DEFAULT '0' COMMENT '是否删除',
  `create_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '创建用户',
  `create_time` DATETIME NULL DEFAULT NULL COMMENT '创建时间',
  `modify_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '修改用户',
  `modify_time` DATETIME NULL DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci
COMMENT = '成绩表';


-- -----------------------------------------------------
-- Table `score`.`exam`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `score`.`exam` ;

CREATE TABLE IF NOT EXISTS `score`.`exam` (
  `id` INT NOT NULL auto_increment,
  `name` VARCHAR(45) NULL COMMENT '考试名称',
  `describe` TEXT NULL COMMENT '描述',
  `exam_start_time` DATETIME NULL COMMENT '考试开始时间',
  `exam_end_time` DATETIME NULL COMMENT '考试结束时间',
  `subject_ids` VARCHAR(45) NULL COMMENT '考试科目',
    `is_deleted` INT NOT NULL DEFAULT '0' COMMENT '是否删除',
  `create_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '创建用户',
  `create_time` DATETIME NULL DEFAULT NULL COMMENT '创建时间',
  `modify_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '修改用户',
  `modify_time` DATETIME NULL DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci
COMMENT = '考试表';


-- -----------------------------------------------------
-- Table `score`.`class_teacher_relation`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `score`.`class_teacher_relation` ;

CREATE TABLE IF NOT EXISTS `score`.`class_teacher_relation` (
  `id` INT NOT NULL auto_increment,
  `class_id` VARCHAR(45) NULL COMMENT '班级',
  `teacher_id` VARCHAR(45) NULL COMMENT '老师',
    `is_deleted` INT NOT NULL DEFAULT '0' COMMENT '是否删除',
  `create_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '创建用户',
  `create_time` DATETIME NULL DEFAULT NULL COMMENT '创建时间',
  `modify_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '修改用户',
  `modify_time` DATETIME NULL DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci
COMMENT = '班级老师关系表';


-- -----------------------------------------------------
-- Table `score`.`grade_instructor_relation`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `score`.`grade_instructor_relation` ;

CREATE TABLE IF NOT EXISTS `score`.`grade_instructor_relation` (
  `id` INT NOT NULL auto_increment,
  `instructor_id` INT NULL COMMENT '教导主任',
  `grade` VARCHAR(45) NULL COMMENT '年纪',
    `is_deleted` INT NOT NULL DEFAULT '0' COMMENT '是否删除',
  `create_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '创建用户',
  `create_time` DATETIME NULL DEFAULT NULL COMMENT '创建时间',
  `modify_user` VARCHAR(64) NULL DEFAULT NULL COMMENT '修改用户',
  `modify_time` DATETIME NULL DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci
COMMENT = '年纪教导主任关系';

5.总结

通过上面的分析,我们得到相应的数据库ER图以及建表语句。上述的数据表结构或许还不完整,但针对目前来说的问题已经足够解决了,切勿在开始设计的时候就尽善尽美。软件在编写的过程中,随着我们思考的加深会进行一步步的修正相应的数据结构,但只要最核心的基本逻辑不变这个改动不会太大,如果要改核心逻辑时候,估计整个系统的数据结构又将发生大改。在下一篇中,将进行相应环境的搭建,以及相关数据库文件导入。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

myenjoy_1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值