C# 入门级库存管理系统

一、系统架构设计

graph TD A[用户界面] --> B[业务逻辑层] B --> C[数据访问层] C --> D[SQLite数据库] subgraph 功能模块 B -->|商品管理| E[新增/修改/删除商品] B -->|库存操作| F[入库/出库/盘点] B -->|查询统计| G[实时库存查询] B -->|报表生成| H[库存报表] end

二、环境配置

  1. 开发工具:Visual Studio 2022

  2. 技术栈:

    • 语言:C# 10+
    • UI框架:Windows Forms
    • 数据库:SQLite 3
  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

十、学习资源推荐

  1. 官方网页
  2. 扩展学习

通过本方案,开发者可以快速掌握C#桌面应用开发的核心技能,包括数据库操作、界面设计和业务逻辑实现。建议从基础功能开始逐步扩展,结合实际业务需求添加更多高级功能。

posted @ 2025-08-14 11:57  老夫写代码  阅读(20)  评论(0)    收藏  举报