基于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 
    });
}
相关推荐
Boilermaker19926 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
MM_MS7 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
玩泥巴的7 小时前
飞书 .NET SDK 事件处理的幂等性与去重机制
c#·.net·二次开发·飞书
꧁Q༒ོγ꧂7 小时前
LaTeX 语法入门指南
开发语言·latex
njsgcs7 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
alonewolf_997 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
在路上看风景7 小时前
3.2 FileStream
c#
zwm2698888157 小时前
6号楼 部分声光24v电压达不到,显示11v
c#
古城小栈8 小时前
Rust 迭代器产出的引用层数——分水岭
开发语言·rust
ghie90908 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab