Java/JSCODE - Java

7회차 - 미션

YooKyungHun 2023. 3. 6. 21:12

문제

 

7회차 미션

🎯 헬스장 회원 관리 프로그램 만들기 - 1단계

jscode.notion.site

 

주안점

  • Main 과 Member 외에 회원 정보를 저장할 저장소(MemberRepository)라는 클래스 활용
  • isRegistered, isRegisterFailed 로 예외처리를 하는 것이 아니라, try - catch 문의 활용

 

어려웠던 점

  • 중복 이메일을 체크하기 위해 Member 의 인스턴스마다 getEmail() 을 사용해서 비교할지,
    이메일만 담는 ListArray 를 만들어 contains() 를 사용할지 고민하였으나 전자를 선택.
  • MemberRepository 는 List<Member> members 의 속성을 가지는데 
    아래의 코드를 사용하지 않아서 getter 를 아무리 사용해도 None 이 반환되었음.
    List 를 속성으로 가질 경우, 빈 리스트라도 넣어주어야 정상적으로 작동함.
더보기
public class Mission7_1 {
    public static void main(String[] args) {
        List<Member> members = new ArrayList<>();
        MemberRepository memberRepository = new MemberRepository(members);
    }
}
public class MemberRepository {

    private List<Member> members;
}

 

풀이

더보기
package Class7.Mission;

import java.util.Scanner;

public class Mission7_2 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        MemberRepository memberRepository = new MemberRepository();

        while (true) {
            System.out.println("원하시는 번호를 입력해주세요.");
            System.out.println("1. 회원 등록");
            System.out.println("2. 회원 조회");

            String input = scanner.nextLine();

            // 종료조건
            if (input.equals("exit")) {
                break;
            }

            if (input.equals("1")) {
                System.out.println("이메일을 입력해주세요");
                String memberEmail = scanner.nextLine();
                System.out.println("이름을 입력해주세요");
                String memberName = scanner.nextLine();
                System.out.println("나이을 입력해주세요");
                String tmp = scanner.nextLine();
                int memberAge = Integer.parseInt(tmp);

                Member newMember = new Member(memberEmail, memberName, memberAge);

                try {
                    memberRepository.registerMember(newMember);
                    System.out.println("회원등록이 성공적으로 완료되었습니다.");
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }


            } else if (input.equals("2")) {
                System.out.println("조회하려는 회원의 이름을 입력해주세요.");
                String memberName = scanner.nextLine();

                try {
                    Member foundMember = memberRepository.findOneByName(memberName);
                    System.out.println(memberName + "님의 이메일은 " + foundMember.getEmail() + "이고, 나이는 "
                        + foundMember.getAge() + "입니다.");
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }
            }
        }
    }
}

 

package Class7.Mission;

import java.util.ArrayList;
import java.util.List;

public class MemberRepository {

    private List<Member> members = new ArrayList<>();

    public void registerMember(Member member) {
        for (int i = 0; i < members.size(); i++) {
            Member foundMember = members.get(i);
            if (foundMember.getEmail().equals(member.getEmail())) {
                throw new IllegalArgumentException("이미 등록된 이메일이어서 회원 등록에 실패했습니다.");
            }
        }
        this.members.add(member);
    }

    public Member findOneByName(String memberName) {
        for (int i = 0; i < members.size(); i++) {
            Member foundMember = members.get(i);
            if (foundMember.getName().equals(memberName)) {
                return foundMember;
            }
        }
        throw new IllegalArgumentException("등록되지 않은 회원입니다.");
    }
}

 

package Class7.Mission;

public class Member {

    private String email;
    private String name;
    private int age;

    public String getEmail() {
        return email;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public Member(String email, String name, int age) {
        this.email = email;
        this.name = name;
        this.age = age;
    }
}

 

package Class7.Mission;

import java.util.Scanner;

public class Mission7_3 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        MemberRepository memberRepository = new MemberRepository();

        while (true) {
            System.out.println("원하시는 번호를 입력해주세요.");
            System.out.println("1. 회원 등록");
            System.out.println("2. 회원 조회");
            String input = scanner.nextLine();

            // 종료조건
            if (input.equals("exit")) {
                break;
            }

            if (input.equals("1")) {
                System.out.println("원하시는 번호를 입력해주세요");
                System.out.println("1. 일반 회원");
                System.out.println("2. VIP 회원");
                String inputTypeNumber = scanner.nextLine();

                System.out.println("이메일을 입력해주세요");
                String memberEmail = scanner.nextLine();
                System.out.println("이름을 입력해주세요");
                String memberName = scanner.nextLine();
                System.out.println("나이을 입력해주세요");
                String tmp = scanner.nextLine();
                int memberAge = Integer.parseInt(tmp);

                Member newMember;
                if (inputTypeNumber.equals("1")) {
                    newMember = new Member(memberEmail, memberName, memberAge);
                } else if (inputTypeNumber.equals("2")) {
                    System.out.println("신청한 PT 횟수를 입력해주세요");
                    String inputPtCount = scanner.nextLine();
                    int ptCount = Integer.parseInt(inputPtCount);
                    newMember = new VipMember(memberEmail, memberName, memberAge, ptCount);
                } else {
                    throw new IllegalArgumentException("올바른 번호를 입력하세요");
                }

                try {
                    memberRepository.registerMember(newMember);
                    System.out.println("회원 등록이 성공적으로 완료되었습니다.");
                    System.out.println();
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }
            } else if (input.equals("2")) {
                System.out.println("조회하려는 회원의 이름을 입력해주세요");
                String inputName = scanner.nextLine();

                try {
                    Member foundMember = memberRepository.findOneByName(inputName);
                    System.out.println(
                        foundMember.getName() + "님의 이메일은 " + foundMember.getEmail() + "이고, 나이는 "
                            + foundMember.getAge() + "살입니다.");
                    System.out.println();
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }
            }
        }
    }
}
package Class7.Mission;

public class VipMember extends Member {

    private int ptCount;

    public VipMember(String email, String name, int age, int ptCount) {
        super(email, name, age);
        this.ptCount = ptCount;
    }
}

 

 

 

'Java > JSCODE - Java' 카테고리의 다른 글

5회차 - 연습문제 (1)  (0) 2023.03.07
8회차 - 회고  (0) 2023.03.06
6회차 - 미션  (1) 2023.03.06
6회차 - 연습문제  (1) 2023.03.06
4회차 - 미션  (1) 2023.02.23