2014-09-20 98 views
1

我正在制作一个java程序,并且有5个类: Account,SavingsAccount(继承账户),CreditAccount(继承账户),Bank,Customer。Java银行计划。如何让客户拥有多个账户?

该程序正在运行,但我无法弄清楚如何让客户拥有两个或多个帐户。假设一个客户既想要一个信用账户,又想要一个储蓄账户,或者两个储蓄账户。

任何人都可以给我一些建议吗?谢谢

银行类:

public class Bank { 
    String bankName; 
    private Customer[] customers = new Customer[100]; 

    Bank(String bankName) { 
     this.bankName = bankName; 
    } 

    public Customer[] getCustomer() { 
     return customers; 
    } 

    public String getBankname() { 
     return bankName; 
    } 
} 

Account类:

public abstract class Account { 
    protected double balance = 0; 
    protected String accountId; 

    public Account() {} //Defaultkonstruktor 

    public Account(double bal, String id) { //Konstruktor 
     if (balance >= 0) { 
      balance = bal; 
     } 
     else { 
      balance = 0; 
     } 
     accountId = id; 
    } 

    public abstract void deposit(double amount); 

    public abstract void withdraw(double amount); 

    public abstract double getBalance(); 

    public abstract String getAccountId(); 

    public abstract void transfer(double amount, Account account); 
} 

SavingsAccount类:(CreditAccount类是相似的)

public class SavingsAccount extends Account{ 
    private double interest = 2.9; 

    public SavingsAccount() {  //Konstruktor 
     super(); 
    } 

    public SavingsAccount(double balance, String id) { //Konstruktor 
     super(bal,id); 
    } 

    public void setInterest(Customer customer) { 
     //code 
    } 

    public void setBalance(double balance) { 
     //code 
    } 

    @Override 
    public void deposit(double amount) { 
     //code 
    } 

    @Override 
    public void withdraw(double amount) { 
     //code 
    } 

    @Override 
    public double getBalance(){ 
     //code 
    } 

    @Override 
    public String getAccountId(){ 
     //code 
    } 

    @Override 
    public void transfer(double amount, Account account) { 
     //code 
    } 

    public void setInterest(double interest){ 
     //code 
    } 

    public double getInterest(){ 
     //code 
    } 
} 

Customer类:

public class Customer { 
    private String firstName; 
    private String lastName; 
    private String number; 

    private SavingsAccount account = new SavingsAccount(); 
    private CreditAccount cAccount = new CreditAccount(); 

    Customer(String firstName, String lastName, String number, SavingsAccount account) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.number = number; 
     this.account = account; 
    } 

    Customer(String firstName, String lastName, String number, CreditAccount cAccount) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.number = number; 
     this.cAccount = cAccount; 
    } 

    public SavingsAccount getAccount() { 
     return account; 
    } 

    public CreditAccount getCreditAccount() { 
     return cAccount; 
    }    
} 

主营:

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    int choice; 
    int numberOfCustomers = 0; 
    boolean endProgram = false; 
    String bankName; 
    System.out.print("Name of bank: "); 
    bankName = input.next(); 
    Bank bank = new Bank(bankName); 
    String accountId; 

    SavingsAccount acc = new SavingsAccount(); 
    Customer[] customer = bank.getCustomer();    

    do {   
     System.out.println(" " + bank.getBankname() + "\n"); 
     System.out.println(" 1. See balance       "); 
     System.out.println(" 2. Withdraw        "); 
     System.out.println(" 3. Deposit        "); 
     System.out.println(" 4. Transfer        "); 
     System.out.println(" 5. Add interest       "); 
     System.out.println(" 6. Add new customer      "); 
     System.out.println(" 7. Show customers      "); 
     System.out.println(" 8. Change interest      "); 
     System.out.println(" 0. Exit         ");    

     choice = input.nextInt(); 

     switch(choice) { 

      case 1: 
       //code       
       break; 


      case 2: 
       //code 
       break; 


      case 3: 
       //code 
       break; 


      case 4: 
       //code 
       break;     


      case 5: 
       //code 
       break; 


      case 6: //Add customer     
       System.out.println("Choose account: "); 
       System.out.println("1. Savings account"); 
       System.out.println("2. Credit account"); 
       choice = input.nextInt(); 
       switch(choice) { 

        case 1:  //Create savings account 
         System.out.print("Enter amount to deposit: "); 
         double amount = input.nextDouble(); 
         System.out.println("Account number is: " + numberOfCustomers); 
         SavingsAccount savingsAccount = new SavingsAccount(amount, String.valueOf(numberOfCustomers));      
         System.out.print("First name: "); 
         String firstName = input.next(); 
         System.out.print("Last name: "); 
         String lastName = input.next(); 
         System.out.print("Customer number: "); 
         String pnumber = input.next(); 

         Customer newCustomer = new Customer(firstName, lastName, pnumber, savingsAccount); 
         customer[numberOfCustomers] = newCustomer; 
         numberOfCustomers++;    

         break; 

        case 2:  //Create credit account 
         System.out.print("Enter amount to deposit: "); 
         double amount = input.nextDouble(); 
         System.out.println("Account number is: " + numberOfCustomers); 
         CreditAccount creditAccount = new CreditAccount(amount, String.valueOf(numberOfCustomers));      
         System.out.print("First name: "); 
         String firstName = input.next(); 
         System.out.print("Last name: "); 
         String lastName = input.next(); 
         System.out.print("Customer number: "); 
         String pnumber = input.next(); 

         Customer newCustomer = new Customer(firstName, lastName, pnumber, creditAccount); 
         customer[numberOfCustomers] = newCustomer; 
         numberOfCustomers++;      

         break;        
       } 
       break; 


      case 7: 
       //code 
       break; 


      case 8: 
       //code      
       break; 


      case 0: 
       //code 
       break; 
     } 
    } while (!endProgram); 
} 
+1

在客户类,使用''列出的,而不是单个字段。 – 2014-09-20 18:37:44

+1

给客户一个帐户集合,例如一个'ArrayList ',它可以存放多个Account对象。注意,@DaveMorrissey给出了更好的响应,使类型'名单'的为accountList变量,因为它几乎总是最好的“码到接口”,而不是具体的类,但这是另一个讨论的主题。 – 2014-09-20 18:38:00

回答

5

首先重命名帐户AbstractAccount并创建一个帐户界面,您的信用卡和储蓄账户的具体实现。然后在您的客户类中声明一个变量账户,这是一个List账户。像

public class Customer { 
    private String firstName; 
    private String lastName; 
    private String number; 

    private List<Account> accounts; 

东西你的帐户界面看起来像

interface Account { 

    public void deposit(double amount); 

    public void withdraw(double amount); 

    public double getBalance(); 

    public String getAccountId(); 
} 

你现有的类被重构

public abstract AbstractAccount implements Account { 
    .... 
} 

你SavingAccount成为

public SavingAccount extends AbstractAccount { 
    .... 
} 

我会一点点WO发现这个方法在Account类中被声明为抽象的。为什么在两个不同的类别上实施不同的转移?

public abstract void transfer(double amount, Account account); 

我建议这个方法是属于更到的AccountManager类能保证正确的金额贷/从两个账户中扣除。

public void transfer(double amount, Account fromAccount, Account toAccount); 

那么这个类可以检查“fromAccount”有可用的实际传输发生之前转移的验证步骤所需要的资金。

+0

1+,再加上方法,如'addAccount(客户帐户)','removeAccount(客户帐户)','账户getAccount(字符串帐户ID)',... – 2014-09-20 18:42:14

+0

你的意思 私人列表账户;的 INSTEAD 私人SavingsAccount帐户=新SavingsAccount(); private CreditAccount cAccount = new CreditAccount(); 4 – user2939293 2014-09-20 18:45:16

+0

@HovercraftFullOfEels你是指客户类中的那些方法吗? – user2939293 2014-09-20 18:46:47

1

反而得到客户的对象构造SavingsAccount或CreditAccount的, 你可以使用:

Customer(String firstName, String lastName, String number) {  
... 
} 

,并加入到帐号设置方法和cAccount:

Public void setAccount(SavingAccount account) { 
    This.account = account; 
} 

当然,你可以创建一个列表像以前的评论:

和加法:

public void addAccount(Account account) { 
    accounts.add(account); 
} 
+0

好吧,我现在已将客户类更改为: 公共类客户{0} {0} {0}私人字符串名; private String lastName; 私人字符串编号; 私人的ArrayList 账户; 客户(字符串名字,字符串姓氏,字符串号码,帐户的帐户){ this.firstName =名字; this.lastName = lastName; this.number = number; this.accounts = account; } public ArrayList getAccount(){ return accounts; } } – user2939293 2014-09-20 19:17:39

+0

我在this.accounts = account上收到错误消息;它说帐户无法转换为ArrayList 。我能做些什么来处理这个问题?感谢你们! – user2939293 2014-09-20 19:19:43