用 WinForm 做了一个简易记账小工具(含源码)|副业/练手项目分享

最近工作之外想做点副业项目,考虑了很久,决定从最基础、最实用的工具开始------做一个简洁小巧的本地记账工具

本篇文章会分享:

  • ✅ 项目的功能设计
  • ✅ 界面效果
  • ✅ 完整源码(含保存功能)
  • ✅ 使用到的 NuGet 包

📌 开发环境 :Windows + C# + WinForm

📌 适合人群 :初学者、想搞副业写点项目的开发者

📌 项目定位:轻量、可扩展、易维护的本地账本


✨ 一、项目功能

这个小工具主要包含以下几个功能:

  • 添加收入 / 支出
  • 选择日期、输入金额与备注
  • 显示历史账单记录
  • 本地保存为 JSON(关闭程序也能保存数据)
  • 清爽简洁的 WinForm 界面

界面如下图所示(可自行美化):


🧱 二、核心技术结构

项目结构简单明了,分为三部分:

1️⃣ 数据模型 Record.cs

csharp 复制代码
public class Record
{
    public string Type { get; set; } // 收入/支出
    public string Description { get; set; }
    public decimal Amount { get; set; }
    public DateTime Date { get; set; }
}

2️⃣ 数据保存 DataManager.cs

csharp 复制代码
public static class DataManager
{
    private static string filePath = "records.json";

    public static List<Record> Load()
    {
        if (!File.Exists(filePath)) return new List<Record>();
        var json = File.ReadAllText(filePath);
        return JsonConvert.DeserializeObject<List<Record>>(json);
    }

    public static void Save(List<Record> records)
    {
        var json = JsonConvert.SerializeObject(records, Formatting.Indented);
        File.WriteAllText(filePath, json);
    }
}

📦 注意:需要在 NuGet 安装 Newtonsoft.Json


🖼️ 三、主界面逻辑 Form1.cs

ini 复制代码
private List<Record> records = new List<Record>();

public Form1()
{
    InitializeComponent();
    records = DataManager.Load();
    RefreshList();
}

private void btnAdd_Click(object sender, EventArgs e)
{
    var record = new Record
    {
        Type = comboBoxType.SelectedItem.ToString(),
        Description = textBoxDesc.Text,
        Amount = decimal.Parse(textBoxAmount.Text),
        Date = dateTimePicker.Value
    };

    records.Add(record);
    DataManager.Save(records);
    RefreshList();

    textBoxDesc.Clear();
    textBoxAmount.Clear();
}

private void RefreshList()
{
    listBox1.Items.Clear();
    foreach (var r in records)
    {
        listBox1.Items.Add($"{r.Date.ToShortDateString()} | {r.Type} | {r.Amount:C} | {r.Description}");
    }
}

控件推荐配置如下:

控件 名称
ComboBox comboBoxType (内容包含"收入""支出")
TextBox textBoxDesc, textBoxAmount
DateTimePicker dateTimePicker
Button btnAdd
ListBox listBox1

🪄 四、后续改进方向(可选)

如果你想扩展功能,也可以考虑:

  • 总收入 / 总支出统计
  • 月度图表分析
  • 导出 Excel
  • Dark 模式美化 UI
  • 云端同步(结合 SQLite + API)

🎯 五、写在最后

这是我做副业路上第一个"正式"记录下来的项目。

它虽然很简单,但也让我重新找回了一点点成就感,哪怕只是写点代码、做个工具、分享到博客,也比什么都不做好。也欢迎你把这个项目 fork、修改、自己发布。

📌 如果你也在副业、写项目的路上,不妨点赞+收藏支持我一下!
💬 有任何问题欢迎评论或私信交流~

项目链接:

github.com/Alan52519/A...

相关推荐
幻想趾于现实42 分钟前
C# Winform 入门(11)之制作酷炫灯光效果
开发语言·c#·winform
Eiceblue2 小时前
.NET用C#在PDF文档中添加、删除和替换图片
开发语言·pdf·c#·.net·idea
勘察加熊人2 小时前
c#和c++脚本解释器科学运算
开发语言·c++·c#
唐青枫2 小时前
dotnet 编译模式使用教程
c#·.net
du fei2 小时前
C# 窗体应用(.FET Framework) 与 visionpro 连接
开发语言·c#
anlog3 小时前
C#中为自定义控件设置工具箱图标
c#
念心科道尊4 小时前
【Csharp】Winform客户端与服务器,局域网加密字符串与文件通信
运维·服务器·c#
爱凤的小光4 小时前
图漾相机——C#语言属性设置
开发语言·c#
江沉晚呤时6 小时前
如何深入理解C#中的备忘录模式(Memento Pattern)设计模式
运维·服务器·数据库·c#·.netcore
@蓝莓果粒茶7 小时前
LeetCode第132题_分割回文串II
开发语言·算法·leetcode·职场和发展·c#·.net·linq