📄 bank.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 + -