当前位置:首页>python>过年红包管理神器!程序员小哥用Python写了个记账软件,亲戚都惊呆了!

过年红包管理神器!程序员小哥用Python写了个记账软件,亲戚都惊呆了!

  • 2026-09-08 22:11:10
过年红包管理神器!程序员小哥用Python写了个记账软件,亲戚都惊呆了!

还在为红包收支烦恼?一行代码解决你的春节经济危机!

春节将至,红包战争一触即发!收红包一时爽,记账火葬场。给侄子500,侄女600,舅舅给1000,阿姨给800...等等,我到底收了多少?花了多少?谁给的多?该还多少人情?

作为程序员的我,被这个问题困扰多年后,终于决定——自己写个程序搞定它!今天就把这个红包管理神器分享给大家,附完整代码,手把手教你打造专属于自己的春节财务管家!

一、痛点直击:你的红包烦恼,我都懂!

先来个灵魂拷问:

  • 去年春节,你净收入还是净支出?

  • 给不同亲戚孩子的红包金额合理吗?

  • 哪些亲戚给的红包最大方?

  • 人情往来中,你最“亏”的是谁?

如果这些问题让你头皮发麻,恭喜你,本文就是为你量身定制的!

二、神器亮相:我的红包管理软件长这样!

先上成果图,让你看看这个工具多强大:

(想象一下:红包记录表单、明细表格、精美的收支饼图,所有数据一目了然!)

这个工具能做到:

  1. 智能记账:收入支出分类记录,支持自定义类别

  2. 关系管理:记录发/收对象及亲属关系

  3. 实时统计:自动计算总收入、总支出、净余额

  4. 可视化分析:自动生成收支分布饼图

  5. 数据导出:一键导出Excel,永久保存

最重要的是——它完全免费,代码开源,你可以随意修改!money哥为大家呕心沥血的真心啊

三、框架剖析:看看程序员如何“优雅”记账

核心架构:三个模块搞定复杂需求

# 1. 数据层:SQLite数据库存储class RedPacketManager:    def create_table(self):        """创建红包记录表"""        # 包含日期、类型、类别、金额、对象、关系、备注七大字段        # 设计精巧,满足所有记账需求!    def load_data(self):        """智能加载与统计"""        # 自动计算各种统计数据        # 月度分析、人员统计、分类汇总一气呵成

亮点功能揭秘:这些设计太贴心了!

亮点1:智能分类联动

def on_type_changed(self, event=None):    """选择‘收入’或‘支出’时,自动切换对应类别"""    # 收入:压岁钱、红包、礼物折算、其他收入    # 支出:给晚辈、给长辈、人情往来、其他支出    # 逻辑清晰,防止记错账!

亮点2:人情关系网络

# 不只是记账,更是人情账本!person_stats = {    "张三": {"income": 1000, "expense": 500, "relationship": "舅舅"},    "李四": {"income": 800, "expense": 600, "relationship": "阿姨"}    # 谁欠你人情,你欠谁人情,一目了然!}

亮点3:可视化报表

def update_charts(self):    """自动生成专业饼图"""    # 收入分布图(左)    # 支出分布图(右)    # 颜色鲜艳,支持中文,年会上展示都够用!

四、使用教程:手把手教你运行代码

第一步:准备环境(超级简单!)

# 只需安装三个库pip install tkinter  # 界面库(通常已内置)pip install matplotlib  # 图表库pip install pandas  # 数据处理库

第二步:复制完整代码

第三步:运行程序

叮咚! 你的专属红包管理器启动成功!

第四步:开始记账(示例)

假设春节当天:

  1. 收姨妈红包:点击“添加记录”

    • 日期:自动当天

    • 类型:收入

    • 类别:红包(自动选项)

    • 金额:1000

    • 对象:张阿姨

    • 关系:亲戚

    • 备注:新年快乐!

  2. 给侄子红包:再点“添加记录”

    • 类型切换为“支出”

    • 类别自动变为“给晚辈”

    • 金额:600

    • 对象:小明

    • 关系:家人

  3. 查看成果:右侧立即显示统计和图表!

五、核心代码解读

1. 数据库设计:简洁高效

def create_table(self):    cursor = self.conn.cursor()    cursor.execute('''        CREATE TABLE IF NOT EXISTS red_packets (            id INTEGER PRIMARY KEY AUTOINCREMENT,            date TEXT NOT NULL,            type TEXT NOT NULL,            category TEXT NOT NULL,            amount REAL NOT NULL,            person TEXT NOT NULL,            relationship TEXT NOT NULL,            note TEXT        )    ''')    self.conn.commit()

我们使用SQLite数据库,它是一个轻量级的嵌入式数据库,非常适合桌面应用。表结构设计包含8个字段,其中id是自增主键,date记录日期,type区分收入支出,category是具体类别,amount是金额,person是红包对象,relationship是关系,note是备注。这样的设计可以满足红包记录的所有需求。

2. 数据统计:使用defaultdict自动初始化

from collections import defaultdict# 在load_data方法中self.category_income = defaultdict(float)self.category_expense = defaultdict(float)self.monthly_stats = defaultdict(lambda: {"income": 0, "expense": 0})

defaultdict是Python的一个神器,它允许我们为字典设置默认值。这样在统计时,如果键不存在,会自动创建并初始化为0,避免了繁琐的判断和初始化代码。

3. GUI布局:tkinter的灵活运用

def setup_gui(self):    # 创建标题框架    title_frame = tk.Frame(self.root, bg="#FF6B6B", height=80)    title_frame.pack(fill=tk.X)    title_frame.pack_propagate(False)    # 创建主内容框架,分为左右两部分    main_frame = tk.Frame(self.root, bg="#FFF0F0")    main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)    left_frame = tk.Frame(main_frame, bg="#FFF0F0")    left_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=(0, 5))    right_frame = tk.Frame(main_frame, bg="#FFF0F0")    right_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=(5, 0))

我们使用tkinter进行GUI设计。界面分为标题、左侧输入和统计区域、右侧记录和图表区域。通过Frame的嵌套和pack布局管理器,实现了界面的灵活布局。注意,我们使用了pack_propagate(False)来固定标题框架的高度,否则框架会根据内容自动调整。

4. 表格显示:ttk.Treeview的使用

self.tree = ttk.Treeview(table_frame, columns=columns, show="headings", height=15)

ttk.Treeview是tkinter中用于显示表格的控件,我们设置show="headings"来显示表头,并定义列名。然后为每一列设置宽度和对齐方式。通过tag_configure为收入(绿色)和支出(红色)设置不同的颜色,使表格更加直观。

5. 图表绘制:matplotlib与tkinter的结合

# 创建图表fig = Figure(figsize=(8, 4), dpi=80, facecolor="#FFF9F9")ax1 = fig.add_subplot(121)ax1.pie(income_sizes, labels=income_labels, autopct='%1.1f%%', colors=colors, startangle=90)ax1.set_title('收入类别分布', fontproperties="SimHei")# 嵌入到Tkintercanvas = FigureCanvasTkAgg(fig, master=self.chart_canvas_frame)canvas.draw()canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)

我们使用matplotlib绘制饼图,并通过FigureCanvasTkAgg将图表嵌入到tkinter界面中。注意,我们设置了中文字体(SimHei)以正常显示中文标题。图表背景色与界面背景色一致,保持整体协调。

6. 事件驱动:类型改变自动更新类别

def on_type_changed(self, event=None):    record_type = self.entries["type"].get()    if record_type == "收入":        categories = ["压岁钱", "红包", "礼物折算", "其他收入"]    else:        categories = ["给晚辈", "给长辈", "人情往来", "其他支出"]    self.entries["category"].config(values=categories)

当用户在组合框中选择不同的类型(收入或支出)时,会触发on_type_changed事件,然后自动更新类别组合框的选项。这样设计避免了用户选择错误类别,提升了用户体验。

7. 数据导出:使用pandas生成Excel

def export_to_excel(self):    # 从数据库读取数据    cursor = self.conn.cursor()    cursor.execute("SELECT date, type, category, amount, person, relationship, note FROM red_packets")    rows = cursor.fetchall()    # 创建DataFrame    df = pd.DataFrame(rows, columns=["日期", "类型", "类别", "金额", "对象", "关系", "备注"])    # 保存到Excel    with pd.ExcelWriter(filename, engine='openpyxl') as writer:        df.to_excel(writer, sheet_name='红包记录', index=False)

我们使用pandas库将数据库中的数据导出到Excel。pandas的DataFrame可以很方便地将数据转换为表格形式,并且支持直接写入Excel文件。我们创建了两个工作表,一个存放详细记录,一个存放汇总数据。

8. 面向对象设计:将功能封装在类中

整个程序被封装在一个RedPacketManager类中,这样可以将数据和方法组织在一起,结构清晰,也便于扩展和维护。例如,如果需要添加新的功能,只需在类中添加新的方法即可。

通过以上解读,相信你对代码有了更深入的理解。这个项目虽然不大,但涵盖了数据库操作、GUI编程、数据可视化、文件导出等多个方面,是一个很好的Python实战项目。

效果视频

六、不只是工具:这是你的人情“数据库”

这个程序最大的价值不是记账,而是:

建立你的人情档案:谁对你大方?你对谁大方?优化社交策略:钱要花在刀刃上,人情要还给对的人传承家庭记忆:5年后回看,这是温暖的春节记忆培养财务意识:从小红包开始,学会管理大财务

七、程序员思维:如何用代码解决生活问题、

这个项目展示了程序员的核心优势:

  1. 发现问题:红包记账混乱

  2. 分析需求:需要记录、统计、分析、可视化

  3. 设计架构:数据库+界面+图表

  4. 迭代优化:根据使用反馈添加新功能

这个春节,让我们用程序员的方式,优雅地管理红包,科学地经营人情!

完整代码获取:关注公众号后在公众号后台回复「红包管理软件」获取完整源代码文件,下载到本地电脑用Python环境运行!

分享不易,扫码关注、点赞、点在看,支持一下吧

最新文章

随机文章