package com.bank; public class CardStatus { private String cardNo; private Integer status;//密码 public CardStatus(String cardNo,Integer status) { this.cardNo=cardNo; this.status=status; } public String getCardNo() { return cardNo; } public Integer getStatus() { return status; } public void setStatus(Integer ps) { status=ps; //return true; } //重写方法 比较 public boolean equals(Object obj) { if(this==obj) { return true; } if(obj instanceof CardStatus) { CardStatus anotherC=(CardStatus)obj; if(this.cardNo.equals(anotherC.cardNo)) { return true; } } return false; } public int hashCode() { return this.cardNo.hashCode(); } }
package com.bank; import java.util.*; import java.util.Map.Entry; public class Atm { //所有卡号,密码 private HashSet<CardStatus> cardNo=new HashSet<CardStatus>(); //身份证,卡号 private TreeMap<String,String> idCard=new TreeMap<String,String>(); //卡号,金额; private TreeMap<String,Integer> idCardMoney=new TreeMap<String,Integer>(); { cardNo.add(new CardStatus("4567894567894567564",0)); cardNo.add(new CardStatus("4567894567894567565",0)); cardNo.add(new CardStatus("4567894567894567566",0)); cardNo.add(new CardStatus("4567894567894567567",0)); } ArrayList<CardStatus> cardNoA=new ArrayList<CardStatus>(this.cardNo);//卡号,密码数组 //开户 public void openCard(String idcard) { boolean cg=false; if(idCard.containsKey(idcard)) { System.out.println("你已经有本银行的卡了,不能再开卡了"); }else { for(int i=0;i<cardNoA.size();i++) { if(cardNoA.get(i).getStatus()==0) { Integer ps=123456;//初始密码 String blankCardNo=cardNoA.get(i).getCardNo();//卡号; idCard.put(idcard, blankCardNo);//身份证,卡号对应; cardNoA.get(i).setStatus(ps);//卡号,密码; idCardMoney.put(blankCardNo,0);//卡号,金额; System.out.println("恭喜你开卡成功,卡号为:"+cardNoA.get(i).getCardNo()+"密码为:"+cardNoA.get(i).getStatus()); System.out.println(idcard+"对应的卡号:"+idCard.get(idcard)); System.out.println(blankCardNo+"对应的金额为:"+idCardMoney.get(blankCardNo)); cg=true; break; } } if(!cg) {System.out.println("抱歉,银行所有卡全已开户,咱们会尽快补卡");} } } //根据卡号,查身份证 public String checkIdCard(String id) { /* Set<String> a=idCard.keySet(); Iterator<String> it=a.iterator(); while(it.hasNext()) { System.out.println(it.next()); String idd=(String)idCard.get(it.next()); if(idd.equals(id)) { return it.next(); } } */ Set<Entry<String,String>> mn=idCard.entrySet(); Iterator<Entry<String,String>> ii=mn.iterator(); while(ii.hasNext()){ Entry<String,String> nn=ii.next(); String kk=nn.getKey(); String vv=nn.getValue(); if(vv.equals(id)) { return kk; } } return "未查询到"; } //销户 public boolean accountCancell(String id) { for(int i=0;i<cardNoA.size();i++) { if(cardNoA.get(i).getCardNo().equals(id)){ cardNoA.get(i).setStatus(0);//密码设为0; idCardMoney.remove(id); idCard.remove(this.checkIdCard(id)); return true; } } return false; } //登录; public boolean login(String id,Integer password){ for(int i=0;i<cardNoA.size();i++) { if(cardNoA.get(i).getCardNo().equals(id)) { if(cardNoA.get(i).getStatus().equals(password)) { //System.out.println(((Integer)cardNoA.get(i).getStatus())==password);//Integer单独写比较成功,这里是false; return true; } break; } } return false; } //查询余额 public int check(String id) { return idCardMoney.get(id); } //存款 public int deposit(String id,int money) { int oldMoney=this.check(id); //System.out.println(idCardMoney.get(id)); oldMoney+=money; //System.out.println(oldMoney); idCardMoney.put(id,oldMoney);//put返回的值为原来的旧金额; //System.out.println(idCardMoney.get(id)); return idCardMoney.get(id); } //取款 public boolean drawMoney(String id,int money) { int oldMoney=this.check(id); if(money!=0 && money<=oldMoney) { oldMoney-=money; idCardMoney.put(id, oldMoney); return true; } return false; } //转账 public boolean transferAccout(String myid,String othid,int money) { for(int i=0;i<cardNoA.size();i++) { if(!(myid.equals(othid)) && cardNoA.get(i).getCardNo().contentEquals(othid)) {//判断他人卡号存在吗? //查询本卡余额; int myOldMoney=this.check(myid); if(myOldMoney>=money) { int othOldMoney=this.check(othid); othOldMoney+=money; myOldMoney-=money; idCardMoney.put(myid,myOldMoney); idCardMoney.put(othid,othOldMoney); return true; } break; } } return false; } }
package com.bank; public class Person { private String name; private Integer password; public Person(String name,Integer password) { this.name=name; this.password=password; } public String getName() { return this.name; } public Integer getPassword() { return this.password; } }
package com.bank; import java.util.*; public class TestMain { public static void main(String[] args) { // TODO Auto-generated method stub boolean flag=false; String id=null; Atm bank=new Atm(); ba:while(true) { Scanner input=new Scanner(System.in); System.out.println("请输入您想要操作的内容?开户k、查询余额cx、查询身份证cxid、存款c、取款q、转账z、销户x、退出o"); String operation=input.nextLine(); if(operation.contentEquals("k")) { System.out.println("请您输入身份证号:"); String idcard=input.nextLine(); if(idcard.length()==18) { bank.openCard(idcard); }else { System.out.println("身份证号输入错误!"); } flag=false; }else if(operation.contentEquals("o")) { System.out.println("退出登录成功!"); break ba; }else if(operation.equals("cx") || operation.equals("cxid") || operation.equals("c") || operation.equals("q") || operation.equals("z") || operation.equals("x") || operation.equals("o")) { if(!flag) { System.out.println("请输入卡号:"); id=input.nextLine(); System.out.println("请输入密码:"); Integer ps=input.nextInt(); input.nextLine(); Person p=new Person(id,ps); if(bank.login(p.getName(),p.getPassword()) && (ps+"").length()>=6){ flag=true; }else{ System.out.println("卡号或密码错误!"); continue; } } switch(operation) { case "cx": System.out.println("您的卡号余额为:"+bank.check(id)); break; case "cxid": System.out.println(bank.checkIdCard(id)); break; case "c": System.out.println("请您输入存入金额"); int money=input.nextInt(); input.nextLine(); System.out.println("存入成功,您的卡号余额为:"+bank.deposit(id,money)); break; case "q": System.out.println("请您输入取款金额"); int outmoney=input.nextInt(); input.nextLine(); if(bank.drawMoney(id,outmoney)){ System.out.println("恭喜您,取款成功!"); }else { System.out.println("余额不足,取款失败!"); } break; case "z": System.out.println("请输入转入卡号:"); String othid=input.nextLine(); System.out.println("请您输入转款金额:"); int zkmoney=input.nextInt(); input.nextLine(); if(bank.transferAccout(id,othid,zkmoney)){ System.out.println("恭喜您,转款成功"); }else { System.out.println("转款卡号或转款金额异常"); } flag=false; break; case "x": if(bank.accountCancell(id)) { System.out.println("销户成功"); flag=false; }else { System.out.println("销户失败"); } break; case "o": System.out.println("退卡成功"); break ba; } }else { System.out.println("无法识别您输入的内容!"); } } } }