JAVA

java_객체배열(실습예제/회원관리)_22.05.31(day10)

양빵빵 2022. 5. 31. 17:56

 

=============== 아직 정리중..

 

class Member

package com.kh.hw.member.model.vo;

    public class Member {

        private String id;
        private String name;
        private String password;
    private String email;
    private char gender;
    private int age;

    public Member() {

    }


    public Member(String id, String name, String password, String email, char gender, int age) {

        this.id = id;
        this.name = name;
        this.password = password;
        this.email = email;
        this.gender = gender;
        this.age = age;
    }


    public String inform() {
        return String.format("# %s | %s | %s | %s | %c | %d "
                , id, name, password, email, gender, age);
    }

    public String getId() {
        return id;
    }

    public boolean setId(String id) {
        if (id.length() < 7 && id.length() > 2) {
            return true;
        } else {
            return false;
        }
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

 

class MemberController

package com.kh.hw.member.controller;

import com.kh.hw.member.model.vo.Member;

public class MemberController {

    private Member[] m = new Member[SIZE];
    public static final int SIZE = 10;

    public MemberController() {
        m[0] = new Member("a", "김철수", "1234", "abc@naver.com", 'M', 24);
        m[1] = new Member("b", "김철수", "1234", "abc@naver.com", 'M', 24);
        m[2] = new Member("c", "김철수", "1234", "abc@naver.com", 'M', 24);
        m[3] = new Member("d", "박영희", "4321", "def@naver.com", 'F', 32);
        m[4] = new Member("e", "김철수", "6544", "ghi@naver.com", 'M', 44);
    }


    /**
     * 실제로 배열에 저장되어 있는 회원객체의 숫자를 세는 메서드
     *
     * @return count - 실제 저장된 회원의 수
     */
    public int existMemberNum() {
        int mcount = 0; // 실제 저장된 회원의 수
        for (Member member : m) {
            if (member == null) {
                break;
            }
            mcount++;
        }
        return mcount;
    }

    /**
     * 아이디 중복을 체크하는 메서드
     *
     * @param inputId - 중복을 확인할 사용자의 입력 아이디
     * @return 중복되었으면 true, 아니면 false
     */
    public boolean checkId(String inputId) {
        return findIndexById(inputId) != -1;
    }


    //멤버 배열 리턴
    public Member[] printAll() {
        return m;
    }

    //회원정보를 배열 m에 저장하는 메서드
    public void insertMember(String id, String name, String password
            , String email, char gender, int age) {
        int count = existMemberNum();
        m[count] = new Member(id, name, password, email, gender, age);
    }

    /**
     * 아이디를 입력하면 해당 회원 객체를 리턴
     *
     * @param inputId - 검색할 회원의 아이디
     * @return Member - 찾은 경우 해당 아이디를 가진 회원의 전체정보를 가진 객체
     * - 못 찾은 경우 null 리턴
     */

    public Member searchId(String inputId) {
        int index = findIndexById(inputId);
        return (index != -1) ? m[index] : null;
    }

   /* public Member searchId(String inputId) {
        if (findIndexById(inputId) != -1)
        return m[findIndexById(inputId)];
        return null;
    }*/

    /**
     * @param name - 검색할 회원의 이름
     * @return 동명이인 포함 해당 이름과 일치하는 모든 회원정보 배열
     */
    public Member[] searchName(String name) {
        Member[] nameArr = new Member[existMemberNum()];
        int count = 0;
        for (int i = 0; i < existMemberNum(); i++) {
            if (name.equals(m[i].getName())) {
                nameArr[count] = m[i];
                count++;
            }
        }
        Member[] temp = new Member[count];
        for (int j = 0; j < count; j++) {
            temp[j] = nameArr[j];
        }
        nameArr = temp;
        return nameArr;
    }


    /**
     * 회원의 비밀번호를 변경하는 메소드
     *
     * @param id          - 변경을 요청한 회원의 아이디
     * @param newPassword - 새로운 비밀번호
     * @return - 변경 성공 여부
     */
    public boolean updatePassword(String id, String newPassword) {
        if (checkId(id)) {
            m[findIndexById(id)].setPassword(newPassword);
            return true;
        }
        return false;
    }

    /**
     * @param id      - 수정할 회원의 아이디
     * @param newName - 새롭게 수정될 새로운 이름
     * @return 수정 성공시 true
     */
    public boolean updateName(String id, String newName) {
            if (checkId(id)) {
                m[findIndexById(id)].setName(newName);
                return true;
            }
            return false;
    }

    /**
     * @param id       - 수정할 회원의 아이디
     * @param newEmail - 새롭게 수정될 새로운 이메일
     * @return 수정 성공시 true
     */
    public boolean updateEmail(String id, String newEmail) {
        if (checkId(id)) {
            m[findIndexById(id)].setEmail(newEmail);
            return true;
        }
        return false;
    }

    /**
     * 아이디를 통해 회원배열에서 특정 회원이 저장된 인덱스를 알려주는 기능
     *
     * @param id - 찾을 회원의 아이디값
     * @return 찾은 회원의 인덱스값, 못찾을 시 -1 리턴
     */
    private int findIndexById(String id) {
        int index = -1;
        for (int i = 0; i < existMemberNum(); i++) {
            if (id.equals(m[i].getId())) {
                index = i;
                break;
            }
        }
        return index;
    }

    //회원정보 하나를 삭제하는 메서드

    /**
     * @param id - 삭제를 원하는 회원의 아이디정보
     * @return 삭제성공시 true, 회원이 존재하지 않아 실패시 false
     */
    public boolean delete(String id) {
        int delIdx = findIndexById(id); // 삭제할 인덱스
        if(delIdx != -1) {
        for (int i = delIdx; i < existMemberNum()-1 ; i++) {
            m[i] = m[i + 1];
        }
        m[existMemberNum()-1] = null;
        return true;
        }
        return false;
    }

    //회원정보 전체 삭제
    public void delete() {
        int count = existMemberNum();
        for (int i = 0; i < count; i++) {
            m[i] = null;
        }
    }

    /*public int existMemberNum() {
        int mcount = 0; // 실제 저장된 회원의 수
        for (Member member : m) {
            if (member == null) {
                break;
            }
            mcount++;
        }
        return mcount;
    }*/
}

 

class MemberMenu

package com.kh.hw.member.view;

import com.kh.hw.member.controller.MemberController;
import com.kh.hw.member.model.vo.Member;
import day09.objarr.Account;
import day09.objarr.Person;

import java.util.Scanner;

public class MemberMenu {

    private Scanner sc = new Scanner(System.in);

    private MemberController mc = new MemberController();

    // 메인 메뉴 출력 메서드
    public void mainMenu() {

        while (true) {
            System.out.printf("\n# 최대 등록 가능한 회원수는 %d명입니다.\n", mc.SIZE);

            int count = mc.existMemberNum();
            System.out.printf("# 현재 등록된 회원 수는 %d명입니다.\n", count);

            System.out.println("======================================");

            System.out.println("# 1. 새 회원 등록");
            System.out.println("# 2. 회원 검색");
            System.out.println("# 3. 회원 정보 수정");
            System.out.println("# 4. 회원 삭제");
            System.out.println("# 5. 모두 출력");
            System.out.println("# 9. 끝내기");

            System.out.print("\n# 메뉴 번호: ");
            int menu = sc.nextInt();

            switch (menu) {
                case 1:
                    // 회원가입 진행
                    insertMember();
                    break;
                case 2:
                    // 회원 검색
                    searchMember();
                    break;
                case 3:
                    // 정보 수정
                    updateMember();
                    break;
                case 4:
                    // 회원 탈퇴
                    deleteMember();
                    break;
                case 5:
                    // 전체 조회 출력
                    printAll();
                    break;
                case 9:
                    // 프로그램 종료
                    System.out.println("프로그램을 종료합니다.");
                    System.exit(0); // 프로세스 종료
                    break;
                default:
                    System.out.println("잘못 입력했습니다. 다시 입력하세요!");
            }
        }
    }

    // 4번 메뉴 처리 메서드
    private void deleteMember() {
        System.out.println("\n======= 회원 정보 삭제 =======");
        System.out.println("# 1. 특정 회원 삭제하기");
        System.out.println("# 2. 모든 회원 삭제하기");
        System.out.println("# 9. 메인으로 돌아가기");

        int menu = inputNumber("- 메뉴 입력: ");
        switch (menu) {
            case 1:
                delete();
                break;
            case 2:
                deleteAll();
                break;
            case 9:
                return;
            default:
                System.out.println("메뉴를 잘못 입력했습니다.");
        }

    }

    private void delete() {

        String targetId = inputStr("\n# 삭제 대상 아이디:");

        if (mc.checkId(targetId)) {
            System.out.println("\n# 회원 정보가 삭제됩니다. [Y/N]");
            String answer = inputStr(">> ");

            switch (answer.toUpperCase().charAt(0)) {
                case 'Y': case 'ㅛ':
                    mc.delete(targetId);
                    System.out.printf("\n- [%s]회원님의 데이터가 삭제되었습니다.\n", targetId);
                    break;
                case 'N': case 'ㅜ':
                    System.out.println("\n- 삭제를 취소합니다.");
                    break;
            }

        }
    }

    private void deleteAll() {

        System.out.println("\n# 모든 정보가 삭제됩니다. [Y/N]");
        String answer = inputStr(">> ");

        switch (answer.toUpperCase().charAt(0)) {
            case 'Y': case 'ㅛ':
                mc.delete();
                System.out.println("\n- 모든 데이터가 삭제되었습니다.");
                break;
            case 'N': case 'ㅜ':
                System.out.println("\n- 삭제를 취소합니다.");
                break;
        }
    }

    // 3번 메뉴 처리 메서드
    private void updateMember() {

        System.out.println("\n======= 회원 정보 수정 =======");
        System.out.println("# 1. 비밀번호 수정하기");
        System.out.println("# 2. 이름 수정하기");
        System.out.println("# 3. 이메일 수정하기");
        System.out.println("# 9. 메인으로 돌아가기");

        int menu = inputNumber("- 메뉴 입력: ");
        switch (menu) {
            case 1:
                // 비밀번호 수정
                updatePassword();
                break;
            case 2:
                // 이름 수정
                updateName();
                break;
            case 3:
                // 이메일 수정
                updateEmail();
                break;
            case 9:
                return;
            default:
                System.out.println("메뉴를 잘못 입력했습니다.");
        }
    }

    private void updatePassword() {

        String id = inputStr("- 아이디: ");
        // 원래 비밀번호
        String oldPw = mc.searchId(id).getPassword();
        String newPw = inputStr("- 새로운 비밀번호("+ oldPw +"): ");

        if (mc.updatePassword(id, newPw)) {
            System.out.println("\n비밀번호 수정 완료!");
        } else {
            System.out.println("\n수정 실패!");
        }
    }

    private void updateName() {

        String id = inputStr("- 아이디: ");
        String newName = inputStr("- 새로운 이름: ");

        if (mc.updateName(id, newName)) {
            System.out.println("\n이름 수정 완료!");
        } else {
            System.out.println("\n수정 실패!");
        }

    }

    private void updateEmail() {
        String id = inputStr("- 아이디: ");
        String newEmail = inputStr("- 새로운 이메일: ");

        if (mc.updateEmail(id, newEmail)) {
            System.out.println("\n이메일 수정 완료!");
        } else {
            System.out.println("\n수정 실패!");
        }

    }

    // 2번 메뉴 처리 메서드
    private void searchMember() {

        System.out.println("\n======= 회원 정보 검색 =======");
        System.out.println("# 1. 아이디로 검색하기");
        System.out.println("# 2. 이름으로 검색하기");
        System.out.println("# 9. 메인으로 돌아가기");

        int menu = inputNumber("- 메뉴 입력: ");
        switch (menu) {
            case 1:
                // 아이디 검색
                searchId();
                break;
            case 2:
                // 이름 검색
                searchName();
                break;
            case 9:
                return;
            default:
                System.out.println("메뉴를 잘못 입력했습니다.");
        }
    }

    // 메뉴 2-1번 처리
    private void searchId() {

        String targetId = inputStr("- 조회할 아이디: ");
        Member member = mc.searchId(targetId);
        if (member != null) {
            System.out.println("\n=========== 검색된 회원 정보 ============");
            System.out.println(member.inform());
        } else {
            System.out.println("\n- 존재하는 회원이 아닙니다.");
        }
    }

    // 메뉴 2-2번 처리
    private void searchName() {

        String targetName = inputStr("- 조회할 이름: ");
        Member[] members = mc.searchName(targetName);
        if (members.length > 0) {
            System.out.println("\n=========== 검색된 회원 정보 ============");
            for (Member m : members) {
                System.out.println(m.inform());
            }
        } else {
            System.out.println("\n- 존재하는 회원이 아닙니다.");
        }
    }


    // 5번 메뉴 처리 메서드
    private void printAll() {

        Member[] members = mc.printAll();

        System.out.println("\n========== 전체 회원 정보 =============");
        for (Member m : members) {
            if (m == null) break;
            System.out.println(m.inform());
        }

    }

    // 1번 메뉴 처리 메서드
    private void insertMember() {

        System.out.println("\n# 새 회원을 등록합니다.");

        String id = null;
        while (true) {
            id = inputStr("- 아이디: ");
            if (!mc.checkId(id)) break;
            System.out.println("- 중복된 아이디입니다!");
        }
        String name = inputStr("- 이름: ");
        String password = inputStr("- 비밀번호: ");
        String email = inputStr("- 이메일: ");
        char gender = inputStr("- 성별(M/F): ").toUpperCase().charAt(0);
        int age = inputNumber("- 나이: ");

        mc.insertMember(id, name, password, email, gender, age);

        System.out.println("\n# 회원가입 성공!");


    }

    // 입력처리를 간단하게 만드는 메서드
    private String inputStr(String msg) {
        System.out.printf(msg);
        return sc.next();
    }
    private int inputNumber(String msg) {
        System.out.printf(msg);
        return sc.nextInt();
    }
}

 

class Run

package com.kh.hw.member.run;

import com.kh.hw.member.view.MemberMenu;

public class Run {

    public static void main(String[] args) {
        MemberMenu mm = new MemberMenu();
        mm.mainMenu();


    }

}