当前位置:文档之家› 课程管理系统数据库设计及实现

课程管理系统数据库设计及实现

大学课程设计报告课程设计题目:“课程管理系统”数据库设计与实现学院:专业班级:年级:姓名:学号:完成时间:年月日成绩:指导教师:目录第1章课程管理系统功能需求分析第2章课程管理系统概念结构设计2.1设计E-R图2.2 E-R模型向关系模型的转换第3章创建视图与索引,授予用户权限3.1创建视图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开头,教师姓名字符型8教师电话字符型20教师邮箱字符型30课程管理系统数据库中的E-R图3、逻辑设计将上面的E-R图转化为如下关系模型,下划横线代表关系的主键:学生(学号,姓名,年龄,籍贯,入学时间,专业代码,班级代码,学院代码)班级(班级代码,专业代码,班级名,学生数)专业(专业代码,学院代码。

专业名称)学院(学院代码,学院名,学员人数)教师(教工号,教师姓名,教师电话,教师邮箱)从属(加工号,学院代码)课程(课程代码,学院代码,课程名,人数,学分)管理员(管理员代码,管理员姓名,管理员电话,管理员邮箱)教室(教室编号,所属校区,教学楼)安排(课程代码,教工号,教室编号,管理员代码,上课时间)分配(学号,教室编号)选择(学号,课程代码)二、转化后的关系模型如图:三、数据库实现1、数据库视图的创建1)创建一个学号为20105263的学生的查询视图;Create view 学生信息(学生学号,所选课程名称,所在班级代号,老师姓名,上课教室)asselect学生学号,课程名,班级代码,教师姓名,教室编号from学生,课程,班级,教师,教室where学生.班级代码=班级.班级代码and 学生.学院代码=学院. 学院代码2)创建一个教工号为5132的教师的查询视图;Create view 教师信息(所教课程名称,所教班级代号,所属学院,上课教室)asselect 课程名,班级代码,学院,教室编号from 课程,班级,学院,教室,教师where 教师.教工号=‘5132’;3)创建一个管理员的查询视图Create view 管理员视图(课程名称,老师姓名,学生姓名,教室编号)asselect 课程名,教师姓名,学生姓名,教室编号from 课程,教师,学生,教室;2、索引的创建我们可以在视图学生信息中的”学号列”上创建一个索引Created index stu_index on 学生信息(学号)。

3、权限管理,安全性设计授予权限1.给学生一个可以查看课程安排的权限Grant select on 安排to 学生2.给教师一个可以查看学生选择课程情况的权限Grant select on 选择to 教师3.给教师一个可以查看课程安排的权限Grant update on 安排to 教师4.给学生一个可以查看自己的选课的权限Grant select on 选择to 学生4.给管理员一个可以查看课程安排的权限Grant select on 安排to 管理员6.给管理员一个删除教师与学生所选课程的权限Grant update on 课程to 管理员代码附录if exists(select 1 from sys.sysforeignkey where role='FK_分配_分配_学生') then alter table 分配delete foreign key FK_分配_分配_学生end if;if exists(select 1 from sys.sysforeignkey where role='FK_学生_属于_班级') then alter table 学生delete foreign key FK_学生_属于_班级end if;if exists(select 1 from sys.sysforeignkey where role='FK_学生_所在_专业') then alter table 学生delete foreign key FK_学生_所在_专业end if;if exists(select 1 from sys.sysforeignkey where role='FK_学生_所属_学院') then alter table 学生delete foreign key FK_学生_所属_学院end if;if exists(select 1 from sys.sysforeignkey where role='FK_选择_选择_学生') then alter table 选择delete foreign key FK_选择_选择_学生end if;drop index if exists 学生.所属_FK;drop index if exists 学生.所在_FK;drop index if exists 学生.属于_FK;drop index if exists 学生.学生_PK;drop table if exists 学生;/*==============================================================*/ /* Table: 学生 */ /*==============================================================*/ create table 学生(学号 varchar(10) not null, 专业代码 varchar(10) not null, 班级代码 varchar(10) not null, 学院代码 varchar(10) not null, 学生姓名 varchar(8) null,年龄 varchar(16) null,籍贯 varchar(8) null,入学时间 timestamp null,constraint PK_学生 primary key (学号));/*==============================================================*/ /* Index: 学生_PK *//*==============================================================*/ create unique index 学生_PK on 学生 (学号 ASC);/*==============================================================*/ /* Index: 属于_FK */ /*==============================================================*/ create index 属于_FK on 学生 (班级代码 ASC);/*==============================================================*/ /* Index: 所在_FK */ /*==============================================================*/ create index 所在_FK on 学生 (专业代码 ASC);/*==============================================================*/ /* Index: 所属_FK */ /*==============================================================*/ create index 所属_FK on 学生 (学院代码 ASC);alter table 学生add constraint FK_学生_属于_班级 foreign key (班级代码)references 班级 (班级代码)on update restricton delete restrict;alter table 学生add constraint FK_学生_所在_专业 foreign key (专业代码)references 专业 (专业代码)on update restricton delete restrict;alter table 学生add constraint FK_学生_所属_学院 foreign key (学院代码)references 学院 (学院代码)on update restricton delete restrict;if exists(select 1 from sys.sysforeignkey where role='FK_学生_属于_班级') then alter table 学生delete foreign key FK_学生_属于_班级end if;if exists(select 1 from sys.sysforeignkey where role='FK_班级_包含_专业') then alter table 班级delete foreign key FK_班级_包含_专业end if;drop index if exists 班级.包含_FK;drop index if exists 班级.班级_PK;drop table if exists 班级;/*==============================================================*/ /* Table: 班级 */ /*==============================================================*/ create table 班级(班级代码 varchar(10) not null, 专业代码 varchar(10) not null, 班级名 varchar(8) null,学生数 integer null,班主任 char(10) null,constraint PK_班级 primary key (班级代码));/*==============================================================*/ /* Index: 班级_PK */ /*==============================================================*/ create unique index 班级_PK on 班级 (班级代码 ASC);/*==============================================================*/ /* Index: 包含_FK */ /*==============================================================*/ create index 包含_FK on 班级 (专业代码 ASC);alter table 班级add constraint FK_班级_包含_专业 foreign key (专业代码)references 专业 (专业代码)on update restricton delete restrict; if exists(select 1 from sys.sysforeignkey where role='FK_专业_含有_学院') thenalter table 专业delete foreign key FK_专业_含有_学院end if;if exists(select 1 from sys.sysforeignkey where role='FK_学生_所在_专业') thenalter table 学生delete foreign key FK_学生_所在_专业end if;if exists(select 1 from sys.sysforeignkey where role='FK_班级_包含_专业') thenalter table 班级delete foreign key FK_班级_包含_专业end if;drop index if exists 专业.所属_FK;drop index if exists 专业.专业_PK;drop table if exists 专业;/*==============================================================*//* Table: 专业 *//*==============================================================*/create table 专业(专业代码 varchar(10) not null,学院代码 varchar(10) not null,专业名 varchar(8) null,constraint PK_专业 primary key (专业代码));/*==============================================================*//* Index: 专业_PK *//*==============================================================*/create unique index 专业_PK on 专业 (专业代码 ASC);/*==============================================================*//* Index: 所属_FK *//*==============================================================*/create index 所属_FK on 专业 (学院代码 ASC);alter table 专业add constraint FK_专业_含有_学院 foreign key (学院代码)references 学院 (学院代码)on update restricton delete restrict; if exists(select 1 from sys.sysforeignkey where role='FK_安排_安排_课程') thenalter table 安排delete foreign key FK_安排_安排_课程end if;if exists(select 1 from sys.sysforeignkey where role='FK_课程_开设_学院') then alter table 课程delete foreign key FK_课程_开设_学院end if;if exists(select 1 from sys.sysforeignkey where role='FK_选择_选择2_课程') then alter table 选择delete foreign key FK_选择_选择2_课程end if;drop index if exists 课程.开设_FK;drop index if exists 课程.课程_PK;drop table if exists 课程;/*==============================================================*//* Table: 课程 *//*==============================================================*/create table 课程(课程代码 varchar(8) not null,学院代码 varchar(10) not null,课程名 varchar(8) null,人数 integer null,所属校区 varchar(10) null,constraint PK_课程 primary key (课程代码));/*==============================================================*//* Index: 课程_PK *//*==============================================================*/create unique index 课程_PK on 课程 (课程代码 ASC);/*==============================================================*//* Index: 开设_FK *//*==============================================================*/create index 开设_FK on 课程 (学院代码 ASC);alter table 课程add constraint FK_课程_开设_学院 foreign key (学院代码)references 学院 (学院代码)on update restricton delete restrict; if exists(select 1 from sys.sysforeignkey where role='FK_专业_含有_学院') thenalter table 专业delete foreign key FK_专业_含有_学院end if;if exists(select 1 from sys.sysforeignkey where role='FK_从属_从属2_学院') thenalter table 从属delete foreign key FK_从属_从属2_学院end if;if exists(select 1 from sys.sysforeignkey where role='FK_学生_所属_学院') then alter table 学生delete foreign key FK_学生_所属_学院end if;if exists(select 1 from sys.sysforeignkey where role='FK_课程_开设_学院') then alter table 课程delete foreign key FK_课程_开设_学院end if;drop index if exists 学院.学院_PK;drop table if exists 学院;/*==============================================================*//* Table: 学院 *//*==============================================================*/create table 学院(学院代码 varchar(10) not null,学院名 varchar(8) null,学院人数 integer null,constraint PK_学院 primary key (学院代码));/*==============================================================*//* Index: 学院_PK *//*==============================================================*/create unique index 学院_PK on 学院 (学院代码 ASC); if exists(select 1 from sys.sysforeignkey where role='FK_安排_安排4_管理员') then alter table 安排delete foreign key FK_安排_安排4_管理员end if;drop index if exists 管理员.教务处_PK;drop table if exists 管理员;/*==============================================================*//* Table: 管理员 *//*==============================================================*/create table 管理员(管理员代码 varchar(20) not null,学生姓名 varchar(8) null,教师电话 varchar(20) null,管理员邮箱 char(10) null,constraint PK_管理员 primary key (管理员代码));/*==============================================================*//* Index: 教务处_PK *//*==============================================================*/create unique index 教务处_PK on 管理员 (管理员代码 ASC); if exists(select 1 from sys.sysforeignkey where role='FK_从属_从属_教师') then alter table 从属delete foreign key FK_从属_从属_教师end if;if exists(select 1 from sys.sysforeignkey where role='FK_安排_安排2_教师') then alter table 安排delete foreign key FK_安排_安排2_教师end if;drop index if exists 教师.教师_PK;drop table if exists 教师;/*==============================================================*//* Table: 教师 *//*==============================================================*/create table 教师(教工号 varchar(10) not null,学生姓名 varchar(8) null,教师电话 varchar(20) null,教师邮箱 varchar(30) null,constraint PK_教师 primary key (教工号));/*==============================================================*//* Index: 教师_PK *//*==============================================================*/create unique index 教师_PK on 教师 (教工号 ASC); if exists(select 1 from sys.sysforeignkey where role='FK_分配_分配2_教室') then alter table 分配delete foreign key FK_分配_分配2_教室end if;if exists(select 1 from sys.sysforeignkey where role='FK_安排_安排3_教室') thenalter table 安排delete foreign key FK_安排_安排3_教室end if;drop index if exists 教室.教室_PK;drop table if exists 教室;/*==============================================================*//* Table: 教室 *//*==============================================================*/create table 教室(教室编号 varchar(10) not null,所属校区 varchar(10) null,教学楼 varchar(8) null,constraint PK_教室 primary key (教室编号));/*==============================================================*//* Index: 教室_PK *//*==============================================================*/create unique index 教室_PK on 教室 (教室编号 ASC); if exists(select 1 from sys.sysforeignkey where role='FK_选择_选择_学生') then alter table 选择delete foreign key FK_选择_选择_学生end if;if exists(select 1 from sys.sysforeignkey where role='FK_选择_选择2_课程') then alter table 选择delete foreign key FK_选择_选择2_课程end if;drop index if exists 选择.选择2_FK;drop index if exists 选择.选择_FK;drop index if exists 选择.选择_PK;drop table if exists 选择;/*==============================================================*//* Table: 选择 *//*==============================================================*/create table 选择(学号 varchar(10) not null,课程代码 varchar(8) not null,constraint PK_选择 primary key clustered (学号, 课程代码)/*==============================================================*//* Index: 选择_PK */ /*==============================================================*/ create unique clustered index 选择_PK on 选择 (学号 ASC,课程代码 ASC);/*==============================================================*//* Index: 选择_FK */ /*==============================================================*/ create index 选择_FK on 选择 (学号 ASC);/*==============================================================*//* Index: 选择2_FK */ /*==============================================================*/ create index 选择2_FK on 选择 (课程代码 ASC);alter table 选择add constraint FK_选择_选择_学生 foreign key (学号)references 学生 (学号)on update restricton delete restrict;alter table 选择add constraint FK_选择_选择2_课程 foreign key (课程代码)references 课程 (课程代码)on update restricton delete restrict; if exists(select 1 from sys.sysforeignkey where role='FK_分配_分配_学生') thenalter table 分配delete foreign key FK_分配_分配_学生end if;if exists(select 1 from sys.sysforeignkey where role='FK_分配_分配2_教室') thenalter table 分配delete foreign key FK_分配_分配2_教室end if;drop index if exists 分配.分配2_FK;drop index if exists 分配.分配_FK;drop index if exists 分配.分配_PK;drop table if exists 分配;/*==============================================================*//* Table: 分配 *//*==============================================================*/create table 分配(学号 varchar(10) not null, 教室编号 varchar(10) not null, constraint PK_分配 primary key clustered (学号, 教室编号));/*==============================================================*//* Index: 分配_PK */ /*==============================================================*/ create unique clustered index 分配_PK on 分配 (学号 ASC,教室编号 ASC);/*==============================================================*//* Index: 分配_FK */ /*==============================================================*/ create index 分配_FK on 分配 (学号 ASC);/*==============================================================*//* Index: 分配2_FK */ /*==============================================================*/ create index 分配2_FK on 分配 (教室编号 ASC);alter table 分配add constraint FK_分配_分配_学生 foreign key (学号)references 学生 (学号)on update restricton delete restrict;alter table 分配add constraint FK_分配_分配2_教室 foreign key (教室编号)references 教室 (教室编号)on update restricton delete restrict; if exists(select 1 from sys.sysforeignkey where role='FK_安排_安排_课程') thenalter table 安排delete foreign key FK_安排_安排_课程end if;if exists(select 1 from sys.sysforeignkey where role='FK_安排_安排2_教师') thenalter table 安排delete foreign key FK_安排_安排2_教师end if;if exists(select 1 from sys.sysforeignkey where role='FK_安排_安排3_教室') thenalter table 安排delete foreign key FK_安排_安排3_教室end if;if exists(select 1 from sys.sysforeignkey where role='FK_安排_安排4_管理员') then alter table 安排delete foreign key FK_安排_安排4_管理员end if;drop index if exists 安排.安排4_FK;drop index if exists 安排.安排3_FK;drop index if exists 安排.安排2_FK;drop index if exists 安排.安排_FK;drop index if exists 安排.安排_PK;drop table if exists 安排;/*==============================================================*//* Table: 安排 *//*==============================================================*/create table 安排(课程代码 varchar(8) not null,教工号 varchar(10) not null,教室编号 varchar(10) not null,管理员代码 varchar(20) not null,上课时间 char(10) null,constraint PK_安排 primary key clustered (课程代码, 教工号, 教室编号, 管理员代码) );/*==============================================================*//* Index: 安排_PK *//*==============================================================*/create unique clustered index 安排_PK on 安排 (课程代码 ASC,教工号 ASC,教室编号 ASC,管理员代码 ASC);/*==============================================================*//* Index: 安排_FK */ /*==============================================================*/ create index 安排_FK on 安排 (课程代码 ASC);/*==============================================================*//* Index: 安排2_FK */ /*==============================================================*/ create index 安排2_FK on 安排 (教工号 ASC);/*==============================================================*//* Index: 安排3_FK */ /*==============================================================*/ create index 安排3_FK on 安排 (教室编号 ASC);/*==============================================================*//* Index: 安排4_FK *//*==============================================================*/create index 安排4_FK on 安排 (管理员代码 ASC);alter table 安排add constraint FK_安排_安排_课程 foreign key (课程代码)references 课程 (课程代码)on update restricton delete restrict;alter table 安排add constraint FK_安排_安排2_教师 foreign key (教工号)references 教师 (教工号)on update restricton delete restrict;alter table 安排add constraint FK_安排_安排3_教室 foreign key (教室编号)references 教室 (教室编号)on update restricton delete restrict;alter table 安排add constraint FK_安排_安排4_管理员 foreign key (管理员代码)references 管理员 (管理员代码)on update restricton delete restrict; if exists(select 1 from sys.sysforeignkey where role='FK_从属_从属_教师') thenalter table 从属delete foreign key FK_从属_从属_教师end if;if exists(select 1 from sys.sysforeignkey where role='FK_从属_从属2_学院') then alter table 从属delete foreign key FK_从属_从属2_学院end if;drop index if exists 从属.从属2_FK;drop index if exists 从属.从属_FK;drop index if exists 从属.从属_PK;drop table if exists 从属;/*==============================================================*//* Table: 从属 *//*==============================================================*/create table 从属(教工号 varchar(10) not null,学院代码 varchar(10) not null,constraint PK_从属 primary key clustered (教工号, 学院代码));/*==============================================================*//* Index: 从属_PK *//*==============================================================*/create unique clustered index 从属_PK on 从属 (教工号 ASC,学院代码 ASC);/*==============================================================*//* Index: 从属_FK *//*==============================================================*/create index 从属_FK on 从属 (教工号 ASC);/*==============================================================*//* Index: 从属2_FK *//*==============================================================*/create index 从属2_FK on 从属 (学院代码 ASC);alter table 从属add constraint FK_从属_从属_教师 foreign key (教工号) references 教师 (教工号)on update restricton delete restrict;alter table 从属add constraint FK_从属_从属2_学院 foreign key (学院代码)references 学院 (学院代码)on update restricton delete restrict;附录2:参考资料数据库系统基础教程(中、英文版,第2版),美国斯坦福大学,机械工业出版社2006.07《数据库设计教程》,何玉洁等翻译,机械工业出版社,2003《数据库系统教程》,王能斌著,电子工业出版社,2002。

相关主题