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






