以下内容可且仅可供参考,如有错误欢迎指正。
设计要求
实现学生信息、班级、院系、专业等的管理;
实现课程、学生成绩信息管理;
实现学生的奖惩信息管理;
创建规则用于限制性别项只能输入“男”或“女”;
创建视图查询各个学生的学号、姓名、班级、专业、院系;
创建存储过程查询指定学生的成绩单;
创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级学生人数;
建立数据库相关表之间的参照完整性约束。
目录
1需求分析
1.1项目需求分析简介
1.2数据字典
2数据库概念结构设计
3数据库逻辑结构设计
4数据库物理结构设计
4.1创建数据库
4.2创建数据表(同时创建关系完整性)
5视图
6存储过程
7触发器
7.1学生表插入
7.2学生表删除
7.3学生表更新
8数据库的实现与维护
8.1数据的载入
8.2数据库备份
9总结
参考文献:
1需求分析
1.1项目需求分析简介
本数据库的用户主要是学生,通过对用户需求的收集和分析,获得用户对数据库的如下要求。
1.信息需求
(1)学生信息:包括学号、姓名、性别、出生日期、籍贯等;
(2)班级信息:包括班级编号、辅导员姓名等;
(3)专业信息:包括专业编号、专业名称等;
(4)学部信息:包括学部编号、学部名称等;
(5)学院信息:包括学院名称、校长姓名等;
(6)课程信息:包括课程编号、课程名称、授课老师等;
(7)奖惩信息:包括奖惩记录号、奖惩级别、奖惩记录时间、奖惩详情描述等。
2.处理需求
高校学籍管理系统主要由学生信息管理、选课及其成绩管理、学生奖惩信息管理等模块组成。
学生信息模块:包括学生基本信息及其所在班级、专业、学部、院校;
选课及其成绩管理模块:包括课程编号、课程名称、成绩等;
学生奖惩信息管理模块:包括奖惩记录号、奖惩级别、奖惩记录时间、奖惩详情描述等。
为了保证信息的安全和数据的权威性,对信息的使用权限规定如下:
注:a、查询b、修改
3.运行需求:
个人信息管理系统采用的语言是 python,用SQL Sever R2数据库完成,有以下功能:
有较好的权限管理;
原始数据修改简单方便,支持多条件修改;
方便的数据查询,支持多条件查询。
1.2数据字典
数据项:
1.数据项:学号
数据项含义:唯一标识每一个学生
数据类型:字符型
长度:8
取值范围:00000000~99999999
2.数据项:姓名
数据项含义:学生姓名&&班级辅导员姓名&&学院校长姓名&&任课老师姓名
数据类型:字符型
长度:20
取值范围:所有汉字
3.数据项:性别
数据项含义:学生性别
数据类型:字符型
长度:2
4.数据项:日期
数据项含义:学生出生日期&&奖励记录日期&&惩罚记录日期
数据类型:date
5.数据项:地点
数据项含义:学生籍贯信息
数据类型:字符型
长度:50
取值范围:所有汉字
6.数据项:编号
数据项含义:班级编号&&专业编号&&学部编号&&课程编号
数据类型:字符型
长度:4
取值范围:0000~9999
7.数据项:名称
数据项含义:学院名称&&专业名称&&学部名称&&课程名称
数据类型:字符型
长度:50
取值范围:所有汉字
8.数据项:记录号
数据项含义:奖励记录号&&惩罚记录号
数据类型:字符型
长度:8
取值范围:00000000~99999999
9.数据项:等级
数据项含义:奖励等级&&惩罚等级
数据类型:整型
10.数据项:记录号
数据项含义:奖励记录&&惩罚记录
数据类型:字符型
长度:1000
取值范围:所有汉字
11.数据项:人数
数据项含义:班级人数
数据类型:整型
数据结构
1.数据结构:学生
含义说明:是高校学籍管理系统的主要数据结构,定义了一个学生的有关信息。
组成:学号、姓名、性别、出生日期、籍贯
2.数据结构:班级
含义说明:是高校学籍管理系统的主要数据结构,定义了有关班级的信息。
组成:班级编号 、辅导员姓名、班级人数
3.数据结构:专业
含义说明:是高校学籍管理系统的主要数据结构,定义了有关专业的信息。
组成:专业编号 、专业名称
4.数据结构:学部
含义说明:是高校学籍管理系统的主要数据结构,定义了有关学部的信息。
组成:学部编号 、学部名称
5.数据结构:学院
含义说明:是高校学籍管理系统的主要数据结构,定义了有关学院的信息。
组成:学院名称 、校长姓名
6.数据结构:课程
含义说明:是高校学籍管理系统的主要数据结构,定义了有关课程的信息。
组成:课程编号 、课程名称、授课老师
7.数据结构:选课
含义说明:是高校学籍管理系统的主要数据结构,定义了有关选课的信息。
组成:学号、课程编号、成绩
8.数据结构:奖励
含义说明:是高校学籍管理系统的主要数据结构,定义了有关奖励的信息。
组成:奖励记录号、奖励级别、奖励记录时间、奖励详情描述
9.数据结构:惩罚
含义说明:是高校学籍管理系统的主要数据结构,定义了有关惩罚的信息。
组成:惩罚记录号、惩罚级别、惩罚记录时间、惩罚详情描述
2数据库概念结构设计
数据流程图
高校学籍管理系统流程图,如图2-1所示。
图2-1 高校学籍管理系统流程图
系统E-R图
在数据库概念结构设计阶段,完成E-R图设计,见图2-2所示。
图2-2 高校学籍管理系统总E-R图
3数据库逻辑结构设计
1、高校学籍管理系统的关系模型
学生:(学号,姓名,性别,出生日期,籍贯,所在班级编号,所在学院名称)
班级:(班级编号,辅导员姓名,班级人数,所属专业编号)
专业:(专业编号,专业名称,学部编号)
学部:(学部编号,学部名称,学院名称)
学院:(学院名称,校长姓名)
课程:(课程编号,课程名称,授课老师)
选课:(学号,课程编号,成绩)
奖励:(奖励记录号,学号,奖励级别,奖励记录时间,奖励详情描述)
惩罚:(惩罚记录号,学号,惩罚级别,惩罚记录时间,惩罚详情描述)
2. 高校学籍管理系统数据库关系模型的说明
(1)学号是学生的主键,每个学生有唯一学号,每个学生的信息包括学号,姓名,性别,出生日期,籍贯。一个学生可同时有多条奖惩记录,每个奖惩记录号只对应一个学生的一条奖惩记录。
(2)一个学生可以选择多门课程,一门课程也能被多名学生选择。选课关系“选课”作为连接关系,其主码为学号和课程编号的组合。
(3)对奖励等级约定取值和奖励类别的对应关系如下:
1 国家奖学金
2 专业一等奖学金
3 专业二等奖学金
4 其他奖学金
对惩罚等级约定取值和惩罚类别的对应关系如下:
1 退学处分
2 记大过处分
3严重警告处分
4警告处分
3.数据库的九张二维表
学生表用来记录学生的基本信息,表 学生表 的结构如表3-1所示。
表3-1 学生表
班级表用来记录班级的基本信息,表 班级表 的结构如表3-2所示。
表3-2 班级表
专业表用来记录专业的基本信息,表 专业表 的结构如表3-3所示。
表3-3 专业表
学部表用来记录学部的基本信息,表 学部表 如表3-4所示。
表3-4 学部表
学院表用来记录学院的基本信息,表 学院表 如表3-5所示。
表3-6 学院表
课程表记录了课程的基本信息,表 课程表 的结构如表3-6所示。
表3-6 课程表
选课表记录了学生选课及其分数,表 选课表 的结构如表3-7所示。
表3-7 选课表
奖励表记录了学生的奖励信息,表 奖励表 的结构如表3-8所示。
表3-8 奖励表
惩罚表记录了学生的惩罚信息,表 惩罚表 的结构如表3-9所示。
表3-9 惩罚表
4数据库物理结构设计
4.1创建数据库
CREATE DATABASE school_manage;
4.2创建数据表(同时创建关系完整性)
(1)学生表
CREATE TABLE 学生表(学号 CHAR(8) PRIMARY KEY,姓名 VARCHAR(20) NOT NULL,性别 CHAR(2) DEFAULT '男' ,出生日期 DATE NOT NULL,籍贯 VARCHAR(50) NOT NULL,班级编号 CHAR(4) REFERENCES 班级表(班级编号),学校名称 VARCHAR(50) REFERENCES 学院表(学院名称),FOREIFN KEY(班级编号) REFERENCES 班级表(班级编号) ON DELETE SET NULL ON UPDATE CASCADE,FOREIFN KEY(学校名称) REFERENCES 学院(学校名称) ON DELETE SET NULL ON UPDATE CASCADE,CHECK((性别='男') OR (性别='女')));
(2)班级表
CREATE TABLE 班级表(班级编号 CHAR(4) PRIMARY KEY,辅导员姓名 VARCHAR(20) NOT NULL,班级人数 INT NOT NULL,专业编号 CHAR(4) REFERENCES 专业表(专业编号),FOREIGN KEY(专业编号) REFERENCES 专业表(专业编号) ON UPDATE CASCADE ON DELETE SET NULL);
(3)专业表
CREATE TABLE 专业表(专业编号 CHAR(4) PRIMARY KEY,专业名称 VARCHAR(50) NOT NULL,学部编号 CHAR(4) REFERENCES 学部表(专业编号),FOREIGN KEY(学部编号) REFERENCES 学部表(学部编号) ON UPDATE CASCADE ON DELETE SET NULL);
(4)学部表
CREATE TABLE 学部表(学部编号 CHAR(4) PRIMARY KEY,学部名称 VARCHAR(50) NOT NULL,学院名称 VARCHAR(50) REFERENCES 学院表(学院名称),FOREIGN KEY(学院名称) REFERENCES 学院表(学院名称) ON UPDATE CASCADE ON DELETE SET NULL);
(5)学院表
CREATE TABLE 学院表(学院名称 CHAR(4) PRIMARY KEY,校长姓名 VARCHAR(20) NOT NULL);
(6)课程表
CREATE TABLE 课程表(课程编号 CHAR(4) PRIMARY KEY,课程名称 VARCHAR(50) NOT NULL,授课老师 VARCHAR(20) NOT NULL);
(7)选课表
CREATE TABLE 选课表(学号 CHAR(8) REFERENCES 学生表(学号),课程编号 CHAR(4) REFERENCES 课程表(课程编号),分数 INT NOT NULL,PRIMARY KEY(学号,课程编号),FOREIGN KEY(学号) REFERENCES 学生表(学号) ON UPDATE CASCADE ON DELETE CASCADE,FOREIGN KEY(课程编号) REFERENCES 课程表(课程编号) ON UPDATE CASCADE ON DELETE CASCADE);
(8)奖励表
CREATE TABLE 奖励表(奖励记录号 CHAR(8) PRIMARY KEY,学号 CHAR(8) REFERENCES 学生表(学号),奖励等级 INT NOT NULL,奖励时间 DATE NOT NULL,奖励详情 VARCHAR(1000),CHECK ((奖励等级 = 1)OR(奖励等级 = 2)OR(奖励等级 = 3)OR(奖励等级 = 4)OR(奖励等级 = 5)),FOREIGN KEY(学号) REFERENCES 学生表(学号) ON UPDATE CASCADE ON DELETE SET NULL);
(9)惩罚表
CREATE TABLE 惩罚表(惩罚记录号 CHAR(8) PRIMARY KEY,学号 CHAR(8) REFERENCES 学生表(学号),惩罚等级 INT NOT NULL,惩罚时间 DATE NOT NULL,惩罚详情 VARCHAR(1000),CHECK ((惩罚等级 = 1)OR(惩罚等级 = 2)OR(惩罚等级 = 3)OR(惩罚等级 = 4)OR(惩罚等级 = 5)),FOREIGN KEY(学号) REFERENCES 学生表(学号) ON UPDATE CASCADE ON DELETE SET NULL);
5视图
创建视图查询各个学生的学号、姓名、班级、专业、院系:
(1)创建视图:
CREATE VIEW v_student_chk(学号,姓名,班级,专业,院系)ASSELECT 学号,姓名,学生表.班级编号,专业名称,学部名称FROM 学生表,专业表,学部表,班级表WHERE 学生表.班级编号 = 班级表.班级编号AND 班级表.专业编号 = 专业表.专业编号AND 专业表.学部编号 = 学部表.学部编号ORDER BY 学号;
(2)查看视图:
图5-1 视图查询表
6存储过程
创建存储过程查询指定学生的成绩单:
(1)创建存储过程:
DELIMITER@@USE school_manage@@DROP PROCEDURE IF EXISTS student_p@@CREATE PROCEDURE student_p(IN p_id VARCHAR(8))BEGINSELECT 学生表.学号,学生姓名,课程名称,分数FROM 学生表,课程表,选课表WHERE 学生表.学号 = 选课表.学号AND 课程表.课程编号 = 选课表.课程编号AND 学生表.学号 = p_idORDER BY 学号;END@@DELIMITER;
(2)查询语句:
CALL student_p(20020701);
图6-1 存储过程查询表
7触发器
创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级学生人数:
7.1学生表插入
(1)创建:
CREATE TRIGGER c_triggerAFTER INSERT ON 学生表FOR EACH ROW UPDATE 班级表SET 班级人数 = 班级人数 + 1WHERE 班级编号 = new.班级编号;
7.2学生表删除
(1)创建:
CREATE TRIGGER s_triggerAFTER DELETE ON 学生表FOR EACH ROWUPDATE 班级表SET 班级人数 = 班级人数 - 1WHERE 班级编号 = old.班级编号;
7.3学生表更新
(1)创建:
CREATE TRIGGER u_triggerAFTER UPDATE ON 学生表FOR EACH ROW UPDATE 班级表SET 班级人数 = 班级人数 + 1WHERE 班级编号 = new.班级编号;CREATE TRIGGER z_triggerAFTER UPDATE ON 学生表FOR EACH ROW UPDATE 班级表SET 班级人数 = 班级人数 - 1WHERE 班级编号 = old.班级编号;
8数据库的实现与维护
8.1数据的载入
数据的载入
(1)学生表信息表
学生表信息如图8-1所示。
图8-1 学生表载入的数据图
其余表略。
8.2数据库备份
使用mysqldump命令备份数据,文件为backups_sql.sql。
9总结
通过此次课程设计,使我更加扎实的掌握了有关数据库方面的知识,在设计过程中虽然遇到了一些问题,但经过不断的思考和检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。这次的课程设计使我学习到很多课堂上没有学习到的知识。也使我对常用画图软件、文档编辑等知识掌握得更加熟练。虽然课设已经完成,但是本系统还存在着不足,如系统十分简单,安全性问题没有很好的解决等。所以在今后的学习中我会继续努力完善自我,同学的帮助、指导老师的用心辅导和学校的精心安排使这个课题能够顺利进行。但是,由于时间仓促以及本人水平有限,本系统还有很多不完善之处,希望在此后的学习中可以不断将其优化。
参考文献:
[1]李月军、付良廷,数据库原理及应用[M].北京:清华大学出版社,.10