Java实现简单控制台版ATM系统

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

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

(0)

相关推荐

  • Java实现基础银行ATM系统

    目录 一.前言 二.使用步骤 三.运行效果图: 本文实例为大家分享了Java实现银行ATM系统的具体代码,供大家参考,具体内容如下 一.前言 银行ATM系列简单操作 二.使用步骤 1.创建用户信息类Account.java 代码如下(示例): package ATM; public class Account {         private String id;         private String name;         private double balance;    

  • Java 模拟银行自助终端系统

    一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1. 对于数据输入异常,可使用java异常处理机制进行处理. 2. 评分将以功能实现与代码规范性相结合的方式进行考核. 3. 如果对项目需求有疑问,可以随时以QQ留言方式联系我进行咨询. 4. 国庆放假期间,每天都有老师在公司值班,10月4日是我在公司值班,10月7日正常上班,欢迎大家到公司来做项目. 二. 项目功能要求: 项目开始运行显示主菜单为: 银行自助终端系统 ************

  • java代码实现银行管理系统

    本文实例为大家分享了java银行管理系统的具体代码,供大家参考,具体内容如下 银行业务调度 一.系统要求 1.银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. 2.有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费.电话费之类业务的客户). 3.异步随机生成各种类型的客户,生成各类型用户的概率比例为: VIP客户 :普通客户 :快速客户  =  1 :6 :3. 4.客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客

  • Java实现简单银行ATM功能

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

  • java实现简单银行ATM系统

    本文实例为大家分享了java实现简单银行ATM系统的具体代码,供大家参考,具体内容如下 #ATM系统 ##功能 模拟银行ATM机系统,具有注册.登录功能用户登录后可实现以下功能:1)存款 2)取款 3)转账 4)查询 5)退出 ##设计思路 首先,要进行ATM机操作应该具有银行卡和ATM,所以我们要设计一个ATM类和Bankcard类,ATM具有存取款等操作,Bankcard用来记录用户存取款等操作后的越,其次因为ATM同时为多个用户服务,所以我们应该识别每张卡,这里增加一个Bank类来记录银行

  • Java实现的校验银行卡功能示例

    本文实例讲述了Java实现的校验银行卡功能.分享给大家供大家参考,具体如下: 步骤: 首先区分借记卡和信用卡,然后就是校验卡号,最后根据银联Bin确定什么银行,Bin之后就是归属地. 本文所有数据来源于网络,不一定保证正确和完整,这里仅仅作为教学使用. Java代码: package org.luozhuang.bankcard; public class checkBankCard { /* 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心, 因为并不是一个随便的信

  • Java实现获取银行卡所属银行,验证银行卡号是否正确的方法详解

    本文实例讲述了Java实现获取银行卡所属银行,验证银行卡号是否正确的方法.分享给大家供大家参考,具体如下: 需求:用户输入银行卡卡号,需要验证卡号格式,自动填充所属银行. 第一想到的是正则表达式,后面尝试多次,卡号验证不太准确. 换一种思路:用户输入卡号,进入java后台,对卡号进行验证,返回结果.可行! 第一点: 如何验证卡号格式以及所属银行? js/html此处就不写出来了.直接给后台代码,我提供给各位一个简单的main调用,可自行修改(建议放入service): /** * TODO *

  • Java简单实现银行ATM系统

    实现步骤: 定义账户类,用于后期创建账户对象封装用户的账户信息. 账户类中的信息至少需要包含(卡号.姓名.密码.余额.取现额度) 需要准备一个ArrayList的集合,用于存储系统用户的账户对象. 定义一个系统启动类ATMSystem需要展示欢迎页包含2个功能:开户功能.登录账户. 账户类 Account package test;/*账户类*/public class Account {    private String cardId; //卡号    private String user

  • Java实现银行ATM系统

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

  • java实现银行ATM管理系统

    本文实例为大家分享了java实现银行ATM管理系统的具体代码,供大家参考,具体内容如下 功能 账户类.首页设计 分析 ① 每个用户一个账户对象,需要设计账户类,账户类至少包含(卡号.用户名.余额.取现额度.密码) ② 需要定义一个ArrayList的集合用于存储账户对象. ③ 需要展示欢迎页包含2个功能:注册开户.登录账户. 用户开户功能实现 ① 开户功能应该独立定义成方法,并传入当前集合对象给该方法. public static void register(ArrayList<Account>

随机推荐