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;
                }
            }
        }
    }
}

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: