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

ATM系统项目

ATM系统要实现的功能

1.查询:账号必须存在,密码(三次机会,不对就锁卡)

2.取款:账号必须存在,密码(三次机会,不对就锁卡),取款金额不能大于存款

3.存款:账号必须存在,存款金额不能低于0

4.转帐:你的账户,转款账户都必须存在,密码(三次机会,不对就锁卡),转账金额不能超过余额

5.锁卡:账号必须存在,使用密码冻结

6.解卡:账号必须存在,只能使用身份证号进行解锁

7.补卡:使用身份证进行补卡

8.改密:愿密码进行改密,也可以使用身份证进行改密

9.退出: 保存数据

项目分析

可分为四个对象,第一个 银行卡对象(Card 存储银行卡信息);第二个 用户对象(Person 存储用户信息);第三个 功能对象( Controller 具体的操作功能类);视图对象( Views 显示操作界面)。从而可分为四个类

代码

Card类

封装卡的属性(卡号,密码,余额,锁卡状态)

public class Card {
   //封装卡的属性
   private String cardid;
   private String password;
   private double money;
   private boolean islock;

   //设置封装的各属性的set、get方法
   public String getCardid() {
    return cardid;
   }

   public void setCardid(String cardid) {
    this.cardid = cardid;
   }

   public String getPassword() {
    return password;
   }

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

   public double getMoney() {
    return money;
   }

   public void setMoney(double money) {
    this.money = money;
   }

   public boolean isIslock() {
    return islock;
   }

   public void setIslock(boolean islock) {
    this.islock = islock;
   }
   
   //重写 to String方法
   @Override
    public String toString() {
        return "Card [cardid="   cardid   ", password="   password   ", money="   money   ", islock="   islock   "]";
    }
    
    //构造卡的无参和有参构造方法  
    public Card() {
        super();
        
    }
        
    public Card(String cardid, String password, double money, boolean islook) {
        super();
        this.cardid = cardid;
        this.password = password;
        this.money = money;
        this.islock = islock;
    }
   
}

Person类

封装用户信息(用户名,身份证号,手机号码,卡)

public class Person {
    private String name;
    private String userid;
    private String phone;
    private Card[] card;
    
    //设置封装的各属性的set、get方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getUserid() {
        return userid;
    }
    public void setUserid(String userid) {
        this.userid = userid;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public Card[] getCard() {
        return card;
    }
    public void setCard(Card[] card) {
        this.card = card;
    }
        
    //重写 to String方法
    @Override
    public String toString() {
        return "Person [name="   name   ", userid="   userid   ", phone="   phone   ", card="   card  "]";
    }
    //构造无参和有参方法  
    public Person() {
        super();
    }
    
    public Person(String name, String userid, String phone, Card[] card) {
        super();
        this.name = name;
        this.userid = userid;
        this.phone = phone;
        this.card = card;
    }    
}

Controller类

创建三个默认账户信息,并构造操作方法

public class Controller {
     Scanner sc = new Scanner(System.in);
     Card c = new Card() ; //生成卡
     
     //创建三组信息
     Card c1 = new Card("1","666666",1000,false);  //默认账户1
     Card c2 = new Card("2","666666",1500,false);  //默认账户2
     Card c3 = new Card("3","666666",1800,false);  //默认账户3
     public void regiser(String name,String userid,String phone,Card[] card) {
         //将Person类的属性赋给对象p
         Person p = new Person(name,userid,phone,card);        
     }
     
     public void query(Person p) {
         
         System.out.println(p);
     }
     
     public boolean verify(String cardid,String password) {
         if(cardid.equals("1")&&password.equals("666666")) {  //如果输入的是账户1的账户密码,就得到账户1属性
             c.setMoney(c1.getMoney());
             c.setPassword(c1.getPassword());
             
             if(!c.isIslock()) {       //判断账户1是否被锁
                 return true;
             }else {
                 System.out.println("抱歉,该卡已被锁");
                 return false;
             }
         }
         
         if(cardid.equals("2")&&password.equals("666666")) { //如果输入的是账户2的账户密码,就得到账户2属性
             c.setMoney(c2.getMoney());
             c.setPassword(c2.getPassword());
             
             //判断该卡是否被锁
             if(!c.isIslock()) {     //判断账户2是否被锁
                 return true;
             }
         }
         
         if (cardid.equals("3")&&password.equals("666666")) { //如果输入的是账户3的账户密码,就得到账户3属性
             c.setMoney(c3.getMoney());
             c.setPassword(c3.getPassword());
             
             if(!c.isIslock()) {        //判断账户3是否被锁
                 return true;
             }
         }
         
         return false;       //一个账户信息都没对上,重新输入
         
     }
        
     //构造查询方法
     public void query(String cardid) {
         
         if(cardid.equals("1")) {                           //查询账户1
             System.out.println(c.getMoney());
         }else if(cardid.equals("2")) {                     //查询账户2
             System.out.println(c.getMoney());
         }else if(cardid.equals("3")) {                     //查询账户3
             System.out.println(c.getMoney());
         }else {
             System.out.println("输入有误");
         }
         
     }
     
     //构造取钱方法
     public void putMoney() {
         System.out.print("请输入需要取出的金额(将金额再确认一遍):");
         double money = sc.nextDouble();
        //判断钱够不够
         if(money<=c.getMoney()) {
             money = c.getMoney()-money;
             c.setMoney(money);                        //钱够取出并更新账户余额
             System.out.println("已取出" sc.nextDouble() "元");
             System.out.println("账户余额为:" money "元");
         }else {
             System.out.println("对不起,账户余额不足");
         }
     }
     
     //构造存钱方法
     public void addMoney() {

         System.out.println("请将纸币放于存钞口(将金额再确认一遍)");

         double money = sc.nextDouble();

          money = c.getMoney() money;

         c.setMoney(money);                               //存钱并更新账户余额      
         
         System.out.println("已存入" sc.nextDouble() "元");
        System.out.println("账户余额为:" money "元");         
         

     }
     
   //构造转钱方法
     public void saveMoney() {
         System.out.println("请输入需要转入账户名:");
         String name = sc.next();
         System.out.print("请输入转入金额(将金额再确认一遍):");
         double money = sc.nextDouble();
         
         //判断钱够不够
         if(c.getMoney()>=money) {
             money = c.getMoney()-money;
             c.setMoney(money);                             //钱够转钱 更新账户余额
             System.out.println("已转出" sc.nextDouble() "元");
             System.out.println("账户余额为:" money "元");
         }else {                                            //钱不够返回
             System.out.println("对不起,账户余额不足");
         }
     }
     
     //构造锁卡方法
     public void lock() {
         c.setIslock(true);
         System.out.println("该卡已被锁");
     }
     
     //构造解卡方法
     public void unlock() {
         c.setIslock(false);
         System.out.println("该卡可正常使用");
     }
     
     //构造补卡方法
     public void newCard() {
         System.out.println("请输入您的姓名:");
         String name = sc.nextLine();
        
         System.out.println("请输入您的身份证号码:");
         String userid = sc.nextLine(); 
        
         Person p = new Person(name,userid,null,null);  
         
         
         System.out.println("请输入重办账户号码:");         
         String cardid = sc.nextLine();
         
         System.out.println("请输入要设置的密码(数字):");
         String  password = sc.nextLine();
     
         //限制密码位数
         if(password.length()==6) {
             System.out.println("密码设置成功");
         }else {
             System.out.println("密码限制6位,请重新选择功能");             
         }
         
     }        

     
     //构造改密方法
     public void changePwd() {
         System.out.println("请输入密码:");
         String password = sc.next();
         
         if(password.equals(c.getPassword())){
             System.out.println("请输入更改后的密码:");
             String newpassword = sc.next();
             System.out.println("再输入一次密码:");
             String newpassword1 = sc.next();
             
            if(newpassword.equals(newpassword1)) {
             System.out.println("密码修改成功!");
             c.setPassword(newpassword1);
            }else {
             System.out.println("两次密码输入不一致,请重新输入");
             changePwd();
            }
       }else {     
           System.out.println(c.getPassword());
           System.out.println("密码输入错误");
       }
     }
     
     //构造退出方法
     public void save() {
         System.exit(0);
     }
}

View类

实现欢迎界面以及各操作界面

public class View {
    Scanner s = new Scanner(System.in);
    private int count = 3;
    Card c =new Card();
    Controller co = new Controller();
    
    public static void main(String[] args) {
        View v = new View();
        v.show();
    }
    
    public void show() {
        System.out.println("=============欢迎使用使用本行存取一体机=============");
        System.out.println("请输入卡号:");
        String cardid = s.nextLine();
        
        System.out.println("请输入密码:");
        String  password =s.nextLine();
        
        //登录界面,账户密码错三次就锁卡
        if(!co.verify(cardid, password)) {
            count--;
            if(count == 0) {
                co.lock();   //调用lock
                System.out.println("密码输入错误" c.isIslock());
                System.out.println("请重新输入:");
            }
            
            System.out.println("你还有" count "次输入机会,");
            System.out.println("输入机会用完后,将会锁卡");
            show();
        }
        //如果账户密码正确就进入功能界面
        if(co.verify(cardid, password)) {
            while(true) {
                System.out.println("请按相应的序号选择功能:1.取款    2.存款    3.查询余额    4.转账   5.修改密码    6.锁卡    7.解卡   8.补卡  9.退出");
                
                switch(s.nextInt()) {
                case 1:   //取款
                    co.putMoney();
                    break;
                case 2:  //存钱
                    co.addMoney();
                    break;
                case 3:  //查询
                    co.query(cardid);
                    break;
                case 4:  //转钱
                    co.saveMoney();
                    break;
                case 5:  //改密
                    co.changePwd();
                    break;
                case 6:  //锁卡
                    co.lock();
                    break;
                case 7:  //解卡
                    co.unlock();
                    break;
                case 8:  //补卡
                    co.newCard();
                    break;
                case 9:  //退出
                    System.out.println("感谢使用,欢迎下次光临");
                    co.save();
                    break;
                    
                default:  //输入指令错误
                    System.out.println("输入有误");
                    break;
                }
            }
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持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,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部