目 录
一、课程设计的目的和意义 ...................... 1 二、需求分析 .................................. 1 三、概念结构设计(E-R图) .................... 3 四、逻辑结构设计 .............................. 3 五、数据库实施与维护 .......................... 3 六、界面设计与代码 ............................ 6 七、课程设计心得与体会 ....................... 15 八、参考文献 ................................. 16
学生选课管理信息系统
一、课程设计的目的和意义
数据库课程设计是在学生系统的学习了数据库原理课程后,按照关系型数据 库的基本原理,综合运用所学的知识,以小组为单位,设计开发一个小型的数据库管理系统。通过对一个实际问题的分析、设计与实现,将原理与应用相结合,使学生学会如何把书本上学到的知识用于解决实际问题,培养学生的动手能力;另一方面,使学生能深入理解和灵活掌握教学内容。
大型数据库课程设计是计算机专业集中实践性教学环节之一,是学习完《数据库原理及应用》课程后进行的一次全面的综合练习。其目的在于加深对大型数据库课程理论和基本知识的理解,掌握使用数据库进行软件设计的基本方法,提高运用数据库解决实际问题的能力。
培养学生正确的设计思想,理论联系实际的工作作风,严肃认真、实事求是的科学态度和勇于探索的创新精神。培养学生综合运用所学知识与生产实践经验,分析和解决工程技术问题的能力。
二、需求分析
学生选课系统体现在对各种信息的保存、修改和查询。经过仔细分析系统需求之后可知其主要功能,具体功能如下:
可以根据表查询四个表之间属性之间的关系
系统总体设计图如图1所示:
学生选课管理系 系统管理 前台操作
登
查 修删添
录
询 改 除 加 成教学选 成教学成教学绩师生课 绩师生绩师生信信信信 信信信信信信息 息 息 息 息 息 息 息 息 息
图1 整体设计图
数据管理
教师管理 学生管理 选课管理
成绩信息 教师信息 选课信息
三、概念结构设计(E-R图)
编号 姓名 职称
教师
年龄 性别 学历 1
教授
1
编号
名称
任课教师
选修课程
学分
1
1
获得
1
教授
n
1
学生
n 考试
成绩
成绩
课名
学号
姓名 院系 年龄
学号
课程号
E-R图
四、逻辑结构设计
将E-R图转换成关系模式: 教师:(教师编号,教师姓名,性别,年龄,学历,职称,毕业院校,健康状况) 学生:(学号,姓名,所属院系,年龄) 选课:(课程编号,课程名称,任课教师,学分) 成绩:(学生学号,课程编号,课程名称,成绩)
五、数据库实施与维护
建立数据库 打开SQL Server 2008,建立数据库:zaq。 1.在学生选课系统数据库中,添加teacher表,设置教师编号为主键,不允许为空,如图3所示
图3
右键选择编辑前200行,输入数据,如图4所示
图4
2.添加student表,设置学号为主键,不允许为空,如图5所示:
图5
右键选择编辑前200行,输入数据,如图6所示:
图6
3.添加choose表,设置课程编号为主键,不允许为空,如图7所示:
图7
右键选择编辑前200行,输入数据,如图8所示:
图8
4.添加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}'\ 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(\"您输入的用户名或密码错误!\登
录失败\ } }
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月
因篇幅问题不能全部显示,请点此查看更多更全内容