ATM

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("无法识别您输入的内容!");
			}
		}
	}
}

  

 

 

  

越努力,越幸运!!! good good study,day day up!!!
原文地址:https://www.cnblogs.com/canglongdao/p/12974697.html