讲师中心 微信公众号
AI工具推荐 视频效率加速

在Java中如何开发简易记账工具_Java面向对象实践解析

轻强大大_9276

轻强大大_9276

发布时间:2026-01-30 14:55:35

|

408人浏览过

|

来源于php中文网

原创

记账工具核心实体为Account、Transaction、Category三类;Transaction金额必须用BigDecimal并禁用基本运算符;持久化推荐Jackson序列化RecordBook至JSON;交互采用编号菜单与输入校验;务必重写toString()和equals()。

在java中如何开发简易记账工具_java面向对象实践解析

如何用 Java 类建模记账核心实体

记账工具本质是“钱的流动记录”,不是功能堆砌。先想清楚三个关键对象:Account(账户,如现金、微信、银行卡)、Transaction(交易,含金额、类型、时间、备注)、Category(分类,如餐饮、交通、工资)。别一上来就写界面或文件读写——类设计错了,后面全是补丁。

重点注意:Transaction 的 amount 必须用 BigDecimal,不用 double 或 float。否则 0.1 + 0.2 != 0.3 是铁定发生的,记账数字出错就是硬伤。

  • Account 至少包含 id、name、balance(BigDecimal)字段,构造时 balance 初始化为 BigDecimal.ZERO
  • Transaction 的 type 建议用枚举:enum Type { INCOME, EXPENSE },避免字符串拼写错误
  • 所有金额相关 setter 方法里,必须做 null 检查和正负校验(比如支出不能传正数)

如何持久化数据而不依赖数据库

简易工具不需要 MySQL 或 H2。用 Java 自带的 java.util.prefs.Preferences 或序列化到 JSON 文件更轻量。但 Preferences 有平台限制(Windows 注册表 / macOS plist),跨平台首选 JSON。

推荐用 com.fasterxml.jackson.databind.ObjectMapper(Jackson)写入/读取,不要手写字符串拼接。它能自动处理 BigDecimal、LocalDateTime 等类型,避免格式错乱。

立即学习“Java免费学习笔记(深入)”;

Windows TTS (WSL2)
Windows TTS (WSL2)

在 Windows 11 上"直接发声"的 TTS(从 WSL2/TUI 调用 powershell.exe + System.Speech)。适用于用户说"说出来/读出来/语音播报/用TTS",或反馈"没声音/tts 生成的 mp3 是空的/播不出来",以及需要中文语音但 OpenClaw 内置 tts 不可用时。

下载
  • 把 List<Transaction> 包进一个容器类(如 RecordBook),再整体序列化,别单条存——否则增删改查时文件 IO 太频繁
  • 写入前先写到临时文件(如 data.json.tmp),成功后再 renameTo 覆盖原文件,防止程序崩溃导致数据清空
  • 读取失败时(如 JSON 格式损坏),不要直接抛异常退出,应返回空列表并打印警告日志,保证程序还能启动
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule()); // 支持 LocalDateTime
RecordBook book = mapper.readValue(new File("data.json"), RecordBook.class);

如何让控制台交互不变成“输入地狱”

用户不想记命令语法。用编号菜单 + 简单输入,比自由输入更可靠。关键不是炫技,是降低误操作率。

比如添加支出,流程应该是:显示分类列表 → 用户输编号 → 输入金额 → 输入备注 → 回车确认。而不是让用户自己敲 “EXPENSE 餐饮 45.5 午餐”。后者容易输错空格、漏字段、金额格式错。

  • 所有用户输入后,立即用 trim() 去首尾空格,再判空;空输入直接提示重输,不往下走
  • 金额输入必须用 new BigDecimal(inputStr) 尝试解析,捕获 NumberFormatException 并提示“请输入有效数字”
  • 日期若允许用户省略,默认用 LocalDateTime.now(),别强制填年月日时分秒

为什么 toString() 和 equals() 不是可选项

调试时你肯定要 System.out.println(transaction);查重、去重、查找时必然用到 equals()。不重写它们,打印出来就是 Transaction@1a2b3c4d,查重永远返回 false。

IDE 自动生成即可,但要注意:如果用了 BigDecimal 字段,equals() 里不能用 ==,必须用 compareTo() == 0;toString() 中建议用 toPlainString() 避免科学计数法(如 1E+5)。

  • IntelliJ 快捷键:Alt+Insert → “Generate” → 勾选 toString()、equals()、hashCode()
  • 生成后手动检查 BigDecimal 字段是否用了 Objects.equals(a, b)(它内部会调用 compareTo)
  • 测试一下:new Transaction(..., new BigDecimal("10.00")).equals(new Transaction(..., new BigDecimal("10"))) 必须返回 true

最易被忽略的点:所有金额运算必须用 add()、subtract()、multiply() 方法,绝不用 +、-、* 运算符。哪怕只做一次加减,漏了也会在某次导出报表时发现余额对不上——而那时可能已经记了上百笔账。

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2313

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1419

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

835

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3232

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

5488

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1219

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5771

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

5022

2023.08.14

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 189人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn