前段时间公司的事情太忙,CSDN博客停止更新快两个月。今天为大家分享一个JAVA窗体版本的个人记账系统481(也可以叫个人财务系统).目前基于Swing的窗体程序使用越来越少。但是通过窗体程序涉及到的技术在各种应用程序中都有广泛的应用、所用到的知识和原理基本不变。本次介绍个人记账系统的涉及到数据库技术、UI技术、多线程技术、文件技术等,是一个实战性很强的项目。系统中具备的功能包括:登陆、记账、历史消费查询、分类设置、每月阈值设置、统计分析、系统分析和建议、EXCEL导出、数据库备份等功能。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。通过实战项目,喜欢上编程,提高编程水平,一起加油!
开发环境
开发语言为Java,开发环境Eclipse或者IDEA都可以。数据库采用:SQLLITE。运行主程序,或者执行打开JAR文件即可以运行本程序。运行程序可以在编辑器中运行 run as applicaiton,或者jar ***.jar运行
系统框架
利用JDK自带的SWING框架开发,不需要安装第三方JAR包。SQLLITE数据库,纯窗体模式,直接运行Main文件即可以。属于入门级的程序。
系统主要功能
系统的功能结构入下图所示,其功能结构入下图所示:
运行效果
1 主界面
2 录入账单
3 历史消费查询
4 消费图形统计
5 分类统计
6 阈值设置
7 数据导出
关键代码
/**
* 导出到 Excel 文件
*
*/
public static void exportToExcel(String filePath) {
//获取目标文件对象
File toFile = new File(filePath);
String sql = "SELECT r.*, c.name as category_name FROM record r JOIN category c ON r.cid = c.id";
try (
Connection c = DBUtil.getConnection();
Workbook wb = new XSSFWorkbook(); // 创建工作簿
FileOutputStream fos = new FileOutputStream(toFile)
) {
PreparedStatement ps = c.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
// 创建工作表
Sheet sheet = wb.createSheet();
sheet.setDefaultColumnWidth(10);
// 创建表头行
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("ID");
headerRow.createCell(1).setCellValue("花费");
headerRow.createCell(2).setCellValue("分类");
headerRow.createCell(3).setCellValue("备注");
headerRow.createCell(4).setCellValue("日期");
CellStyle cellStyle = wb.createCellStyle();
CreationHelper creationHelper = wb.getCreationHelper();
short dateFormat = creationHelper.createDataFormat().getFormat("yyyy/m/d;@");
cellStyle.setDataFormat(dateFormat);
// 将查询结果写入工作表
int rowIndex = 1;
while (rs.next()) {
Row row = sheet.createRow(rowIndex++);
row.createCell(0).setCellValue(rs.getInt("id"));
row.createCell(1).setCellValue(rs.getDouble("spend"));
row.createCell(2).setCellValue(rs.getString("category_name"));
row.createCell(3).setCellValue(rs.getString("comment"));
Cell cellDate = row.createCell(4, CellType.NUMERIC);
cellDate.setCellValue(rs.getDate("date"));
cellDate.setCellStyle(cellStyle);
}
// 将工作簿保存到文件
wb.write(fos);
fos.flush();
// 已经用了 try resource,所以可以不用这条语句 fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
项目总结
(1)在写代码之前,在大脑里一定要把思路理清楚,不能模模糊糊,一定要把功能图和流程图画出来,然后根据它去实现每一个功能块,要多分析,培养一种良好的逻辑思维能力。
(2)在写代码的过程中,一定要采取就近原则,同一个功能,或者对同一个组件的设置一般要写在一块,这样写的程序比较清晰,不容易出错,也便于查找。
(3)要养成良好的注释习惯,一是有利于别人阅读你的程序,同时也有利于自己以后再看,就能很快的读懂程序,提高效率。
(4)把功能模块化,即把实现相同功能的代码段封装成一到一个类或者一个方法中,实现的时候调用即可,这样能提高代码的可读性。