在数字化时代,个人财务管理越来越受到重视。一个简单易用的记账系统不仅能帮助我们理清收支状况,还能为理财决策提供数据支持。
系统概述与功能亮点
平平科技工作室开发的这款个人记账系统(版本号 1.0.0)旨在为用户提供一个便捷、全面的财务记录与分析平台。系统采用 Python 语言开发,结合 SQLite 数据库,实现了从收支记录到数据分析的全流程功能。
核心功能列表
记录管理:支持收入/支出记录的添加、修改和删除
分类管理:预设常用收支分类,支持自定义分类创建
数据查询:多条件筛选查看收支记录
数据分析:
支出分析(按分类统计与占比计算)
收入分析(按分类统计与占比计算)
财务概览(收支结余计算)
日志系统:记录所有数据操作历史
时间维度分析:支持按时间段筛选和分析
系统架构与技术实现
整体架构设计
该记账系统采用了面向对象的设计思想,核心类 AccountingSystem 封装了所有数据库操作和业务逻辑,提供了清晰的接口供交互使用。系统架构分为三层:
数据层:SQLite 数据库存储收支记录、分类信息和操作日志
业务逻辑层:AccountingSystem 类实现核心业务逻辑
交互层:命令行界面提供用户交互功能
数据库设计
系统使用 SQLite 数据库,包含三张主要表:
核心代码解析
初始化与数据库操作
系统启动时会自动初始化数据库并创建必要的表结构,如果是新数据库,还会添加预设的收支分类:
def _initialize_database(self):
"""初始化数据库和表结构"""
db_exists = os.path.exists(self.db_file)
self.conn = sqlite3.connect(self.db_file)
cursor = self.conn.cursor()
# 创建操作日志表
cursor.execute('''
CREATE TABLE IF NOT EXISTS change_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp TEXT NOT NULL,
action_type TEXT NOT NULL,
record_id INTEGER,
description TEXT
)
''')
# 创建记录表
cursor.execute('''
CREATE TABLE IF NOT EXISTS records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
date TEXT NOT NULL,
description TEXT NOT NULL,
category TEXT NOT NULL,
amount REAL NOT NULL,
is_income INTEGER NOT NULL CHECK (is_income IN (0, 1))
)
''')
# 创建分类表
cursor.execute('''
CREATE TABLE IF NOT EXISTS categories (
name TEXT PRIMARY KEY,
is_income_category INTEGER NOT NULL CHECK (is_income_category IN (0, 1))
)
''')
# 添加默认分类
if not db_exists:
default_expense_categories = ["餐饮", "交通", "购物", "娱乐", "医疗", "住房", "其他支出"]
default_income_categories = ["工资", "奖金", "投资收益", "其他收入"]
for cat in default_expense_categories:
cursor.execute("INSERT INTO categories VALUES (?, 0)", (cat,))
for cat in default_income_categories:
cursor.execute("INSERT INTO categories VALUES (?, 1)", (cat,))
self.conn.commit()
记录管理功能
系统提供了完整的记录管理功能,包括添加、查询、修改和删除记录。添加记录时会进行分类验证和日期格式检查:
def add_record(self, date_str, description, category, amount, is_income):
"""添加新的收支记录"""
try:
# 验证日期格式
datetime.strptime(date_str, "%Y-%m-%d")
# 验证分类是否存在
cursor = self.conn.cursor()
cursor.execute("SELECT * FROM categories WHERE name = ?", (category,))
cat_data = cursor.fetchone()
if not cat_data:
# 分类不存在,询问用户是否创建新分类
print(f"分类 '{category}' 不存在。")
create_new = input("是否创建新分类?(y/n): ").strip().lower()
if create_new == 'y':
is_income_cat = 1 if is_income else 0
cursor.execute("INSERT INTO categories VALUES (?, ?)", (category, is_income_cat))
self.conn.commit()
else:
print("操作取消。")
return False
# 插入新记录
cursor.execute(
"INSERT INTO records (date, description, category, amount, is_income) VALUES (?, ?, ?, ?, ?)",
(date_str, description, category, amount, 1 if is_income else 0)
)
record_id = cursor.lastrowid
# 添加操作日志
cursor.execute(
"INSERT INTO change_logs (timestamp, action_type, record_id, description) VALUES (datetime('now'), ?, ?, ?)",
('CREATE', record_id, f"新增{'收入' if is_income else '支出'}记录")
)
self.conn.commit()
print("记录添加成功!")
return True
except ValueError:
print("日期格式不正确,请使用 YYYY-MM-DD 格式。")
return False
except Exception as e:
print(f"添加记录失败: {e}")
return False
数据分析功能
系统提供了强大的数据分析功能,包括支出分析、收入分析和财务概览。分析结果不仅显示具体金额,还计算各类别的占比:
def analyze_expenses(self, start_date=None, end_date=None, return_data=False):
"""支出分析功能,支持按时间段筛选"""
cursor = self.conn.cursor()
query = """
SELECT category, SUM(amount) as total
FROM records
WHERE is_income = 0
"""
params = []
if start_date:
query += " AND date >= ?"
params.append(start_date)
if end_date:
query += " AND date <= ?"
params.append(end_date)
query += " GROUP BY category ORDER BY total DESC"
cursor.execute(query, params)
results = cursor.fetchall()
if return_data: # 添加返回数据功能
return [(row[0], row[1]) for row in results]
if not results:
print("没有找到支出记录。")
return
total_expenses = sum(row[1] for row in results)
print("\n支出分析:")
print("{:<15} {:<10} {:<8}".format("分类", "金额", "占比"))
print("-" * 35)
for category, amount in results:
percentage = (amount / total_expenses) * 100
print(f"{category:<15} {amount:<10.2f} {percentage:>6.2f}%")
print("-" * 35)
print(f"总支出: {total_expenses:.2f}")
系统使用指南
命令行交互界面
系统提供了简洁明了的命令行交互界面,用户可以通过输入数字选择不同的功能:
欢迎使用个人记账系统!
========================================
请选择操作:
1. 添加收入记录
2. 添加支出记录
3. 查看所有记录
4. 查看收入记录
5. 查看支出记录
6. 删除记录
7. 支出分析
8. 收入分析
9. 财务概览
0. 退出系统
========================================
请输入选项 (0-9):
使用示例:添加收入记录
选择选项"1"进入添加收入记录界面
输入日期(格式:YYYY-MM-DD)
输入记录描述(如"5月工资")
输入分类(如"工资",若分类不存在系统会提示创建)
输入金额
系统确认添加并记录操作日志
使用示例:支出分析
选择选项"7"进入支出分析界面
可选择输入开始日期和结束日期(或直接回车跳过)
系统显示各支出分类的金额和占比
显示总支出金额
扩展与优化方向
功能扩展建议
图形用户界面:将命令行界面升级为 GUI 界面,提升用户体验
数据可视化:增强图表展示功能,使用 matplotlib 或 plotly 生成更丰富的统计图表
数据导入导出:支持 Excel、CSV 等格式的账单导入导出
预算管理:添加预算设置与预警功能
多账户管理:支持银行卡、支付宝、微信等多账户管理
技术优化方向
数据库优化:针对大量数据场景进行查询优化
代码结构优化:分离业务逻辑与数据访问,引入 MVC 架构
异常处理增强:完善各功能模块的异常处理机制
安全性增强:添加数据加密和用户认证功能
总结
这款个人记账系统通过简洁的设计和完善的功能,为用户提供了一个实用的财务管理工具。系统采用 Python 和 SQLite 实现,具有轻量级、易部署的特点,同时提供了从记录到分析的完整功能链。
无论是个人日常记账还是家庭财务管理,该系统都能满足基本需求。对于开发者而言,这也是一个很好的面向对象编程和数据库应用的实践案例,展示了如何将业务需求转化为具体的代码实现。
通过进一步的功能扩展和优化,这款记账系统可以成为更加专业和强大的财务管理平台,帮助用户更好地理解和管理自己的财务状况。