进销存系统第一个模块:商品信息管理的实现

进销存系统第一个模块:商品信息管理的实现


一、什么是“业务模块”?

在前面几篇中,我们已经完成了:

  • 数据库表设计
  • C# 连接数据库
  • 查询、插入数据

但这些仍然是技术准备阶段

业务模块的定义是:

能被用户感知、能解决实际问题的一整套功能。

在进销存系统中,第一个必须存在的模块是:

商品信息管理


二、什么是增删改查(CRUD)?

这是所有管理系统的核心操作模型。

操作 含义 对应 SQL
新增数据 INSERT
删除数据 DELETE
修改数据 UPDATE
查询数据 SELECT

任何 ERP / MIS / OA 系统,本质都是 CRUD 的组合


三、商品管理模块需要哪些功能?

最小可用版本(MVP)只需要 3 个功能:

商品录入
商品修改
商品列表展示

删除功能先不做,真实系统中通常是“逻辑删除”


四、界面设计思路(非常重要)

在写代码之前,先明确界面结构。

商品管理界面包含三块区域:

┌─────────────────────────┐
│ 商品信息录入区(表单)  │
├─────────────────────────┤
│ 操作按钮(新增 / 修改) │
├─────────────────────────┤
│ 商品列表(表格)        │
└─────────────────────────┘

界面结构清楚,代码就不会乱


五、商品录入功能实现

界面字段设计

商品录入表单至少包含:

  • 商品编码
  • 商品名称
  • 价格
  • 单位

新增商品的核心代码

private void btnAdd_Click(object sender, EventArgs e)
{
    string sql = @"
        INSERT INTO product(product_code, product_name, price, unit)
        VALUES(@code, @name, @price, @unit)";

    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();

        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.AddWithValue("@code", txtCode.Text);
        cmd.Parameters.AddWithValue("@name", txtName.Text);
        cmd.Parameters.AddWithValue("@price", decimal.Parse(txtPrice.Text));
        cmd.Parameters.AddWithValue("@unit", txtUnit.Text);

        cmd.ExecuteNonQuery();
    }

    MessageBox.Show("商品新增成功!");
    LoadProductList();
}

你会发现:

  • 和 JDBC 思路完全一致
  • UI 只是数据的入口

六、商品列表展示(查)

使用 DataGridView 展示数据

private void LoadProductList()
{
    string sql = "SELECT id, product_code, product_name, price, unit FROM product";

    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
        DataTable table = new DataTable();
        adapter.Fill(table);

        dgvProduct.DataSource = table;
    }
}

为什么这里用 DataAdapter?

  • 一次性加载
  • 适合列表展示
  • 不需要手动循环读取

不同场景选不同方式,这是工程思维


七、商品修改功能实现

从列表中选中一行

private void dgvProduct_CellClick(object sender, DataGridViewCellEventArgs e)
{
    txtCode.Text = dgvProduct.CurrentRow.Cells["product_code"].Value.ToString();
    txtName.Text = dgvProduct.CurrentRow.Cells["product_name"].Value.ToString();
    txtPrice.Text = dgvProduct.CurrentRow.Cells["price"].Value.ToString();
    txtUnit.Text = dgvProduct.CurrentRow.Cells["unit"].Value.ToString();
}

修改按钮逻辑

private void btnUpdate_Click(object sender, EventArgs e)
{
    int id = Convert.ToInt32(dgvProduct.CurrentRow.Cells["id"].Value);

    string sql = @"
        UPDATE product
        SET product_name=@name, price=@price, unit=@unit
        WHERE id=@id";

    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();

        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.AddWithValue("@name", txtName.Text);
        cmd.Parameters.AddWithValue("@price", decimal.Parse(txtPrice.Text));
        cmd.Parameters.AddWithValue("@unit", txtUnit.Text);
        cmd.Parameters.AddWithValue("@id", id);

        cmd.ExecuteNonQuery();
    }

    MessageBox.Show("商品修改成功!");
    LoadProductList();
}
posted @ 2025-10-27 21:19  元始天尊123  阅读(8)  评论(0)    收藏  举报