学生信息管理系统

  • 一 分析
    • 1.1 系统需求分析
      • 1.1.1 业务分析
      • 1.1.2 分析系统
    • 1.2 功能模块
      • 1.2.1 学生模块
      • 1.2.2 教师模块
  • 二 构建模型
    • 2.1 概念模型:ERP模型
    • 2.2 数据模型:设计表格
      • 2.2.1 将ERP模型转化为关系模式
      • 2.2.2 设计表格
  • 三 创建表格
    • 3.1 学生表创建
    • 3.2 教师表创建
    • 3.3 课程表创建
    • 3.4 成绩表创建
    • 3.5 住宿表创建
    • 3.6 职位表创建
  • 四 插入数据
    • 4.1 学生表数据添加
    • 4.2 教师表数据添加
    • 4.3 课程表数据添加
    • 4.4 成绩表数据添加
    • 4.5 住宿表数据添加
    • 4.6 职位表数据添加
  • 五 维护数据
    • 5.1 查询学生所有信息
    • 5.2 查询老师所有信息
    • 5.3 查询选课了Java科目的学生信息
    • 5.4 对应科目的老师信息
    • 5.5 查询学号为102的学生选择Python课程
    • 5.6 查询年龄大于20岁的学生信息

一 分析

1.1 系统需求分析

1.1.1 业务分析

学生信息管理系统时面向学生和学校教师的一个多功能数据管理平台。

1.1.2 分析系统

本系统所设计到的用户有学校在校学生、教师,对于不同的用户系统所提供给的功能也有所不同,其中对于学生来说,学生可以通过该系统进行学生基本信息查询、考试成绩查询、选修课程查询、住宿基本信息查询,修改自身部分基本信息,教师可以通过该系统实现对自身数据查询、学生成绩管理等。

1.2 功能模块

1.2.1 学生模块

学生是整个系统的使用者,学生可以通过该系统进行学生基本信息查询、考试成绩查询、选修课程查询、住宿基本信息查询,修改自身部分基本信息。

1.2.2 教师模块

教师是整个系统的使用者,教师可以通过该系统实现对自身数据查询、学生成绩管理等,修改自身部分基本信息。

二 构建模型

2.1 概念模型:ERP模型

学生信息管理系统是学生信息进行一体化管理的系统,它提供了学生学生基本信息管理、课程管理、成绩管理、住宿基本信息管理的功能,因此本系统所对应的实体就有学生、教师、课程、成绩、住宿,该系统的E-R图如下图所示。

2.2 数据模型:设计表格

2.2.1 将ERP模型转化为关系模式

按照将E-R图转换为关系模式的规则,将上图所示E-R图转换,得到的关系模式为:

学生(学号,姓名,年龄,院系,专业,住址)

教师(教师编号,教师姓名,教师年龄,教师职位,课程编号)

课程(课程编号,课程名称,开始时间,结束时间)

成绩(成绩编号,学生学号,课程编号,课程名称,学生成绩)

住宿(公寓编号,公寓名称,公寓校区,公寓楼层)

对上述关系模式进行以下优化。“教师”关系中的“教师职位”会出现大量的数据冗余,为了更好体现教师职位和教师之间的关联关系,可以进行拆分成一个职位表;可分出一个“职位”关系,包含“职位编号”和“职位名称”等属性,将“教师”关系中的“教师职位”属性改为“职位编号”。优化后的关系模式为:

学生(学号,姓名,年龄,院系,专业,住址)

教师(教师编号,教师姓名,教师年龄,职位编号,课程编号)

课程(课程编号,课程名称,开始时间,结束时间)

成绩(成绩编号,学生学号,课程编号,课程名称,学生成绩)

住宿(公寓编号,公寓名称,公寓校区,公寓楼层)

职位(职位编号,职位名称)

2.2.2 设计表格

(1)学生实体(学生学号,学生姓名,学生年龄,所在院系,学生专业,学生住址)用于记录保存系统使用用户(学生)的基本信息;该表设计如表2.1所示。

2.1 学生表

字段名数据类型长度是否主键说明
stu_idint14学生表主键
stu_namevarchar12学生姓名
stu_ageint2学生年龄
stu_departmentvarcahr10所在院系
stu_majorvarcahr10学生专业
addressvarcahr255学生住址

(2)教师实体(教师编号,教师姓名,教师年龄,职位编号,课程编号)用于记录保存系统使用用户(教师)的基本信息;该表设计如表2.2所示。

2.2 教师表

字段名数据类型长度是否主键说明
t_idint16教师表主键
t_namevarchar12教师姓名
t_ageint2教师年龄
p_idint16职位编号
course_idint16课程编号

(3)课程实体(课程编号,课程名称,开始时间,结束时间)用于记录保存系统使用用户(学生)的课程信息;该表设计如表2.3所示。

2.3 课程表

字段名数据类型长度是否主键说明
c_idint16课程表主键
c_namevarchar12课程名称
start_timedate开始时间
end_timedate结束时间

(4)成绩实体(成绩编号,学生学号,课程编号,课程名称,学生成绩)用于记录保存系统使用用户(学生)的成绩信息;该表设计如表2.4所示。

2.4 成绩表

字段名数据类型长度是否主键说明
score_idint16成绩表主键
s_idint16学生学号
c_idint16课程编号
c_namevarchar12课程名称
scoreint3课程成绩

(5)住宿实体(公寓编号,公寓名称,公寓校区,公寓楼层)用于记录保存系统使用用户(学生)的住宿信息;该表设计如表2.5所示。

2.5 住宿表

字段名数据类型长度是否主键说明
apartment_idint16住宿表主键
apartment_namevarchar12公寓名称
apartment_campusvarchar8公寓校区
apartment_floorint2公寓楼层

(6)职位实体(职位编号,职位名称)用于记录保存系统使用用户(教师)的职位信息;该表设计如表2.6所示。

2.6 职位表

字段名数据类型长度是否主键说明
position_idint16职位表主键
position_namevarchar12职位名称

三 创建表格

3.1 学生表创建

在这create table student(​stu_idint(14) not null primary key auto_increment comment '学生表主键',​stu_namevarchar(12) comment '学生姓名',​stu_ageint(2) comment '学生年龄',​stu_departmentvarchar(10) comment '所在院系',​stu_majorvarchar(10) comment '学生专业',​addressvarchar(255) comment '学生住址') character set utf8;

3.2 教师表创建

create table teacher(​t_idint(16) not null primary key auto_increment comment '教师表主键',​t_namevarchar(12) comment '教师姓名',​t_ageint(2) comment '教师年龄',​p_idint(16) comment '职位编号',​course_idint(16) comment '课程编号') character set utf8;

3.3 课程表创建

create table course(​c_idint(16) not null primary key auto_increment comment '课程表主键',​c_namevarchar(12) comment '课程名称',​start_timedate comment '开始时间',​end_timedate comment '结束时间') character set utf8;

3.4 成绩表创建

create table score(​score_idint(16) not null primary key auto_increment comment '创建表主键',​s_idint(16) comment '学生学号',​c_idint(16) comment '课程编号',​c_namevarchar(12) comment '课程名称',​scoreint(3) comment '课程成绩') character set utf8;

3.5 住宿表创建

create table apartment(​apartment_idint(16) not null primary key auto_increment comment '住宿表主键',​apartment_namevarchar(12) comment '公寓名称',​apartment_campusvarchar(8) comment '公寓校区',​apartment_floorint(2) comment '公寓楼层') character set utf8;

3.6 职位表创建

create table position(​position_idint(16) not null primary key auto_increment comment '职位表主键',​position_namevarchar(12) comment '职位名称') character set utf8;

四 插入数据

4.1 学生表数据添加

INSERT INTO student (stu_id, stu_name, stu_age, stu_department, stu_major, address)VALUES (101, '张三', 18, '计算机', '软件工程', '湖北武汉'),(102, '李四', 21, '文新', '汉语言', '湖南长沙')

4.2 教师表数据添加

INSERT INTO teacher (t_id, t_name, t_age, p_id, course_id)VALUES (201, '张三', 31, 601, 301),(202, '李四', 32, 602, 602)

4.3 课程表数据添加

INSERT INTO course (c_id, c_name, start_time, end_time)VALUES (301, 'Java', '2022-03-15', '2022-06-15'),(302, 'Python', '2021-09-16', '2021-12-16')

4.4 成绩表数据添加

INSERT INTO score (score_id, s_id, c_id, c_name, score)VALUES (401, 101, 301, 'Java', 95),(402, 102, 302, 'Python', 87)

4.5 住宿表数据添加

INSERT INTO apartment (apartment_id, apartment_name, apartment_campus, apartment_floor)VALUES (501, '楷苑', '龙山校区', 6),(502, '桃苑', '龙山校区', 12);

4.6 职位表数据添加

INSERT INTO position (position_id, position_name)VALUES (601, '讲师'),(602, '教授')

五 维护数据

5.1 查询学生所有信息

select * from student;

5.2 查询老师所有信息

select * from teacher;

5.3 查询选课了Java科目的学生信息

select s.*,sc.score,c.c_namefrom student s​ join score sc on s.stu_id = sc.s_id​ join course c on sc.c_id = c.c_id where c.c_name='Java';

5.4 对应科目的老师信息

select t.*, c.c_id, c.c_namefrom teacher t​ join course c on t.course_id = c.c_id;

5.5 查询学号为102的学生选择Python课程

select s.*, c.c_namefrom student s​ join score sc on s.stu_id = sc.s_id​ join course c on sc.c_id = c.c_idwhere s.stu_id = 102and c.c_name = 'Python';

5.6 查询年龄大于20岁的学生信息

select *from studentwhere stu_age > 20;