一、系统架构设计
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
});
}