学生选课管理系统数据库.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date学生选课管理系统数据库200 -20 学年第( )学期经济管理学院实践教学 目 录一、课程设计的目的和意义1二、需求分析1三、概念结构设计(E-R图)3四、逻辑结构设计3五、数据库实施与维护4六、界面设计与代码6七、课程设计心得与体会15八、参考文献16- 学生选课管理信息系统一、课程设计的目的和意义数据库课程设计是在学生系统的学习了数据库原理课程后,按照关系型数据库的基本原理,综合运用所学的知识,以小组为单位,设计开发一个小型的数据库管理系统。通过对一个实际问题的分析、设计与实现,将原理与应用相结合,使学生学会如何把书本上学到的知识用于解决实际问题,培养学生的动手能力;另一方面,使学生能深入理解和灵活掌握教学内容。大型数据库课程设计是计算机专业集中实践性教学环节之一,是学习完数据库原理及应用课程后进行的一次全面的综合练习。其目的在于加深对大型数据库课程理论和基本知识的理解,掌握使用数据库进行软件设计的基本方法,提高运用数据库解决实际问题的能力。培养学生正确的设计思想,理论联系实际的工作作风,严肃认真、实事求是的科学态度和勇于探索的创新精神。培养学生综合运用所学知识与生产实践经验,分析和解决工程技术问题的能力。二、需求分析学生选课系统体现在对各种信息的保存、修改和查询。经过仔细分析系统需求之后可知其主要功能,具体功能如下:可以根据表查询四个表之间属性之间的关系系统总体设计图如图1所示:学生选课管理系统系统管理数据管理前台操作登录选课管理学生管理教师管理添 加删 除修 改查 询成绩信息选课信息学生信息教师信息成绩信息学生信息教师信息成绩信息教师信息成绩信息选课信息学生信息教师信息 图1 整体设计图三、概念结构设计(E-R图)课程号院系姓名教师选修课程教授学生考试教授学分姓名性别编号编号名称任课教师年龄学号11n111成绩年龄学历成绩课名职称学号获得 n 1 E-R图四、逻辑结构设计将E-R图转换成关系模式:教师:(教师编号,教师姓名,性别,年龄,学历,职称,毕业院校,健康状况) 学生:(学号,姓名,所属院系,年龄)选课:(课程编号,课程名称,任课教师,学分)成绩:(学生学号,课程编号,课程名称,成绩)五、数据库实施与维护建立数据库 打开SQL Server 2008,建立数据库:zaq。 1.在学生选课系统数据库中,添加teacher表,设置教师编号为主键,不允许为空,如图3所示图3右键选择编辑前200行,输入数据,如图4所示图42.添加student表,设置学号为主键,不允许为空,如图5所示:图5右键选择编辑前200行,输入数据,如图6所示:图63.添加choose表,设置课程编号为主键,不允许为空,如图7所示:图7右键选择编辑前200行,输入数据,如图8所示:图84.添加grade表,设置学生学号,教师编号,课程名称为主键,不允许为空,如图9所示:右键选择编辑前200行,输入数据,如图10所示:六、界面设计与代码1.登录界面输入已在数据库中的账号和密码,点击登录按钮,如图11所示:提示登录成功,单击确定进入主窗体双击登录按钮,更新单击事件处理程序,主要代码如下:private void button1_Click(object sender, EventArgs e) string userName = txtName.Text.Trim(); string password = txtPwd.Text.Trim(); string connString = "Data Source=a-think;Initial Catalog=zaq ;Integrated Security=True;Pooling=False;" SqlConnection connection = new SqlConnection(connString); /获取用户名和密码匹配的行的数量的SQL语句 string sql = String.Format("select count(*) from log where ID='0' and PASSWORD='1'", userName, password); try connection.Open();/ 打开数据库连接 SqlCommand command = new SqlCommand(sql, connection);/创建 Command 对象 int num = (int)command.ExecuteScalar();/执行查询语句,返回匹配的行数 if (num > 0) /如果有匹配的行,则表明用户名和密码正确 MessageBox.Show("欢迎进入系统!", "登录成功", MessageBoxButtons.OK, MessageBoxIcon.Information); main mainForm = new main();/ 创建主窗体对象 mainForm.Show();/ 显示窗体 this.Visible = false; / 登录窗体隐藏 else txtPwd.Text = "" MessageBox.Show("您输入的用户名或密码错误!", "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); catch (Exception ex) MessageBox.Show(ex.Message, "操作数据库出错!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); finally connection.Close();/ 关闭数据库连接 2.主界面如图10所示:4.点击教师信息显示下图12,双击添加按钮,程序代码如下:private void button2_Click(object sender, EventArgs e) string connString = "Data Source=A-THINK;Initial Catalog=zaq ;Integrated Security=True;Pooling=False;" SqlConnection connection = new SqlConnection(connString); SqlCommand command = new SqlCommand(); string sql = String.Format("INSERT INTO teacher(教师编号,教师姓名,性别,年龄,学历,职称,毕业院校,健康状况)VALUES('" + tno1.Text + "','" + tname1.Text + "','" + tsex1.Text + "', '" + tage1.Text + "','" + tdip1.Text + "','" + tmon1.Text + "','" + tsch1.Text + "', '" + thea1.Text + "')"); try connection.Open(); / 打开数据库连接 command.Connection = connection; command.CommandText = sql;/设置 Command 对象要执行的SQL语句 int count = command.ExecuteNonQuery();/ 执行更新命令,返回值为更新的行数 if (count > 0) MessageBox.Show("添加成功", "添加成功", MessageBoxButtons.OK, MessageBoxIcon.Information); else MessageBox.Show("添加失败", "添加失败", MessageBoxButtons.OK, MessageBoxIcon.Information); catch (Exception ex) MessageBox.Show(ex.Message, "操作数据库出错!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); finally connection.Close();/ 关闭数据库连接 添加数据后,出现添加成功:双击删除按钮,程序代码如下:private void button3_Click(object sender, EventArgs e) string tno = tno1.Text.Trim(); string tname = tname1.Text.Trim(); string tsex = tsex1.Text.Trim(); string tage = tage1.Text.Trim(); string tdip = tdip1.Text.Trim(); string tmon = tmon1.Text.Trim(); string tsch = tsch1.Text.Trim(); string thea = thea1.Text.Trim(); string str = "Data Source=A-THINK;Initial Catalog = zaq;Integrated Security=True;Pooling=False" SqlConnection conn = new SqlConnection(str); conn.Open(); if (tno1.Text != "" | tname1.Text != "" | tsex1.Text != "" | tage1.Text != "" | tdip1.Text != "" | tmon1.Text != "" | tsch1.Text != "" | thea1.Text != "") SqlCommand com = new SqlCommand("delete from teacher where 教师编号='" + tno + " 'or 教师姓名='" + tname + " 'or 性别='" + tsex + " 'or 年龄='" + tage + " 'or 学历='" + tdip + "'or 职称='" + tmon + " 'or 毕业院校='" + tsch + " 'or 健康状况='" + thea + " '", conn); int m = com.ExecuteNonQuery(); if (m > 0) MessageBox.Show("成功删除该教师信息!"); else MessageBox.Show("删除该教师信息失败!"); else MessageBox.Show("请输入正确的信息!"); conn.Close(); conn.Dispose(); 删除成功,提示删除成功:双击修改按钮,程序代码如下:private void button4_Click(object sender, EventArgs e) string tno = tno1.Text.Trim(); string tname = tname1.Text.Trim(); string tsex = tsex1.Text.Trim(); string tage = tage1.Text.Trim(); string tdip = tdip1.Text.Trim(); string tmon = tmon1.Text.Trim(); string tsch = tsch1.Text.Trim(); string thea = thea1.Text.Trim(); string str = "Data Source=A-THINK;Initial Catalog = zaq;Integrated Security=True;Pooling=False" SqlConnection conn = new SqlConnection(str); conn.Open(); if (tno1.Text != "" && tname1.Text != "" && tsex1.Text != "" | tage1.Text != "" | tdip1.Text != ""|tmon1.Text != "" | tsch1.Text != ""| thea1.Text != "") SqlCommand com = new SqlCommand("update teacher set 教师姓名='" + tname + "'where 教师编号='" + tno + "'", conn); int a = com.ExecuteNonQuery(); if (a > 0) MessageBox.Show("修改成功!"); else MessageBox.Show("修改该教师信息失败!"); else MessageBox.Show("请输入正确的信息!"); conn.Close(); conn.Dispose(); 修改成功后显示修改成功:双击查询按钮,程序代码如下: private void button1_Click(object sender, EventArgs e) string connString = "Data Source=A-THINK;Initial Catalog=zaq ;Integrated Security=True;Pooling=False;" SqlConnection connection = new SqlConnection(connString); SqlCommand command = new SqlCommand(); string sql = String.Format("select * FROM teacher WHERE 教师编号='0'", tno1.Text); try int i = 0; connection.Open(); / 打开数据库连接 command.Connection = connection; command.CommandText = sql;/设置 Command 对象要执行的SQL语句 SqlDataReader dataReader = command.ExecuteReader(); while (dataReader.Read() i+; tno1.Text = dataReader"教师编号".ToString(); tname1.Text = dataReader"教师姓名".ToString(); tsex1.Text = dataReader"性别".ToString(); tage1.Text = dataReader"年龄".ToString(); tdip1.Text = dataReader"学历".ToString(); tmon1.Text = dataReader"职称".ToString(); tsch1.Text = dataReader"毕业院校".ToString(); thea1.Text = dataReader"健康状况".ToString(); if (i = 0) MessageBox.Show("教师不存在", "查询失败", MessageBoxButtons.OK, MessageBoxIcon.Information); catch (Exception ex) MessageBox.Show(ex.Message, "操作数据库出错!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); finally connection.Close();/ 关闭数据库连接 5.点击学生信息,显示下图界面:6.点击选课信息,显示如下图片:7.点击成绩信息,显示如下界面:图12七、课程设计心得与体会这次课设不仅仅是对这个学期数据库课程的总结,更是一次知识大检查。这个不但要掌握数据库原理,还要熟练掌握c#语言。我用这学期刚刚学会的vs2010开发环境中的c#,设计的是开发工具窗体界面运行模式。这样不仅可以学习数据库,而且还可以对c#方面的知识进行巩固,知识是相互联系的,没有哪一门是单独存在的。所以要学好一门课,就是应该横向思考,多联系,这样会学的更好。这次课程设计,我选的是选课管理系统,这个课题比较贴近生活,所以要考虑到选课的实际情况,根据实际情况来进行分析,构思好功能模块。在这个过程中,最难的应该是软件编程了。在编程的过程中,遇到的问题也可谓是多样化。先是因为一些控件没有响应事件,导致运行的时候点击没有效果,然后再SQL语句中字符串的单引号,双引号标注出现问题,同样调试时没有出错,运行时出现问题。一开始在进行数据库连接的时候也出现了一些问题,但最后问题还是被解决了。看到所有都能被运行成功,并且能对数据进行增删改查询的时候,总的来说,还是很欣慰。这也激励着我,在以后的学习中,要多多培养自己的动手操作能力,编出更加完美,用户友好的系统。八、参考文献1李涛 王永皎 /等.Visual C+SQL Server数据库开发与实例.清华大学出版社 .2006年7月 2郑莉 董渊 张瑞丰 .C+语言程序设计清华大学出版社.2004年1月3 王珊 萨师煊 .数据库系统概论.北京 .高等教育出版社. 2006年5月4 邵顺增,李琳.C#程序设计-Windows项目开发.清华大学出版社.2008年5月