C# 入门级库存管理系统
一、系统架构设计
graph TD
A[用户界面] --> B[业务逻辑层]
B --> C[数据访问层]
C --> D[SQLite数据库]
subgraph 功能模块
B -->|商品管理| E[新增/修改/删除商品]
B -->|库存操作| F[入库/出库/盘点]
B -->|查询统计| G[实时库存查询]
B -->|报表生成| H[库存报表]
end
二、环境配置
-
开发工具:Visual Studio 2022
-
技术栈:
- 语言:C# 10+
- UI框架:Windows Forms
- 数据库:SQLite 3
-
依赖库:
Install-Package System.Data.SQLite Install-Package CsvHelper
三、数据库设计
-- 商品表
CREATE TABLE Products (
ProductID INTEGER PRIMARY KEY AUTOINCREMENT,
Name TEXT NOT NULL,
Category TEXT,
Price REAL CHECK (Price >= 0),
Stock INTEGER CHECK (Stock >= 0),
Barcode TEXT UNIQUE
);
-- 入库记录表
CREATE TABLE InOutRecords (
RecordID INTEGER PRIMARY KEY AUTOINCREMENT,
ProductID INTEGER,
Type TEXT CHECK(Type IN ('IN', 'OUT')),
Quantity INTEGER CHECK (Quantity > 0),
RecordDate DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
四、核心代码实现
1. 数据模型 (Model)
public class Product {
public int ProductID { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
public int Stock { get; set; }
public string Barcode { get; set; }
}
public class InventoryRecord {
public int RecordID { get; set; }
public int ProductID { get; set; }
public string OperationType { get; set; }
public int Quantity { get; set; }
public DateTime RecordDate { get; set; }
}
2. 数据访问层 (DAL)
public class DbHelper {
private static string connectionString = "Data Source=inventory.db;Version=3;";
public static DataTable GetData(string sql) {
using (var conn = new SQLiteConnection(connectionString))
using (var cmd = new SQLiteCommand(sql, conn)) {
conn.Open();
var adapter = new SQLiteDataAdapter(cmd);
var dt = new DataTable();
adapter.Fill(dt);
return dt;
}
}
public static int ExecuteNonQuery(string sql, params SQLiteParameter[] parameters) {
using (var conn = new SQLiteConnection(connectionString))
using (var cmd = new SQLiteCommand(sql, conn)) {
cmd.Parameters.AddRange(parameters);
conn.Open();
return cmd.ExecuteNonQuery();
}
}
}
3. 业务逻辑层 (BLL)
public class ProductService {
// 添加商品
public bool AddProduct(Product product) {
string sql = @"INSERT INTO Products (Name, Category, Price, Stock, Barcode)
VALUES (@Name, @Category, @Price, @Stock, @Barcode)";
return DbHelper.ExecuteNonQuery(sql,
new SQLiteParameter("@Name", product.Name),
new SQLiteParameter("@Category", product.Category),
new SQLiteParameter("@Price", product.Price),
new SQLiteParameter("@Stock", product.Stock),
new SQLiteParameter("@Barcode", product.Barcode)) > 0;
}
// 库存操作
public bool UpdateStock(int productId, int quantity, string type) {
string sql = type == "IN"
? "UPDATE Products SET Stock = Stock + @Qty WHERE ProductID = @Id"
: "UPDATE Products SET Stock = Stock - @Qty WHERE ProductID = @Id";
return DbHelper.ExecuteNonQuery(sql,
new SQLiteParameter("@Qty", quantity),
new SQLiteParameter("@Id", productId)) > 0;
}
}
五、界面实现(WinForm)
1. 主界面布局
+---------------------------------+
| 库存管理系统 v1.0 |
+---------------------------------+
| [1]商品管理 [2]入库 [3]出库 |
| [4]库存查询 [5]生成报表 [6]退出|
+---------------------------------+
| 状态栏: 当前用户: admin |
+---------------------------------+
2. 商品管理界面
private void btnSave_Click(object sender, EventArgs e) {
var product = new Product {
Name = txtName.Text,
Category = txtCategory.Text,
Price = decimal.Parse(txtPrice.Text),
Stock = int.Parse(txtStock.Text),
Barcode = txtBarcode.Text
};
if (ProductService.AddProduct(product)) {
MessageBox.Show("保存成功!");
LoadProductList();
}
}
private void LoadProductList() {
var dt = DbHelper.GetData("SELECT * FROM Products");
dgvProducts.DataSource = dt;
}
六、关键功能实现
1. 库存预警
public void CheckLowStock() {
var lowStockItems = DbHelper.GetData($@"
SELECT * FROM Products
WHERE Stock < (SELECT AVG(Stock) FROM Products)*0.3");
if (lowStockItems.Rows.Count > 0) {
var msg = string.Join("\n", lowStockItems.Rows.Cast<DataRow>()
.Select(r => $"{r["Name"]}: {r["Stock"]}件"));
MessageBox.Show($"库存预警:\n{msg}");
}
}
2. 报表生成
public void GenerateReport() {
var report = new StringBuilder();
report.AppendLine("库存报表");
report.AppendLine("===========");
var dt = DbHelper.GetData("SELECT * FROM Products");
foreach (DataRow row in dt.Rows) {
report.AppendLine($"ID:{row["ProductID"]} {row["Name"]} 库存:{row["Stock"]}");
}
File.WriteAllText("InventoryReport.txt", report.ToString());
MessageBox.Show("报表已生成至项目根目录");
}
七、系统扩展建议
1. 新增功能模块
// 供应商管理
public class Supplier {
public int SupplierID { get; set; }
public string Name { get; set; }
public string Contact { get; set; }
}
// 采购订单
public class PurchaseOrder {
public int OrderID { get; set; }
public DateTime OrderDate { get; set; }
public int SupplierID { get; set; }
}
2. 性能优化方案
- 数据缓存:使用MemoryCache缓存热点数据
private static MemoryCache _cache = MemoryCache.Default;
public DataTable GetCachedProducts() {
var key = "products";
if (!_cache.Contains(key)) {
_cache[key] = DbHelper.GetData("SELECT * FROM Products");
}
return (DataTable)_cache[key];
}
八、部署与测试
1. 部署要求
- .NET Framework 4.8+
- SQLite 3.37.0+
- Windows 10及以上系统
2. 测试用例
[TestClass]
public class ProductServiceTests {
[TestMethod]
public void TestAddProduct() {
var product = new Product {
Name = "测试商品",
Price = 99.99m,
Stock = 100
};
Assert.IsTrue(ProductService.AddProduct(product));
}
}
九、完整项目结构
InventorySystem/
├── Models/
│ ├── Product.cs
│ └── InventoryRecord.cs
├── DataAccess/
│ └── DbHelper.cs
├── BusinessLogic/
│ └── ProductService.cs
├── UI/
│ └── MainForm.cs
└── inventory.db
十、学习资源推荐
- 官方网页
- 扩展学习
通过本方案,开发者可以快速掌握C#桌面应用开发的核心技能,包括数据库操作、界面设计和业务逻辑实现。建议从基础功能开始逐步扩展,结合实际业务需求添加更多高级功能。

浙公网安备 33010602011771号