登录
首页 >  文章 >  java教程

Java入门实战:ATM系统开发教程

时间:2026-01-26 12:36:40 424浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《Java新手实战:开发基础ATM银行系统》,以下内容主要包含等知识点,如果你正在学习或准备学习文章,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

初学者应避免将所有逻辑塞入main方法,而需分层:Account管余额与密码验证,ATM管交互流程,Main仅启动ATM;输入用nextLine()转数字并捕获异常;密码须用char[]、存文件、SHA-256哈希;所有异常必须捕获并给出用户友好提示。

Java初学者项目实战:开发一个基础的银行ATM系统

为什么不能直接用 public static void main 堆逻辑

初学者常把所有功能(取款、查询、转账)全塞进一个 main 方法里,结果一改就崩,加个密码校验就忘了更新余额,调试时连哪条路径走到了都看不清。这不是“写完就行”,而是把后续所有扩展(比如加日志、换数据库、支持多用户)的路直接堵死。

正确做法是分三层职责:

  • Account 类只管余额增减、密码验证——不涉及输入输出
  • ATM 类只管调用 Account,处理用户交互流程(比如循环显示菜单、捕获 Scanner 异常)
  • Main 类只做一件事:new 一个 ATM 并调用它的 start()

这样改需求时,比如银行要求“单日取款超5000要短信确认”,你只动 ATM.withdraw(),不动 Account.deduct(),也不碰 Main

Scanner 输入卡住?多半是没清理缓冲区

执行完 scanner.nextInt() 后立刻跟 scanner.nextLine(),后者会直接返回空字符串——因为 nextInt() 不读取回车符,它还留在缓冲区里,nextLine() 一把吞掉,然后继续等下一行。这是 ATM 系统里“输完金额跳过密码输入”的根本原因。

安全写法只有两种:

  • 统一用 nextLine(),再用 Integer.parseInt() 转数字(记得包 try-catch
  • 坚持用 nextInt(),但每次之后加一句 scanner.nextLine(); 清掉回车
Scanner scanner = new Scanner(System.in);
System.out.print("请输入取款金额:");
int amount = Integer.parseInt(scanner.nextLine().trim()); // 更稳

密码明文存储和硬编码是严重安全隐患

别在代码里写 if (input.equals("1234")),也别把密码存在 String password = "1234"; 里。Java 初学者项目虽不对接真实银行系统,但习惯必须从第一天养起。

最低限度该做三件事:

  • 密码字段用 char[] 接收(scanner.next().toCharArray()),用完立刻 Arrays.fill(pwd, '0') 清内存
  • 把密码和账号信息从代码里移出,存到 accounts.txt 文件,每行格式:accountNo:1001,password:1234,balance:5000.0
  • 登录时用 MessageDigest.getInstance("SHA-256") 对输入密码哈希后再比对(哪怕文件里存的也是哈希值)

哪怕只是本地运行,跳过这步,你就已经把“密码=字符串”这个错误模型刻进肌肉记忆了。

异常不处理,ATM 就会静默退出

用户输了个字母当金额,Integer.parseInt() 扔出 NumberFormatException;取款时余额不足,你抛了 InsufficientBalanceException,但上层没 catch——结果就是黑窗口一闪,程序结束,用户以为机器坏了。

ATM 的交互循环必须包住所有可能异常:

  • 所有 Scanner 输入操作外层套 try-catch InputMismatchException
  • 金额操作必须有 try-catch NumberFormatException
  • 自定义业务异常(如余额不足)要在 ATM 流程里 catch 并打印友好提示,然后 continue 回主菜单
while (running) {
    try {
        showMenu();
        int choice = Integer.parseInt(scanner.nextLine().trim());
        handleChoice(choice);
    } catch (NumberFormatException e) {
        System.out.println("❌ 请输入有效数字!");
    } catch (InsufficientBalanceException e) {
        System.out.println("❌ 余额不足:" + e.getMessage());
    }
}

真正难的不是写完功能,而是让每一次非法输入、每一笔失败交易,都明确告诉用户“哪里错了、接下来能做什么”。这需要你在每个 catch 里想清楚:这句话是给谁看的?他下一步该点什么?

今天关于《Java入门实战:ATM系统开发教程》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>