数据库学生管理系统课程设计.docx
《数据库学生管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《数据库学生管理系统课程设计.docx(24页珍藏版)》请在冰豆网上搜索。
数据库学生管理系统课程设计
一、问题描述:
系统中有三类用户:
管理员、教师和学生。
各类用户的具体描述如下:
(1)管理员
描述:
管理员维护整个系统,包括设置选课时段,选课前学生不可登录;
选课结束,学生只可查询,管理员对选课结果进行统计;
查询选课情况,对学生的选课申请进行处理,进行用户管理;
限制最大选课人数;
排课、发布选课信息;
数据备份和恢复等。
(2)教师
描述:
教师撰写教师反馈,反馈选课信息,
对排课者提出反馈意见,供排课者(管理员)在排课时参考使用。
查询课程基本情况、学生情况。
(3)学生
描述:
在选课系统中查询课程、教室信息,
查看教师反馈,提交选课申请,撤销申请,
查询选课情况,登录系统,进行个人信息修改等与选课有关的活动。
系统进行了划分,分为三个主要处理业务,
即登录控制业务、排课业务和选课业务。
其中,登录是前提,排课是基础,选课是关键。
登录区描述:
分排课者(即系统管理员),教师和学生这三者的不同身份,给出不同的权限,在页面中根据身份判断其相应具有的权限,进行不同的操作。
排课业务描述:
主要供排课者使用,其中设定选课时间段,进行排课并检测排课冲突,发布选课信息都是选课的前提和基础。
选课业务描述:
是本系统要实现的最终目的。
选课业务主要供学生选课使用,在这里可以进行与选课有关的活动,包括课程浏览查询、选课、退选课程。
二、需求分析:
(一)数据流图-学生界面
查询信息
回复查询结果查询请求
课程信息表
查询请求退选回复
课程
修改信息
验证信息
查询
学生界面
学生
用户名、密码正确信息信息
回复
错误信息密码
修改回
用户名、密码验证结果请求复退选课程信息
修改密码
新密码修改成功
学生信息表选课信息表
修改成功
添加、删除选课信息
回复查询请求
(二)数据流图-教师界面
授课表
回复查询成绩信息
查询教学安排
回复教学安排回复查询个人信息
查询信息
回复查询结果查询个人信息
查询成绩信息
课程信息表
查询请求成绩
录入学生成绩
验证信息
录入
教师界面
教师
用户名、密码正确信息请求
回复
错误信息密码回
修改复
用户名、密码验证结果请求成绩单录入
修改密码
新密码成功
教师信息表选课信息表
修改成功
(三)数据流图-管理员界面
学生信息教师信息课程信息授课信息
查询添加查询添加查询添加查询添加
修改删除修改删除修改删除修改删除
删除信息
修改信息
添加信息
查询信息
回回复回复
复查询请求添加请求修改请求删除请求
验证信息
回复
管理员
管理员界面
用户名、密码正确信息
错误信息密码
修改回
用户名、密码验证结果请求复
修改密码
新密码
管理员信息表
修改成功
(四)数据字典
数据元素
数据类型
长度
数据来源
学号
nchar
10
学生表
姓名
nchar
8
学生表
密码
nchar
20
学生表
专业
nchar
20
学生表
系别
nchar
20
学生表
年龄
int
2
学生表
教职工号
nchar
10
教师表
姓名
nchar
8
教师表
密码
nchar
20
教师表
职工号
nchar
10
管理员表
姓名
nchar
8
管理员表
密码
nchar
20
管理员表
课程编号
nchar
10
课程表
课程名
nchar
8
课程表
学分
float
1
课程表
学号
nchar
10
选课表
课程编号
nchar
10
选课表
成绩
numeric
(4,2)
选课表
教职工号
nchar
10
授课表
课程编号
nchar
10
授课表
课时
nchar
10
授课表
已选人数
Int
2
选课表
可选人数
Int
2
选课表
三、概念结构设计:
(一)各个实体的E-R图分别如下图所示
教职工号
密码
姓名
职工号
密码
姓名
教师
管理员
年龄
系别
专业
密码
姓名
学号
学生
课程名
课程编号
学分
课程
学号
课程编号
教职工号
课时
课程编号
成绩
已选人数
可选人数
选课
排课
(二)局部E-R图分别如下图所示
学-课
课程
学生
mn
成绩
课时
教-课
课程
教师
m1
学分
学生
教-学
教师
mn
管-学
学生
管理员
mn
管-教
教师
管理员
mn
管-课
课程
管理员
mn
(三)合并E-R图如下图所示(各实体联系属性省略)
全局E-R图
学生
nn
教-学
管-学
m
mm
学-课
教师
管-教
管理员
n
m
m
教-课
管-课
m
n
n1
课程
三、逻辑结构设计:
关系模式(属于3NF):
教师(教职工号、姓名、密码)
管理员(职工号、姓名、密码)
学生(学号、姓名、密码、专业、系别、年龄)
课程(课程编号、课程名、学分)
管-学(职工号、学号、教职工号、课程编号)
教-学(学号、教职工号、学分)
教-课(教职工号、课程编号、课时)
学-课(学号、课程编号、成绩、已选人数、可选人数)
学生信息表
序号
列名
数据类型
可否NULL
主码
备注
1
学号
nchar(10)
否
√
完整性
2
姓名
nchar(10)
否
3
年龄
int
可
4
专业
nchar(20)
可
5
系别
nchar(20)
可
6
密码
nchar(20)
否
教师信息表
序号
列名
数据类型
可否NULL
主码
备注
1
教职工号
nchar(10)
否
√
完整性
2
姓名
nchar(8)
否
3
密码
nchar(20)
否
管理员信息表
序号
列名
数据类型
可否NULL
主码
备注
1
职工号
nchar(10)
否
√
完整性
2
姓名
nchar(8)
否
3
密码
nchar(20)
否
课程信息表
序号
列名
数据类型
可否NULL
主码
备注
1
课程编号
nchar(10)
否
√
完整性
2
课程名
nchar(8)
否
3
学分
Float
否
选课信息表
序号
列名
数据类型
可否NULL
主码
备注
1
学号
nchar(10)
否
√
完整性
2
课程编号
nchar(10)
否
√
完整性
3
成绩
numeric(4,2)
否
4
已选人数
int
可
5
可选人数
int
可
授课信息表
序号
列名
数据类型
可否NULL
主码
备注
1
教职工号
nchar(10)
否
√
完整性
2
课程编号
nchar(10)
否
√
完整性
3
课时
nchar(10)
否
数据库表关系图
四、物理结构设计:
(一)学生信息表
(二)教师信息表
(三)管理员信息表
(四)课程信息表
(五)选课信息表
(六)授课信息表
六、程序:
(一)索引的建立
CREATEUNIQUEINDEXadminidON管理员信息表(职工号);
CREATEUNIQUEINDEXstudentidON学生信息表(学号);
CREATEUNIQUEINDEXteacheridON教师信息表(教职工号);
CREATEUNIQUEINDEXcourseidON课程信息表(课程编号);
CREATEUNIQUEINDEXscidON选课信息表(学号,课程编号);
CREATEUNIQUEINDEXtcidON授课信息表(教职工号,课程编号);
(二)创建视图
1.创建学生信息视图
CREATEVIEW学生信息视图
(学号,姓名,年龄,系别,专业,密码)
AS
SELECT学号,姓名,年龄,系别,专业,密码
FROM学生信息表
2.创建教师信息视图
CREATEVIEW教师信息视图
(教职工号,姓名,密码)
AS
SELECT教职工号,姓名,密码
FROM教师信息表
3.创建管理员信息视图
CREATEVIEW管理员信息视图
(职工号,姓名,密码)
AS
SELECT职工号,姓名,密码
FROM管理员信息表
4.创建课程信息视图
CREATEVIEW课程信息视图
(课程编号,课程名,学分)
AS
SELECT课程编号,课程名,密码
FROM课程信息表
5.创建选课信息视图
CREATEVIEW选课信息视图
(学号,课程编号,成绩)
AS
SELECT学号,课程编号,成绩
FROM选课信息表
6.创建授课信息视图
CREATEVIEW授课信息视图
(教职工号,课程编号,课时,可选人数,已选人数)
AS
SELECT教职工号,课程编号,课时,可选人数,已选人数
FROM授课信息表
(三)创建触发器
(1)这个触发器在往选课信息表中插入选课信息后触发,其目的是让已选人数加一,可选人数减一,保证数据库数据的完整性;
DELIMITER//
CREATETRIGGERinfo
AFTERINSERT
ON选课信息表
FOREACHROW
BEGIN
UPDATE选课信息表SET已选人数=已选人数+1,可选人数=可选人数-1WHERE课程编号=new.课程编号;
END
//
(2)这个触发器是在删除选课信息表表中的选课信息时触发,其目的是让已选人数减一,可选人数加一,保证数据库数据的完整性;
DELIMITER//
CREATETRIGGER_info
AFTERDELETE
ON选课信息表
FOREACHROW
BEGIN
UPDATE选课信息表SET已选人数=已选人数-1,可选人数=可选人数+1WHERE课程编号=old.课程编号;
END
(四)例查询(仅举例)
1.
SELECT学号,课程名
FROM学生信息表,课程信息表
2.
SELECT学号,
sum(学分)总学分
FROM课程信息表,学生信息表
groupby学号
七、设计小结:
通过本次课程设计,使我真正的了解掌握了实际开发的过程、步骤。
在之前的一些课程设计中,总是先去写代码,在完成代码后补充其他部分,这次从需求分析开始,画出系统的数据流图,写出较为详细的数据字典;之后进行了概念结构设计,E-R图使问题更细化,层次化;接下来是逻辑结构设计,为了使系统优化程度更好,满足3NF,对系统数据库中的各种表进行了更加细化的定义;最后通过SQL语句进行查询等功能的实现。
过程条理清晰。
在以后的课题实现中,我也会遵循上述过程,使以后的学习实现过程规范化。
通过本次课程设计我也发现了自己对基础的专业知识还不够牢固,了解却不能掌握,又或者不能实际应用,学以致用,在老师指出问题后才发现,确实有这个知识点,但没有和实际操作相结合。
在以后的学习过程中,我也会把专业知识与实际问题结合起来,在掌握自己专业知识的同时,把自己的实际应用能力同步提高。
以上是我维持一周的课程设计心得体会。