# 个人财务管理系统
一个基于Java Swing的现代化多用户个人财务管理系统,采用Material Design风格,支持收入支出记录、固定交易自动生成、统计报告等功能。
## 已实现的功能列表
### 核心功能
- ✅ **用户管理** - 用户注册、登录、切换用户,多用户数据隔离
- ✅ **管理员系统** - 基于角色的权限管理,支持用户管理、密码重置等功能
- ✅ **交易记录管理** - 添加、编辑、删除收入和支出记录
- 智能排序:按日期降序(新→旧),同日期按创建时间降序
- 时间戳记录:显示每条交易的创建时间和最后修改时间
- 精确匹配:编辑/删除操作基于完整记录信息,确保准确性
- ✅ **日期选择器** - 年月日下拉框选择,自动处理每月天数
- ✅ **固定交易管理** - 周期性收入/支出自动生成(每天/每周/每月/每年)
- ✅ **智能生成机制** - 登录时自动生成遗漏的固定交易
- 自动补齐:扫描从生效日期到今天的所有遗漏交易
- 避免重复:检查已存在记录,智能去重
- 统一备注:所有自动生成交易统一标注"固定交易(自动生成)"
- ✅ **交易同步** - 一键同步所有固定交易记录
- 完全重建:删除所有自动生成的记录,根据当前设置重新生成
- 日期准确:严格按照设定的周期和日期生成(非生效日期)
- 追溯生效:适用于修改固定交易后需要重新生成历史记录
- ✅ **数据筛选** - 按日期、类型、分类筛选交易记录
- ✅ **统计报告** - 生成月度、年度收支报告
- ✅ **可视化报告** - 折线图、饼图、柱状图多维度数据展示
- ✅ **数据导出** - 支持CSV格式数据导出
- ✅ **多用户支持** - 每个用户独立的财务数据存储
本项目采用**分层架构**和**模块化设计**,将系统分为三个主要层次:(本人负责所有的实现)
┌─────────────────────────────────────┐
│ 表示层 (GUI) │
│ LoginGUI.java │ MainGUI.java │
├─────────────────────────────────────┤
│ 业务层 (Service) │
│ UserService.java │ Reports.java │
├─────────────────────────────────────┤
│ 数据层 (Repository) │
│ Repository.java │ Storage.java │
├─────────────────────────────────────┤
│ 模型层 (Model) │
│ User.java │ Transaction.java │
└─────────────────────────────────────┘
数据模型层 :Transaction.java交易记录模型,
- 使用`record`类型实现不可变对象,确保数据安全
- 提供工厂方法,封装对象创建逻辑
- 值对象模式,所有字段都是final的
RecurringTransaction.java - 固定交易模板
- 不可变设计:使用record确保线程安全
- 状态管理:记录最后生成日期,避免重复生成
- 智能计算:根据周期类型自动计算下次生成日期
- 灵活控制:支持激活/暂停固定交易
数据访问层 :CsvStorage.java - CSV存储实现
- 接口隔离:定义清晰的存储契约
- 依赖倒置:高层模块依赖抽象接口
- 开闭原则:可以轻松扩展其他存储方式(数据库、XML等)
过滤器系统:Filters.java
- 策略模式:不同过滤器实现不同的过滤策略
- 组合模式:Composite过滤器可以组合多个过滤器
- 函数式编程:使用Stream API实现链式过滤
业务服务层:UserService.java - 用户管理服务
- 状态管理:维护当前登录用户状态
- 业务封装:将用户相关业务逻辑封装在服务中
- 数据隔离:每个用户有独立的数据目录
表示层 (GUI):- MVC模式:GUI作为View,Service作为Controller,Model作为数据模型
- 依赖注入:通过构造函数注入UserService、RecurringStorage等(字数限制)