数据库窗体实验报告:设计与实现 (数据库窗体实验报告)
一、 实验目的
本实验旨在让学生深入理解数据库窗体的设计和实现原理,掌握使用窗体实现数据库操作的技能。
二、 实验环境
本实验使用Visual Studio 2023和Microsoft SQL Server 2023作为开发环境和数据库管理系统。
三、 实验内容
本实验分为两个部分:数据库设计和窗体实现。
1. 数据库设计
数据库设计是整个实验的核心。本实验以学生信息管理系统为例,设计了一个简单的数据库模型。具体包括以下三个表:
学生表(Student):用于存储学生的基本信息,包括学号、姓名、性别、出生日期、入学日期等。
课程表(Course):用于存储课程的基本信息,包括课程号、课程名称、学分、教师等。
成绩表(Score):用于存储学生的课程成绩,包括学号、课程号、成绩等。
2. 窗体实现
本实验以C#语言为基础,设计了一个简单的窗体系统,用于实现对上述数据库的增、删、改、查等操作。具体包括以下功能:
添加学生信息:用户可以输入学生的基本信息,点击“添加”按钮后将信息存储到学生表中。
删除学生信息:用户可以通过输入学号或姓名等信息查询到对应的学生记录,点击“删除”按钮后将该学生信息从学生表中删除。
修改学生信息:用户可以通过输入学号或姓名等信息查询到对应的学生记录,然后对其进行修改,点击“修改”按钮后将新的信息存储到学生表中。
查询学生信息:用户可以通过输入学号或姓名等信息查询到对应的学生记录,系统将该学生的基本信息以及已选课程的成绩显示出来。
选课:用户可以在课程表中选择一个或多个课程,然后将这些课程存储到成绩表中。
查询成绩:用户可以通过输入学号或姓名等信息查询到对应的学生成绩记录,系统将该学生已选课程的成绩显示出来。
四、 实验步骤
1. 数据库设计
根据上述的数据库模型,在SQL Server中创建一个名为“Student”的数据库,然后依次创建三个表。
2. 窗体设计
在Visual Studio中创建一个Windows Form应用程序,然后创建一个MnWindow窗体。接下来,依次往该窗体中添加上述各个功能的控件,在其Click事件中编写相应的代码。
具体的代码实现过程如下:
1)添加学生信息
在MnWindow窗体中添加一些文本框和标签,用于输入和显示学生的基本信息。然后,在该窗体中添加“添加”按钮,单击时将学生信息存储到Student表中。
代码如下:
private void btnAdd_Click(object sender, EventArgs e)
{
string sno = this.txtSno.Text;
string sname = this.txtSname.Text;
string sex = this.cmbSex.Text;
DateTime birthday = this.dtpBirthday.Value;
DateTime enrollment = this.dtpEnrollment.Value;
// 添加到Student表中
string sql = “insert into Student(sno,sname,sex,birthday,enrollment) values(‘” + sno + “‘,'” + sname + “‘,'” + sex + “‘,'” + birthday + “‘,'” + enrollment + “‘)”;
try
{
SqlConnection conn = new SqlConnection(connString);
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
MessageBox.Show(“添加成功!”);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
2)删除学生信息
在MnWindow窗体中添加一个文本框,用于输入要删除的学生学号或姓名。然后,在该窗体中添加“删除”按钮,单击时将对应的学生信息从Student表中删除。
代码如下:
private void btnDelete_Click(object sender, EventArgs e)
{
string condition = this.txtCondition.Text;
// 删除学生信息
string sql = “delete from Student where sno='” + condition + “‘ or sname='” + condition + “‘”;
try
{
SqlConnection conn = new SqlConnection(connString);
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
MessageBox.Show(“删除成功!”);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
3)修改学生信息
在MnWindow窗体中添加一些文本框和标签,用于显示要修改的学生基本信息。然后,在该窗体中添加“修改”按钮,单击时将修改后的学生信息存储到Student表中。
代码如下:
private void btnUpdate_Click(object sender, EventArgs e)
{
string sno = this.txtSno.Text;
string sname = this.txtSname.Text;
string sex = this.cmbSex.Text;
DateTime birthday = this.dtpBirthday.Value;
DateTime enrollment = this.dtpEnrollment.Value;
// 更新学生信息
string sql = “update Student set sname='” + sname + “‘,sex='” + sex + “‘,birthday='” + birthday + “‘,enrollment='” + enrollment + “‘ where sno='” + sno + “‘”;
try
{
SqlConnection conn = new SqlConnection(connString);
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
MessageBox.Show(“修改成功!”);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
4)查询学生信息
在MnWindow窗体中添加一个文本框,用于输入要查询的学生学号或姓名。然后,在该窗体中添加“查询”按钮,单击时将对应的学生信息以及已选课程的成绩显示出来。
代码如下:
private void btnQuery_Click(object sender, EventArgs e)
{
string condition = this.txtCondition.Text;
// 查询学生信息
string sql = “select * from Student where sno='” + condition + “‘ or sname='” + condition + “‘”;
try
{
SqlConnection conn = new SqlConnection(connString);
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
this.txtSno.Text = reader[“sno”].ToString();
this.txtSname.Text = reader[“sname”].ToString();
this.cmbSex.Text = reader[“sex”].ToString();
this.dtpBirthday.Value = DateTime.Parse(reader[“birthday”].ToString());
this.dtpEnrollment.Value = DateTime.Parse(reader[“enrollment”].ToString());
}
reader.Close();
// 查询选课成绩
sql = “select a.cname,b.score from Course a,Score b where a.cno=b.cno and b.sno='” + condition + “‘”;
SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
DataTable dt = new DataTable();
adapter.Fill(dt);
this.dgvScore.DataSource = dt;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
5)选课
在MnWindow窗体中的课程表中添加一个复选框列,用于选择要选修的课程。然后,在该窗体中添加“选课”按钮,单击时将选择的课程存储到Score表中。
代码如下:
private void btnSelect_Click(object sender, EventArgs e)
{
string sno = this.txtSno.Text;
// 选课
foreach (DataGridViewRow row in this.dgvCourse.Rows)
{
if (row.Cells[0].Value != null && row.Cells[0].Value.ToString() == “True”)
{
string cno = row.Cells[1].Value.ToString();
string sql = “insert into Score(sno,cno) values(‘” + sno + “‘,'” + cno + “‘)”;
try
{
SqlConnection conn = new SqlConnection(connString);
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
MessageBox.Show(“选课成功!”);
}
6)查询成绩
在MnWindow窗体中添加一个文本框,用于输入要查询的学生学号或姓名。然后,在该窗体中添加“查询”按钮,单击时将该学生已选课程的成绩显示出来。
代码如下:
private void btnScore_Click(object sender, EventArgs e)
{
string condition = this.txtCondition.Text;
// 查询成绩
string sql = “select a.cname,b.score from Course a,Score b where a.cno=b.cno and b.sno='” + condition + “‘”;
try
{
SqlConnection conn = new SqlConnection(connString);
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
DataTable dt = new DataTable();
adapter.Fill(dt);
this.dgvScore.DataSource = dt;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
五、 实验结论
通过本实验的学习,我们了解了数据库窗体的设计和实现原理,掌握了使用窗体实现数据库操作的技能。同时,我们还深入了解了数据库设计的思想和方法,并学会了如何在C#环境中进行数据库操作。通过本实验,我们不仅提高了自己的实际动手能力,也为今后从事与数据库相关的工作打下了坚实的基础。