家庭财务管理系统【答辩文档】
家庭财务管理系统 - 答辩文档
一、项目概述
1.1 项目名称
FFMS(Family Financial Management System)- 家庭财务管理系统
1.2 项目背景
随着家庭经济活动的日益复杂,家庭成员的收入支出、理财投资、负债管理等财务信息需要一个系统化的管理平台。本系统旨在帮助家庭实现财务信息的集中管理、统计分析,提高家庭财务管理效率和透明度。
1.3 项目目标
- 实现家庭收支账单的数字化记录与管理
- 支持多用户协作,区分家庭成员角色权限
- 提供资产总览、负债管理、理财推荐等功能
- 生成统计报表,辅助家庭财务决策
1.4 技术栈
| 技术分类 | 采用技术 |
|---|---|
| 后端框架 | Spring Boot 2.4.5 |
| 持久层框架 | MyBatis 1.3.2 |
| 数据库 | MySQL 8.0 |
| 前端模板 | Thymeleaf |
| 前端框架 | Layui |
| 构建工具 | Maven |
| Java版本 | JDK 1.8 |
二、核心功能模块
2.1 用户管理模块
- 用户注册/登录:支持用户注册和登录,密码采用MD5加密存储
- 角色权限管理:三种角色(系统管理员、家庭管理员、普通用户)
- 家庭成员管理:家庭管理员可管理家庭成员信息
- 密码修改:支持用户修改个人密码
2.2 收支管理模块
- 收入记录:记录工资、奖金、兼职等各类收入
- 支出记录:记录日常开销、购物、医疗等支出
- 账单查询:支持按时间、金额、支付方式等条件筛选
- 月度统计:按月份汇总收支情况
2.3 账户总览模块
- 活期资产:查看家庭活期资产余额
- 理财详情:管理理财产品记录
- 负债详情:记录房贷、贷款等负债信息
- 理财推荐:根据风险等级推荐理财产品
2.4 理财管理模块
- 理财记录:记录银行存储、基金、股票、黄金等投资
- 收益统计:统计理财收益情况
- 理财对比:对比不同理财方式的收益
2.5 统计报表模块
- 收支趋势图:展示收支变化趋势
- 分类统计:按类别统计收支占比
- 数据可视化:使用图表直观展示财务数据
2.6 系统管理模块
- 用户管理:管理系统用户(系统管理员权限)
- 角色管理:维护角色及其权限配置
- 权限分配:为角色分配菜单访问权限
三、系统架构
3.1 架构设计
采用经典的三层架构模式:
┌─────────────────────────────────────┐ │ Presentation Layer │ │ (Thymeleaf + Layui + REST API) │ ├─────────────────────────────────────┤ │ Business Layer │ │ (Controller + Service) │ ├─────────────────────────────────────┤ │ Data Access Layer │ │ (MyBatis Mapper + MySQL) │ └─────────────────────────────────────┘3.2 项目结构
ffms/ ├── src/main/java/com/xust/ffms/ │ ├── FfmsApplication.java # 启动类 │ ├── configs/ # 配置类 │ │ ├── CorsConfig.java # 跨域配置 │ │ ├── SessionInterceptor.java # 会话拦截器 │ │ └── Md5UtilSimple.java # MD5加密工具 │ ├── controller/ # 控制器层 │ │ ├── UserInfoController.java # 用户管理 │ │ ├── BillController.java # 账单管理 │ │ ├── LicaiController.java # 理财管理 │ │ ├── CuraccountController.java # 活期账户 │ │ ├── DebtController.java # 负债管理 │ │ └── MoneyManageController.java# 理财推荐 │ ├── service/ # 服务层接口 │ │ └ impl/ # 服务层实现 │ ├── dao/ # 数据访问层 │ │ ├── UserInfoMapper.java │ │ ├── BillMapper.java │ │ ├── LicaiMapper.java │ │ └── ... │ ├── entity/ # 实体类 │ │ ├── UserInfo.java │ │ ├── Bill.java │ │ ├── Licai.java │ │ ├── Curaccount.java │ │ ├── Debt.java │ │ ├── Product.java │ │ ├── Privilege.java │ │ └── Role.java │ └── utils/ # 工具类 │ ├── Config.java # 系统配置常量 │ ├── Result.java # 统一响应封装 │ ├── ResultUtil.java # 响应工具类 │ ├── PageModel.java # 分页模型 │ └── Utils.java # 通用工具 ├── src/main/resources/ │ ├── application.yml # 应用配置 │ ├── mappers/ # MyBatis映射文件 │ │ ├── UserInfoMapper.xml │ │ ├── BillMapper.xml │ │ ├── LicaiMapper.xml │ │ └── ... │ ├── templates/ # Thymeleaf模板 │ └── static/ # 静态资源 ├── sql/ │ ├── ffms.sql # 数据库脚本 │ └── ffms_sys.sql # 系统数据脚本 └── pom.xml # Maven配置四、数据库设计
4.1 数据库概览
数据库:ffms_sys(MySQL 8.0)
4.2 核心数据表
| 表名 | 功能说明 |
|---|---|
| user | 用户信息表 |
| role | 角色表 |
| privilege | 权限表 |
| roleprivilieges | 角色-权限关联表 |
| house | 家庭表 |
| bill | 账单表 |
| type | 收支类型表 |
| payway | 支付方式表 |
| curaccount | 活期资产表 |
| debt | 负债表 |
| licai | 理财记录表 |
| licaiway | 理财方式表 |
| moneymanage | 理财推荐表 |
| product | 理财产品表 |
4.3 主要表结构
用户表(user)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 主键,自增 |
| username | varchar(255) | 登录账号 |
| password | varchar(255) | 密码(MD5加密) |
| realname | varchar(255) | 真实姓名 |
| roleid | int | 角色编号(外键) |
| houseid | int | 所属家庭编号(外键) |
| photo | varchar(255) | 用户头像 |
账单表(bill)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 主键,自增 |
| title | varchar(255) | 账单标题 |
| userid | int | 用户ID(外键) |
| money | float(10,2) | 金额 |
| typeid | int | 类型:1支出,2收入 |
| remark | varchar(255) | 备注 |
| paywayid | int | 支付方式ID(外键) |
| time | datetime | 交易时间 |
理财记录表(licai)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 主键,自增 |
| title | varchar(255) | 理财标题 |
| userid | int | 用户ID |
| money | float(99,2) | 金额 |
| typeid | int | 类型:3收入,4支出 |
| licaiwayid | int | 理财方式ID |
| time | datetime | 交易时间 |
4.4 ER关系图
┌────────┐ ┌────────┐ ┌──────────────┐ │ user │────▶│ role │────▶│roleprivilieges│ └────────┘ └────────┘ └──────────────┘ │ │ │ ▼ │ ┌──────────┐ │ │privilege │ │ └──────────┘ ▼ ┌────────┐ ┌────────┐ │ house │◀────│ bill │ └────────┘ └────────┘ │ │ ▼ ▼ ┌──────────┐ ┌────────┐ ┌────────┐ │curaccount│ │ payway │ │ type │ └──────────┘ └────────┘ └────────┘五、角色权限设计
5.1 角色定义
| 角色ID | 角色名称 | 权限范围 |
|---|---|---|
| 1 | 系统管理员 | 全系统权限,包括用户管理、角色管理 |
| 2 | 家庭管理员 | 管理本家庭所有成员和财务信息 |
| 3 | 普通用户 | 仅查看和管理个人财务信息 |
5.2 权限菜单
| 权限编号 | 权限名称 | 菜单级别 |
|---|---|---|
| 001 | 收支管理 | 一级菜单 |
| 001001 | 收入详情 | 二级菜单 |
| 001002 | 支出详情 | 二级菜单 |
| 002 | 账户总览 | 一级菜单 |
| 002001 | 活期资产 | 二级菜单 |
| 002002 | 理财详情 | 二级菜单 |
| 002003 | 负债详情 | 二级菜单 |
| 002004 | 理财推荐 | 二级菜单 |
| 003 | 统计报表 | 一级菜单 |
| 004 | 家庭成员管理 | 一级菜单 |
| 005 | 系统管理 | 一级菜单 |
六、答辩问答要点
6.1 技术相关问题
Q1: 为什么选择Spring Boot作为后端框架?
- Spring Boot简化了Spring应用的配置,提供自动配置机制
- 内置Tomcat服务器,无需部署WAR包即可运行
- 与MyBatis整合方便,开发效率高
- 适合快速开发中小型项目
Q2: 项目如何实现用户权限控制?
- 采用RBAC(基于角色的访问控制)模型
- 用户-角色-权限三级关联
- SessionInterceptor拦截器验证用户登录状态
- 根据用户角色动态加载菜单权限
Q3: MyBatis相比Hibernate有什么优势?
- SQL语句灵活,适合复杂查询场景
- 支持动态SQL,便于多条件查询
- 与数据库交互更直接,性能可控
- 学习成本低,配置简单
Q4: 前端采用什么技术方案?
- Thymeleaf模板引擎实现页面渲染
- Layui前端框架提供UI组件
- RESTful API与后端交互
- AJAX实现异步数据加载
6.2 业务相关问题
Q5: 系统如何区分家庭成员的数据权限?
- 家庭管理员(roleid=2)可查看全家财务数据
- 普通用户(roleid=3)仅能查看个人数据
- 通过houseid字段关联家庭成员
- 查询时根据角色动态设置过滤条件
Q6: 账单添加时如何同步更新活期资产?
- BillServiceImpl的add方法中自动更新Curaccount
- 收入时增加活期资产,支出时减少活期资产
- 若用户无活期资产记录则自动创建
- 保证数据一致性
Q7: 理财推荐功能如何实现?
- Product表存储理财产品信息
- 包含风险等级(R1-R5)、风险描述、亏损概率
- 用户可根据风险偏好选择合适产品
- 支持产品增删改查管理
Q8: 统计报表的数据来源是什么?
- 从bill表和licai表聚合统计数据
- 按时间范围、收支类型分组查询
- 使用MyBatis的聚合函数(SUM、COUNT)
- 返回JSON数据供前端图表渲染
6.3 安全相关问题
Q9: 系统如何保证用户密码安全?
- 密码采用MD5加密存储
- 登录验证时对比加密后的密文
- 不在响应中返回密码信息
- 支持密码修改功能
Q10: 如何防止未登录用户访问系统?
- SessionInterceptor拦截所有请求
- 检查Session中是否存在用户信息
- 未登录则重定向到登录页面
- 支持Cookie实现短期免登录
6.4 项目亮点
- 角色权限设计完善:三级角色体系满足不同用户需求
- 数据权限隔离:家庭数据与个人数据隔离清晰
- 资产联动更新:账单与活期资产自动同步
- 理财推荐功能:提供风险分级的产品推荐
- 统计图表展示:直观呈现财务数据分析结果
七、系统运行说明
7.1 环境要求
- JDK 1.8+
- MySQL 8.0+
- Maven 3.x
7.2 启动步骤
- 创建数据库并导入sql/ffms_sys.sql
- 修改application.yml中的数据库连接配置
- 执行mvn spring-boot:run启动项目
- 访问http://localhost:8080进入系统
7.3 默认账号
| 账号 | 密码 | 角色 |
|---|---|---|
| admin | 123456 | 系统管理员 |
| mother | 123456 | 家庭管理员 |
八、总结
本项目是一个完整的家庭财务管理解决方案,涵盖了收支管理、资产管理、理财管理、统计分析等核心功能。系统采用Spring Boot+MyBatis+Thymeleaf技术栈,实现了用户权限控制、数据隔离、资产联动等关键特性,适合家庭财务管理场景的实际应用。
