Java项目实现模拟ATM机

 更新时间:2020年05月27日 09:46:05   作者:Sampson_S  
这篇文章主要为大家详细介绍了Java项目实现模拟ATM机,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Java实现模拟ATM机的具体代码,供大家参考,具体内容如下

项目名称

模拟ATM机

项目描述

简单实现ATM机功能

代码实现

测试类

public class Test {
    //模拟多功能ATM机
  public static void main(String[] args) {
    ATM atm = new ATM();
    atm.opearte();
  }
}

主类:实现主方法

public class ATM {
  private Bank bank;
  public ATM(){
    bank = new Bank();
  }
  private void success(BankCard bankCard) {
    while (true) {
      System.out.println("请选择:1、查询余额,2、取款,3、存款,4、转账,5、退卡");
      Scanner scanner = new Scanner(System.in);
      int choice = scanner.nextInt();
      if (choice == 5) {
        return;
      }
      switch (choice) {
        case 1:
          int money = bank.printf(bankCard);
          System.out.println("余额:" + money);
          break;
        case 2:
          System.out.println("请输入取款金额:");
          money = scanner.nextInt();
          bankCard.withdraw(money);
          break;
        case 3:
          System.out.println("请输入存款金额:");
          money = scanner.nextInt();
          bankCard.deposit(money);
          break;
        case 4:
          System.out.println("请输入对方账户id:");
          int id = scanner.nextInt();
          BankCard card = bank.transfer(id);
          if(card != null){
            System.out.println("请输入转账金额:");
            money = scanner.nextInt();
            if(money <= bankCard.getMoney()){
              bankCard.withdraw(money);
              card.deposit(money);
            }else {
              System.out.println("转账失败");
            }
          }else {
            System.out.println("未找到该账户");
          }
          break;
        default:
      }
    }
  }
  private void login(){ //登录
    System.out.println("请输入账号,密码");
    Scanner scanner = new Scanner(System.in);
    int id = scanner.nextInt();
    int password = scanner.nextInt();
    BankCard bankCard = bank.search(id,password);
    if(bankCard != null){
      System.out.println("登录成功");
      success(bankCard);
    }else {
      System.out.println("登录失败,请注册");
    }
  }
  private void register(){ //注册
    System.out.println("请输入账号,密码");
    Scanner scanner = new Scanner(System.in);
    int id = scanner.nextInt();
    int password = scanner.nextInt();
    BankCard bankCard = bank.search(id,password);
    if(bankCard != null){
      System.out.println("该账号已存在,请直接登录");
    }else {
      bank.addcard(id,password);
      System.out.println("注册成功");
    }
  }
  public void opearte() {
    while (true) {
      System.out.println("请选择:1、登录,2、注册,3、退出");
      Scanner scanner = new Scanner(System.in);
      int choice = scanner.nextInt();
      if (choice == 3) {
        return;
      }
      switch (choice) {
        case 1:
          login();
          break;
        case 2:
          register();
          break;
        default:
      }
    }
  }
}

银行类:一个银行对应多个ATM机

public class Bank {
  private BankCard[] bankCards;
  private final int INITSIZE = 10;
  private int size;
  public Bank(){
    bankCards = new BankCard[INITSIZE];
    size = 0;
  }
  public BankCard search(int id,int password){ //搜索
    BankCard[] bankCard = bankCards;
    for(int i=0;i<size;i++){
      if(bankCards[i].getId() == id && bankCards[i].getPassword() == password){
        return bankCard[i];
      }
    }
    return null;
  }
  public void addcard(int id,int password){ //注册
    BankCard bankCard = new BankCard(id, password);
    if (size == bankCards.length){
      bankCards = Arrays.copyOf(bankCards,bankCards.length * 2);
    }
    bankCards[size++] = bankCard;
  }
  public int printf(BankCard bankCard){ //显示余额
     return bankCard.getMoney();
  }
  public BankCard transfer(int id){
    for(int i=0;i<size;i++){
      if(bankCards[i].getId() == id){
        return bankCards[i];
      }
    }
    return null;
  }
}

银行卡类:不同账户的操作

public class BankCard {
  private int id;
  private int password;
  private int money;
  private int size = 0;
  public BankCard(int id,int password){
    this.id = id;
    this.password = password;
    money = 0;
  }
  public int getId(){
    return id;
  }
  public int getPassword(){
    return password;
  }
  public int getMoney(){
    return money;
  }
  public void withdraw(int money){ //取款
    if(this.money >= money){
      this.money -= money;
    }else {
      System.out.println("取款失败");
    }
  }
  public void deposit(int money){ //存款
    this.money += money;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • @Configuration保证@Bean单例语义方法介绍

    @Configuration保证@Bean单例语义方法介绍

    这篇文章主要介绍了SpringBoot中的@Configuration与@Bean注解,在进行项目编写前,我们还需要知道一个东西,就是SpringBoot对我们的SpringMVC还做了哪些配置,包括如何扩展,如何定制,只有把这些都搞清楚了,我们在之后使用才会更加得心应手
    2023-01-01
  • Java阻塞队列四组API介绍(小结)

    Java阻塞队列四组API介绍(小结)

    这篇文章主要介绍了Java阻塞队列四组API介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Java并发编程学习之ThreadLocal源码详析

    Java并发编程学习之ThreadLocal源码详析

    这篇文章主要给大家介绍了关于Java并发编程学习之源码分析ThreadLocal的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • Java的StringBuilder在高性能场景下的正确用法

    Java的StringBuilder在高性能场景下的正确用法

    StringBuilder 对字符串的操作是直接改变字符串对象本身,而不是生成新的对象,所以新能开销小.与StringBuffer相比StringBuilder的性能略高,StringBuilder则没有保证线程的安全,从而性能略高于StringBuffer,需要的朋友可以参考下
    2023-05-05
  • 聊聊Mybatis反射之ObjectWrapper的使用

    聊聊Mybatis反射之ObjectWrapper的使用

    本文主要介绍了Mybatis反射之ObjectWrapper的使用,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • SpringBoot整合junit与Mybatis流程详解

    SpringBoot整合junit与Mybatis流程详解

    这篇文章主要介绍了SpringBoot整合第三方技术,包括整合Junit、整合Mybatis,本文通过实例代码相结合给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • Netty实战源码解析NIO编程

    Netty实战源码解析NIO编程

    这篇文章主要为大家介绍了Netty实战源码解析NIO编程的核心组件及关系详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Java使用jxl包写Excel文件适合列宽实现

    Java使用jxl包写Excel文件适合列宽实现

    用jxl.jar包,读写过Excel文件。也没有注意最适合列宽的问题,但是jxl.jar没有提供最适合列宽的功能,上次用到写了一下,可以基本实现最适合列宽。
    2013-11-11
  • Springboot公共字段填充及ThreadLocal模块改进方案

    Springboot公共字段填充及ThreadLocal模块改进方案

    这篇文章主要为大家介绍了Springboot公共字段填充及ThreadLocal模块改进方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • SpringCloud Gateway HttpWebHandlerAdapter链路调用请求流程介绍

    SpringCloud Gateway HttpWebHandlerAdapter链路调用请求流程介

    Spring Cloud Gateway旨在为微服务架构提供一种简单有效的、统一的 API 路由管理方式。Spring Cloud Gateway 作为 Spring Cloud 生态系中的网关,它不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全、监控/埋点和限流等
    2022-10-10

最新评论