用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日

相关文章

  • 基于Java实现记事本功能

    下面是实现记事本功能的完整攻略,包含以下内容: 环境配置 编码实现 功能演示 1. 环境配置 首先需要安装Java环境和Eclipse集成开发环境。 安装好Java环境和Eclipse后,打开Eclipse新建一个Java项目,然后新建一个Java类。 2. 编码实现 在Java类中编写代码实现记事本功能,具体步骤如下: 2.1 界面设计 使用Swing库实…

    Java 2023年5月19日
    00
  • java对象的序列化和反序列化

    下面是Java对象的序列化和反序列化的完整攻略: 概述 Java对象的序列化和反序列化是一种将对象转化成字节序列以便存储和传输的机制,同时也是将字节序列转化为对象的一种机制。 Java序列化通常用于将对象存储到文件中或者通过网络传输数据,反序列化则是将序列化后的字节流转换成原来的对象。 如何序列化和反序列化对象 Java对象的序列化和反序列化可以通过Java…

    Java 2023年5月26日
    00
  • 消息推送平台终于要发布啦!

    我的开源项目消息推送平台Austin终于要上线了,迎来在线演示的第一版! ?项目在线演示地址:http://139.9.73.20:3000/ 消息推送平台?推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型。 https://gitee.com/zhongfucheng/austin/ https://github.com/…

    Java 2023年5月4日
    00
  • 深入浅析Spring-boot-starter常用依赖模块

    深入浅析Spring-boot-starter常用依赖模块 一、常用依赖模块概述 Spring Boot是一种Java web框架,它是基于Spring框架的,使得企业级开发变得更加容易。通过使用Spring Boot的起步依赖(Starter Dependency),可以轻松地添加各种功能模块,从而加速开发效率。Spring Boot提供了许多常用的起步依…

    Java 2023年5月15日
    00
  • java实现Base64加密解密算法

    Java实现Base64加密解密算法攻略 什么是Base64? Base64是一种将二进制数据编码成ASCII字符的方法,常用于在URL、Cookie、网页中传输少量二进制数据。它是由64个字符组成的字符集,其编码方式是将3个8位数的字符转换为4个6位数的字符,然后在6位数的前面补两个0的方法,即共有64个不同的编码字符,形如: A – Z, a – z, …

    Java 2023年5月19日
    00
  • 浅谈JSP与Servlet传值及对比(总结)

    浅谈JSP与Servlet传值及对比(总结)是一篇比较详细介绍 JSP 和 Servlet 之间数据传递的文章。在该文章中,作者讲述了JSP和Servlet传值的几种方式以及它们在不同情况下的使用情况。 1. JSP与Servlet JSP和Servlet是相互联系的,JSP可以添加Java代码,Servlet可以生成HTML代码。JSP和Servlet重点…

    Java 2023年6月15日
    00
  • SpringBoot实现项目健康检查与监控

    实现项目健康检查与监控是一个较为常见的需求,可以通过Spring Boot Actuator提供的功能来轻松实现,下面是使用Spring Boot Actuator实现项目健康检查与监控的攻略: 1. 添加依赖 首先需要在项目中引入Spring Boot Actuator的相关依赖,在项目的pom.xml文件中添加以下依赖: <dependency&g…

    Java 2023年5月20日
    00
  • Java中短路运算符与逻辑运算符示例详解

    Java中有两种逻辑运算符:短路运算符和非短路运算符。本文将深入探讨这两种运算符的用法和区别,并给出一些实例供读者参考。 短路运算符详解 短路运算符包括逻辑与运算符(&&)和逻辑或运算符(||)。短路运算符的特点是,如果左侧表达式已经能够确定整个表达式的结果,就不会再去计算右侧表达式的值。下面是一个使用逻辑与运算符的示例: int x = 6…

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