基于C# WinForm实现的带条码打印的固定资产管理

一、系统架构设计

1. 技术架构
csharp 复制代码
// 技术栈组成
- 开发框架:.NET Framework 4.8
- UI框架:Windows Forms
- 条码生成:BarcodeLib(开源库)
- 数据库:SQL Server 2019
- 打印组件:Microsoft Print to PDF(或专用条码打印机驱动)
2. 功能模块划分

系统管理 用户权限 资产分类 条码规则 资产管理 资产录入 资产转移 折旧计算 报废处理 条码管理 标签生成 批量打印 打印历史 查询统计 资产台账 盘点记录 折旧报表


二、核心功能实现

1. 条码生成模块
csharp 复制代码
public class BarcodeGenerator {
    public Bitmap GenerateCode128(string content, int width = 300, int height = 150) {
        using (var barcode = new BarcodeLib.Barcode()) {
            barcode.Encode(BarcodeLib.TYPE.CODE128, content);
            barcode.Resize(width, height);
            return barcode.GetBitmap();
        }
    }
    
    // 生成二维码(支持微信/支付宝扫描)
    public Bitmap GenerateQRCode(string content) {
        var qr = new QRCoder();
        return qr.GetGraphic(20);
    }
}
2. 资产管理核心逻辑
csharp 复制代码
public class AssetService {
    private readonly AppDbContext _db = new();
    
    // 资产唯一编号生成
    public string GenerateAssetCode() {
        return "ZC" + DateTime.Now:yyyyMMddHHmmss + 
               new Random().Next(1000,9999).ToString("D4");
    }
    
    // 资产状态跟踪
    public enum AssetStatus {
        在库,
        使用中,
        维修中,
        报废
    }
    
    // 折旧计算(直线法)
    public decimal CalculateDepreciation(decimal originalCost, 
        DateTime startDate, DateTime endDate) {
        int months = (endDate - startDate).Days / 30;
        return originalCost * 0.2m / 12 * months; // 假设残值率20%
    }
}
3. 条码打印服务
csharp 复制代码
public class PrintService {
    private PrintDocument _printDoc = new();
    
    public void PrintLabel(string assetCode, string assetName) {
        var bitmap = new BarcodeGenerator().GenerateCode128($"{assetCode}-{assetName}");
        _printDoc.PrintPage += (s, e) => {
            e.Graphics.DrawImage(bitmap, 10, 10);
        };
        _printDoc.Print();
    }
    
    // 批量打印优化
    public void BatchPrint(IEnumerable<Asset> assets) {
        var printQueue = new PrintQueue();
        foreach (var asset in assets) {
            var label = GenerateLabel(asset);
            printQueue.AddJob(label);
        }
        printQueue.Start();
    }
}

三、数据库设计

1. 核心表结构
csharp 复制代码
-- 资产主表
CREATE TABLE Assets (
    AssetID INT PRIMARY KEY IDENTITY,
    AssetCode NVARCHAR(50) UNIQUE,
    AssetName NVARCHAR(100),
    CategoryID INT REFERENCES Categories(CategoryID),
    Location NVARCHAR(100),
    PurchaseDate DATE,
    Status NVARCHAR(20) CHECK(Status IN ('在库','使用中','维修中','报废')),
    BarCodeImage VARBINARY(MAX)
);

-- 条码规则表
CREATE TABLE BarcodeRules (
    RuleID INT PRIMARY KEY,
    FormatTemplate NVARCHAR(50), -- 如"ZC{YY}{MM}{SEQ}"
    CurrentSeq INT DEFAULT 0
);

四、界面设计实现

1. 资产录入界面
csharp 复制代码
<!-- 使用TableLayoutPanel布局 -->
<GroupBox Text="资产信息">
    <TableLayoutPanel>
        <RowStyles>
            <RowStyle Height="30"/>
            <RowStyle Height="30"/>
            <RowStyle Height="30"/>
        </RowStyles>
        <ColumnsStyles>
            <ColumnStyle Width="120"/>
            <ColumnStyle Width="200"/>
        </ColumnsStyles>
        <Controls>
            <Label Text="资产编号"/>
            <TextBox Name="txtAssetCode" ReadOnly="True"/>
            
            <Label Text="资产名称"/>
            <TextBox Name="txtAssetName"/>
            
            <Label Text="条码打印"/>
            <Button Name="btnPrint" Click="PrintBarcode"/>
        </Controls>
    </TableLayoutPanel>
</GroupBox>
2. 打印预览界面
csharp 复制代码
private void ShowPrintPreview() {
    var printPreview = new PrintPreviewDialog();
    printPreview.Document = _printDoc;
    printPreview.ShowDialog();
}

// 打印事件处理
private void btnPrint_Click(object sender, EventArgs e) {
    var asset = GetCurrentAsset();
    var label = GenerateLabel(asset);
    _printDoc.PrintPage += (s, ev) => ev.Graphics.DrawImage(label, 10, 10);
    _printDoc.Print();
}

五、关键技术实现

1. 条码标签设计
csharp 复制代码
// 自定义标签模板
public Bitmap CreateLabelTemplate(string assetCode, string assetName) {
    var bitmap = new Bitmap(400, 200);
    using (var g = Graphics.FromImage(bitmap)) {
        g.FillRectangle(Brushes.White, 0, 0, 400, 200);
        g.DrawString($"资产编号:{assetCode}", new Font("宋体", 12), Brushes.Black, 10, 10);
        g.DrawString($"资产名称:{assetName}", new Font("宋体", 12), Brushes.Black, 10, 40);
        g.DrawImage(BarcodeGenerator.GenerateCode128(assetCode), 10, 70);
    }
    return bitmap;
}
2. 打印优化方案
csharp 复制代码
// 打印队列管理
public class PrintQueue {
    private Queue<Bitmap> _jobs = new();
    
    public void AddJob(Bitmap job) {
        _jobs.Enqueue(job);
    }
    
    public void Start() {
        while (_jobs.Count > 0) {
            var job = _jobs.Dequeue();
            using (var printDoc = new PrintDocument()) {
                printDoc.PrintPage += (s, e) => e.Graphics.DrawImage(job, 10, 10);
                printDoc.Print();
            }
        }
    }
}

参考代码 带条码打印的固定资产管理系统源码 www.youwenfan.com/contentcsn/92788.html

六、扩展功能建议

1. RFID集成
csharp 复制代码
// RFID读写器接口
public interface IRFIDReader {
    string ReadTag();
    void WriteTag(string data);
}

// 实现类
public class ImpinjReader : IRFIDReader {
    public string ReadTag() {
        // 调用Impinj SDK实现
    }
    
    public void WriteTag(string data) {
        // 写入资产编号到RFID标签
    }
}
2. 移动端盘点
csharp 复制代码
// Web API接口
[HttpPost("api/inventory")]
public IActionResult ScanAsset(string barcode) {
    var asset = _assetService.FindByCode(barcode);
    return Ok(new { 
        Status = "success", 
        Asset = asset 
    });
}
相关推荐
Lvan的前端笔记2 小时前
python:深入理解 Python 的 `__name__ == “__main__“` 与双下划线(dunder)机制
开发语言·python
董世昌413 小时前
什么是扩展运算符?有什么使用场景?
开发语言·前端·javascript
lsx2024063 小时前
C++ 重载运算符和重载函数
开发语言
刺客xs3 小时前
Qt------信号槽,属性,对象树
开发语言·qt·命令模式
2501_921649493 小时前
免费获取股票历史行情与分时K线数据 API
开发语言·后端·python·金融·数据分析
尤物程序猿3 小时前
Java如何不建表完成各种复杂的映射关系(鉴权概念、区域概念、通用概念)
java·开发语言
Insight.4 小时前
背包问题——01背包、完全背包、多重背包、分组背包(Python)
开发语言·python
aini_lovee4 小时前
改进遗传算法求解VRP问题时的局部搜索能力
开发语言·算法·matlab
Yeniden4 小时前
Deepeek用大白话讲解 --> 迭代器模式(企业级场景1,多种遍历方式2,隐藏集合结构3,Java集合框架4)
java·开发语言·迭代器模式