단순히 클래스 배열과 MVC로 클래스만 분리한 코드 입니다
import Controller.ATM_Controller;
public class main {
public static void main(String[] args) {
new ATM_Controller();
}
}
package Controller;
import java.util.*;
import Model.AccountDAO;
import Model.MemberDAO;
import View.ATM_Menu;
public class ATM_Controller {
Scanner sc;
MemberDAO memDAO;
AccountDAO accDAO;
ATM_Menu menu;
public ATM_Controller() {
init();
run();
}
void init() {
sc = new Scanner(System.in);
memDAO = new MemberDAO();
accDAO = new AccountDAO();
menu = new ATM_Menu();
}
/* 메뉴출력 */
void printMenu() {
menu.getMenu(memDAO.getMemberCount(), memDAO.getLogintID(), memDAO, accDAO);
}
/* 회원가입 */
void joinMember() {
System.out.print("[가입] ID 입력 : ");
String id = sc.nextLine();
if(id.equals("")) { //공백 입력 방지
System.err.println("[오류] 최소 한 글자 이상 입력해 주세요!!");
}
else if(memDAO.isValidId(id)) {
System.out.print("[가입] PW 입력 : ");
String pw = sc.nextLine();
if(pw.equals("")) { //공백 입력 방지
System.err.println("[오류] 최소 한 글자 이상 입력해 주세요!!");
}
else {
System.out.print("[가입] 이름 입력 : ");
String name = sc.nextLine();
memDAO.addMember(id, name);
accDAO.addAccount(pw, id, memDAO.getMemberCount()-1);
System.out.println("[메시지] 가입을 축하합니다.");
}
}
else {
System.err.println("ID가 중복됩니다.");
}
}
/* 로그인 */
void loginMember() {
System.out.print("[로그인] ID 입력 : ");
String id = sc.nextLine();
if(!memDAO.isValidId(id)) {
System.out.print("[로그인] PW 입력 : ");
String pw = sc.nextLine();
if(accDAO.isValidPw(id, pw)) {
memDAO.setLoginID(id);
System.out.println("[메시지] " + id + "님 환영합니다.");
}
else {
System.err.println("[오류] PW가 일치하지 않습니다.");
}
}
else {
System.err.println("[오류] ID가 일치하지 않습니다.");
}
}
/* 입금 */
void deposit() {
System.out.print("[입금] 입금할 금액을 입력하세요 : ");
int money = sc.nextInt();
if(money < 1000) {
System.err.println("[오류] 1000원 이상 금액입력");
}
else {
accDAO.setMoney(memDAO.getLogintID(), money);
System.out.println("[메시지] 입금을 완료하였습니다.");
}
}
/* 이체 */
void transfer() {
System.out.print("[이체] 계좌번호를 입력하세요 : ");
String accNum = sc.nextLine();
if(accDAO.isValidAccNum(accNum)) {
if(accDAO.getId(accNum).equals(memDAO.getLogintID())) {
System.err.println("[오류] 본인 계좌에는 이체할 수 없습니다!!");
}
else {
System.out.print("[이체] 이체할 금액을 입력하세요 : ");
int money = sc.nextInt();
if(accDAO.getMoney(memDAO.getLogintID()) < money) {
System.err.println("[오류] 잔액이 부족합니다.");
}
else {
accDAO.setMoney(memDAO.getLogintID(), -money); //이체 하는 사람 잔액 조정
accDAO.setMoney(accDAO.getId(accNum), money); //이체 받는 사람 잔액 조정
}
}
}
else {
System.err.println("[오류] 계좌번호를 확인해주세요.");
}
}
/* 잔액조회 */
void balanceCheck() {
System.out.println("[잔액] 잔액은 " + accDAO.getMoney(memDAO.getLogintID()) + "원 입니다.");
}
/* 로그아웃 */
void logOut() {
memDAO.setLoginID(null);
System.out.println("[메시지] 로그아웃되었습니다.");
}
/* 탈퇴 */
void deleteMember() {
accDAO.deleteAccount(memDAO.getLogintID());
memDAO.deleteMember(memDAO.getLogintID());
System.out.println("[메시지] 탈퇴되었습니다. 이용해주셔서 감사합니다.");
}
void run() {
while(true) {
printMenu();
try {
int sel = sc.nextInt();
sc.nextLine(); //메뉴 선택 후 Enter 처리
if(sel == 1 && memDAO.getLogintID() == null) {
joinMember(); //회원가입
}
else if(sel == 2 && memDAO.getLogintID() == null && 0 < memDAO.getMemberCount()) {
loginMember(); //로그인
}
else if(sel == 3 && memDAO.getLogintID() != null) {
deposit(); //입금
}
else if(sel == 4 && memDAO.getLogintID() != null) {
transfer(); //이체
}
else if(sel == 5 && memDAO.getLogintID() != null) {
balanceCheck(); //잔액조회
}
else if(sel == 6 && memDAO.getLogintID() != null) {
logOut(); //로그아웃
}
else if(sel == 7 && memDAO.getLogintID() != null) {
deleteMember(); //탈퇴
}
else if(sel == 0) {
System.out.println("종료 합니다.");
break;
}
else if(sel <0 || 7 < sel) {
System.err.println("[오류] 메뉴 선택 오류");
}
else {
if(memDAO.getMemberCount() == 0) {
System.err.println("[오류] 회원가입 먼저 해주세요!!");
}
else if(memDAO.getLogintID() == null) {
System.err.println("[오류] 로그인 먼저 해주세요!!");
}
else {
System.err.println("[오류] 로그아웃 먼저 해주세요!!");
}
}
}catch (InputMismatchException e) {
System.err.println("[오류] 숫자만 입력하세요!!");
} finally {
sc.nextLine();
}
}
}
}
package View;
import Model.AccountDAO;
import Model.MemberDAO;
public class ATM_Menu {
public void getMenu(int mem_Count, String id, MemberDAO memDAO, AccountDAO accDAO) {
System.out.println();
System.out.println("[회원 수 : " + mem_Count + "명]");
if(0 < mem_Count) {
for(int i=0; i<mem_Count; i++) {
System.out.println(memDAO.getMemberNum(i) + " " + memDAO.getMemberName(i) + "(" + accDAO.getMoney(i) + "원)");
}
}
System.out.println("------------------");
System.out.print("[접속자] : ");
if(id == null) {
System.out.println("없음");
}
else {
System.out.println(id);
}
System.out.println("------------------");
System.out.println("=== ATM ===");
if(id == null) {
System.out.println("1.회원가입\n2.로그인\n0.종료");
}
else {
System.out.println("3.입금\n4.이체\n5.잔액조회\n6.로그아웃\n7.탈퇴\n0.종료");
}
System.out.print(">");
}
}
package Model;
public class Member {
private int mem_Number;
private String id;
private String name;
protected int getMem_Number() {
return mem_Number;
}
protected void setMem_Number(int mem_Number) {
this.mem_Number = mem_Number;
}
protected String getId() {
return id;
}
protected void setId(String id) {
this.id = id;
}
protected String getName() {
return name;
}
protected void setName(String name) {
this.name = name;
}
}
package Model;
import java.util.ArrayList;
public class MemberDAO {
Member[] memberList;
int mem_Count; //회원수
String login_ID; //로그인된 ID
public MemberDAO() {
memberList = new Member[1];
mem_Count = 0;
login_ID = null;
}
/* 회원가입 */
public void addMember(String id, String name){
Member m = new Member();
if(mem_Count == 0) {
m.setMem_Number(1001);
}
else {
//마지막 멤버번호
int lastMemberNumber = memberList[memberList.length-1].getMem_Number();
m.setMem_Number(lastMemberNumber+1);
}
m.setId(id);
m.setName(name);
if(mem_Count == 0) {
memberList[mem_Count] = m;
}
else {
Member[] tempList = new Member[memberList.length+1];
for(int i=0; i<memberList.length; i++) {
tempList[i] = memberList[i];
}
tempList[tempList.length-1] = m;
memberList = tempList;
}
mem_Count = memberList.length;
}
/* ID확인 */
public boolean isValidId(String id) {
if(mem_Count == 0) {
return true;
}
for(Member m : memberList) {
if(m.getId().equals(id)) {
return false;
}
}
return true;
}
/* 회원수 */
public int getMemberCount() {
return mem_Count;
}
/* 로그인 ID 추출 */
public String getLogintID() {
return login_ID;
}
/* 로그인 후 로그인된 ID 등록 */
public void setLoginID(String id) {
login_ID = id;
}
/* 메뉴용 회원번호 추출 */
public int getMemberNum(int i) {
return memberList[i].getMem_Number();
}
/* 메뉴용 회원이름 추출 */
public String getMemberName(int i) {
return memberList[i].getName();
}
/* 멤버 삭제 */
public void deleteMember(String id) {
Member[] tempList = new Member[memberList.length-1];
for(int i=0; i<memberList.length; i++) {
if(memberList[i].getId().equals(id)) {
memberList[i] = null;
for(int j=i; j<memberList.length-1; j++) {
tempList[j] = memberList[j+1];
}
break;
}
else {
tempList[i] = memberList[i];
}
}
memberList = tempList;
login_ID = null;
mem_Count--;
}
}
package Model;
public class Account {
private String acc_Number;
private String password;
private int money;
private String mem_ID;
protected String getAcc_Number() {
return acc_Number;
}
protected void setAcc_Number(String acc_Number) {
this.acc_Number = acc_Number;
}
protected String getPassword() {
return password;
}
protected void setPassword(String password) {
this.password = password;
}
protected int getMoney() {
return money;
}
protected void setMoney(int money) {
this.money = money;
}
protected String getMem_ID() {
return mem_ID;
}
protected void setMem_ID(String mem_ID) {
this.mem_ID = mem_ID;
}
}
package Model;
public class AccountDAO {
Account[] accountList;
public AccountDAO() {
accountList = new Account[1];
}
/* 계좌 추가 */
public void addAccount(String pw, String id, int mem_Count) {
Account acc = new Account();
if(mem_Count == 0) {
acc.setAcc_Number("111111111");
}
else {
//마지막 멤버 계좌
int lastAccountNumber = Integer.parseInt(accountList[accountList.length-1].getAcc_Number());
//마지막 멤버 계좌에 111111111 증가 후 문자열로 변환
String accNumber = Integer.toString(lastAccountNumber+111111111);
acc.setAcc_Number(accNumber);
}
acc.setPassword(pw);
acc.setMoney(1000);
acc.setMem_ID(id);
if(mem_Count == 0) {
accountList[mem_Count] = acc;
}
else {
Account[] tempList = new Account[accountList.length+1];
for(int i=0; i<accountList.length; i++) {
tempList[i] = accountList[i];
}
tempList[tempList.length-1] = acc;
accountList = tempList;
}
}
/* 비밀번호 확인 */
public boolean isValidPw(String id, String pw) {
for(Account acc : accountList) {
if(acc.getMem_ID().equals(id) && acc.getPassword().equals(pw)) {
return true;
}
}
return false;
}
/* 메뉴용 잔액 확인 */
public int getMoney(int i) {
return accountList[i].getMoney();
}
/* 잔액확인 (오버로딩) */
public int getMoney(String id) {
for(int i=0; i<accountList.length; i++) {
if(accountList[i].getMem_ID().equals(id)) {
return accountList[i].getMoney();
}
}
return 0;
}
/* 입금 및 이체 */
public void setMoney(String id, int money) {
for(int i=0; i<accountList.length; i++) {
if(accountList[i].getMem_ID().equals(id)) {
accountList[i].setMoney(accountList[i].getMoney()+money);
}
}
}
/* 계좌번호 확인 */
public boolean isValidAccNum(String accNum) {
for(Account acc : accountList) {
if(acc.getAcc_Number().equals(accNum)) {
return true;
}
}
return false;
}
/* 이체시 계좌와 일치한 ID추출 */
public String getId(String accNum) {
for(int i=0; i<accountList.length; i++) {
if(accountList[i].getAcc_Number().equals(accNum)) {
return accountList[i].getMem_ID();
}
}
return null;
}
/* 계좌삭제 */
public void deleteAccount(String id) {
Account[] tempList = new Account[accountList.length-1];
for(int i=0; i<accountList.length; i++) {
if(accountList[i].getMem_ID().equals(id)) {
accountList[i] = null;
for(int j=i; j<accountList.length-1; j++) {
tempList[j] = accountList[j+1];
}
break;
}
else {
tempList[i] = accountList[i];
}
}
accountList = tempList;
}
}