2014-09-20 131 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