基于C# WinForm开发的固定资产管理系统

一、系统架构设计


二、核心功能模块

1. 资产管理
csharp 复制代码
// 资产信息实体类
public class Asset
{
    public string AssetId { get; set; }  // 资产编号
    public string AssetName { get; set; } // 资产名称
    public string Category { get; set; }  // 资产类型
    public DateTime PurchaseDate { get; set; } // 采购日期
    public decimal OriginalValue { get; set; } // 原值
    public string Location { get; set; }    // 存放地点
    public string ResponsibleDept { get; set; } // 责任部门
    public AssetStatus Status { get; set; } // 资产状态
}

// 状态枚举
public enum AssetStatus
{
    正常,
    报废,
    出租,
    维修中
}
2. 数据库设计
csharp 复制代码
CREATE TABLE Assets (
    AssetId NVARCHAR(20) PRIMARY KEY,
    AssetName NVARCHAR(100) NOT NULL,
    Category NVARCHAR(50) CHECK (Category IN ('电子设备','机械设备','运输设备')),
    PurchaseDate DATETIME NOT NULL,
    OriginalValue DECIMAL(18,2),
    Location NVARCHAR(100),
    ResponsibleDept NVARCHAR(50),
    Status NVARCHAR(20) DEFAULT '正常'
);

CREATE TABLE Users (
    UserId INT PRIMARY KEY IDENTITY,
    Username NVARCHAR(50) UNIQUE,
    Password NVARCHAR(50),
    Role NVARCHAR(20) CHECK (Role IN ('管理员','普通用户'))
);

三、关键技术实现

1. 数据库访问层
csharp 复制代码
public class DBHelper
{
    private static string connStr = "Data Source=assets.db;Version=3;";
    
    public static DataTable ExecuteQuery(string sql, params SqlParameter[] parameters)
    {
        using (var conn = new SqlConnection(connStr))
        using (var cmd = new SqlCommand(sql, conn))
        {
            cmd.Parameters.AddRange(parameters);
            conn.Open();
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            adapter.Fill(dt);
            return dt;
        }
    }
    
    public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
    {
        using (var conn = new SqlConnection(connStr))
        using (var cmd = new SqlCommand(sql, conn))
        {
            cmd.Parameters.AddRange(parameters);
            conn.Open();
            return cmd.ExecuteNonQuery();
        }
    }
}
2. 资产管理窗体
csharp 复制代码
public partial class AssetManagementForm : Form
{
    private DataGridView dataGridView;
    private BindingSource bindingSource = new BindingSource();

    public AssetManagementForm()
    {
        InitializeComponent();
        InitializeDataGridView();
        LoadData();
    }

    private void InitializeDataGridView()
    {
        dataGridView.DataSource = bindingSource;
        dataGridView.Columns.AddRange(
            new DataGridViewTextBoxColumn { DataPropertyName = "AssetId", HeaderText = "资产编号" },
            new DataGridViewTextBoxColumn { DataPropertyName = "AssetName", HeaderText = "资产名称" },
            new DataGridViewTextBoxColumn { DataPropertyName = "Category", HeaderText = "资产类型" },
            new DataGridViewTextBoxColumn { DataPropertyName = "PurchaseDate", HeaderText = "采购日期" },
            new DataGridViewTextBoxColumn { DataPropertyName = "OriginalValue", HeaderText = "原值" }
        );
    }

    private void LoadData()
    {
        string sql = "SELECT * FROM Assets";
        DataTable dt = DBHelper.ExecuteQuery(sql);
        bindingSource.DataSource = dt;
    }

    private void btnSave_Click(object sender, EventArgs e)
    {
        string sql = @"INSERT INTO Assets (AssetId, AssetName, Category, PurchaseDate, OriginalValue)
                      VALUES (@AssetId, @AssetName, @Category, @PurchaseDate, @OriginalValue)";
        
        DBHelper.ExecuteNonQuery(sql,
            new SqlParameter("@AssetId", txtAssetId.Text),
            new SqlParameter("@AssetName", txtAssetName.Text),
            new SqlParameter("@Category", cmbCategory.Text),
            new SqlParameter("@PurchaseDate", dtpPurchaseDate.Value),
            new SqlParameter("@OriginalValue", numericOriginalValue.Value));
        
        MessageBox.Show("保存成功!");
        LoadData();
    }
}

四、高级功能实现

1. 条码打印功能
csharp 复制代码
// 使用BarcodeLib生成条码
public void GenerateBarcode(string assetId)
{
    Barcode barcode = new Barcode();
    barcode.Encode(TYPE.CODE128, assetId);
    Bitmap bitmap = barcode.Render(100, 50);
    bitmap.Save("barcode.png");
}
2. 折旧计算模块
csharp 复制代码
public decimal CalculateDepreciation(string method, decimal originalValue, 
                                     DateTime startDate, DateTime endDate)
{
    TimeSpan period = endDate - startDate;
    int months = (int)period.TotalMonths;
    
    return method switch
    {
        "直线法" => originalValue / 5 / 12 * months,
        "双倍余额递减法" => originalValue * 2 / 5 * (1 - Math.Pow(0.4, months)),
        _ => 0
    };
}

五、系统特性

  1. 权限控制 管理员:全功能权限 普通用户:仅查看和基础操作

  2. 数据验证

    csharp 复制代码
    // 资产编号唯一性验证
    private bool ValidateAssetId(string assetId)
    {
        string sql = "SELECT COUNT(*) FROM Assets WHERE AssetId=@id";
        int count = (int)DBHelper.ExecuteScalar(sql, 
            new SqlParameter("@id", assetId));
        return count == 0;
    }
  3. 报表导出

    csharp 复制代码
    // 使用FastReport生成PDF报表
    public void ExportToPDF(DataTable data, string outputPath)
    {
        Report report = new Report();
        report.Load("ReportTemplate.frx");
        report.RegisterData(data, "Assets");
        report.Prepare();
        report.Export(new PDFExport(), outputPath);
    }

参考代码 winform 固定资产管理系统源码下载(三层架构) www.youwenfan.com/contentcso/93571.html

六、部署与维护

  1. 数据库初始化脚本

    csharp 复制代码
    -- 创建数据库
    CREATE DATABASE assetsDB;
    USE assetsDB;
    
    -- 创建表结构
    CREATE TABLE Assets (...);
    CREATE TABLE Users (...);
  2. 系统维护功能 数据库备份/恢复 操作日志记录 系统参数配置


七、扩展建议

  1. 移动端适配 开发PDA版扫码入库模块,支持资产现场登记
  2. 物联网集成 通过RFID技术实现资产自动盘点
  3. 云同步功能 使用Azure SQL Database实现多地点数据同步
相关推荐
小满Autumn2 小时前
log4net 日志框架 — 从配置到实战速查手册
笔记·c#·.net·wpf·上位机·log4net
yaoxin5211235 小时前
434. Java 日期时间 API - Period 基于日期的时间段
java·开发语言·python
凡人叶枫6 小时前
Effective C++ 条款30:透彻了解 inlining 的里里外外
linux·开发语言·c++·嵌入式开发·effective c++
学逆向的6 小时前
C++纯虚函数
开发语言·c++·网络安全
程序员二叉6 小时前
【JUC】ThreadLocal底层原理|内存泄漏|弱引用|跨线程传递方案
java·开发语言·面试·职场和发展·juc
程序员二叉6 小时前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc
JaydenAI6 小时前
[对比学习LangChain和MAF-07]如何引入人机交互的审批流程
python·ai·langchain·c#·agent·hitl·maf
凡人叶枫7 小时前
Effective C++ 条款22:将成员变量声明为 private
linux·开发语言·c++
Qt程序员7 小时前
掌握 Linux 内核调度:从原理到实现(进程篇)
java·开发语言
code bean7 小时前
【LangChain】检索器完全指南:从向量检索到生产级 RAG 架构
java·开发语言·微服务