用Java实现简单ATM机功能

下面是用Java实现简单ATM机功能的完整攻略:

1. 需求分析

在实现ATM机功能前,我们首先需要对需求进行分析。

根据通常的ATM操作流程,我们可以将以下主要功能列出:

  • 查询余额
  • 取款
  • 存款
  • 转账

2. 设计思路

在完成需求分析后,我们需要进行设计思路。

我们需要为ATM机设计一个系统,包含以下实体:

  • 用户
  • 银行账号
  • ATM机

我们可以通过面向对象的方式,创建以下类:

  • 用户类:包括用户信息、账号信息,以及相关操作方法
  • 银行账号类:包括账户余额等信息
  • ATM类:包括ATM机信息、操作方法等

3. 编码实现

在设计好类之后,我们可以开始进行编码实现。

3.1 用户类

public class User {
    private String name; // 用户名
    private String password; // 密码
    private Account account; // 账户信息

    public User(String name, String password, Account account) {
        this.name = name;
        this.password = password;
        this.account = account;
    }

    public void displayBalance() {
        System.out.println("当前账户余额为:" + account.getBalance() + "元");
    }

    public void withdraw(double amount) {
        account.setBalance(account.getBalance() - amount);
        System.out.println("已取出" + amount + "元,当前账户余额为:" + account.getBalance() + "元");
    }

    // 其他操作方法
}

3.2 银行账号类

public class Account {
    private String accountNumber; // 账户号码
    private double balance; // 账户余额

    public Account(String accountNumber, double balance) {
        this.accountNumber = accountNumber;
        this.balance = balance;
    }

    // getter/setter 略

    public void deposit(double amount) {
        balance += amount;
    }

    // 其他操作方法
}

3.3 ATM类

import java.util.HashMap;
import java.util.Map;

public class ATM {
    private Map<String, User> users; // 用户名与用户实例的映射
    private double balance; // ATM机目前的余额

    public ATM() {
        users = new HashMap<>();
    }

    // 管理员添加用户
    public void addUser(String name, String password, String accountNumber, double balance) {
        users.put(name, new User(name, password, new Account(accountNumber, balance)));
    }

    public void login(String name, String password) {
        User user = users.get(name);
        if (user == null || !user.getPassword().equals(password)) {
            System.out.println("用户名或密码错误,请重新输入!");
            return;
        }
        // 用户登录成功,显示操作菜单
        displayMenu(user);
    }

    // 显示操作菜单
    public void displayMenu(User user) {
        System.out.println("请选择您要进行的操作:");
        System.out.println("1. 查询余额");
        System.out.println("2. 取款");
        System.out.println("3. 存款");
        System.out.println("4. 转账");
        System.out.println("0. 退出");

        int choice;
        do {
            Scanner scanner = new Scanner(System.in);
            System.out.print("> ");
            choice = scanner.nextInt();
            switch (choice) {
                case 0:
                    return;
                case 1:
                    user.displayBalance();
                    break;
                case 2:
                    System.out.println("请输入取款金额:");
                    double amount = scanner.nextDouble();
                    user.withdraw(amount);
                    break;
                case 3:
                    System.out.println("请输入存款金额:");
                    amount = scanner.nextDouble();
                    user.getAcount().deposit(amount);
                    System.out.println("已成功存入" + amount + "元,当前账户余额为:" + user.getAcount().getBalance() + "元");
                    break;
                case 4:
                    System.out.println("请输入对方账户名:");
                    String targetName = scanner.next();
                    User targetUser = users.get(targetName);
                    if (targetUser == null) {
                        System.out.println("未找到该账户,请重新输入!");
                        break;
                    }
                    System.out.println("请输入转账金额:");
                    amount = scanner.nextDouble();
                    user.getAcount().transferTo(targetUser.getAcount(), amount);
                    System.out.println("已成功转账" + amount + "元给" + targetName);
                    break;
                default:
                    System.out.println("输入有误,请重新输入!");
            }
        } while (true);
    }
}

4. 示例

4.1 管理员添加用户

ATM atm = new ATM();
atm.addUser("张三", "123456", "1234567890", 10000);
atm.addUser("李四", "654321", "2345678901", 20000);

4.2 用户登录

atm.login("张三", "123456");

4.3 用户操作

选择“查询余额”功能,输出:

当前账户余额为:10000.0元

选择“取款”功能,输入取款金额为2000,输出:

已取出2000.0元,当前账户余额为:8000.0元

选择“存款”功能,输入存款金额为3000,输出:

已成功存入3000.0元,当前账户余额为:11000.0元

选择“转账”功能,输入对方账户名为“李四”,转账金额为5000,输出:

已成功转账5000.0元给李四

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用Java实现简单ATM机功能 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • JavaSpringBoot报错“NoClassDefFoundError”的原因和处理方法

    当使用Java的Spring Boot框架时,可能会遇到“NoClassDefFoundError”错误。这个错误通常是由以下原因之一引起的: 缺少依赖项:如果您的应用程序缺少依赖项,则可能会出现此错误。在这种情况下,需要确保所有依赖项都已正确添加。 类路径错误:如果类路径错误,则可能会出现此错误。在这种情况下,需要确保类路径正确。 以下两个实例: 例 1 …

    Java 2023年5月5日
    00
  • 利用Java简单实现一个代码行数统计器方法实例

    下面我为你提供一份“利用Java简单实现一个代码行数统计器方法实例”的完整攻略。 1. 准备工作 在编写代码行数统计器之前,需要先确认一下需要统计行数的文件是否存在。在确认文件存在之后,可以使用Java的文件读取方法对文件进行读取。 2. 使用Java实现代码行数统计器 代码行数统计器可以通过遍历文件中的每一行,并计算其中不为空白字符的行数来实现。以下是一份…

    Java 2023年5月30日
    00
  • Java8新特性之Base64详解_动力节点Java学院整理

    Java8新特性之Base64详解 介绍 Base64是用来将二进制数据编码为可打印ASCII字符的一种方法。Java8在java.util下新增了Base64类,提供了Base64编解码的实现。 Base64的编码与解码 Base64可以将任意二进制数据编码为ASCII字符,编码后的长度会比原始数据大1/3。编码方式如下: 将要编码的数据划分成每6个比特为…

    Java 2023年5月20日
    00
  • 浅谈Spring解决jar包依赖的bom

    浅谈Spring解决Jar包依赖的BOM 什么是BOM BOM(Bill of Materials)是Maven项目中用来解决依赖版本管理的组件。它为一个项目指定一个依赖版本的列表,让所有模块都能使用这个预定的库版本来开发和构建应用程序,从而避免由于版本冲突而导致的构建失败问题。 为什么使用BOM 当我们在项目中依赖的第三方库更新版本的时候,我们不得不手动调…

    Java 2023年5月19日
    00
  • 图文演示Flash+ASP实现用户登录/注册程序

    关于“图文演示Flash+ASP实现用户登录/注册程序”的完整攻略,我会结合示例进行详细讲解。 第一部分:环境准备 在开始实现用户登录/注册程序之前,我们需要进行环境配置。 首先,我们需要安装Flash和ASP环境。Flash是用于制作交互式动画和界面的软件工具,而ASP是一种服务器端脚本技术,用于构建动态网站。 其次,我们需要准备一个数据库,用于存储用户的…

    Java 2023年6月15日
    00
  • 浅谈JSP serverlet的区别与联系

    浅谈JSP和Servlet的区别与联系 JSP(Java Server Pages)和Servlet是Java Web开发中常见的两种技术。JSP是一种动态网页开发技术,它允许在HTML网页中嵌入Java代码,从而实现页面数据的动态生成和交互性的实现。而Servlet则是Java Web应用程序的一个组成部分,是运行在Web服务器上的Java程序,它可以在W…

    Java 2023年6月15日
    00
  • 关于在Java中反转数组的4种详细方法

    针对“关于在Java中反转数组的4种详细方法”,我可以给出以下几种方式: 1. 使用for循环逆序遍历数组 public static void reverseWithForLoop(int[] arr) { int len = arr.length; for (int i = len – 1; i >= len / 2; i–) { int tem…

    Java 2023年5月26日
    00
  • maven仓库repositories和mirrors的配置及区别详解

    介绍 在使用Maven进行依赖管理时,常常会遇到一些有关仓库repositories和镜像mirrors的问题。本文将详细介绍这两个概念及其配置方式和区别。 仓库Repositories 仓库repositories是存储Maven构建的依赖和插件的位置。在Maven中有两种仓库:本地仓库和远程仓库。 本地仓库 指存储在本地计算机上的仓库,一般位于用户的.h…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部