进销存系统第一个模块:商品信息管理的实现
进销存系统第一个模块:商品信息管理的实现
一、什么是“业务模块”?
在前面几篇中,我们已经完成了:
- 数据库表设计
- 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();
}

浙公网安备 33010602011771号