基于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 
    });
}
相关推荐
FQNmxDG4S7 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
前端老石人7 小时前
HTML 字符引用完全指南
开发语言·前端·html
matlab_xiaowang8 小时前
Redux 入门:JavaScript 可预测状态管理库
开发语言·javascript·其他·ecmascript
虹科网络安全8 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje8 小时前
Java语法进阶
java·开发语言·jvm
老前端的功夫9 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287929 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
止语Lab9 小时前
从手动到框架:Go DI 演进的三个拐点
开发语言·后端·golang
yaoxin5211239 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
小短腿的代码世界9 小时前
Qt日志系统深度解析:从qDebug到企业级日志框架
开发语言·qt