数据库窗体实验报告:设计与实现 (数据库窗体实验报告)

一、 实验目的

本实验旨在让学生深入理解数据库窗体的设计和实现原理,掌握使用窗体实现数据库操作的技能。

二、 实验环境

本实验使用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#环境中进行数据库操作。通过本实验,我们不仅提高了自己的实际动手能力,也为今后从事与数据库相关的工作打下了坚实的基础。


数据运维技术 » 数据库窗体实验报告:设计与实现 (数据库窗体实验报告)