2014-11-26 4 views
0

Я создаю проект банковской системы.Java - TreeMap Пользовательский ввод

У меня возникли проблемы с вводом пользовательского ввода/сканера с treemap.

Я хочу создать учетную запись с номером счета, имя учетной записи с номером учетной записи, являющимся ключом.

Когда учетная запись была сохранена, я создам связанный список для транзакций, которые будут хранить только последние 6 транзакций.

Может ли кто-нибудь дать мне несколько советов о том, как добавить учетную запись в древовидную карту с пользовательского ввода от в командной строке?

спасибо.

import java.util.*; 
public class Bank { 
    TreeMap < Integer, BankAccount > accounts = new TreeMap < Integer, BankAccount >(); 



    public int openNewAccount(int accountNumber, String holderName, double openingBalance, String holderAddress, String openDate) { 

    } 
    //End of Class 
} 
import java.util.*; 
public class BankAccount { 
    private int accountNumber; 
    private String holderName; 
    private String holderAddress; 
    private String openDate; 
    private double currentBalance; 

    private List <Transaction> latestTransactions = new ArrayList <Transaction>(); 

    public BankAccount(int accountNum, String holderNam, String holderAdd, 
    String openDat) { 
    accountNumber = accountNum; 
    holderName = holderNam; 
    holderAddress = holderAdd; 
    openDate = openDat; 
    } 

    public String getAccountInfo() { 
    return "\nAccount number: " + accountNumber + "\nHolder's name: " + holderName + "\nHolder's address: " + holderAddress + "\nOpen Date: " + openDate + "\nCurrent balance: " + currentBalance; 
    } 

    public int getAccountNum() { 
     return accountNumber; 
    } 
    //End Of Class 

} 
import java.util.*; 
public class Transaction { 
    private List <Transaction> transactions = new ArrayList <Transaction>(); 

    public Transaction(int accountNumber, double currentBalance) { 

    } 

    public void addTransaction(Transaction t) { 
    if (transactions.size() + 1 > 6) 
     transactions.remove(0); // deletes the list element on the first place 

    transactions.add(t); 
    } 

    public void deposit(double currentBalance, double amount) { 

    if (amount <= 0) { 
     System.out.println("Amount to be deposited should be positive"); 
    } else { 
     currentBalance = currentBalance + amount; 
    } 
    } 

    public void withdraw(double amount, double currentBalance) { 
     if (amount <= 0) { 
     System.out.println("Amount to be withdrawn should be positive"); 
     } else { 
     if (currentBalance < amount) { 
      System.out.println("Insufficient balance"); 
     } else { 
      currentBalance = currentBalance - amount; 
     } 
     } 
    } 
    //End of Class 
} 
+2

Чувак .. Вы GOTTO показать нам по крайней мере некоторый код. – TheLostMind

+0

Хорошо. Сожалею. Сделаю. –

+0

Google для сканера и treemap. Вы получите много учебников. – Leo

ответ

1

Я надеюсь, что это поможет вам понять, что делать.

Примечание: Я предоставляю некоторые комментарии внутри, чтобы вы могли понять. прокомментируйте, если все еще неясно.

Bank Класс

Обеспечить сеттер & Getter к вашему Pojo (Plain Old Java Object).

public class Bank { 

    private int bankId; 
    private String bankName; 
    private TreeMap<Integer,BankAccount> bankAccounts = new TreeMap<Integer,BankAccount>(); 

    public Bank(){} 

    public Bank(int bankId,String bankName){ 
     this.bankId = bankId; 
     this.bankName = bankName; 
    } 

    public int getBankId() { 
     return bankId; 
    } 
    public void setBankId(int bankId) { 
     this.bankId = bankId; 
    } 
    public String getBankName() { 
     return bankName; 
    } 
    public void setBankName(String bankName) { 
     this.bankName = bankName; 
    } 
    public TreeMap<Integer, BankAccount> getAccounts() { 
     return bankAccounts; 
    } 
    public void setAccounts(TreeMap<Integer, BankAccount> accounts) { 
     this.bankAccounts = accounts; 
    } 
} 

BankAccount Класс

public class BankAccount { 

    private int accountId; 
    private String holderName; 
    private String holderAddress; 
    private String openDate; 
    private double currentBalance; 

    private List<Transaction> transactions = new ArrayList<Transaction>(); 

    //Provide Blank Constructor 
    public BankAccount(){} 

    //Constructor with an arguments. 
    public BankAccount(int accountNum, String holderNam,double currentBalance, String holderAdd,String openDate) { 
      this.accountId = accountNum; 
      this.holderName = holderNam; 
      this.holderAddress = holderAdd; 
      this.openDate = openDate; 
      this.currentBalance = currentBalance; 
    } 

    // Always Provide Setter and Getters 
    public int getAccountId() { 
     return accountId; 
    } 
    public void setAccountId(int accountId) { 
     this.accountId = accountId; 
    } 
    public String getHolderName() { 
     return holderName; 
    } 
    public void setHolderName(String holderName) { 
     this.holderName = holderName; 
    } 
    public String getHolderAddress() { 
     return holderAddress; 
    } 
    public void setHolderAddress(String holderAddress) { 
     this.holderAddress = holderAddress; 
    } 
    public String getOpenDate() { 
     return openDate; 
    } 
    public void setOpenDate(String openDate) { 
     this.openDate = openDate; 
    } 
    public double getCurrentBalance() { 
     return currentBalance; 
    } 
    public void setCurrentBalance(double currentBalance) { 
     this.currentBalance = currentBalance; 
    } 

    public List<Transaction> getTransactions() { 
     return transactions; 
    } 

    public void setTransactions(List<Transaction> transactions) { 
     this.transactions = transactions; 
    } 

    public String toString(){ 
     return "\nAccount number: " + accountId + "\nHolder's name: " + holderName + "\nHolder's address: " + holderAddress + "\nOpen Date: " + openDate + "\nCurrent balance: " + currentBalance; 
    } 

} 

Класс Transaction

public class Transaction { 

    private int transactionId; 
    private String transactionType; 
    private double transactionAmount; 
    private double moneyBeforeTransaction; 
    private double moneyAfterTransaction; 

    public Transaction(){} 

    public Transaction(int transactionId,String transactionType,double transactionAmount, double moneyBeforeTransaction){ 
     this.transactionId = transactionId; 
     this.transactionType = transactionType; 
     this.transactionAmount = transactionAmount; 
     this.moneyBeforeTransaction = moneyBeforeTransaction; 
    } 

    public int getTransactionId() { 
     return transactionId; 
    } 

    public void setTransactionId(int transactionId) { 
     this.transactionId = transactionId; 
    } 

    public String getTransactionType() { 
     return transactionType; 
    } 

    public void setTransactionType(String transactionType) { 
     this.transactionType = transactionType; 
    } 

    public double getTransactionAmount() { 
     return transactionAmount; 
    } 

    public void setTransactionAmount(double transactionAmount) { 
     this.transactionAmount = transactionAmount; 
    } 

    public double getMoneyBeforeTransaction() { 
     return moneyBeforeTransaction; 
    } 

    public void setMoneyBeforeTransaction(double moneyBeforeTransaction) { 
     this.moneyBeforeTransaction = moneyBeforeTransaction; 
    } 

    public double getMoneyAfterTransaction() { 
     return moneyAfterTransaction; 
    } 

    public void setMoneyAfterTransaction(double moneyAfterTransaction) { 
     this.moneyAfterTransaction = moneyAfterTransaction; 
    } 

    //Override the toString() method of String ? 
    public String toString(){ 
     return "Transaction ID : " + this.transactionId + 
       " Transaction Type : " + this.transactionType + 
       " Transaction Amount : " + this.transactionAmount + 
       " Money Before Transaction : " + this.moneyBeforeTransaction + 
       " Money After Transaction : " + this.moneyAfterTransaction; 
    } 

} 

Всегда разделяйте процесс сделки или любой другой процесс внутри вашей POJO

см. Это.

TransactionProcess Класс

public class TransactionProcess { 

    //Always Provide another class for process. 
    //Pass the bankAccount of the user 
    public void deposit(BankAccount bankAccount, double depositAmount) { 
     //Get the CurrentBalance 
     double currentBalance = bankAccount.getCurrentBalance(); 

     //First Argument : set the Id of transaction 
     //Second Argument : set the Type of Transaction 
     //Third Argument : set the TransactionAmount 
     //Fourth Argument : set the Balance Before the transaction (for record purposes) 
     Transaction transaction = new Transaction(bankAccount.getTransactions().size(),"Deposit",depositAmount,currentBalance); 

     if (depositAmount <= 0) { 
      System.out.println("Amount to be deposited should be positive"); 
     } else { 
      //Set the updated or transacted balance of bankAccount. 
      bankAccount.setCurrentBalance(currentBalance + depositAmount); 
      //then set the MoneyAfterTransaction 
      transaction.setMoneyAfterTransaction(bankAccount.getCurrentBalance()); 
      //after the transaction add it to the list of Transaction of bankAccount 
      bankAccount.getTransactions().add(transaction); 
     } 

    } 

    // Explanation same as above 
    public void withdraw(BankAccount bankAccount,double withdrawAmount) { 
     double currentBalance = bankAccount.getCurrentBalance(); 
     Transaction transaction = new Transaction(bankAccount.getTransactions().size(),"Withdraw",withdrawAmount,currentBalance); 

     if (withdrawAmount <= 0) { 
      System.out.println("Amount to be withdrawn should be positive"); 
     } else { 
      if (currentBalance < withdrawAmount) { 
       System.out.println("Insufficient balance"); 
      } else { 
       bankAccount.setCurrentBalance(currentBalance - withdrawAmount); 
       transaction.setMoneyAfterTransaction(bankAccount.getCurrentBalance()); 
       bankAccount.getTransactions().add(transaction); 
      } 
     } 

    } 

} 

BankProcess Класс

public class BankProcess { 

    // return the Updated list of BankAccounts 
    public TreeMap<Integer,BankAccount> openNewAccount(TreeMap<Integer,BankAccount> bankAccounts,BankAccount bankAccount) { 
     //Get the List of existing bank Accounts the add the new BankAccount to it. 
     bankAccounts.put(bankAccount.getAccountId(), bankAccount); 
     return bankAccounts; 
    } 

} 

И наконец для главного класса Это будет принимать только один банковский счет создать свой собственный процесс, чтобы принять много BankAccount. Я уже даю Идею. Надеюсь, вы это поняли.

Public class MainSample { 

    public static void main(String[] args){ 

     Scanner scan = new Scanner(System.in); 

     BankProcess bankProcess = new BankProcess(); 
     TransactionProcess transactionProcess = new TransactionProcess(); 

     //Adding new Bank & Bank Account 

     // We Already Declare the information about The Back. 
     Bank bank = new Bank(1,"GTS"); 
     BankAccount bankAccount = null; 


     //accepting bankAccount informations. 

     System.out.print("Account Id: "); 
     int accountId = scan.nextInt(); 

     System.out.print("Holder Name: "); 
     String holderName = scan.next(); 

     System.out.print("Opening Balance: "); 
     Double openingBalance = scan.nextDouble(); 

     System.out.print("Holder Address: "); 
     String holderAddress = scan.next(); 

     System.out.print("Open Date: "); 
     String openDate = scan.next(); 

     //Set the information gathered to BankAccount. 
     bankAccount = new BankAccount(accountId,holderName,openingBalance,holderAddress,openDate); 

     //Call the Method of BankProcess openNewAccount 
     //then set the New|Lastest list of bankaccounts 
     bank.setAccounts(bankProcess.openNewAccount(bank.getAccounts(), bankAccount)); 


     //Here is sample Transaction 
     //Deposit. 
     System.out.println("Enter Deposit Amount"); 
     Double depositAmount = scan.nextDouble(); 

     //This will Process the Transaction of user 
     transactionProcess.deposit(bankAccount, depositAmount); 

     //Withdraw 
     System.out.println("Enter Withdraw Amount"); 
     Double withdrawAmount = scan.nextDouble(); 

     transactionProcess.withdraw(bankAccount, withdrawAmount); 

     //END 


     //this will be Executed After you successfully finished all process 
     //this will provide the list of bankAccount in a certain bank. 
     for(Map.Entry<Integer, BankAccount> bankAccounts : bank.getAccounts().entrySet()){ 
      //Use the toString method of BankAccount, this will Provide all the information of user 
      System.out.println(bankAccounts.getValue().toString()); 
     } 

     //This will output the List of the Transactions done by the Current BankAccount(User) 
     for(Transaction transaction : bankAccount.getTransactions()){ 
      System.out.println(transaction.toString()); 
     } 


    } 

} 

результат:

Bank Id: 1 
Bank Name: SampleBank 
Account Id: 1 
Holder Name: SampleName 
Opening Balance: 10000 
Holder Address: SampleAddress 
Open Date: SampleDate 
Enter Deposit Amount 
1000 
Enter Withdraw Amount 
2000 

Account number: 1 
Holder's name: SampleName 
Holder's address: SampleAddress 
Open Date: SampleDate 
Current balance: 9000.0 
Transaction ID : 0 Transaction Type : Deposit Transaction Amount : 1000.0 Money Before Transaction : 10000.0 Money After Transaction : 11000.0 
Transaction ID : 1 Transaction Type : Withdraw Transaction Amount : 2000.0 Money Before Transaction : 11000.0 Money After Transaction : 9000.0 
+0

Большое вам спасибо! Вопрос. Если мне нужен только один банковский счет, как я могу продолжить? Например. Когда программа запускается, она уже начинается в банке, и все пользователи взаимодействуют с этим банком, добавляя учетную запись и т. Д. Что может быть сделано для класса Bank? –

+0

ахм, вы имеете в виду, что хотите получить конкретную банковскую учетную запись? если да, просто вызовите 'bank.getBankAccounts(). get (accountId);' – Secondo

+0

Я только хочу, чтобы пользователь взаимодействовал с банковским счетом, а не создавал новый банк с идентификатором и именем. Там должен быть создан банковский счет, который должен быть сохранен в банке, уже указанном в коде. –

Смежные вопросы