用 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...

相关推荐
yngsqq8 小时前
cad c#二次开发 图层封装 获取当前层
java·数据库·c#
隐-梵11 小时前
2025年测绘程序设计模拟赛一--地形图图幅编号及图廓点经纬度计算
windows·经验分享·visualstudio·c#
lixy57912 小时前
wpf 动态转圈等待提示框
c#·wpf
南無忘码至尊12 小时前
Unity编辑器工具:一键为场景中所有MeshRenderer对象添加指定脚本
unity·c#·游戏引擎·游戏开发
海绵宝宝汉堡包13 小时前
未给任务“Fody.WeavingTask”的必需参数“IntermediateDir”赋值。 WpfTreeView
c#
枯萎穿心攻击14 小时前
算法入门第一篇:算法核心:复杂度分析与数组基础
算法·unity·矩阵·c#·游戏引擎
程序设计实验室1 天前
分析C#项目的单元测试覆盖率,提高代码质量
c#
一顿操作猛如虎,啥也不是!1 天前
c# 在 23:00 - 23:59 之间执行一次的写法
开发语言·c#
格林威1 天前
Baumer相机如何通过YoloV8深度学习模型实现工厂自动化产线牛奶瓶盖实时装配的检测识别(C#代码UI界面版)
人工智能·深度学习·数码相机·yolo·机器学习·计算机视觉·c#
DataIntel1 天前
c# 属性操作(2)
c#