C# 入门级库存管理系统

一、系统架构设计

功能模块 商品管理 库存操作 查询统计 报表生成 新增/修改/删除商品 业务逻辑层 入库/出库/盘点 实时库存查询 库存报表 用户界面 数据访问层 SQLite数据库


二、环境配置
  1. 开发工具:Visual Studio 2022

  2. 技术栈:

    • 语言:C# 10+
    • UI框架:Windows Forms
    • 数据库:SQLite 3
  3. 依赖库:

    csharp 复制代码
    Install-Package System.Data.SQLite
    Install-Package CsvHelper

三、数据库设计
csharp 复制代码
-- 商品表
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)

csharp 复制代码
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)

csharp 复制代码
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)

csharp 复制代码
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. 主界面布局

csharp 复制代码
+---------------------------------+
| 库存管理系统 v1.0               |
+---------------------------------+
| [1]商品管理  [2]入库  [3]出库    |
| [4]库存查询  [5]生成报表  [6]退出|
+---------------------------------+
| 状态栏: 当前用户: admin         |
+---------------------------------+

2. 商品管理界面

csharp 复制代码
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. 库存预警

csharp 复制代码
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. 报表生成

csharp 复制代码
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. 新增功能模块

csharp 复制代码
// 供应商管理
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缓存热点数据
csharp 复制代码
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. 测试用例

csharp 复制代码
[TestClass]
public class ProductServiceTests {
    [TestMethod]
    public void TestAddProduct() {
        var product = new Product {
            Name = "测试商品",
            Price = 99.99m,
            Stock = 100
        };
        Assert.IsTrue(ProductService.AddProduct(product));
    }
}

九、完整项目结构
csharp 复制代码
InventorySystem/
├── Models/
│   ├── Product.cs
│   └── InventoryRecord.cs
├── DataAccess/
│   └── DbHelper.cs
├── BusinessLogic/
│   └── ProductService.cs
├── UI/
│   └── MainForm.cs
└── inventory.db

十、学习资源推荐
  1. 官方网页
  2. 扩展学习

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

相关推荐
小Mie不吃饭22 分钟前
Oracle - 闪回技术及生产实践
数据库·oracle
Filotimo_29 分钟前
EntityGraph的概念
java·开发语言·数据库·oracle
皮卡丘学了没32 分钟前
JVM-对象存活判断机制
jvm
CreasyChan1 小时前
Unity Shader 入门指南
unity·c#·游戏引擎·shader
ysdysyn2 小时前
C# Modbus RTU 多从站控制全攻略:一端口,双轴控制
开发语言·c#·mvvm·通讯·modbus rtu
TypingLearn3 小时前
2026年,让.NET再次伟大
windows·c#·.net·sdk·netcore
再睡一夏就好3 小时前
多线程并发编程核心:互斥与同步的深度解析及生产者消费者模型两种实现
linux·运维·服务器·jvm·c++·笔记
数据库生产实战3 小时前
Oracle的_segment_count和3个event对高并发事务与索引性能的影响分析
数据库·oracle
ServBay3 小时前
.NET 10 与 C# 14 更新速览,代码更少,性能更好
后端·c#·.net
小Mie不吃饭4 小时前
2025 Oracle小白零基础到入门的学习路线
数据库·oracle