Skip to content
python
# stage4_file_handling.py
import json
import os
from datetime import datetime

class FinanceManager:
    def __init__(self, filename="finance_data.json"):
        self.filename = filename
        self.data = self.load_data()
    
    def load_data(self):
        """从文件加载数据"""
        try:
            if os.path.exists(self.filename):
                with open(self.filename, 'r', encoding='utf-8') as f:
                    return json.load(f)
            else:
                # 创建新的数据结构
                return {
                    "income": [],
                    "expenses": [],
                    "savings_goal": 0,
                    "created_date": datetime.now().strftime("%Y-%m-%d")
                }
        except (json.JSONDecodeError, IOError) as e:
            print(f"加载数据时出错: {e}")
            return {"income": [], "expenses": [], "savings_goal": 0}
    
    def save_data(self):
        """保存数据到文件"""
        try:
            with open(self.filename, 'w', encoding='utf-8') as f:
                json.dump(self.data, f, ensure_ascii=False, indent=2)
            print("数据保存成功!")
        except IOError as e:
            print(f"保存数据时出错: {e}")
    
    def add_transaction(self, transaction_type, amount, category, description):
        """添加交易记录"""
        try:
            amount = float(amount)
            if amount <= 0:
                raise ValueError("金额必须大于0")
            
            transaction = {
                "amount": amount,
                "category": category,
                "description": description,
                "date": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            }
            
            if transaction_type.lower() == "income":
                self.data["income"].append(transaction)
                print(f"✓ 收入记录添加成功: {amount}元")
            elif transaction_type.lower() == "expense":
                self.data["expenses"].append(transaction)
                print(f"✓ 支出记录添加成功: {amount}元")
            else:
                print("错误:交易类型必须是 'income' 或 'expense'")
            
            self.save_data()
            
        except ValueError as e:
            print(f"输入错误: {e}")
        except Exception as e:
            print(f"添加交易时出错: {e}")
    
    def export_report(self, report_filename="financial_report.txt"):
        """导出财务报告到文本文件"""
        try:
            total_income = sum(item["amount"] for item in self.data["income"])
            total_expenses = sum(item["amount"] for item in self.data["expenses"])
            balance = total_income - total_expenses
            
            with open(report_filename, 'w', encoding='utf-8') as f:
                f.write("=" * 50 + "\n")
                f.write("           个人财务报告\n")
                f.write("=" * 50 + "\n\n")
                f.write(f"报告生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
                f.write(f"总收入: {total_income:.2f}\n")
                f.write(f"总支出: {total_expenses:.2f}\n")
                f.write(f"当前余额: {balance:.2f}\n\n")
                
                f.write("收入明细:\n")
                for income in self.data["income"]:
                    f.write(f"  - {income['date']}: {income['amount']}元 ({income.get('category', '无类别')})\n")
                
                f.write("\n支出明细:\n")
                for expense in self.data["expenses"]:
                    f.write(f"  - {expense['date']}: {expense['amount']}元 ({expense['category']} - {expense['description']})\n")
            
            print(f"报告已导出到 {report_filename}")
            
        except IOError as e:
            print(f"导出报告时出错: {e}")

# 使用示例
def main():
    manager = FinanceManager()
    
    print("=== 文件操作财务系统 ===")
    
    # 添加一些示例交易
    manager.add_transaction("income", 8000, "工资", "月度工资")
    manager.add_transaction("expense", 2500, "住房", "房租")
    manager.add_transaction("expense", 1500, "餐饮", "日常饮食")
    manager.add_transaction("income", 500, "兼职", "周末兼职")
    
    # 导出报告
    manager.export_report()
    
    # 显示当前余额
    total_income = sum(item["amount"] for item in manager.data["income"])
    total_expenses = sum(item["amount"] for item in manager.data["expenses"])
    print(f"\n当前财务状况:")
    print(f"总收入: {total_income:.2f} 元")
    print(f"总支出: {total_expenses:.2f} 元")
    print(f"余额: {total_income - total_expenses:.2f} 元")

if __name__ == "__main__":
    main()

Released under the MIT License.