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