家庭收支链上记账小程序,每笔收支写入链式结构,不可删除,支持家庭成员共同查看,解决账目争议,隐瞒消费问题。
👉 「家庭收支链上记账小程序(Family Ledger Chain)」
适用于:
✅ 夫妻共同记账
✅ 合租室友 AA 结算
✅ 父母子女共管账户
✅ 解决“钱花哪了”“谁没出钱”的信任问题
一、实际应用场景描述(Scenario)
你和家人共用一个家庭消费记账群:
- 老公刷信用卡
- 老婆付房租
- 孩子买了游戏
- 偶尔现金支出
但经常出现:
- “我明明付了,你怎么不记?”
- “这笔钱不是我花的”
- 一方删记录、改金额
- Excel 被覆盖、聊天记录过期
👉 你们需要一个:
像区块链一样“谁也改不了”的家庭账本
二、引入痛点(Pain Points)
现有方式 问题
Excel / 微信表 可随意修改
记账 App 单人控制、不透明
聊天记录 易丢失
口头对账 无证据
✅ 核心诉求:
每一笔收支
谁记的 + 什么时候 + 金额多少 + 无法删除或修改
三、核心逻辑讲解(Core Logic)
🧠 设计思想(来自区块链课程)
我们用简化版区块链结构:
Block
├─ index
├─ timestamp
├─ payer(支付人)
├─ amount
├─ category
├─ prev_hash
└─ hash
三大保障机制
1️⃣ 链式哈希
- 当前块 hash = f(数据 + 上一个 hash)
- 改一笔 → 整条链失效
2️⃣ 全员可读
- 账本存储在本地 JSON / 文件中
- 家庭成员可随时验证
3️⃣ 不可删除
- 删除即破坏 hash 连续性
四、代码模块化设计(Python)
📁 项目结构
family_ledger_chain/
│
├── main.py # 入口
├── block.py # 区块结构
├── chain.py # 链逻辑
├── utils.py # 哈希 & 时间
├── ledger.json # 账本存储
└── README.md
1️⃣ utils.py(工具函数)
import hashlib
import json
import time
def calculate_hash(data: dict) -> str:
"""
计算区块哈希(SHA-256)
"""
data_string = json.dumps(data, sort_keys=True)
return hashlib.sha256(data_string.encode()).hexdigest()
def get_timestamp() -> int:
"""
获取当前时间戳
"""
return int(time.time())
2️⃣ block.py(区块结构)
from utils import calculate_hash, get_timestamp
class Block:
def __init__(self, index, payer, amount, category, prev_hash):
self.index = index
self.timestamp = get_timestamp()
self.payer = payer
self.amount = amount
self.category = category
self.prev_hash = prev_hash
self.hash = self.compute_hash()
def compute_hash(self):
data = {
"index": self.index,
"timestamp": self.timestamp,
"payer": self.payer,
"amount": self.amount,
"category": self.category,
"prev_hash": self.prev_hash
}
return calculate_hash(data)
3️⃣ chain.py(家庭账本链)
import json
from block import Block
class FamilyLedger:
def __init__(self, storage_file="ledger.json"):
self.chain = []
self.storage_file = storage_file
self.load_chain()
def create_genesis_block(self):
"""
创建创世区块
"""
genesis = Block(0, "SYSTEM", 0, "INIT", "0")
self.chain.append(genesis)
self.save_chain()
def add_record(self, payer, amount, category):
prev_block = self.chain[-1]
new_block = Block(
index=len(self.chain),
payer=payer,
amount=amount,
category=category,
prev_hash=prev_block.hash
)
self.chain.append(new_block)
self.save_chain()
def save_chain(self):
with open(self.storage_file, "w", encoding="utf-8") as f:
json.dump([block.__dict__ for block in self.chain], f, indent=2)
def load_chain(self):
try:
with open(self.storage_file, "r", encoding="utf-8") as f:
data = json.load(f)
self.chain = [Block(**b) for b in data]
except FileNotFoundError:
self.create_genesis_block()
4️⃣ main.py(示例运行)
from chain import FamilyLedger
ledger = FamilyLedger()
ledger.add_record("爸爸", 300, "超市购物")
ledger.add_record("妈妈", 1200, "房租")
ledger.add_record("儿子", 68, "游戏充值")
print("✅ 家庭账本已更新")
五、README.md(使用说明)
# Family Ledger Chain
📌 简介:
基于区块链思想的家庭收支记账小程序,
每笔收支写入链式结构,不可删除、不可篡改。
🚀 使用方法:
bash
python main.py
📄 数据存储:
- ledger.json 保存全部账目
- 家庭成员可随时查看与核对
⚠️ 注意事项:
- 当前为本地单机版本
- 不替代银行账单,仅用于家庭内部对账
六、核心知识点卡片(Knowledge Cards)
模块 关键技术点
区块链基础 区块、哈希链、创世区块
数据不可篡 哈希依赖、链式校验
家庭协作 多方可见、公开透明
时间戳 顺序性、可追溯
Python OOP 类封装、模块化设计
创新思维 用“链”解决信任问题
七、总结(Conclusion)
✅ 本方案:
- ✅ 不需要数据库
- ✅ 不需要服务器
- ✅ 用“区块链思维”解决家庭信任
- ✅ 每一笔钱都有“铁证”
📌 一句话总结:
**让家庭账本像比特币一样可靠,
不再因为“谁花了钱”而吵架。**
如果你愿意,下一步可以:
- ✅ 升级为 多人签名记账
- ✅ 增加 账目争议仲裁机制
- ✅ 做成 Web / 微信小程序
利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!
