이번 회차에서는 지금까지 학습했던 내용을 정리하면서 미션을 해결하는 방식으로 진행되었다.
헬스장 회원 관리 프로그램 만들기 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
며칠 간 학습한 내용을 한번에 적용하려고 하니 생각보다 쉽지 않았고, 시간이 꽤나 소요된 것 같다. 코드도 깔끔하게 짜지 못한 것 같아서 아쉬웠다. 그리고 상속과 관련된 부분은 지속적으로 사용하려는 습관을 가지는 것이 중요할 것 같다는 생각이 들었다. 이 부분은 내가 개발하는 부분에서도 유용하게 사용되기 때문에 비슷한 유형의 케이스를 많이 접해보려고 한다.
'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 |