package jp.co.ncad.gw.erd.logic; import java.util.ArrayList; import java.util.List; import jp.co.ncad.gw.erd.model.AccountManagementModel; import jp.co.ncad.gw.erd.model.AccountModel; import jp.co.ncad.gw.erd.model.AccountTypeModel; import jp.co.ncad.gw.erd.model.JavaBankModel; import jp.co.ncad.gw.erd.model.UserModel; public class JavaBankLogic { /** Java銀行 */ private JavaBankModel javaBank; /** ユーザ */ private List users; /** 口座の種類 */ private List accountTypes; /** 口座 */ private List accounts; /** 口座登録数 */ private int accountEntryNumber; /** 口座管理 */ private List accountMgts; /** * コンストラクタ
* 初期化処理 */ public JavaBankLogic() { javaBank = new JavaBankModel(); users = new ArrayList(); accountTypes = new ArrayList(); // 普通預金を口座の種類に登録 AccountTypeModel ordinaryDeposit = new AccountTypeModel(); ordinaryDeposit.setAccountTypeNumber(1); ordinaryDeposit.setAccountTypeName("普通預金"); accountTypes.add(ordinaryDeposit); // 定期預金を口座の種類に登録 AccountTypeModel timeSavings = new AccountTypeModel(); timeSavings.setAccountTypeNumber(2); timeSavings.setAccountTypeName("定期預金"); accountTypes.add(timeSavings); accountEntryNumber = 0; // 口座登録数を0に初期化 accounts = new ArrayList(); accountMgts = new ArrayList(); } /** * 銀行名を返す * * @return 銀行名 */ public String getJavaBankName() { return javaBank.getBackName(); } /** * 銀行住所を返す * * @return 銀行住所 */ public String getJavaBankAddress() { return javaBank.getAddress(); } /** * ユーザを登録する
* 但し、既にユーザが登録されている場合は失敗とする * * @param user ユーザ * @return 成功:true又は失敗:false */ public boolean addUser(UserModel user) { if (isUser(user.getUserID())) { // 既に登録されている場合 System.err.println("ユーザは既に登録されています"); return false; } users.add(user); // ユーザを追加 AccountManagementModel accountMgt = new AccountManagementModel(); accountMgt.setUserID(user.getUserID()); // ユーザIDを設定 accountMgts.add(accountMgt); return true; } /** * ユーザIDに一致するユーザモデルを返す
* 但し、ユーザが存在しない場合にはnullを返す * * @param userID ユーザID * @return 存在する:ユーザモデル、存在しない:null */ public UserModel getUser(String userID) { for (int i = 0; i < users.size(); i++) { UserModel user = users.get(i); if (user.getUserID().equals(userID)) { // ユーザIDが一致した場合 return user; } } return null; } /** * 銀行が管理しているユーザにユーザIDが登録されているか * * @param userID ユーザID * @return 登録済み:true又は未登録:false */ private boolean isUser(String userID) { for (int i = 0; i < accountMgts.size(); i++) { AccountManagementModel accountMgt = accountMgts.get(i); if (accountMgt.getUserID().equals(userID)) { // ユーザIDが登録されている場合 return true; } } return false; } /** * 口座の種類名から口座の種類番号を返す
* 口座の種類名が一致しない場合は-1を返す * * @param accountTypeName 口座の種類名 * @return 一致:口座番号、一致しない:-1 */ private int getAccountTypeNumber(String accountTypeName) { for (int i = 0; i < accountTypes.size(); i++) { AccountTypeModel accountType = accountTypes.get(i); if (accountType.getAccountTypeName().equals(accountTypeName)) { // 口座の種類が存在する場合 return accountType.getAccountTypeNumber(); } } return -1; } /** * 口座番号から口座の種類名を返す
* 口座番号が一致しない場合はnullを返す * * @param accountNumber 口座番号 * @return 一致:口座の種類名、一致しない:null */ public String getAccountTypeName(int accountNumber) { for (int i = 0; i < accounts.size(); i++) { AccountModel account = accounts.get(i); if (account.getAccountNumber() == accountNumber) { // 口座番号が一致した場合 for (int j = 0; j < accountTypes.size(); i++) { AccountTypeModel accoutType = accountTypes.get(i); if (accoutType.getAccountTypeNumber() == account .getAccountTypeNumber()) { // 口座の種類番号が一致した場合 return accoutType.getAccountTypeName(); } } } } return null; } /** * ユーザIDから口座番号を返す
* 但し、ユーザIDが一致しない場合は-1を返す * * @param userID ユーザID * @return 一致:口座番号、一致しない:-1 */ public int getAccountNumber(String userID) { for (int i = 0; i < accountMgts.size(); i++) { AccountManagementModel accountMgt = accountMgts.get(i); if (accountMgt.getUserID().equals(userID)) { // ユーザIDが一致する場合 return accountMgt.getAccountNumber(); } } return -1; } /** * 新規に口座を開設
* ユーザ情報は、ユーザIDから取得 * * @param userID ユーザID * @return 成功:true、失敗:false */ public boolean newAccount(String userID, String accountTypeName) { // ユーザが登録されているかをチェック if (!isUser(userID)) { // 登録されていない場合 System.err.println(userID + "はユーザの登録が行われていません"); return false; } int accountTypeNumber = getAccountTypeNumber(accountTypeName); // 口座の種類名を取得 // 口座の種類名が存在するかをチェック if (accountTypeNumber == -1) { // 口座の種類名が存在していない場合 System.err.println(accountTypeName + "が存在しません。存在する口座の種類名を指定下さい"); return false; } // 新規に口座を新設 accountEntryNumber++; // 口座登録数を1つ増やす AccountModel account = new AccountModel(); account.setAccountNumber(accountEntryNumber); // 口座番号を登録 account.setAccountTypeNumber(accountTypeNumber); // 口座の種類を登録 accounts.add(account); // 口座を登録 AccountManagementModel accountMgt = getAccountManagement(userID); accountMgt.setAccountNumber(account.getAccountNumber()); return true; } /** * 口座番号に一致する口座の預金金額を追加
* 一致しない場合には、何も行わない * * @param accountNumber 口座番号 * @param saving 預金金額 */ public void addSaving(int accountNumber, long saving) { for (int i = 0; i < accounts.size(); i++) { AccountModel account = accounts.get(i); if (account.getAccountNumber() == accountNumber) { // 口座番号が一致した場合 account.addSaving(saving); } } } /** * ユーザIDから口座管理を返す * * @param userID ユーザID * @return 口座管理 */ private AccountManagementModel getAccountManagement(String userID) { for (int i = 0; i < accountMgts.size(); i++) { AccountManagementModel accountMgt = accountMgts.get(i); if (accountMgt.getUserID().equals(userID)) { // ユーザIDが一致した場合 return accountMgt; } } return null; } /** * 口座番号に一致する口座の預金金額を返す
* 但し、一致しない場合には-1を返す * * @param accountNumber 口座番号 * @return 一致:預金金額、一致しない:-1 */ public long getSaving(int accountNumber) { for (int i = 0; i < accounts.size(); i++) { AccountModel account = accounts.get(i); if (account.getAccountNumber() == accountNumber) { // 口座番号が一致した場合 return account.getSaving(); } } return -1; } }