基于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 
    });
}
相关推荐
dialect_4 小时前
KMP算法
开发语言·c++·算法
总要学点什么5 小时前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
开开心心_Every6 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c6 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
吴卫斌7 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
超级架构师8 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core
叼烟扛炮8 小时前
Linux 学习笔记(四十三):网络编程进阶——自定义协议解决 TCP 粘包与守护进程
linux·开发语言·网络·笔记·tcp/ip
LMT流氓兔9 小时前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节
专注仿真9 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
外收内放9 小时前
Python基础语法练习题(75)
开发语言·python·学习