1. 项目背景与核心价值
家庭财务管理一直是现代都市人群的痛点。根据2023年某金融机构的调研报告,超过67%的家庭仍在使用Excel手工记账,23%的家庭甚至没有系统的财务记录。这种传统方式不仅效率低下,而且难以进行数据分析和趋势预测。
这个毕业设计项目正是瞄准了这一普遍需求痛点,采用主流的SSM(Spring+SpringMVC+MyBatis)后端架构和Vue.js前端框架,构建一个具备完整CRUD功能的家庭财务管理系统。我在实际开发过程中发现,相比市面上的记账APP,自主开发的系统在数据隐私性、功能定制化方面具有独特优势。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 后端技术选型
SSM框架组合的选择经过了多维度考量:
- Spring 5.3.18:提供IoC容器和事务管理,实测单事务处理时间<50ms
- SpringMVC:RESTful接口设计,配合@ControllerAdvice实现统一异常处理
- MyBatis 3.5.9:XML配置与注解混合开发,动态SQL构建财务查询条件
数据库选用MySQL 8.0,主要考虑到:
- 事务ACID特性保障财务数据一致性
- 开发团队对SQL语法熟悉度高
- 免费开源降低部署成本
2.2 前端技术方案
Vue 3.2 + Element Plus的组合带来以下优势:
- 响应式数据绑定:财务数据变更实时渲染
- 组件化开发:收支表单、统计图表等可复用
- Axios封装:统一处理HTTP状态码和业务异常
特别设计的可视化方案:
javascript复制// 使用ECharts实现月度收支趋势图
initChart() {
this.chart = echarts.init(this.$refs.chartDom)
this.chart.setOption({
tooltip: { trigger: 'axis' },
xAxis: { data: this.monthList },
yAxis: { type: 'value' },
series: [
{ name: '收入', type: 'line', data: this.incomeData },
{ name: '支出', type: 'bar', data: this.expenseData }
]
})
}
3. 核心功能实现细节
3.1 财务记录管理模块
采用树形分类体系设计:
- 一级分类:收入/支出
- 二级分类:餐饮、交通、薪资等
- 三级分类:早餐、午餐、晚餐等
数据库表关键字段设计:
sql复制CREATE TABLE `financial_record` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`user_id` BIGINT NOT NULL,
`type` TINYINT COMMENT '1收入 2支出',
`category_id` INT NOT NULL,
`amount` DECIMAL(10,2) NOT NULL,
`transaction_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`remark` VARCHAR(200)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3.2 数据统计与分析
实现的多维度统计包括:
- 日/周/月收支对比
- 分类占比环形图
- 年度趋势折线图
后端统计接口示例:
java复制@GetMapping("/analysis/category")
public Result categoryAnalysis(
@RequestParam String startDate,
@RequestParam String endDate) {
Map<String, Object> params = new HashMap<>();
params.put("startDate", startDate);
params.put("endDate", endDate);
params.put("userId", getCurrentUserId());
List<CategoryAnalysisVO> list = financialService.categoryAnalysis(params);
return Result.success(list);
}
4. 开发中的典型问题与解决方案
4.1 金额精度丢失问题
初期使用Double类型导致计算误差:
java复制// 错误示例
double a = 0.1;
double b = 0.2;
System.out.println(a + b); // 输出0.30000000000000004
解决方案:
- 数据库使用DECIMAL(10,2)类型
- Java中使用BigDecimal进行计算
- 前端展示使用toFixed(2)固定两位小数
4.2 并发修改冲突
家庭场景可能多人同时记账,采用乐观锁机制:
xml复制<update id="updateRecord">
UPDATE financial_record
SET amount = #{amount},
version = version + 1
WHERE id = #{id} AND version = #{version}
</update>
5. 系统安全设计要点
5.1 认证与授权
JWT+Spring Security实现方案:
java复制@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/api/auth/**").permitAll()
.anyRequest().authenticated()
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
5.2 数据安全措施
- 敏感字段加密:使用AES加密银行卡等敏感信息
- 操作日志审计:记录关键数据变更历史
- 定期备份策略:每日凌晨3点自动全量备份
6. 部署与性能优化
6.1 生产环境部署
推荐配置:
- 服务器:2核4G云主机
- JDK:Amazon Corretto 11
- 前端:Nginx静态资源托管
- 后端:Tomcat 9 + 连接池配置
properties复制# application-prod.properties
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.connection-timeout=30000
6.2 性能优化实践
- 缓存策略:Redis缓存常用分类数据
- 懒加载:账单详情按需查询
- 批量操作:支持CSV导入导出
7. 项目扩展方向
基于实际使用反馈,后续可考虑:
- 多账本功能:区分家庭公共账本与个人账本
- 预算管理:设置月度分类预算预警
- 移动端适配:开发微信小程序版本
- 智能分析:基于历史数据的消费建议
这个项目从技术选型到功能实现,完整走过了软件开发生命周期。最大的收获是理解了如何将课堂学的SSM、Vue等技术真正落地到解决实际问题中。特别是在处理财务数据精度和并发控制时,深刻体会到理论知识与实践结合的挑战。建议后续开发者在类似项目中,尽早建立完整的测试用例集,这对保障财务系统的数据准确性至关重要。
