Java基于控制台界面实现ATM系统

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

这应该算最基础的Javase项目了,但其中逻辑还是得想想的。

功能还算完善,只是对输入数据的校验没做全,之后做web时再加上。

没有数据库。

完整代码在最后。

流程图

登录

想模拟提款机插卡登录的,因此没做注册账号的功能,手动先塞了三个账号。
有三次输入密码机会。

查询

取款

存款

转账

修改密码

退出

代码

文件结构

下面两个类复制过去放到ATM文件夹下就能运行。

package ATM;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Account {

    private String cardID;
    private String username;
    private String password;
    private double balance;
    private boolean status;//卡 锁定状态

    public Account() {
    }

    public Account(String cardID, String username, String password, double balance, boolean status) {
        this.cardID = cardID;
        this.username = username;
        this.password = password;
        this.balance = balance;
        this.status = status;
    }

    public Account(String cardID, String username, String password, double balance) {
        this.cardID = cardID;
        this.username = username;
        this.password = password;
        this.balance = balance;
    }

    public String getCardID() {
        return cardID;
    }

    public void setCardID(String cardID) {
        this.cardID = cardID;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    @Override
    public String toString(){
        System.currentTimeMillis();
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formatDate = sdf.format(date);
        return "银行:新航路银行\n" +
                "银行账号:"+cardID+"\n"
                +"用户名:"+username+"\n"
                +"余额:"+balance+"\n"
                +formatDate;
    }
}
package ATM;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;

public class ATM {

    static Scanner sc = new Scanner(System.in);
    static ArrayList<Account> accounts;

    public static void main(String[] args) {

        //模仿插卡ATM,因此没做注册用户功能,这里自己添加了几个用户做测试。
        accounts = new ArrayList<>();
        accounts.add(new Account("10001", "路飞", "ONEPIECE", 100,true));
        accounts.add(new Account("10002", "索隆", "123456", 10000,false));
        accounts.add(new Account("10003", "娜美", "123456", 1000000d,true));

        //登录
        loginVerify();

    }

    //登录验证
    public static void loginVerify() {
        System.out.println("提示:有这些账户");
        for (Account account : accounts) {
            System.out.println("卡号:"+account.getCardID() +"  用户名:" + account.getUsername()+"  密码:"+account.getPassword()+"  余额:"+account.getBalance());
        }
        System.out.println("---------------------------------------------");

        //模拟插卡,手动输入银行卡号
        System.out.print("输入银行卡号:");
        String cardID = sc.next();

        //根据卡号,判断此账号是否存在
        for (int i = 0; i < accounts.size(); i++) {
            Account account = accounts.get(i);
            if (cardID.equals(account.getCardID())) { //判断卡号是否存在
                if(account.isStatus()) { //看该卡是否被锁
                    //账号存在,输入密码
                    System.out.print("请输入密码:");
                    int count = 3;//可输入3次密码
                    while (count > 0) {
                        sc.useDelimiter("\n");
                        String pwd = sc.next();
                        if (pwd.equals(accounts.get(i).getPassword())) {
                            //登录成功,转到主界面
                            mainInterface(accounts.get(i));
                        } else {
                            if(--count == 0){
                                System.out.println("此卡已锁,请到人工处咨询办理。");
                                accounts.get(i).setStatus(false);
                            }else {
                                System.out.println("还有" + count + "次输入机会");
                            }
                        }
                    }
                }else{
                    System.out.println("此卡已锁,请到人工处咨询办理。");
                }
                break;
            }
            if(i == accounts.size()-1){
                System.out.println("此卡号不存在!!");
            }
        }
    }

    public static void mainInterface(Account account) {

        System.out.println("=====================================");
        System.out.println("|| 1.查询余额               5.修改密码||");
        System.out.println("|| 2.取款                  6.退卡    ||");
        System.out.println("|| 3.存款                           ||");
        System.out.println("|| 4.转账                           ||");
        System.out.println("=====================================");
        System.out.print("请输入要操作的号码:");
        int i = sc.nextInt();
        switch (i) {
            case 1:
                queryBalance(account);
                break;
            case 2:
                withdrawal(account);
                break;
            case 3:
                deposit(account);
                break;
            case 4:
                transfer(account);
                break;
            case 5:
                updatePassword(account);
                break;
            case 6:
                exitSystem();
                break;
            default:
                System.out.println("输入号码不对!");
                break;
        }

    }

    //查询余额
    public static void queryBalance(Account account) {
        System.out.println("=====================================");
        System.out.println("|| "+account.getUsername() + "的余额: " + account.getBalance());
        System.out.println("=====================================");
        mainInterface(account);
    }

    //取款
    public static void withdrawal(Account account) {
        System.out.print("请输入取款金额:");
        double money = sc.nextInt();
        if (money <= account.getBalance()) {
            account.setBalance(account.getBalance() - money);
            System.out.println("取款成功!!");
            System.out.println("=====================================");
            System.out.println("|| 1.返回主界面             2.打印发票||");
            System.out.println("=====================================");
            int i = sc.nextInt();
            switch (i) {
                case 1:
                    mainInterface(account);
                    break;
                case 2:
                    Date date = new Date();
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    String formatDate = sdf.format(date);
                    System.out.println("银行:新航路银行\n"+
                            "银行卡:"+account.getCardID()+"\n"+
                            "用户名:"+account.getUsername()+"\n"+
                            "本次取款:"+money+"\n"+
                            formatDate);
                    mainInterface(account);
                    break;
            }
        } else {
            System.out.println("oh,我可怜的孩子!余额不足捏。");
            System.out.println("=====================================");
            System.out.println("|| 1.返回 enter                       ||");
            System.out.println("=====================================");
            sc.next();
            mainInterface(account);
        }
    }

    //存款
    public static void deposit(Account account) {
        System.out.print("请输入要存款金额:");
        double tempMoney = sc.nextDouble();
        account.setBalance(account.getBalance() + tempMoney);
        System.out.println("哔~哔~哔  点钞中...");
        System.out.println("存款成功");
        mainInterface(account);
    }

    //转账
    public static void transfer(Account account) {
        System.out.println("请输入对方卡号(提示账号有:10001 /10002 /10003)");
        String cardID = sc.next();

        //根据卡号,判断此账号是否存在
        for (int i = 0; i < accounts.size(); i++) {
            if (cardID.equals(accounts.get(i).getCardID())) {
                System.out.print("请输入对象用户名验证:");
                sc.nextLine();
                String next = sc.nextLine();
                if(next.equals(accounts.get(i).getUsername())) {
                    System.out.print("请输入要转的金额:");
                    double m = sc.nextDouble();
                    if (m > account.getBalance()) {
                        System.out.println("你没这么多钱,转账失败!");
                        break;
                    } else {
                        account.setBalance(account.getBalance() - m);
                        accounts.get(i).setBalance(m + accounts.get(i).getBalance());
                        System.out.println("转账成功");
                        break;
                    }
                }else{
                    System.out.println("账号与用户名不匹配,转账失败");
                    break;
                }
            }
           if(i == accounts.size()-1) {
               System.out.println("此卡号不存在!!");
           }
        }
        mainInterface(account);
    }

    //5. 修改密码
    public static void updatePassword(Account account){
        System.out.print("请输入新密码:");
        String s1 = sc.next();
        System.out.print("请再次输入新密码:");
        String s2 = sc.next();
        if(s1.equals(s2)){
            account.setPassword(s1);
            System.out.println("密码修改成功,请重新登录!");
            loginVerify();
        }else{
            System.out.println("两次密码不一致");
            mainInterface(account);
        }
    }

    //6. 退出
    public static void exitSystem() {

        System.exit(0);
        //loginVerify();
    }
}

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

(0)

相关推荐

  • java实现ATM取款项目

    项目要求: 1.用户需要从控制台输入账号密码,账号或者密码不正确报异常 2.每日取款的金额有限制(100,30000),否则报异常 3.每次取款都要有记录,并在下一次取款时显示出来 思路: 1.先在"银行类"里生成一些用户(跳过了注册环节) 2.可使用List集合存储取款日志 3.可使用Map集合将"用户名"和对应的用户信息建立"键值关系" 4.使用while循环控制流程 项目实现代码: 管理类(含main方法): import java.uti

  • 浅谈java8 stream flatMap流的扁平化操作

    概念: Steam 是Java8 提出的一个新概念,不是输入输出的 Stream 流,而是一种用函数式编程方式在集合类上进行复杂操作的工具.简而言之,是以内部迭代的方式处理集合数据的操作,内部迭代可以将更多的控制权交给集合类.Stream 和 Iterator 的功能类似,只是 Iterator 是以外部迭代的形式处理集合数据的操作. 在Java8以前,对集合的操作需要写出处理的过程,如在集合中筛选出满足条件的数据,需要一 一遍历集合中的每个元素,再把每个元素逐一判断是否满足条件,最后将满足条件

  • Java 8 Stream Api 中的 map和 flatMap 操作方法

    1.前言 Java 8提供了非常好用的 Stream API ,可以很方便的操作集合.今天我们来探讨两个 Stream中间操作 map(Function<? super T, ? extends R> mapper) 和 flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) 2. map 操作 map 操作是将流中的元素进行再次加工形成一个新流.这在开发中很有用.比如我们有一个学生集合,我们

  • Java实现简单银行ATM功能

    本文实例为大家分享了Java实现简单银行ATM功能的具体代码,供大家参考,具体内容如下 实现功能 1.用户需要通过输入银行卡号和密码才能进入ATM系统 2.用户可以在ATM中实现取款.存款.转账.余额查询.退出系统等功能 简单分析 1.创建User类(cardNo,identity,phone,username,password,balance(余额)) 2.创建Bank类,主要实现初始化用户.用户登录.显示菜单.取款.存款.转账.余额查询.退出系统等功能. 代码实现 User.java pub

  • java 使用线程做的一个简单的ATM存取款实例代码

    实现Runnable接口.当一个线程已继承了另一个类时,就只能用实现Runnable接口的方法来创建线程,且便于保持程序风格的一致性. 我们知道,一个具有生命的线程,具有下面五种状态: 创建状态 使用new运算符创建一个线程后,该线程仅仅是一个空对象,系统没有分配资源,称该线程处于创建状态(new thread) 可运行状态 使用start()方法启动一个线程后,系统为该线程分配了除CPU外的所需资源,使该线程处于可运行状态(Runnable) 运行中状态 Java运行系统通过调度选中一个Run

  • java编写简单的ATM存取系统

    新手练手必备~ 密码账户为: 先创建账户类: 复制代码 代码如下: package cn.Atm; /** * @author 偶my耶 */ import java.io.*; import com.project.project; public class Account {   private String number=null;   private String name=null;   private String password=null;   private double mo

  • Java实现ATM取款机程序

    本文实例为大家分享了Java实现ATM取款机程序的具体代码,供大家参考,具体内容如下 对象说明: 功能:该程序的功能为实现模拟银行ATM自动取款机取款,存款,查询余额,转账等功能,只是完成了基本的功能. 思路:第一.登录判断,密码限制三次,使用for循环.第二.成功登录,选择相应的功能,使用switch语句.第四.实现功能的反复循环操作,因为次数不确定,使用while结构.第五.对每个功能模块进行填充完善. 代码展示: import java.util.Scanner; public class

  • Java实现银行ATM系统

    用Java模拟一个银行ATM系统,供大家参考,具体内容如下 系统功能介绍: 使用面向对象的编程思想,尽可能模拟真实世界中的银行ATM业务流程. main方法里通过调用一行代码,完成整个业务流程的顺序调用. 加入了身份证号,手机号等元素,虽然他们不涉及银行卡的业务处理,但它们是真实世界中办理银行卡的必需条件,这些在代码中也有所体现. 为了尽可能使得随机生成的身份证号码和手机号码和银行卡号切合实际,还手动设计了一个工具类,用来生成随机的号码. 其中涉及到的知识,包括但不限于static修饰符的使用,

  • 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()

  • java模拟ATM功能(控制台连接Mysql数据库)

    本文实例为大家分享了java模拟ATM功能的具体代码,供大家参考,具体内容如下 有三个类:Test.java.Customer.java.CustomerDAO.java.ATMSystem.java ATMSystem.java实现模拟ATM的功能 Customer.java创建一个用户对象 CustomerDAO.java实现连接数据库 Test为主程序 ATMSystem.java: package ATM; import java.util.Scanner; public class A

随机推荐