成语字典查询系统

                     ~~~~~~~~~~~~~~~~~~~~                     成语字典查询系统

实验目的:

(1)掌握小型数据库管理系统的设计开发方法;

(2)灵活使用数据库控件。

实验要求:

(1)SQL Server管理系统中创建数据库和数据表;

(2)使用SQLCommand、SqlDataAdapter与DataSet等对象完成对数据库的查询与维护操作

数据库设计

1. 需求分析

  • 用户需求:确定用户需要查询成语的哪些方面。
  • 系统功能:系统应支持基本的查询功能。

2. 数据收集

  • 成语数据:收集成语的基本信息。
  • 附加信息:收集成语的出处、例句等。

3. 概念设计

  • 实体定义:定义系统中的主要实体。
  • 关系定义:确定实体之间的关系。

4. 逻辑设计

  • 表结构设计:设计具体的表结构。
  • 表之间的关系:定义表之间的关联。

5. 数据模型

  • ER图:创建ER图来表示实体、属性和关系。
  • 规范化:应用规范化理论。

6. 完整性约束

  • 主键:定义主键以确保数据的唯一性。
  • 外键:定义外键以维护表之间的关系。
  • 约束条件:设置必要的约束条件。

7. 索引设计

  • 查询优化:为常用查询字段创建索引。

8. 物理设计

  • 数据库选择:选择合适的数据库系统。
  • 存储优化:根据数据访问模式优化存储结构。

功能模块设计

(1)精确查询

// 定义一个私有成员函数,用于处理精确查询的点击事件
private: System::Void 精确查询ToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
    // 检查文本框textBox3中是否有输入内容
    if(textBox3->Text == "") {
        // 如果文本框为空,则弹出一个消息框提示用户,并返回
        MessageBox::Show("查询对象的内容不能为空");
        return;
    }
    // 声明一个OleDbDataReader类型的指针rd,用于读取数据库查询结果
    OleDbDataReader^ rd;
    try {
        // 尝试打开数据库连接
        con->Open();
        // 检查数据库连接是否成功打开
        if(con->State == ConnectionState::Open) {
            // 构造SQL查询语句,用于从成语字典表中查询成语
            String^ sql = "select * from 成语字典 where 成语='" + textBox3->Text + "'";
            // 显示构造的SQL语句(可能用于调试)
            MessageBox::Show(sql);
            // 创建一个OleDbCommand对象cmd,用于执行SQL查询
            OleDbCommand^ cmd = gcnew OleDbCommand(sql, con);
            // 使用cmd对象执行查询,并获取数据读取器rd
            rd = cmd->ExecuteReader();
            // 如果rd.Read()返回true,表示查询结果中有数据
            if(rd->Read()) {
                // 将查询结果赋值给对应的文本框和富文本框
                textBox3->Text = rd["成语"]->ToString();
                richTextBox2->Text = rd["解释"]->ToString();
                textBox9->Text = rd["成语简码"]->ToString();
                textBox4->Text = rd["成语拼音"]->ToString();
            }
        }
    }
    // 捕获并处理SQL异常
    catch(SqlException^ ex) {
        // 弹出消息框显示异常信息
        MessageBox::Show("数据的异常信息是:" + ex->Message, "提示信息");
    }
    // 无论是否发生异常,都会执行的代码块
    finally {
        // 关闭数据读取器
        rd->Close();
        // 检查数据库连接是否处于打开状态,如果是,则关闭连接
        if(con->State == ConnectionState::Open) {
            con->Close();
        }
    }
}

查询前:请添加图片描述

请添加图片描述
查询后:
请添加图片描述

(2)模糊查询

// 定义一个私有成员函数,用于处理模糊查询的点击事件
private: System::Void 模糊查询ToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
    // 构造SQL查询语句,用于从成语字典表中进行模糊查询
    // 使用LIKE操作符和通配符'%'来匹配textBox6文本框中输入内容之后的任意字符
    String^ sql = "select * from 成语字典 where 成语 like '" + textBox6->Text + "%'";
    // 显示构造的SQL语句(可能用于调试)
    MessageBox::Show(sql);
    // 创建DataTable对象,用于存储查询结果
    DataTable^ ourtable = gcnew DataTable();
    // 创建OleDbDataAdapter对象ourda,用于填充DataTable
    OleDbDataAdapter^ ourda = gcnew OleDbDataAdapter(sql, con);
    try {
        // 使用ourda对象执行Fill方法,将查询结果填充到ourtable对象中
        ourda->Fill(ourtable);
        // 将dataGridView1的数据源设置为ourtable,以便在界面上显示查询结果
        this->dataGridView1->DataSource = ourtable;
    }
    // 捕获并处理SQL异常
    catch(System::Data::SqlClient::SqlException^ ex) {
        // 弹出消息框显示异常信息
        MessageBox::Show("数据异常");
    }
}

请添加图片描述
请添加图片描述

请添加图片描述

(3) 添加

// 定义一个私有成员函数,用于处理添加操作的点击事件
private: System::Void 添加ToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
    try {
        // 尝试打开数据库连接
        con->Open();
        // 检查数据库连接是否成功打开
        if(con->State == ConnectionState::Open) {
            // 构造SQL插入语句,用于向成语字典表中添加新的成语记录
            String^ mysql = "insert into 成语字典 (成语,解释,成语简码,成语拼音) "
                            + "values ('" + textBox1->Text + "', '" 
                            + richTextBox1->Text + "', '"
                            + textBox7->Text + "', '"
                            + textBox8->Text + "')";
            // 显示构造的SQL语句(可能用于调试)
            MessageBox::Show(mysql);
            // 创建一个OleDbCommand对象mycmd,用于执行SQL插入
            OleDbCommand^ mycmd = gcnew OleDbCommand(mysql, con);
            // 执行非查询命令(如插入、更新、删除等)
            mycmd->ExecuteNonQuery();
            // 弹出消息框提示用户添加成语成功
            MessageBox::Show("添加成语成功");
        }
    }
    // 捕获并处理SQL异常
    catch (SqlException^ ex) {
        // 弹出消息框显示异常信息
        MessageBox::Show("数据的异常信息是:" + ex->Message, "提示信息");
    }
    // 无论是否发生异常,都会执行的代码块
    finally {
        // 检查数据库连接是否处于打开状态,如果是,则关闭连接
        if(con->State == ConnectionState::Open) {
            con->Close();
        }
    }
}

请添加图片描述

请添加图片描述
请添加图片描述

(4) 删除

// 定义一个私有成员函数,用于处理删除操作的点击事件
private: System::Void 删除ToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
    // 检查要删除的文本框textBox2是否为空
    if(textBox2->Text == "") {
        // 如果为空,则弹出消息框提示用户,并返回
        MessageBox::Show("删除对象的内容不能为空");
        return;
    }
    // 弹出确认对话框询问用户是否确定要删除记录
    if(Windows::Forms::DialogResult::OK != MessageBox::Show("确定要删除记录吗?", "删除", MessageBoxButtons::OKCancel)) {
        // 如果用户选择取消,则返回
        return;
    }
    try {
        // 尝试打开数据库连接
        con->Open();
        // 检查数据库连接是否成功打开
        if(con->State == ConnectionState::Open) {
            // 构造SQL删除语句,用于删除成语字典表中的指定记录
            String^ mysql = "delete from 成语字典 where 成语='" + textBox2->Text + "'";
            // 显示构造的SQL语句(可能用于调试)
            MessageBox::Show(mysql);
            // 创建一个OleDbCommand对象mycmd,用于执行SQL删除
            OleDbCommand^ mycmd = gcnew OleDbCommand(mysql, con);
            // 执行非查询命令(如更新、插入、删除等)
            mycmd->ExecuteNonQuery();
            // 弹出消息框提示用户删除成功,并显示被删除的成语
            MessageBox::Show("您已经成功删除" + textBox2->Text + "的记录");
        }
    }
    // 捕获并处理SQL异常
    catch (SqlException^ ex) {
        // 弹出消息框显示异常信息
        MessageBox::Show("数据的异常信息是:" + ex->Message, "提示信息");
    }
    // 无论是否发生异常,都会执行的代码块
    finally {
        // 检查数据库连接是否处于打开状态,如果是,则关闭连接
        if(con->State == ConnectionState::Open) {
            con->Close();
        }
    }
}

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述

(5) 修改

// 定义一个私有成员函数,用于处理修改操作的点击事件
private: System::Void 修改ToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
    // 检查要修改的文本框textBox5是否为空
    if(textBox5->Text == "") {
        // 如果为空,则弹出消息框提示用户,并返回
        MessageBox::Show("修改对象的内容不能为空");
        return;
    }
    // 弹出确认对话框询问用户是否确定要修改记录
    if(Windows::Forms::DialogResult::OK != MessageBox::Show("确定要修改记录吗?", "修改", MessageBoxButtons::OKCancel)) {
        // 如果用户选择取消,则返回
        return;
    }
    try {
        // 尝试打开数据库连接
        con->Open();
        // 检查数据库连接是否成功打开
        if(con->State == ConnectionState::Open) {
            // 构造SQL更新语句,用于更新成语字典表中的记录
            String^ sql = "update 成语字典 set 成语='" + textBox5->Text + "', "
                          + "解释='" + richTextBox3->Text + "', "
                          + "成语简码='" + textBox11->Text + "', "
                          + "成语拼音='" + textBox10->Text + "' "
                          + "where 成语='" + textBox3->Text + "'";
            // 显示构造的SQL语句(可能用于调试)
            MessageBox::Show(sql);
            // 创建一个OleDbCommand对象cmd,用于执行SQL更新
            OleDbCommand^ cmd = gcnew OleDbCommand(sql, con);
            // 执行非查询命令(如更新、插入、删除等)
            cmd->ExecuteNonQuery();
            // 弹出消息框提示用户修改成功,并显示被修改的成语
            MessageBox::Show("您已经成功修改" + "成语=" + textBox5->Text + "的记录");
        }
    }
    // 捕获并处理SQL异常
    catch(SqlException^ ex) {
        // 弹出消息框显示异常信息
        MessageBox::Show("数据的异常信息是:" + ex->Message, "提示信息");
    }
    // 无论是否发生异常,都会执行的代码块
    finally {
        // 检查数据库连接是否处于打开状态,如果是,则关闭连接
        if(con->State == ConnectionState::Open) {
            con->Close();
        }
    }
}

请添加图片描述
请添加图片描述
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值