1、课程设计报告题目:学生选课管理系统 课 程 数据库原理及应用 班 级 12 信管 姓 名 朱晨 汪杨潇 张厚义 学 号 1206121069 1206121065 1206121042 指导教师 杨慧 铜陵学院数学与计算机学院时间: 2014 年 5月 12日 至 2014 年 5 月 16 日指导教师对课程设计(论文)的评语(工作态度、任务完成情况、能力水平、设计说明书(论文)的撰写和图纸质量等):指 导 教 师 评 审 意 见评价内容具 体 要 求分数类别评分调 研论 证能独立查阅文献,收集资料;能制定课程设计方案和日程安排。10864工作能力态度工作态度认真,遵守纪律,出勤情况是否良好,
2、能够独立完成设计工作。2016128工作量按期圆满完成规定的设计任务,工作量饱满,难度适宜。2016128说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。50403020课程设计成绩指 导 教 师 签 名: 目 录第一章 开发背景4第二章 功能描述5第三章 业务流程分析6第四章 数据流程分析74.1数据流程图74.2数据字典7第五章 概念模型设计13第六章 逻辑模型设计和优化14第七章 物理设计和实施15第八章 系统测试17第九章 课程设计心得体会29参考文献30第一章 开发背景随着计算机应用的日益普及,教务管理自动化是提
3、高工作效率的有效途径,随着各高校学分制的实施,实现信息化管理学生选课势在必行。学生选课管理系统是教学管理的重要组成部分,其开发主要包括后台、数据库的建立和维护以及前端应用程序的开发两个方面,前者要求建立起数据的一致性、完整性和安全性好的数据库,而对于后者则要求应用程序功能完备、易使用及界面友好等特点。系统实现后,极大的方便对学生进行选课和选课后临时班级的安排管理,学生选课信息的管理。避免在安排课程信息的滞后,减少信息交流的烦琐过程及其带来的开销。促进高校教育的计算机信息化进程,提高学校的工作效率。对于系统的本身而言,应该具有较高的实用性、安全性。能够极大的满足学生选课,以及学校对选课信息的管理
4、。第二章 功能描述(1)在选课管理过程中,实现信息自动化管理;(2)实现各种信息的修改、删除、录入等管理功能;(3)实现对各种信息的查询、统计,支持模糊查询;(4)管理员可以设置学生什么时间开始选课,什么时间结束选课;学生根据开设课程进行选课操作,可以选课、退课、查询课程和课表;根据身份不同,权限也不相同;(5)当选课结束后,可以导出所有教师课程表,学生课程表;(6)对学生选课的结果,实现汇总、归纳和分析;按年份统计课程的学生选课人数及名单,按年份统计学生的选课内容;(7)按系统实际情况,数据量不低于200条记录。第三章 业务流程分析根据本系统需要实现的功能,管理职能分析以及设计管理员、教师与
5、学生之间的关系流程图如下:管理职能分析:选课管理课程管理课程查询管理课程编排管理统计分析选课人数查询条件课程表退出管理选入管理(1)网上选课系统总体业务流程图如下所示:系统管理员登录排课信息选课公告教师登录教师反馈学生选课登录学生选课系统与排课相关的信息排课 图3-1 系统总体业务流程图学生教师管理员 (2)登录子系统主要验证不同的用户身份并取得不同的用户权限,进行不同的系统操作。其业务流程图如下所示:学生信息输入登录信息输入登录信息验证登录信息用户信息输入登录信息验证登录信息教师信息验证登录信息显示验证信息修改密码进入系统登录失败、退出退出系统图3-2 登录子系统业务流程图系统管理员(3)排
6、课子系统主要完成设置选课时段、限制最大选课人数、排课并检测排课冲突、发布选课信息等功能。其业务流程图如下所示:图3-3排课子系统业务流程图选课公告备份排课信息备份排课检测排课冲突排课信息选课时间段设置选课时间段对课程进行排课课程信息院系信息教师信息教学楼信息进入排课系统学生 (4)选课子系统主要完成面向学生的选课功能,包括查询课程信息、提交选申请、撤销申请、查询选课情况等。其业务流程图如下所示:选课公告进入选课系统选课公告排课信息开始选课检测选课冲突显示选课结果完成选课退课学生选课信息图3-4选课子系统业务流程图 第四章 数据流程分析4.1数据流程图 (1) 网上选课系统顶层数据流图: 图4-
7、1 系统顶层数据流图(2) 网上选课系统第一层数据流图: 图4-2网上选课系统第一层数据流图(3)根据不同的用户权限,展开登录处理过程,数据流图如下: 图4-3管理员登录数据流图 图4-4 教师登录数据流图 图4-5学生登录数据流图(4) 排课过程的数据流图: 图4-6排课过程数据流图 (5)选课过程的数据流图如图:图4-7选课过程数据流图 4.2数据字典根据数据流程分析,对系统数据进行分析和汇总,建立系统数据字典。下面列出部分数据字典内容。 (1) 排课数据流编号:A01系统名:网上选课系统条目名:排课输入:课程信息表,教学楼信息表,教师信息表,院系信息表输出:排课表,选课通知表描述:排课者
8、按年级排课。排课表内容包括课程代号,课程名称,受课院系,专业代码,专业名称,教师代号,考察方式,学分,开课时间,上课时间,地点,开课院系,最大上课人数和课程选则限制(必修或选修)等。在排课过程中,排课者可以查询教室使用情况和院系课程设置。在排课者提交排课表以后,系统应当确保该排课方案中没有时间冲突和教室冲突。如果有冲突,系统应该提示排课者具体冲突产生的原因。(2) 选课数据流编号:A02系统名:网上选课系统 条目名:选课 输入:排课表,选课通知表,教师反馈表 输出:学生选课表 描述:学生可以在规定的时间段内选课。该规定时间段由排课者通过发布消息通知教师和学生。选课过程如下:学生在选课表上单击课
9、程号,则该信息被提交到服务器,并显示学生的选课结果。选课表的内容包括排课表的全部内容。如果一门课程已经达到最大选课人数,则不能再选择这门课程。如果有学生退课,则该门课程的已选人数减1。(3) 设定选课时间段数据流编号:A03 系统名:网上选课系统 条目名:设定选课时间段 输入:选课时间段表 输出:选课时间段表 描述:排课者应该设定选课时间段。学生只能在此设定的时间段内选课和退课。 第五章 概念模型设计根据需求分析与关系模式画出系统的E-R图如下: 图5-1排课过程实体及其属性 图5-2排课过程E-R图图5-3选课过程实体及其属性E-R图图5-4选课过程E-R图图5-5系统的总E-R图 第六章
10、逻辑模型设计和优化逻辑设计:(概念模型向关系模型的转换)根据E-R图,通过对实体的属性和之间的联系的分析,我们将其由概念模型向关系模型转化,并且根据范式化理论进行优化1:N联系的转化的关系模式(1)教师课程联系概念模型向关系模型的转化教师表(教师号,教师名,性别,年龄,身份,密码,课程号)课程表(课程号,课程名,学分,上课时间,开课时间,结束时间)(2)教师临时班级联系概念模型向关系模型的转化教师表(教师号,教师名,性别,年龄,身份,密码)临时班级表(班级号,班级名,人数,地点,教师号)(3)课程临时班级联系概念模型向关系模型的转化临时班级表(班级号,班级名,人数,地点,课程号)课程表(课程号
11、,课程名,学分,上课时间,开课时间,结束时间)M:N联系的转化的关系模式(1)学生选课联系概念模型向关系模型的转化学生表(学号,姓名,性别,年龄,系部,密码)课程表(课程号,课程名,学分,上课时间,开课时间,结束时间)选课表(学号,课程号,成绩)(2)学生班级联系概念模型向关系模型的转化学生表(学号,姓名,性别,年龄,系部,密码)临时班级表(班级号,班级名,人数,地点)学生班级关系表(学生号,班级号)优化: 确定范式级别根据上述分析所归结出来的数据依赖的种类和在本系统实际的开发过程中,需要涉及多表的查询及表的修改和删除,且存在多值依赖的实际情况下,其关系模式应达到BCNF。实施规范化处理由于学
12、生选课联系的关系模式、学生班级的关系模式和教师管理员联系的关系模式已经不存非平凡且非函数依赖额多值依赖,所以在这里不需要做处理各个关系模式的函数依赖集如下:教师课程联系:F=教师号教师名,教师号性别,教师号年龄,教师号身份,教师号密码,教师号课程号班级临时班级联系:F=班级号班级名,班级号人数,班级号地点,班级号教师号课程临时班级联系:F=班级号班级名,班级号人数,班级号地点,班级号课程号选课联系:F=(学号,课程号)成绩学生班级联系:F=(学生号,班级号)(1)教师课程联系概念模型向关系模型的优化教师表(教师号,教师名,性别,年龄,身份,密码)课程表(课程号,课程名,学分,上课时间,开课时间
13、,结束时间)教师课程联系(教师号,课程号)(2)教师临时班级联系概念模型向关系模型的优化教师表(教师号,教师名,性别,年龄,身份,密码)临时班级表(班级号,班级名,人数,地点)教师临时班级关系(班级号,教师号)(3)课程临时班级联系概念模型向关系模型的优化临时班级表(班级号,班级名,人数,地点)课程表(课程号,课程名,学分,上课时间,开课时间,结束时间)经过规范化处理后的所有关系模如下:学生表(学号,姓名,性别,年龄,系部,密码)课程表(课程号,课程名,学分,上课时间,开课时间,结束时间)教师表(教师号,教师名,性别,年龄,密码)教师课程关系(教师号, 课程号)选课表(学号,课程号,成绩) 第
14、七章 物理设计和实施得到系统逻辑模型后,就该进行数据库的物理设计和实施数据库了,物理设计主要是要确定数据库的存储路径、存储结构以及如何建立索引等,可以采用系统的默认设置。数据库实施主要包括在具体的DBMS中创建数据库和表的过程,本设计所选用的DBMS为SQL SERVER2010,有关创建数据库和关系表的SQL语句如下所示:(1)创建数据库/*=*/* DataBase: , 学生选课管理,创建数据库,数据库名称为学生选课管理*/create database 学生选课管理;(2)创建表Create table 学生基本档案(学号 char (10),姓名 char (10),年龄 int,性
15、别 char (2 ),班级 char (10 ),院部 char (15 )密码 char (10 );Create table 教师基本信息教师号 char (10),姓名 char (10),性别 char (2),年龄 int,密码 char (10);Create table 课程信息课程号 char (10),课程名 char (10),先行课 char (10), 学 分 char int,班 级 char (10),年 龄 char (10);Create table 选课表课程号 char (10),课程名 char (10),先行课 char (10),学 分 char i
16、nt;第八章 系统测试(1)登录界面 图8-1登陆界面图代码如下: 后台维护 form =new 后台维护(); 前台用户 form1 = new 前台用户(); public static string addname, addname1; private void formlogin_Load(object sender, EventArgs e) this.skinEngine1.SkinFile = Application.StartupPath + /皮肤/MSN.ssk; private void Exit_Click(object sender, EventArgs e) if
17、(MessageBox.Show(确定退出本系统吗?, 提示, MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) = DialogResult.OK) this.Close(); /退出系统 private void button1_Click(object sender, EventArgs e) if (txtUser.Text = | txtPwd.Text = | txtId.Text = ) MessageBox.Show(所有项不能为空!); else SqlConnection con = 连接.createCon(); c
18、on.Open(); SqlCommand com = con.CreateCommand(); com.CommandText = select * from 用户表 where 用户名=mn1; com.Parameters.AddWithValue(mn1, txtUser.Text); SqlDataReader reader = com.ExecuteReader(); if (reader.Read() if (txtPwd.Text != reader.GetString(1).ToString() MessageBox.Show(密码输入错误!); con.Close(); e
19、lse if (txtId.Text != reader.GetString(2).ToString() MessageBox.Show(身份输入有误!); con.Close(); else this.Hide(); if (txtId.Text = managers ) string time=DateTime.Now.ToString(); MessageBox.Show(登录成功,你是管理员!); form.Show(); addname = txtUser.Text; SqlConnection con1 = 连接.createCon(); con1.Open(); SqlComma
20、nd com1 = con1.CreateCommand(); com1.CommandText = insert into 登录管理 values (mn1,mn2,mn3); com1.Parameters.AddWithValue(mn1, addname); com1.Parameters.AddWithValue(mn2, managers); com1.Parameters.AddWithValue(mn3, time); com1.ExecuteNonQuery(); con1.Close(); else string time = DateTime.Now.ToString()
21、; MessageBox.Show(登录成功,你是用户!); form1.Show(); addname1 = txtUser.Text; SqlConnection con2 = 连接.createCon(); con2.Open(); SqlCommand com2 = con2.CreateCommand(); com2.CommandText = insert into 登录管理 values (mn1,mn2,mn3); com2.Parameters.AddWithValue(mn1, addname1); com2.Parameters.AddWithValue(mn2, use
22、rs); com2.Parameters.AddWithValue(mn3, time); com2.ExecuteNonQuery(); con2.Close(); else MessageBox.Show(不存在该用户名!); private void txtUser_KeyDown(object sender, KeyEventArgs e) if (e.KeyValue= 40) txtPwd.Focus(); private void txtPwd_KeyDown(object sender, KeyEventArgs e) if (e.KeyValue = 38) txtUser.
23、Focus(); else if (e.KeyValue = 40) txtId.Focus(); (2)管理员界面图8-2 管理员界面图代码如下: string time = DateTime.Now.ToString(); DateTime time2=DateTime.Now; private void check_Click(object sender, EventArgs e) SqlConnection con = 连接.createCon(); SqlDataAdapter data = new SqlDataAdapter(select * from 用户表, con); Da
24、taTable table = new DataTable(); data.Fill(table); bindingSource1.DataSource = table; dataGridView1.DataSource = bindingSource1; bindingNavigator1.BindingSource = this.bindingSource1; private void increasetime(double seconds) this.time2 = this.time2.AddSeconds(seconds); this.time1.Text = time2.Year+
25、/+time2.Month+/+time2.Day+/+ time2.Hour + : + time2.Minute + : + time2.Second; private void timer1_Tick(object sender, EventArgs e) this.increasetime(0.1); private void dataGridView1_SelectionChanged(object sender, EventArgs e) txtUser.Text = this.dataGridView1.CurrentRow.Cells0.Value.ToString(); tx
26、tPwd.Text = this.dataGridView1.CurrentRow.Cells1.Value.ToString(); txtId.Text = this.dataGridView1.CurrentRow.Cells2.Value.ToString(); private void toolStripButton2_Click(object sender, EventArgs e) addbtn.Visible = true; txtId.Text = ; txtPwd.Text = ; txtUser.Text = ; private void addbtn_Click(obje
27、ct sender, EventArgs e) if (txtId.Text = |txtPwd.Text = |txtUser.Text= ) MessageBox.Show(所有项必须填写!); else if (txtId.Text != users & txtId.Text != managers) MessageBox.Show(身份只能输入users或managers!); else SqlConnection con3 = 连接.createCon(); con3.Open(); SqlCommand com3 = con3.CreateCommand(); com3.Comma
28、ndText = select * from 用户表 where 用户名=mn7; com3.Parameters.AddWithValue(mn7, txtUser.Text); SqlDataReader reader1 = com3.ExecuteReader(); if (reader1.Read() MessageBox.Show(已存在该用户名!); con3.Close(); else con3.Close(); SqlConnection con2 = 连接.createCon(); con2.Open(); SqlCommand com2 = con2.CreateComma
29、nd(); com2.CommandText = insert into 用户表 values (mn4,mn5,mn6); com2.Parameters.AddWithValue(mn4, txtUser.Text); com2.Parameters.AddWithValue(mn5, txtPwd.Text); com2.Parameters.AddWithValue(mn6, txtId.Text); com2.ExecuteNonQuery(); con2.Close(); MessageBox.Show(登录名增加成功!); private void toolStripButton
30、4_Click(object sender, EventArgs e) udBtn.Visible = true; txtId.Text = ; txtPwd.Text = ; txtUser.Text = ; private void udBtn_Click(object sender, EventArgs e) if (txtUser.Text != Formlogin.addname) MessageBox.Show(你只能为自己修改密码!); private void check2_Click(object sender, EventArgs e) 条件查找 form3 = new 条
31、件查找(); this.Hide(); form3.Show(); private void 后台维护_Load(object sender, EventArgs e) Label3.Text = time; this.timer1.Start(); this.Refresh(); private void toolStripButton7_Click(object sender, EventArgs e) Application.Exit(); private void 登录管理ToolStripMenuItem_Click(object sender, EventArgs e) 登录管理
32、form6 = new 登录管理(); this.Close(); form6.Show(); private void 后台维护_Move(object sender, EventArgs e) addname.Text = Formlogin.addname + 管理员; private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e) SqlConnection con = 连接.createCon(); con.Open(); SqlCommand com = con.CreateCommand(); com.CommandText = delete from 用户表 where 用户名=mn1 and 密码=mn2 and 身份=mn3 ; com.Parameters.AddWithValue(mn1, txtUser.Text); com.Parameters.AddWithValue(mn2, txtPwd.Text);