티스토리 뷰

728x90
반응형

요구 사항

원하시는 번호를 입력해주세요.
1. 회원 등록
2. 회원 조회
1

원하시는 번호를 입력해주세요. 
1. 일반 회원
2. VIP 회원
1

이메일을 입력해주세요. 
abcd@naver.com

이름을 입력해주세요. 
박재성

나이를 입력해주세요.
20

회원 등록이 성공적으로 완료되었습니다. 
원하시는 번호를 입력해주세요.
1. 회원 등록
2. 특정 회원 조회
1

원하시는 번호를 입력해주세요. 
1. 일반 회원
2. VIP 회원
2

이메일을 입력해주세요.
iu@naver.com

이름을 입력해주세요. 
아이유

나이를 입력해주세요.
20

신청한 PT 횟수를 입력해주세요. 
5


회워 등록이 성공적으로 완료되었습니다.
원하시는 번호를 입력해주세요.
1. 회원 등록
2. 회원 조회
2

조회하려는 회원의 이름을 입력해주세요.
박재성

박재성님은 일반 회원이고, 이메일은 abcd@naver.com이고, 나이는 20살입니다.
원하시는 번호를 입력해주세요.
1. 회원 등록
2. 회원 조회
2

조회하려는 회원의 이름을 입력해주세요.
아이유

아이유님은 VIP 회원이고, 이메일은 iu@naver.com이고, 나이는 20살입니다.
원하시는 번호를 입력해주세요.
1. 회원 등록
2. 회원 조회
  • 회원 정보를 저장할 저장소(MemberRepository)라는 클래스를 만들어서 활용해라.
    • MemberRepository는 회원을 조회, 저장을 할 수 있어야 한다.
  • 회원은 일반 회원과 VIP 회원으로 나뉜다.
  • 일반 회원을 등록할 때는, 이메일, 이름, 나이 정보를 받아야 한다.
  • VIP 회원을 등록할 때는, 이메일, 이름, 나이, 신청 PT 횟수 정보를 받아야 한다.
  • 회원(일반 회원, VIP 회원)을 등록할 때, 동일한 이메일을 가진 회원은 중복해서 존재할 수 없다.

설계

 1. 관리 프로그림

   구현 해야될 기능

  1. 신규 회원 등록
  2. 회원 저장소
    1. 이름
    2. 이메일
    3. 나이
    4. 등급
    5. PT 회수
  3. 회원 조회

2. 회원

코드

 Main.java

import java.io.IOException;

public class Main {

  public static void main(String[] args) throws NumberFormatException, IOException {
    FitnessManage program = new FitnessManage();
    program.run();

  }

}

FitnessManage.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class FitnessManage {

  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  MemberRepository memberRepository = new MemberRepository();

  public void run() throws NumberFormatException, IOException {

    while (true) {

      // 회원 등록
      int menu = InputMenu();
      if (menu == 1) {
        try {
          memberRepository.createMember(residentMember());
          System.out.println("회원 등록이 성공적으로 완료되었습니다. ");
        } catch (IllegalArgumentException e) {
          System.out.println(e.getMessage());
          continue;
        }
      } else if (menu == 2) {
        SearchMember();
      }
    }
  }

  // 메뉴 입력
  private int InputMenu() throws NumberFormatException, IOException {
    System.out.println("원하시는 번호를 입력해주세요.");
    System.out.println("1. 회원 등록");
    System.out.println("2. 회원 조회");

    return Integer.parseInt(br.readLine());
  }

  // 회원 등록
  private Member residentMember() throws IOException {
    Member member;
    System.out.println("원하시는 번호를 입력해주세요.");
    System.out.println("1. 일반 회원");
    System.out.println("2. VIP 회원");
    int rating = Integer.parseInt(br.readLine());

    System.out.println("이메일을 입력해주세요.");
    String email = br.readLine();
    System.out.println("이름을 입력해주세요.");
    String name = br.readLine();
    System.out.println("나이를 입력해주세요.");
    int age = Integer.parseInt(br.readLine());



    if (rating == 2) {
      System.out.println("신청한 PT 횟수를 입력해주세요.");
      int pt_number = Integer.parseInt(br.readLine());
      member = new VIPMember(email, name, age, pt_number);
    } else {
      member = new NomalMember(email, name, age);
    }

    return member;
  }

  // 회원 조회
  private void SearchMember() throws IOException {
    System.out.println("조회하려는 회원의 이름을 입력해주세요.");
    memberRepository.readMember(br.readLine());
  }
}

Member.java

public class Member {

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

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

  public String getEmail() {
    return email;
  }

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

  public String getName() {
    return name;
  }

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

  public int getAge() {
    return age;
  }

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

  @Override
  public String toString() {
    return "%s님의 이메일은 %s이고, 나이는 %d살입니다.".formatted(this.name, this.email, this.age);
  }

  public boolean isEqualeWithName(String name) {
    return this.name.equals(name);
  }

}

isEqualeWithName(String name): 디미터의 법칙 참조

NomalMember.java

public class NomalMember extends Member {

  public NomalMember(String email, String name, int age) {
    super(email, name, age);
  }

  @Override
  public String toString() {
    return "%s님은 일반 회원이고 이메일은 %s이고, 나이는 %d살입니다.".formatted(this.getName(), this.getEmail(),
        this.getAge());
  }

}

VIPMember.java 

public class VIPMember extends Member {

  private int pt_number;

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

  public int getPT_number() {
    return pt_number;
  }

  public void setPT_number(int pt_number) {
    this.pt_number = pt_number;
  }

  @Override
  public String toString() {
    return "%s님은 VIP 회원이고 이메일은 %s이고, 나이는 %d살입니다.".formatted(this.getName(), this.getEmail(),
        this.getAge());
  }

}

MemberRepository.java

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

public class MemberRepository {

  private List<Member> members;

  public MemberRepository() {

    members = new ArrayList<Member>();
  }

  // 회원 저장
  public void createMember(Member member) {

    members.forEach((person) -> {
      if (person.getEmail().equals(member.getEmail())) {
        throw new IllegalArgumentException("이미 등록된 이메일이어서 회원 등록에 실패했습니다.");
      }
    });

    members.add(member);
  }

  public void readMember(String name) {
    members.forEach((member) -> {
      if (member.isEqualeWithName(name)) {
        System.out.println(member.toString());
      }

    });
  }

}

마무리

 이번에 구현해야 될기능과 데이터의 타입만 잘 정하면 구현하기가 쉽다, 다만 OOP프로그래밍 기법으로 접근하면 더 세밀하게 들어가야 되서 나중에 OOP에 대한 개념을 확실히 익히고 개발하면 이전 코드랑 비교해보면 많이 달라질것이라고 생각이든다. 전체 개발 소스코드는 아래 사이트에서 참고하면된다.

https://github.com/jih3508/Java_Study/tree/main/JSCODE_BACKEND_JAVA/JSCODE_JAVA/src/CH07

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함