⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bank.java

📁 一个ATM银行模拟系统
💻 JAVA
字号:
package business;
import exception.*;
import model.*;
import java.util.*;
import dao.*;
import dao.impl.*;

public class Bank {
	private static Bank bank=new Bank();
	/*
	private Account[] as=new Account[10];
	private int index=0;
	*/
	// key: id Long   value:Account 对象
	private Map as;
	private AccountDao dao;
	private Bank() {
		dao=this.getAccountDao();
		as=dao.loadAccounts();
	}
	private AccountDao getAccountDao(){
		return AccountDaoFactory.createAccountDao();
	}
	public static Bank newInstance(){
		return bank;
	}
	public Account register(String pass1,String pass2,String name,String personId,String email,int type) throws RegisterException{
		if (!(pass1.equals(pass2))){
			throw new RegisterException("两次密码输入不一致,开户失败");
		}
		Account c=null;
		if (type==0) c=new SavingAccount(pass1,name,personId,email);
		if (type==1) c=new CreditAccount(pass1,name,personId,email);
		if (type==2) c=new LoanSavingAccount(pass1,name,personId,email);
		if (type==3) c=new LoanCreditAccount(pass1,name,personId,email);
		
		/*
		if (index==as.length) expand();
		as[index]=c;
		index++;
		*/
		//as.put(new Long(c.getId()),c);
		as.put(c.getId(),c);
		dao.saveAccounts(as);
		return c;		
	}
	
	public Account login(long id,String password) throws LoginException{
		Account c=this.findAccountById(id);
		if (c==null) {
			throw new LoginException("id "+id+" 不存在");
		}
		String p=c.getPassword();
		if (p.equals(password)){
			System.out.println("欢迎你回来,"+c.getName());
			return c;
		}
		else{
			throw new LoginException("密码错误");
		}
	}
	
	public Account deposit(long id,double money){
		Account c=this.findAccountById(id);
		c.deposit(money);
		dao.saveAccounts(as);
		return c;
	}
	
	public Account withdraw(long id,double money) throws BalanceNotEnoughException {
		Account c=this.findAccountById(id);
		c.withdraw(money);
		dao.saveAccounts(as);
		return c;
	}
	
	public Account setCeiling(long id,double ceiling){
		Account c=this.findAccountById(id);
		if (c instanceof CreditAccount){
			CreditAccount ca=(CreditAccount)c;
			ca.setCeiling(ceiling);
			dao.saveAccounts(as);
		}
		return c;
	}
	
	public Account requestLoan(long id,double money){
		Account c=this.findAccountById(id);
		if (c instanceof Loanable){
			Loanable l=(Loanable)c;
			l.requestLoan(money);
			dao.saveAccounts(as);
		}
		return c;
	}
	
	public Account payLoan(long id,double money) throws LoanException, BalanceNotEnoughException{
		Account c=this.findAccountById(id);
		if (c instanceof Loanable){
			Loanable l=(Loanable)c;
			l.payLoan(money);
			dao.saveAccounts(as);
		}
		return c;		
	}
	
	
	
	public double getTotalBalance(){
		double result=0;
		/*
		for(int i=0;i<index;i++){
			result+=as[i].getBalance();
		}
		*/
		Collection values=as.values();
		Iterator it=values.iterator();
		while(it.hasNext()){
			Object o=it.next();
			Account c=(Account)o;
			result+=c.getBalance();
		}
		return result;
	}
	
	public double getTotalCeiling(){
		double result=0;
		/*
		for(int i=0;i<index;i++){
			if (as[i] instanceof CreditAccount){
				CreditAccount ca=(CreditAccount)as[i];
				result+=ca.getCeiling();
			}
		}
		*/
		Collection values=as.values();
		Iterator it=values.iterator();
		while(it.hasNext()){
			Object o=it.next();
			if (o instanceof CreditAccount){
				CreditAccount ca=(CreditAccount)o;
				result+=ca.getCeiling();
			}
		}	
		return result;
	}
	
	public double getTotalLoan(){
		double result=0;
		/*
		for(int i=0;i<index;i++){
			if (as[i] instanceof Loanable){
				Loanable l=(Loanable)as[i];
				result+=l.getLoan();
			}
		}
		*/
		Collection values=as.values();
		Iterator it=values.iterator();
		while(it.hasNext()){
			Object o=it.next();
			if (o instanceof Loanable){
				Loanable ca=(Loanable)o;
				result+=ca.getLoan();
			}
		}	
		return result;
	}
	
	//输出用户总资产排名
	public void printUserSort(){
		class User implements Comparable{
			private String personId;
			private double money;
			public User(String personId){
				this.personId=personId;
			}
			public void addAccount(double money){
				this.money+=money;
			}
			public String toString(){
				return this.personId+": "+money;
			}
			public int compareTo(Object o){
				User u=(User)o;
				if (this.money<u.money) return 1;
				else if (this.money>u.money) return -1;
				else return this.personId.compareTo(u.personId);
			}
		}
		//key: personId value: User Object
		Map users=new HashMap();
		
		//把Account的信息添加到users中
		Collection accounts=as.values();
		Iterator it=accounts.iterator();
		while(it.hasNext()){
			Account c=(Account)it.next();
			//判断c帐户的对应用户在users集合中是否存在
			if (users.containsKey(c.getPersonId())){
				User u=(User)users.get(c.getPersonId());
				u.addAccount(c.getBalance());
			}
			else{
				User u=new User(c.getPersonId());
				u.addAccount(c.getBalance());
				users.put(c.getPersonId(),u);
			}
		}
		
		//对users中的值对象排序
		Collection us=users.values();
		List list=new ArrayList();
		list.addAll(us);
		Collections.sort(list);
		
		for(int i=0;i<list.size();i++){
			System.out.println(list.get(i));
		}
		
	}
	
	private Account findAccountById(long id){
		/*
		for(int i=0;i<index;i++){
			if (as[i].getId()==id) return as[i];
		}
		return null;
		*/
		Object value=as.get(new Long(id));
		return (Account)value;
	}
    /*
	private void expand(){
		Account[] as2=new Account[as.length*2];
		System.arraycopy(as,0,as2,0,as.length);
		as=as2;
	}
	*/
	
	public static void main(String[] args){
		Bank b=Bank.newInstance();
		try {
			b.register("123","123","huxz","123456","huxz@tarena.com.cn",0);
			b.register("123","123","huxz","123456","huxz@tarena.com.cn",0);
			b.register("123","123","liucy","123457","liucy@tarena.com.cn",0);
			b.register("123","123","liucy","123457","liucy@tarena.com.cn",0);
			b.register("123","123","liucy","123457","liucy@tarena.com.cn",0);
			b.deposit(100001,200000);
			b.deposit(100002,2000000);
			
			b.deposit(100003,5000);
			b.deposit(100004,20000);
			b.deposit(100005,100000);
			
			b.printUserSort();
			
		} catch (BusinessException e) {
			e.printStackTrace();
		}
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -