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

相关推荐
林杜雨都6 小时前
Action和Func
开发语言·c#
工程师0077 小时前
TPL如何自动调整执行效率
c#·tpl
CreasyChan8 小时前
C# 反射详解
开发语言·前端·windows·unity·c#·游戏开发
c#上位机8 小时前
halcon求区域交集——intersection
图像处理·人工智能·计算机视觉·c#·halcon
布谷歌8 小时前
在java中实现c#的int.TryParse方法
java·开发语言·python·c#
用户44884667106013 小时前
.NET进阶——深入理解Lambda表达式(2)手搓LINQ语句
c#·.net
云中飞鸿19 小时前
wpf 类图
c#
世洋Blog20 小时前
SiYangUnityEventSystem,一个Unity中的事件系统
观察者模式·unity·c#·游戏引擎·事件系统
切糕师学AI20 小时前
如何用 VS Code + C# Dev Kit 创建类库项目并在主项目中引用它?
开发语言·c#
William_cl21 小时前
【CSDN 专栏】C# ASP.NET控制器过滤器:自定义 ActionFilterAttribute 实战(避坑 + 图解)
c#·asp.net·状态模式