当前位置: 首页 > news >正文

用Java构建简单ATM系统

目录

Account.java:管理账户详细信息

ATMSystem.java:管理用户交互

示例实现

代码分析

ATMSystem.java

代码分析

运行流程


在这篇博客中,我们将探讨如何使用Java构建一个简单的ATM(自动取款机)系统。我们将详细分析实现细节,看看这个系统是如何管理用户账户并处理诸如余额查询、存款和取款等基本操作的。

了解核心组件

我们的ATM系统由两个主要组件组成,分别由两个Java文件表示:

  1. Account.java:这个类可能表示单个银行账户,封装账户的详细信息,如余额、账户号码,以及操控这些详细信息的方法。

  2. ATMSystem.java:这个类可能负责管理用户与其账户之间的交互,提供一个用户界面以进行账户操作。

让我们深入了解每个文件,看看它们是如何对整个系统做出贡献的。

Account.java:管理账户详细信息

Account类是我们ATM系统的核心,它封装了每个账户的属性和行为。下面是该类可能包含的功能:

  • 属性

    • accountNumber:账户号码,唯一标识一个账户。
    • balance:账户余额,用于存储当前账户可用的资金。
  • 方法

    • deposit(double amount):用于将一定金额存入账户。
    • withdraw(double amount):用于从账户中取出一定金额。
    • getBalance():返回当前账户余额。
    • getAccountNumber():返回账户号码。

这些方法允许我们对账户执行基本的操作,如存取款和查询余额。

ATMSystem.java:管理用户交互

ATMSystem类是用户与ATM系统进行交互的界面。它可能包括以下功能:

  • 账户管理:允许用户登录和访问其账户。
  • 交易功能:提供存款、取款和余额查询的功能。
  • 用户界面:通过命令行或图形界面与用户交互,接受用户输入并显示结果。

这个类将Account类中的功能整合起来,形成一个完整的用户操作流程。通过ATMSystem类,用户可以方便地进行账户操作,而无需直接与Account类的实现细节打交道。

示例实现

让我们通过示例代码来更具体地了解这两个类是如何协同工作的。

public class Account {private int accountNumber;  // 账户号码private double balance;     // 账户余额// 构造函数:用于初始化账户对象public Account(int accountNumber, double initialBalance) {this.accountNumber = accountNumber;this.balance = initialBalance;}// 存款方法:将指定金额存入账户public void deposit(double amount) {if (amount > 0) {balance += amount;}}// 取款方法:从账户中提取指定金额,如果余额足够,返回true;否则返回falsepublic boolean withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;return true;}return false;}// 获取账户余额public double getBalance() {return balance;}// 获取账户号码public int getAccountNumber() {return accountNumber;}
}

代码分析
  1. 类属性

    • accountNumber:用于存储账户的唯一标识符。
    • balance:存储账户的当前余额。
  2. 构造函数

    • Account(int accountNumber, double initialBalance):用于创建一个新的账户对象,初始化账户号码和初始余额。
  3. 方法

    • deposit(double amount):用于将正数金额存入账户,增加余额。
    • withdraw(double amount):用于从账户中提取金额。只有当余额充足且提取金额大于零时,才会执行操作,并返回 true
    • getBalance():返回当前账户的余额。
    • getAccountNumber():返回账户的号码。

ATMSystem.java

ATMSystem.java 是ATM系统的核心部分,负责用户交互和账户管理。以下是对该文件的详细分析:

import java.util.HashMap;
import java.util.Scanner;public class ATMSystem {private HashMap<Integer, Account> accounts;  // 存储账户信息的哈希表private Scanner scanner;  // 用于读取用户输入// 构造函数:初始化ATM系统public ATMSystem() {accounts = new HashMap<>();scanner = new Scanner(System.in);}// 添加账户:根据账户号码和初始余额创建新的账户public void addAccount(int accountNumber, double initialBalance) {Account account = new Account(accountNumber, initialBalance);accounts.put(accountNumber, account);}// 启动ATM系统:处理用户输入并执行相应的操作public void start() {while (true) {System.out.println("欢迎使用ATM系统");System.out.print("请输入账户号码:");int accountNumber = scanner.nextInt();if (accounts.containsKey(accountNumber)) {Account account = accounts.get(accountNumber);boolean exit = false;while (!exit) {System.out.println("1. 查询余额");System.out.println("2. 存款");System.out.println("3. 取款");System.out.println("4. 退出");System.out.print("请选择操作:");int choice = scanner.nextInt();switch (choice) {case 1:System.out.println("当前余额:" + account.getBalance());break;case 2:System.out.print("请输入存款金额:");double depositAmount = scanner.nextDouble();account.deposit(depositAmount);System.out.println("存款成功!");break;case 3:System.out.print("请输入取款金额:");double withdrawAmount = scanner.nextDouble();if (account.withdraw(withdrawAmount)) {System.out.println("取款成功!");} else {System.out.println("余额不足!");}break;case 4:exit = true;break;default:System.out.println("无效选项,请重新选择!");break;}}} else {System.out.println("账户不存在!");}}}
}

代码分析
  1. 类属性

    • accounts:使用 HashMap 来存储账户信息,其中键为账户号码,值为对应的 Account 对象。
    • scanner:用于读取用户输入的 Scanner 对象。
  2. 构造函数

    • ATMSystem():初始化 accounts 哈希表和 scanner
  3. 方法

    • addAccount(int accountNumber, double initialBalance):用于创建并添加新账户到系统。
    • start():主方法,负责系统的交互逻辑和操作流程:
      • 询问用户输入账户号码。
      • 验证账户是否存在,存在则允许用户进行操作。
      • 提供操作选项:查询余额、存款、取款、退出。
      • 根据用户选择执行相应的账户操作。

运行流程

  1. 用户启动ATM系统并输入其账户号码。
  2. 系统验证账户存在性。
  3. 用户根据提示选择操作:查询余额、存款、取款。
  4. 系统根据用户的选择执行相应的操作,并显示结果。
  5. 用户可以选择继续其他操作或退出系统。

通过这样的设计,我们可以简单有效地模拟一个ATM系统,利用Java的面向对象特性,实现账户管理与用户交互的分离。这种结构使得代码易于维护和扩展,比如可以进一步添加账户验证、历史记录等功能。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 白骑士的PyCharm教学进阶篇 2.5 数据库连接与管理
  • 基于深度学习的大规模模型训练
  • 无代码开发AI服务 - 利用向量库Kendra和Llama大模型在亚马逊云科技AWS上创建RAG知识库
  • 基于Qt的视频剪辑
  • informer中的WorkQueue机制的实现分析与源码解读(1)
  • Netty的几种IO模式的实现与切换
  • Flask基础教程(第一阶段)
  • JAVA—面向对象编程高级
  • 《死侍与金刚狼》票房飘红! 目前全球票房总票房$7亿,预计可达$12亿,全球排名跃居第二!
  • 数据集相关类代码回顾理解 | sns.distplot\%matplotlib inline\sns.scatterplot
  • 【redis 第八篇章】链表结构
  • 新增道路查询后的最短距离
  • YOLOv8添加注意力模块并测试和训练
  • 【VS Code】launch.json与tasks.json
  • Java 并发编程:volatile 关键字介绍与使用
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • Angular4 模板式表单用法以及验证
  • input实现文字超出省略号功能
  • k8s 面向应用开发者的基础命令
  • NSTimer学习笔记
  • October CMS - 快速入门 9 Images And Galleries
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • redis学习笔记(三):列表、集合、有序集合
  • webpack4 一点通
  • 阿里研究院入选中国企业智库系统影响力榜
  • 编写符合Python风格的对象
  • 彻底搞懂浏览器Event-loop
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 好的网址,关于.net 4.0 ,vs 2010
  • 今年的LC3大会没了?
  • 我感觉这是史上最牛的防sql注入方法类
  • 携程小程序初体验
  • UI设计初学者应该如何入门?
  • ​520就是要宠粉,你的心头书我买单
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • $.ajax()方法详解
  • (04)odoo视图操作
  • (笔记)M1使用hombrew安装qemu
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (含笔试题)深度解析数据在内存中的存储
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (已解决)什么是vue导航守卫
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET C# 使用GDAL读取FileGDB要素类
  • .net(C#)中String.Format如何使用
  • .NET大文件上传知识整理
  • .NET企业级应用架构设计系列之应用服务器
  • .NET正则基础之——正则委托
  • @ConfigurationProperties注解对数据的自动封装
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [.net]官方水晶报表的使用以演示下载