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