课程管理系统数据库设计与实现.docx
《课程管理系统数据库设计与实现.docx》由会员分享,可在线阅读,更多相关《课程管理系统数据库设计与实现.docx(33页珍藏版)》请在冰豆网上搜索。
![课程管理系统数据库设计与实现.docx](https://file1.bdocx.com/fileroot1/2023-5/28/a70cb056-3d12-4b30-be5a-0a5272939fe9/a70cb056-3d12-4b30-be5a-0a5272939fe91.gif)
课程管理系统数据库设计与实现
大学课程设计报告
课程设计题目:
“课程管理系统”数据库设计与实现
学院:
专业班级:
年级:
姓名:
学号:
完成时间:
年月日
成绩:
指导教师:
2.2E-R模型向关系模型的转换
3.2创建索引
3.3授予权限
正文
一、需求分析
1.近年来,随着各大高校的规模不断扩大,生源的急剧增加,有关学生的各种信息量也成倍增长。
面对庞大的信息量,需要建立一个课程管理系统来提高管理质量,让老师减轻工作量,提高工作效率。
建立课程管理系统就是为了实现信息的规管理、科学统计和快速查询,从而减少管理面的工作量。
课程管理系统主要提供教师、学生的学籍管理、成绩管理和课程管理功能。
2.需求功能分析:
教师和学生的登录
学生学籍的添加、修改、删除、查询
课程管理的添加、修改、删除、查询
教师授课的安排
3.用户需求分析
用户的需求具体体现在各种信息的提供、保存、更新、查询面,这就要求数据库机构能充分满足各种信息的输入和输出。
收集基本数据、数据结构以及数据处理流程,组成一份详尽的数据字典,为后面的具体设计打下基础。
针对课程管理系统的需求,通过对课程管理系统的设计和数据流程的分析,设计如下所示的数据项和数据存储表:
登录信息:
包括用户号、密码、权限
学籍信息:
包括用户号、姓名、性别、出生日期、班级、入学日期、家庭住址、
课程信息:
包括课程号、课程名、类型、教师名
4.统的总体结构设计
该系统共有三个模块:
登陆模块、学籍管理模块、课程信息模块。
这几个模块同时还包括数据添加、数据修改、数据删除、数据查询等几个基本操作。
(1)登录模块在登录界面中教师和学生可登录。
在登录界面中分别填入用户名、密码和身份,然后按确认键登录。
如果填入信息有误则弹出错误信息的提示窗口,重新返回登陆窗口。
如果填入信息正确则要根据登录信息表中登录者的权限(“0”或“1”)分别进入教师(“1”)或学生(“0”)管理系统主界面。
(2)学籍管理模块该模块主要完成学生基本信息的添加、修改、删除、查询等功能。
根据登录时权限的判断,权限为“0”时,是学生进入该模块,只可对自己的学籍进行查询,添加、修改、删除功能不可用;权限为“1”时,教师进入该模块,此时可进行所有学生学籍的查询、添加、修改、删除,在此模块中定义了8个数据来进行学生的信息存储,如果修改某个记录,可单击修改按钮进行数据的编辑,此时界面数据容和数据库容将同时更新。
(4)课程管理模块该模块主要完成存储课程的所有信息的添加、修改、删除、查询等功能。
根据登录时权限的判断,权限为“0”时,学生进入该模块,只可进行课程查询,添加、修改、删除功能不可用;权限为“1”时,教师进入该模块,可进行查询、添加、修改、删除,在此模块中定义了6个数据来进行课程的信息存储,如果修改某一纪录,可单击修改单按钮进行课程记数据的编辑,此时界面数据容和数据库容将同时更新。
2、概念设计
数据字典
1
数据项名
数据类型
长度
注明
学生学号
字符型
10
6位十进制数
学生姓名
字符型
8
年龄
字符型
16
籍贯
字符型
8
学生出生地
入学时间
日期型
教室编号
字符型
10
以A,B,C,D开头,后接4位十进制数
教室所属校区
字符型
10
A,B,C,D
教学楼
字符型
8
管理员代码
字符型
20
6位十进制数
管理员姓名
字符型
8
管理员
字符型
20
课程代码
字符型
8
4位十进制数
学院代码
字符型
10
2位十进制数
课程名
字符型
8
课程人数
数值型
课程所属校区
字符型
10
A,B,C,D
班级代码
字符型
10
4位十进制数
专业代码
字符型
10
2位十进制数
班级名
字符型
8
班级学生数
数值型
学院代码
字符型
10
2位十进制数
专业名
字符型
8
学院名
字符型
10
学院人数
字符型
10
教工号
字符型
10
6位十进制数
教师姓名
字符型
8
教师
字符型
20
教师
字符型
30
课程管理系统数据库中的E-R图
3、逻辑设计
将上面的E-R图转化为如下关系模型,下划横线代表关系的主键:
学生(学号,姓名,年龄,籍贯,入学时间,专业代码,班级代码,学院代码)
班级(班级代码,专业代码,班级名,学生数)
专业(专业代码,学院代码。
专业名称)
学院(学院代码,学院名,学员人数)
教师(教工号,教师姓名,教师,教师)
从属(加工号,学院代码)
课程(课程代码,学院代码,课程名,人数,学分)
管理员(管理员代码,管理员姓名,管理员,管理员)
教室(教室编号,所属校区,教学楼)
安排(课程代码,教工号,教室编号,管理员代码,上课时间)
分配(学号,教室编号)
选择(学号,课程代码)
二、转化后的关系模型如图:
三、数据库实现
1、数据库视图的创建
1)创建一个学号为20105263的学生的查询视图;
Createview学生信息(学生学号,所选课程名称,所在班级代号,老师姓名,上课教室)
as
select学生学号,课程名,班级代码,教师姓名,教室编号
from学生,课程,班级,教师,教室
where学生.班级代码=班级.班级代码and学生.学院代码=学院.学院代码
2)创建一个教工号为5132的教师的查询视图;
Createview教师信息(所教课程名称,所教班级代号,所属学院,上课教室)
as
select课程名,班级代码,学院,教室编号
from课程,班级,学院,教室,教师
where教师.教工号=‘5132’;
3)创建一个管理员的查询视图
Createview管理员视图(课程名称,老师姓名,学生姓名,教室编号)
as
select课程名,教师姓名,学生姓名,教室编号
from课程,教师,学生,教室;
2、索引的创建
我们可以在视图学生信息中的”学号列”上创建一个索引
Createdindexstu_indexon学生信息(学号)。
3、权限管理,安全性设计
授予权限
1.给学生一个可以查看课程安排的权限
Grantselecton安排to学生
2.给教师一个可以查看学生选择课程情况的权限
Grantselecton选择to教师
3.给教师一个可以查看课程安排的权限
Grantupdateon安排to教师
4.给学生一个可以查看自己的选课的权限
Grantselecton选择to学生
4.给管理员一个可以查看课程安排的权限
Grantselecton安排to管理员
6.给管理员一个删除教师和学生所选课程的权限
Grantupdateon课程to管理员
代码附录
ifexists(select1fromsys.sysforeignkeywhererole='FK_分配_分配_学生')then
altertable分配
deleteforeignkeyFK_分配_分配_学生
endif;
ifexists(select1fromsys.sysforeignkeywhererole='FK_学生_属于_班级')then
altertable学生
deleteforeignkeyFK_学生_属于_班级
endif;
ifexists(select1fromsys.sysforeignkeywhererole='FK_学生_所在_专业')then
altertable学生
deleteforeignkeyFK_学生_所在_专业
endif;
ifexists(select1fromsys.sysforeignkeywhererole='FK_学生_所属_学院')then
altertable学生
deleteforeignkeyFK_学生_所属_学院
endif;
ifexists(select1fromsys.sysforeignkeywhererole='FK_选择_选择_学生')then
altertable选择
deleteforeignkeyFK_选择_选择_学生
endif;
dropindexifexists学生.所属_FK;
dropindexifexists学生.所在_FK;
dropindexifexists学生.属于_FK;
dropindexifexists学生.学生_PK;
droptableifexists学生;
/*==============================================================*/
/*Table:
学生*/
/*==============================================================*/
createtable学生
(
学号varchar(10)notnull,
专业代码varchar(10)notnull,
班级代码varchar(10)notnull,
学院代码varchar(10)notnull,
学生姓名varchar(8)null,
年龄varchar(16)null,
籍贯varchar(8)null,
入学时间timestampnull,
constraintPK_学生primarykey(学号)
);
/*==============================================================*/
/*Index:
学生_PK*/
/*==============================================================*/
createuniqueindex学生_PKon学生(
学号ASC
);
/*==============================================================*/
/*Index:
属于_FK*/
/*==============================================================*/
createindex属于_FKon学生(
班级代码ASC
);
/*==============================================================*/
/*Index:
所在_FK*/
/*==============================================================*/
createindex所在_FKon学生(
专业代码ASC
);
/*==============================================================*/
/*Index:
所属_FK*/
/*==============================================================*/
createindex所属_FKon学生(
学院代码ASC
);
altertable学生
addconstraintFK_学生_属于_班级foreignkey(班级代码)
references班级(班级代码)
onupdaterestrict
ondeleterestrict;
altertable学生
addconstraintFK_学生_所在_专业foreignkey(专业代码)
references专业(专业代码)
onupdaterestrict
ondeleterestrict;
altertable学生
addconstraintFK_学生_所属_学院foreignkey(学院代码)
references学院(学院代码)
onupdaterestrict
ondeleterestrict;
ifexists(select1fromsys.sysforeignkeywhererole='FK_学生_属于_班级')then
altertable学生
deleteforeignkeyFK_学生_属于_班级
endif;
ifexists(select1fromsys.sysforeignkeywhererole='FK_班级_包含_专业')then
altertable班级
deleteforeignkeyFK_班级_包含_专业
endif;
dropindexifexists班级.包含_FK;
dropindexifexists班级.班级_PK;
droptableifexists班级;
/*==============================================================*/
/*Table:
班级*/
/*==============================================================*/
createtable班级
(
班级代码varchar(10)notnull,
专业代码varchar(10)notnull,
班级名varchar(8)null,
学生数integernull,
班主任char(10)null,
constraintPK_班级primarykey(班级代码)
);
/*==============================================================*/
/*Index:
班级_PK*/
/*==============================================================*/
createuniqueindex班级_PKon班级(
班级代码ASC
);
/*==============================================================*/
/*Index:
包含_FK*/
/*==============================================================*/
createindex包含_FKon班级(
专业代码ASC
);
altertable班级
addconstraintFK_班级_包含_专业foreignkey(专业代码)
references专业(专业代码)
onupdaterestrict
ondeleterestrict;ifexists(select1fromsys.sysforeignkeywhererole='FK_专业_含有_学院')then
altertable专业
deleteforeignkeyFK_专业_含有_学院
endif;
ifexists(select1fromsys.sysforeignkeywhererole='FK_学生_所在_专业')then
altertable学生
deleteforeignkeyFK_学生_所在_专业
endif;
ifexists(select1fromsys.sysforeignkeywhererole='FK_班级_包含_专业')then
altertable班级
deleteforeignkeyFK_班级_包含_专业
endif;
dropindexifexists专业.所属_FK;
dropindexifexists专业.专业_PK;
droptableifexists专业;
/*==============================================================*/
/*Table:
专业*/
/*==============================================================*/
createtable专业
(
专业代码varchar(10)notnull,
学院代码varchar(10)notnull,
专业名varchar(8)null,
constraintPK_专业primarykey(专业代码)
);
/*==============================================================*/
/*Index:
专业_PK*/
/*==============================================================*/
createuniqueindex专业_PKon专业(
专业代码ASC
);
/*==============================================================*/
/*Index:
所属_FK*/
/*==============================================================*/
createindex所属_FKon专业(
学院代码ASC
);
altertable专业
addconstraintFK_专业_含有_学院foreignkey(学院代码)
references学院(学院代码)
onupdaterestrict
ondeleterestrict;ifexists(select1fromsys.sysforeignkeywhererole='FK_安排_安排_课程')then
altertable安排
deleteforeignkeyFK_安排_安排_课程
endif;
ifexists(select1fromsys.sysforeignkeywhererole='FK_课程_开设_学院')then
altertable课程
deleteforeignkeyFK_课程_开设_学院
endif;
ifexists(select1fromsys.sysforeignkeywhererole='FK_选择_选择2_课程')then
altertable选择
deleteforeignkeyFK_选择_选择2_课程
endif;
dropindexifexists课程.开设_FK;
dropindexifexists课程.课程_PK;
droptableifexists课程;
/*==============================================================*/
/*Table:
课程*/
/*==============================================================*/
createtable课程
(
课程代码varchar(8)notnull,
学院代码varchar(10)notnull,
课程名varchar(8)null,
人数integernull,
所属校区varchar(10)null,
constraintPK_课程primarykey(课程代码)
);
/*==============================================================*/
/*Index:
课程_PK*/
/*==============================================================*/
createuniqueindex课程_PKon课程(
课程代码ASC
);
/*==============================================================*/
/*Index:
开设_FK*/
/*==============================================================*/
createindex开设_FKon课程(
学院代码ASC
);
altertable课程
addconstraintFK_课程_开设_学院foreignkey(学院代码)
references学院(学院代码)
onupdaterestrict
ondeleterestrict;ifexists(select1fromsys.sysforeignkeywhererole='FK_专业_含有_学院')then
altertable专业
deleteforeignkeyFK_专业_含有_学院
endif;
ifexists(select1fromsys.sysforeignkeywhererole='FK_从属_从属2_学院')then
altertable从属
deleteforeignkeyFK_从属_从属2_学院
endif;
ifexists(select1fromsys.sysforeignkeywhererole='FK_学生_所属_学院')then
altertable学生
deleteforeignkeyFK_学生_所属_学院
endif;
ifexists(select1fromsys.sysforeignkeywhererole='FK_课程_开设_学院')then
altertable课程
deleteforeignkeyFK_课程_开设_学院
endif;
dropindexifexists学院.学院_PK;
droptableifexists学院;
/*================================