0

0

Java初学者项目实战:开发简单的银行账户管理系统

P粉602998670

P粉602998670

发布时间:2026-01-27 17:24:41

|

339人浏览过

|

来源于php中文网

原创

核心是跑通封装、类设计和main驱动流程;账户类字段私有,用BigDecimal防浮点误差,余额校验、转账由外部协调,禁用public balance和setBalance。

java初学者项目实战:开发简单的银行账户管理系统

Java初学者做银行账户管理系统,核心不是“功能多全”,而是把 封装类设计main 方法驱动流程 这三件事真正跑通。别一上来就加数据库或图形界面,先用控制台 + 纯 Java 对象把存取款、查询、转账的逻辑闭环写清楚。

账户类怎么设计才不踩坑

很多初学者直接把余额设成 public double balance,结果后面改需求(比如加余额变动日志)时全要重写。正确做法是:所有字段私有,只暴露必要方法,并在关键操作里埋校验。

常见错误现象:withdraw(100) 之后余额变成负数;转账时没检查转出账户余额是否足够;构造函数没校验初始金额是否为正。

  • balance 必须是 private,提供 getBalance() 但不提供 setBalance()
  • 存款 deposit(double amount) 和取款 withdraw(double amount) 都要判断 amount > 0
  • 转账逻辑不能写在 Account 类里——它只管自己,转账应由外部服务类协调
  • 建议用 BigDecimal 替代 double 处理金额(哪怕只是练习),避免 0.1 + 0.2 != 0.3 这类浮点误差
public class Account {
    private final String accountNumber;
    private BigDecimal balance;

    public Account(String accountNumber, BigDecimal initialBalance) {
        this.accountNumber = accountNumber;
        if (initialBalance.compareTo(BigDecimal.ZERO) < 0) {
            throw new IllegalArgumentException("Initial balance cannot be negative");
        }
        this.balance = initialBalance;
    }

    public void deposit(BigDecimal amount) {
        if (amount.compareTo(BigDecimal.ZERO) <= 0) {
            throw new IllegalArgumentException("Deposit amount must be positive");
        }
        this.balance = this.balance.add(amount);
    }

    public boolean withdraw(BigDecimal amount) {
        if (amount.compareTo(BigDecimal.ZERO) <= 0 || amount.compareTo(this.balance) > 0) {
            return false;
        }
        this.balance = this.balance.subtract(amount);
        return true;
    }

    public BigDecimal getBalance() {
        return this.balance;
    }
}

转账为什么不能只靠两个 withdraw / deposit 调用

单独调用 from.withdraw(...)to.deposit(...) 看似可行,但一旦中间出错(比如网络中断、系统崩溃),就会出现“扣了钱但没到账”的资金丢失问题。初学者项目虽无分布式事务,但至少得模拟原子性。

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

使用场景:你正在写一个 BankService 类来统一管理多个账户,此时转账必须是单个方法内完成的完整操作。

企站帮企业网站管理系统1.0
企站帮企业网站管理系统1.0

一、源码描述这是一款比较简单的企业管理系统源码,界面美观大方,功能简单,特别适合初学者学习研究,系统运行十分流畅,可以作为二次开发,同时也是可以帮助初学者增长知识的优秀代码。二、功能介绍主要功能:企业动态,产品介绍 ,免费下载,定制服务,该源码比较适合新手学习和二次开发使用。三、源码特点1、网站布局:采用目前最先进的布局方式DIV+CSS,符合W3C的标准和Web2.0的风格。2、程序设计模块化,

下载
  • 转账方法签名建议为 boolean transfer(String fromId, String toId, BigDecimal amount),返回 false 表示失败(含余额不足、账户不存在等)
  • 先查两个账户是否存在,再检查转出方余额,全部通过才执行扣减和增加
  • 不要在转账过程中抛异常来回滚——初学阶段用返回值控制更直观、不易漏处理
  • 如果两个账户查出来是同一个对象引用,要额外判断避免“自己转给自己”后余额不变却返回成功

main 方法里怎么组织用户交互才不乱

别把所有打印、输入、if 判断全堆在 main 里。最易读的方式是:用一个循环 + Scanner 读命令,每个功能拆成独立方法(如 handleDeposit()),main 只负责调度。

容易踩的坑:Scanner.nextLine()nextInt() 后读空行;输入非数字时程序直接崩溃;忘记清屏或提示用户下一步该做什么。

  • 统一用 scanner.nextLine() 读所有输入,数字用 Double.parseDouble()new BigDecimal(input) 转换,包 try-catch
  • 菜单选项用字符串匹配(如 "deposit")比用数字编号更不容易输错,也方便后期加新功能
  • 每次操作完打印当前账户状态,而不是让用户自己记或再选“查询”
  • 退出选项必须显式支持(如输入 "quit"),别依赖 Ctrl+C

下一步扩展的真实优先级

做完控制台版本后,最容易被忽略的是「数据持久化」的过渡方式。别直接上 MySQL——先用 ArrayList 存内存,再改成序列化到 accounts.dat 文件,最后才考虑 JDBC。每一步都只改 1–2 个类,其他逻辑完全不动。

图形界面(Swing/JavaFX)反而是最不建议初学阶段碰的:事件回调、线程安全、布局嵌套会立刻掩盖你对面向对象本质的理解。等你能不看教程写出带异常处理和日志输出的转账全流程,再动 UI。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

668

2023.06.20

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

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

247

2023.06.21

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

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

281

2023.07.18

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

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

515

2023.07.19

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

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

256

2023.07.25

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

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

386

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

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

532

2023.08.11

mysql忘记密码
mysql忘记密码

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

601

2023.08.14

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.9万人学习

C# 教程
C# 教程

共94课时 | 7.7万人学习

Java 教程
Java 教程

共578课时 | 51.8万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号