본문 바로가기

Java

JSCODE 7회차

 이번 회차에서는 지금까지 학습했던 내용을 정리하면서 미션을 해결하는 방식으로 진행되었다.

 

헬스장 회원 관리 프로그램 만들기 1

요구사항: 

- 회원 정보를 저장할 저장소(MemberRepository)라는 클래스를 만들어서 활용해라.

- MemberRepository는 회원을 저장할 수 있어야 한다.

- 회원을 등록할 때는, 이메일, 이름, 나이 정보를 받아야 한다.

- 회원을 등록할 때, 동일한 이메일을 가진 회원은 중복해서 존재할 수 없다.

 

Member.java

public class Member {
    private final String email, name;
    private final int age;

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

    public String getEmail() {return this.email;}

    public String getName() {return this.name;}

    public int getAge() {return this.age;}

MemberRepository.java

public class MemberRepository {
    private List<Member> members = new ArrayList<>();

    public void add(Member member) {
        this.members.add(member);
    }
    
    public boolean checkExistEmail(String email) {
        for (Member member : this.members) {
            if (member.getEmail().equals(email)) {
                return true;
            }
        }
        return false;
    }
}

FitnessCenterMemberManagingProgram.java

public class FitnessCenterMemberManagingProgram {
    private final Scanner scanner = new Scanner(System.in);

    public void start() {
        MemberRepository memberRepository = new MemberRepository();

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

            System.out.println("1. 회원등록");
            String number = scanner.nextLine();

            if (Integer.parseInt(number) == 1) {
                String email = inputData("이메일을 입력해주세요.");
                String name = inputData("이름을 입력해주세요.");
                String age = inputData("나이를 입력해주세요.");

                Member member = new Member(email, name, Integer.parseInt(age));

                boolean isContains = memberRepository.checkExistEmail(member.getEmail());

                if (isContains) {
                    System.out.println("이미 등록된 이메일이어서 회원 등록에 실패했습니다.");
                }
                else {
                    System.out.println("회원 등록이 성공적으로 완료되었습니다.");
                    memberRepository.add(member);
                }
            }
        }
    }

    private String inputData(String inputText) {
        System.out.println(inputText);
        return scanner.nextLine();
    }
}

 

결과

헬스장 회원 관리 프로그램 만들기 2

요구사항: 위의 1단계에서 추가로 2를 입력하면 회원을 조회해주는 프로그램을 작성한다.

 

FitnessCenterMemberManagingProgram.java 에서 번호 2를 입력했을 때 회원 정보를 조회하는 분기를 추가하고, MemberRepositogry.java에서 회원 이름으로 정보를 출력하는 로직을 추가한다.

 

MemberRepositogry.java -> findUserByName()

 public void findUserByName(String name) {
        for (Member member : this.members) {
            if (member.getName().equals(name)) {
                System.out.println(member.getName() + "님의 이메일은 " + member.getEmail()
                    + "이고, 나이는 " + member.getAge() + "살입니다.");
                return;
            }
        }
        System.out.println("등록되지 않은 회원입니다.");
    }

FitnessCenterMemberManagingProgram.java

public class FitnessCenterMemberManagingProgram {
    private final Scanner scanner = new Scanner(System.in);

    public void start() {
        MemberRepository memberRepository = new MemberRepository();

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

            System.out.println("1. 회원등록");
            System.out.println("2. 회원조회");
            String number = scanner.nextLine();

            if (Integer.parseInt(number) == 1) {
                String email = inputData("이메일을 입력해주세요.");
                String name = inputData("이름을 입력해주세요.");
                String age = inputData("나이를 입력해주세요.");

                Member member = new Member(email, name, Integer.parseInt(age));

                boolean isContains = memberRepository.checkExistEmail(member.getEmail());

                if (isContains) {
                    System.out.println("이미 등록된 이메일이어서 회원 등록에 실패했습니다.");
                }
                else {
                    System.out.println("회원 등록이 성공적으로 완료되었습니다.");
                    memberRepository.add(member);
                }
            }
            else {
                String targetName = inputData("조회하려는 회원의 이름을 입력해주세요.");
                memberRepository.findUserByName(targetName);
            }
        }
    }

    private String inputData(String inputText) {
        System.out.println(inputText);
        return scanner.nextLine();
    }
}

 

헬스장 회원 관리 프로그램 만들기 3

요구 사항

- 회원 정보를 저장할 저장소(MemberRepository)라는 클래스를 만들어서 활용해라.

- MemberRepository는 회원을 조회, 저장을 할 수 있어야 한다.

- 회원은 일반 회원과 VIP 회원으로 나뉜다.

- 일반 회원을 등록할 때는, 이메일, 이름, 나이 정보를 받아야 한다.

- VIP 회원을 등록할 때는, 이메일, 이름, 나이, 신청 PT 횟수 정보를 받아야 한다.

- 회원(일반 회원, VIP 회원)을 등록할 때, 동일한 이메일을 가진 회원은 중복해서 존재할 수 없다.

 

VIPMember.java

public class VIPMember extends  Member{
    private final int ptCount;

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

    public int getPtCount() {
        return this.ptCount;
    }
}

 위에서 선언한 Member 클래스를 상속 받는 VIPMember 클래스를 선언한다.

 

MemberRepository.java -> findUserByName()

 public void findUserByName(String name) {
        for (Member member : this.members) {
            if (member.getName().equals(name)) {
                if (member.getClass() == Member.class) {
                    System.out.println(member.getName() + "님은 일반 회원이고, 이메일은 " + member.getEmail()
                        + "이고, 나이는 " + member.getAge() + "살입니다.");
                }
                else {
                    System.out.println(member.getName() + "님은 VIP 회원이고, 이메일은 " + member.getEmail()
                        + "이고, 나이는 " + member.getAge() + "살입니다.");
                }

                return;
            }
        }
        System.out.println("등록되지 않은 회원입니다.");
    }

 클래스를 확인하는 분기를 추가

 

FitnessCenterMemberManagingProgram.java

public class FitnessCenterMemberManagingProgram {
    private final Scanner scanner = new Scanner(System.in);

    public void start() {
        MemberRepository memberRepository = new MemberRepository();

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

            System.out.println("1. 회원등록");
            System.out.println("2. 회원조회");
            String serviceNumber = scanner.nextLine();

            if (Integer.parseInt(serviceNumber) == 1) {
                System.out.println("원하시는 번호를 입력해주세요.");

                System.out.println("1. 일반 회원");
                System.out.println("2. VIP 회원");
                String userNumber = scanner.nextLine();

                String email = inputData("이메일을 입력해주세요.");
                String name = inputData("이름을 입력해주세요.");
                String age = inputData("나이를 입력해주세요.");

                Member member;

                if (Integer.parseInt(userNumber) == 1) {
                    member = new Member(email, name, Integer.parseInt(age));
                }
                else {
                    String ptCount = inputData("신청한 PT 횟수를 입력해주세요.");
                    member = new VIPMember(
                        email, name, Integer.parseInt(age), Integer.parseInt(ptCount));
                }

                boolean isContains = memberRepository.checkExistEmail(member.getEmail());

                if (isContains) {
                    System.out.println("이미 등록된 이메일이어서 회원 등록에 실패했습니다.");
                }
                else {
                    System.out.println("회원 등록이 성공적으로 완료되었습니다.");
                    memberRepository.add(member);
                }
            }
            else {
                String targetName = inputData("조회하려는 회원의 이름을 입력해주세요.");
                memberRepository.findUserByName(targetName);
            }
        }
    }

    private String inputData(String inputText) {
        System.out.println(inputText);
        return scanner.nextLine();
    }
}

  회원을 분류하는 분기를 추가하고 VIP 회원이면 pt 횟수 데이터를 추가로 입력하는 로직을 추가한다.

 

결과

 github: https://github.com/ParkYongSu/JSCODE

 

GitHub - ParkYongSu/JSCODE: jscode java study

jscode java study. Contribute to ParkYongSu/JSCODE development by creating an account on GitHub.

github.com

 며칠 간 학습한 내용을 한번에 적용하려고 하니 생각보다 쉽지 않았고, 시간이 꽤나 소요된 것 같다. 코드도 깔끔하게 짜지 못한 것 같아서 아쉬웠다. 그리고 상속과 관련된 부분은 지속적으로 사용하려는 습관을 가지는 것이 중요할 것 같다는 생각이 들었다. 이 부분은 내가 개발하는 부분에서도 유용하게 사용되기 때문에 비슷한 유형의 케이스를 많이 접해보려고 한다.

'Java' 카테고리의 다른 글

JSCODE 마지막 회차  (0) 2023.02.27
JSCODE 6회차  (1) 2023.02.20
JSCODE 5회차  (1) 2023.02.16
JSCODE 4회차  (2) 2023.02.13
JSCODE 3회차  (1) 2023.02.09