锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. JAVA
  4. 用Java构建简单ATM系统

用Java构建简单ATM系统

0
  • JAVA
  • 发布于 2024-09-21
  • 0 次阅读
黄健
黄健

目录

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;否则返回false
    public 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. 类属性:

  2. accountNumber:用于存储账户的唯一标识符。

  3. balance:存储账户的当前余额。

  4. 构造函数:

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

  6. 方法:

  7. deposit(double amount):用于将正数金额存入账户,增加余额。

  8. withdraw(double amount):用于从账户中提取金额。只有当余额充足且提取金额大于零时,才会执行操作,并返回 true。

  9. getBalance():返回当前账户的余额。

  10. 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. 类属性:

  2. accounts:使用 HashMap 来存储账户信息,其中键为账户号码,值为对应的 Account 对象。

  3. scanner:用于读取用户输入的 Scanner 对象。

  4. 构造函数:

  5. ATMSystem():初始化 accounts 哈希表和 scanner。

  6. 方法:

  7. addAccount(int accountNumber, double initialBalance):用于创建并添加新账户到系统。

  8. start():主方法,负责系统的交互逻辑和操作流程:

    • 询问用户输入账户号码。
    • 验证账户是否存在,存在则允许用户进行操作。
    • 提供操作选项:查询余额、存款、取款、退出。
    • 根据用户选择执行相应的账户操作。

运行流程

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

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

原文链接: https://blog.csdn.net/2302_80084329/article/details/140913958

标签: #JAVA 991 #软件开发 1171
相关文章

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

SpringBoot整合异步任务执行 2024-10-08 11:24

同步任务: 同步任务是在单线程中按顺序执行,每次只有一个任务在执行,不会引发线程安全和数据一致性等 并发问题 同步任务需要等待任务执行完成后才能执行下一个任务,无法同时处理多个任务,响应慢,影响用 户体验 异步任务: 异步任务是在多线程中同时执行,多个任务可以并发执行,同时处理多个请求,响应快,资源

springboot kafka多数据源,通过配置动态加载发送者和消费者 2024-10-08 11:24

前言 最近做项目,需要支持kafka多数据源,实际上我们也可以通过代码固定写死多套kafka集群逻辑,但是如果需要不修改代码扩展呢,因为kafka本身不处理额外逻辑,只是起到削峰,和数据的传递,那么就需要对架构做一定的设计了。 准备test kafka本身非常容易上手,如果我们需要单元测试,引入ja

SpringBoot 集成 Redis 2024-10-08 11:24

一:SpringBoot 集成 Redis ①Redis是一个 NoSQL(not only)数据库, 常作用缓存 Cache 使用。 ②Redis是一个中间件、是一个独立的服务器;常用的数据类型: string , hash ,set ,zset , list ③通过Redis客户端可以使用多种语

SpringBoot整合QQ邮箱 2024-10-08 11:24

SpringBoot可以通过导入依赖的方式集成多种技术,这当然少不了我们常用的邮箱,现在本章演示SpringBoot整合QQ邮箱发送邮件…. 下面按步骤进行: 1.获取QQ邮箱授权码 1.1 登录QQ邮箱 1.2 开启SMTP服务 找到下图中的SMTP服务区域,如果当前账号未开启的话自己手动开启。

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.