本文实例为大家分享了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();
    }
}

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

Java基于控制台界面实现ATM系统的更多相关文章

  1. ios – 如何将PhoneGap调试控制台与CLI集成?

    我需要在config.xml中添加任何内容吗?

  2. 无法使用xCode 4.4启动控制台应用程序

    我有一个包含两个目标的项目–一个iOS应用程序和一个OSX控制台应用程序.后者是使用XcodeFile->NewTarget并选择“CommandLineTool”创建的.此控制台应用程序用于准备iOS应用程序所需的默认数据库–使用CoreData.这一直很好,直到我升级到MountainLion和xCode4.4.现在,当我尝试运行命令行工具时,我收到“无法启动–权限被拒绝”错误.我试过玩签名证

  3. 使用XCode进行调试时如何生成SIGINT?

    我的控制台应用程序捕获SIGINT,以便它可以正常退出.但是,在调试程序时按XCode中的CTRLC无效.我可以找到进程并使用终端窗口向我的进程发送SIGINT,但是我希望有一个更简单的解决方案,我可以在XCode中完成.解决方法调试器控制台的暂停按钮实际上会向您的应用发送SIGINT.如果您想让调试器将信号传递给您的应用程序,您可以执行以下操作:>按调试器的暂停按钮,等待调试控制台获得焦点>键入

  4. ios – 从应用程序扩展打印到控制台

    我一直在玩iOS8中的新自定义键盘应用程序扩展API,使用Swift作为我的首选语言.然而,我注意到的一件事是,println似乎并没有向控制台输出任何输出,大概是因为这些语句是在应用程序扩展中执行而不是包含应用程序.有没有人找到一种方法从应用程序扩展中将语句打印到控制台?

  5. 为什么Xcode 8(iOS 10)在控制台中打印[LogMessageLogging]

    为什么Xcode8打印[LogMessageLogging]在控制台中,当我调用地图视图时?任何人都可以提出一些建议吗?解决方法PrivacyTheunifiedloggingsystemconsidersdynamicstringsandcomplexdynamicobjectstobeprivate,anddoesnotcollectthemautomatically.Toensuretheprivacyofusers,itisrecommendedthatlogmessagesconsiststri

  6. ios – 如何使用lldb expr(DEBUGGING控制台)在运行时设置UIView的框架

    我正在尝试以下方法我越来越我正在使用XCode6.1,LLDB版本lldb-320.4.152解决方法好的,这是一种有效的方法

  7. Xcode控制台中的“Some”关键字是什么意思?

    打印对象的描述会使lldb在对象的描述前面使用关键字“Some”:这个关键字是什么意思;为什么会这样?解决方法Optional是包含两个案例的枚举,none和some:如您所见,Optional可以具有Some值,具有关联值或None.Optional.None实际上是nil的意思.在这种情况下,调试器告诉您someString是一个Optional(a.k.a.String?),其值为Optional.some.它不是Optional.None,因此它不是零.在Swift3之前,这些案例都是大写的,So

  8. Swift学习笔记五——在Background中启用控制台Console Output模式

    在之前的介绍中可以知道,使用Xcode中的background来学习Swift是非常强大的,可以在右侧的界面中实时预览代码中的所有常量或者变量的值,非常方便。但是现在我们学习的Swift应该作为一种控制台程序出现,就像初学C,OC一样。所有代码的打印结果都可以在Console控制台中显示,以区别之前的所有参数值都显示在一起的情况。但是默认打开Background是没有所谓的控制台的。下面简述打开Background的方法。打开Xcode,选择View-->AssistantEditor-->ShowAss

  9. Swift 2.0学习笔记Day4——用Playground工具编写Swift

    Playground程序运行①区域是代码编写视图;②区域是运行结果视图;③区域是时间轴视图;④区域是控制台视图,使用print等日志函数将结果输出到控制台,可以通过左下角的按钮隐藏和显示控制台。默认情况下时间轴视图是不显示的,可以通过助手编辑器打开Playground时间轴视图。欢迎关注关东升新浪微博@tony_关东升。

  10. 《从零开始学Swift》学习笔记Day4――用Playground工具编写Swift

    Playground程序运行①区域是代码编写视图;②区域是运行结果视图;③区域是时间轴视图;④区域是控制台视图,使用print等日志函数将结果输出到控制台,可以通过左下角的按钮隐藏和显示控制台。默认情况下时间轴视图是不显示的,可以通过助手编辑器打开Playground时间轴视图。欢迎关注关东升新浪微博@tony_关东升。

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部