基于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 
    });
}
相关推荐
ths5125 分钟前
测试开发python中正则表达式使用总结(二)
开发语言·python·算法
色空大师5 分钟前
【java打包方式详解】
java·开发语言·部署·打包·启动脚本·jar包分离
人道领域6 分钟前
2026年Java后端热点全景解析:从LTS革新到云原生跃迁
java·开发语言
heimeiyingwang6 分钟前
【架构实战】API接口防刷与限流策略
开发语言·python·架构
188号安全攻城狮8 分钟前
【前端基础知识】JavaScript 数组方法总结:从表格速查到分类详解
开发语言·前端·javascript·网络安全
不爱吃炸鸡柳8 分钟前
5道经典贪心算法题详解:从入门到进阶
开发语言·数据结构·c++·算法·贪心算法
鱼干~12 分钟前
【全栈知识点】全栈开发知识点
前端·人工智能·c#
xyq202418 分钟前
Java 变量命名规则
开发语言
天启HTTP18 分钟前
HTTP代理和隧道代理的底层区别与适用场景分析
开发语言·网络协议·tcp/ip·php
小白学大数据19 分钟前
告别复杂 XPath:DeepSeek+Python 爬虫快速实践
开发语言·爬虫·python·selenium