Python 语言 用 SQLite 开发个人记账本 多账户管理 + 月度收支统计

Python阿木 发布于 12 小时前 1 次阅读


Python SQLite 个人记账本开发指南

随着经济的发展和人们生活水平的提高,个人财务管理变得越来越重要。一个实用的记账本可以帮助我们更好地管理个人财务,了解自己的收支状况。本文将介绍如何使用Python和SQLite开发一个具有多账户管理和月度收支统计功能的个人记账本。

系统需求分析

在开始开发之前,我们需要明确系统的需求:

1. 多账户管理:用户可以创建多个账户,如工资账户、储蓄账户、信用卡账户等。
2. 收支记录:用户可以记录每一笔收支,包括收入、支出、转账等。
3. 月度收支统计:系统可以统计每个月的收入、支出和结余。
4. 数据备份与恢复:用户可以备份和恢复数据。

系统设计

数据库设计

我们使用SQLite数据库来存储数据。以下是数据库的设计:

- 账户表(accounts):存储账户信息。
- id:账户ID(主键,自增)
- name:账户名称
- type:账户类型(收入、支出、转账)

- 收支表(transactions):存储收支记录。
- id:记录ID(主键,自增)
- account_id:账户ID(外键)
- amount:金额
- type:收支类型(收入、支出)
- date:日期
- description:描述

系统功能模块

1. 账户管理:创建、删除、修改账户信息。
2. 收支记录:添加、删除、修改收支记录。
3. 月度统计:按月份统计收支情况。
4. 数据备份与恢复:备份和恢复数据。

实现代码

以下是使用Python和SQLite实现上述功能的代码示例。

python
import sqlite3
from datetime import datetime

连接数据库
conn = sqlite3.connect('personal_account.db')
cursor = conn.cursor()

创建账户表
cursor.execute('''
CREATE TABLE IF NOT EXISTS accounts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
type TEXT NOT NULL
)
''')

创建收支表
cursor.execute('''
CREATE TABLE IF NOT EXISTS transactions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
account_id INTEGER NOT NULL,
amount REAL NOT NULL,
type TEXT NOT NULL,
date TEXT NOT NULL,
description TEXT,
FOREIGN KEY (account_id) REFERENCES accounts (id)
)
''')

添加账户
def add_account(name, type):
cursor.execute('INSERT INTO accounts (name, type) VALUES (?, ?)', (name, type))
conn.commit()

添加收支记录
def add_transaction(account_id, amount, type, date, description):
cursor.execute('INSERT INTO transactions (account_id, amount, type, date, description) VALUES (?, ?, ?, ?, ?)',
(account_id, amount, type, date, description))
conn.commit()

按月份统计收支
def monthly_statistics(year, month):
cursor.execute('''
SELECT t.type, SUM(t.amount) as total
FROM transactions t
WHERE strftime('%Y-%m', t.date) = ?
GROUP BY t.type
''', (f'{year}-{month:02d}',))
return cursor.fetchall()

备份数据
def backup_data():
conn.backup('backup.db')

恢复数据
def restore_data():
conn = sqlite3.connect('backup.db')
cursor = conn.cursor()
cursor.execute('SELECT name FROM sqlite_master WHERE type="table";')
tables = cursor.fetchall()
for table in tables:
cursor.execute(f'CREATE TABLE {table[0]} AS SELECT FROM {table[0]} IN personal_account.db')
conn.close()

关闭数据库连接
conn.close()

示例:添加账户和收支记录
add_account('工资账户', '收入')
add_account('储蓄账户', '支出')
add_transaction(1, 10000, '收入', datetime.now().strftime('%Y-%m-%d'), '工资')
add_transaction(2, -500, '支出', datetime.now().strftime('%Y-%m-%d'), '购物')

示例:按月份统计收支
print(monthly_statistics(2023, 3))

示例:备份数据
backup_data()

示例:恢复数据
restore_data()

总结

本文介绍了如何使用Python和SQLite开发一个具有多账户管理和月度收支统计功能的个人记账本。通过以上代码,我们可以实现基本的记账功能,并根据需求进行扩展。在实际应用中,我们还可以添加用户界面、数据校验、异常处理等功能,以提高系统的可用性和稳定性。