• 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!!!
  • 相关阅读:
    1104--DNA排序
    poj1050-To the Max
    编译:一个 C 程序的艺术之旅(转载)
    大话同步/异步、阻塞/非阻塞(转载)
    Windows 在 git bash下使用 conda 命令
    Python Multiprocessing 多进程,使用多核CPU计算 并使用tqdm显示进度条
    Python 写入训练日志文件并控制台输出
    nn.Conv2d 参数及输入输出详解
    Python中 list, numpy.array, torch.Tensor 格式相互转化
    Linux 上传代码到github
  • 原文地址:https://www.cnblogs.com/canglongdao/p/12974697.html
Copyright © 2020-2023  润新知