学生信息管理系统
一 分析
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所示。
字段名 | 数据类型 | 长度 | 是否主键 | 说明 |
---|---|---|---|---|
stu_id | int | 14 | 是 | 学生表主键 |
stu_name | varchar | 12 | 否 | 学生姓名 |
stu_age | int | 2 | 否 | 学生年龄 |
stu_department | varcahr | 10 | 否 | 所在院系 |
stu_major | varcahr | 10 | 否 | 学生专业 |
address | varcahr | 255 | 否 | 学生住址 |
(2)教师实体(教师编号,教师姓名,教师年龄,职位编号,课程编号)用于记录保存系统使用用户(教师)的基本信息;该表设计如表2.2所示。
字段名 | 数据类型 | 长度 | 是否主键 | 说明 |
---|---|---|---|---|
t_id | int | 16 | 是 | 教师表主键 |
t_name | varchar | 12 | 否 | 教师姓名 |
t_age | int | 2 | 否 | 教师年龄 |
p_id | int | 16 | 否 | 职位编号 |
course_id | int | 16 | 否 | 课程编号 |
(3)课程实体(课程编号,课程名称,开始时间,结束时间)用于记录保存系统使用用户(学生)的课程信息;该表设计如表2.3所示。
字段名 | 数据类型 | 长度 | 是否主键 | 说明 |
---|---|---|---|---|
c_id | int | 16 | 是 | 课程表主键 |
c_name | varchar | 12 | 否 | 课程名称 |
start_time | date | 否 | 开始时间 | |
end_time | date | 否 | 结束时间 |
(4)成绩实体(成绩编号,学生学号,课程编号,课程名称,学生成绩)用于记录保存系统使用用户(学生)的成绩信息;该表设计如表2.4所示。
字段名 | 数据类型 | 长度 | 是否主键 | 说明 |
---|---|---|---|---|
score_id | int | 16 | 是 | 成绩表主键 |
s_id | int | 16 | 否 | 学生学号 |
c_id | int | 16 | 否 | 课程编号 |
c_name | varchar | 12 | 否 | 课程名称 |
score | int | 3 | 否 | 课程成绩 |
(5)住宿实体(公寓编号,公寓名称,公寓校区,公寓楼层)用于记录保存系统使用用户(学生)的住宿信息;该表设计如表2.5所示。
字段名 | 数据类型 | 长度 | 是否主键 | 说明 |
---|---|---|---|---|
apartment_id | int | 16 | 是 | 住宿表主键 |
apartment_name | varchar | 12 | 否 | 公寓名称 |
apartment_campus | varchar | 8 | 否 | 公寓校区 |
apartment_floor | int | 2 | 否 | 公寓楼层 |
(6)职位实体(职位编号,职位名称)用于记录保存系统使用用户(教师)的职位信息;该表设计如表2.6所示。
字段名 | 数据类型 | 长度 | 是否主键 | 说明 |
---|---|---|---|---|
position_id | int | 16 | 是 | 职位表主键 |
position_name | varchar | 12 | 否 | 职位名称 |
三 创建表格
3.1 学生表创建
在这create table student ( stu_id int(14) not null primary key auto_increment comment '学生表主键', stu_name varchar(12) comment '学生姓名', stu_age int(2) comment '学生年龄', stu_department varchar(10) comment '所在院系', stu_major varchar(10) comment '学生专业', address varchar(255) comment '学生住址' ) character set utf8;
3.2 教师表创建
create table teacher ( t_id int(16) not null primary key auto_increment comment '教师表主键', t_name varchar(12) comment '教师姓名', t_age int(2) comment '教师年龄', p_id int(16) comment '职位编号', course_id int(16) comment '课程编号' ) character set utf8;
3.3 课程表创建
create table course ( c_id int(16) not null primary key auto_increment comment '课程表主键', c_name varchar(12) comment '课程名称', start_time date comment '开始时间', end_time date comment '结束时间' ) character set utf8;
3.4 成绩表创建
create table score ( score_id int(16) not null primary key auto_increment comment '创建表主键', s_id int(16) comment '学生学号', c_id int(16) comment '课程编号', c_name varchar(12) comment '课程名称', score int(3) comment '课程成绩' ) character set utf8;
3.5 住宿表创建
create table apartment ( apartment_id int(16) not null primary key auto_increment comment '住宿表主键', apartment_name varchar(12) comment '公寓名称', apartment_campus varchar(8) comment '公寓校区', apartment_floor int(2) comment '公寓楼层' ) character set utf8;
3.6 职位表创建
create table position ( position_id int(16) not null primary key auto_increment comment '职位表主键', position_name varchar(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_name from 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_name from teacher t join course c on t.course_id = c.c_id;
5.5 查询学号为102的学生选择Python课程
select s.*, c.c_name from student s join score sc on s.stu_id = sc.s_id join course c on sc.c_id = c.c_id where s.stu_id = 102 and c.c_name = 'Python';
5.6 查询年龄大于20岁的学生信息
select * from student where stu_age > 20;