package kr.or.iei.list.controller;
public interface PointerInterface {
public void insertMember(); //회원 정보 등록
public void printAllMember(); //전체 회원 조회
public void printOneMember(); //회원 1명 조회
public void updateMember(); //회원 정보 수정
public void deleteMember(); //회원 정보 삭제
}
Interface를 활용하여 작성되어야 할 기능 메소드들을 명세하였다.
package kr.or.iei.list.model.vo;
//추상 메소드를 포함한 추상 클래스
public abstract class Grade {
private String grade;
private String name;
private int point;
public Grade() {
super();
}
public Grade(String grade, String name, int point) {
super();
this.grade = grade;
this.name = name;
this.point = point;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPoint() {
return point;
}
public void setPoint(int point) {
this.point = point;
}
//getBonus
public abstract double getBonus();
}
silver, gold, vip의 부모 클래스로 존재할 Grade 클래스 정의하였다.
package kr.or.iei.list.model.vo;
//Grade 부모 클래스를 상속 받음.
public class Silver extends Grade{
public Silver() {
super();
// TODO Auto-generated constructor stub
}
public Silver(String grade, String name, int point) {
//부모 클래스(Grade)의 매개변수 생성자 호출
super(grade, name, point);
}
//Grade 부모 클래스에 정의되지 않은 추상 메소드를 자식 클래스에서 구현 == 재정의
@Override
public double getBonus() {
// TODO Auto-generated method stub
return getPoint() * 0.02;
}
public String silverToString() {
return "grade = " + getGrade() + ", name = " + getName() + ", point = " + getPoint() + ", bonus = " + getBonus();
}
}
Grade 클래스를 상속 받는 자식 클래스 Silver 클래스 정의 부모 클래스에서 정의되지 않은 추상메소드 내부 실행 코드를 자식 클래스에서 재정의 => Silver 등급에서의 보너스 포인트 값을 반환하는 getBouns() 메소드 정의하였다.
package kr.or.iei.list.model.vo;
public class Gold extends Grade{
public Gold() {
super();
// TODO Auto-generated constructor stub
}
public Gold(String grade, String name, int point) {
super(grade, name, point);
}
@Override
public double getBonus() {
// TODO Auto-generated method stub
return getPoint() * 0.05;
}
public String goldToString() {
return "grade = " + getGrade() + ", name = " + getName() + ", point = " + getPoint() + ", bonus = " + getBonus();
}
}
Silver 클래스와 동일하게 Gold 등급에 보너스 포인트 값을 반환하는 getBonus()메소드 재정의하였다.
package kr.or.iei.list.model.vo;
public class Vip extends Grade{
public Vip() {
super();
// TODO Auto-generated constructor stub
}
public Vip(String grade, String name, int point) {
super(grade, name, point);
}
@Override
public double getBonus() {
// TODO Auto-generated method stub
return getPoint() * 0.07;
}
public String vipToString() {
return "grade = " + getGrade() + ", name = " + getName() + ", point = " + getPoint() + ", bonus = " + getBonus();
}
}
Silver, Gold 클래스와 동일하게 Vip 등급에 보너스 포인트 값을 반환하는 getBonus()메소드 재정의하였다.
package kr.or.iei.list.controller;
import java.util.ArrayList;
import java.util.Scanner;
import kr.or.iei.list.model.vo.Gold;
import kr.or.iei.list.model.vo.Grade;
import kr.or.iei.list.model.vo.Silver;
import kr.or.iei.list.model.vo.Vip;
public class PointController implements PointerInterface {
ArrayList<Grade> list;
String userName;
int index;
Scanner sc;
public PointController() {
list = new ArrayList<Grade>();
sc = new Scanner(System.in);
}
//메뉴선택 메소드
public void menu() {
while (true) {
System.out.println("===========v3 포인트 관리 프로그램============");
System.out.println("1. 회원 정보 등록");
System.out.println("2. 전체 회원 출력");
System.out.println("3. 회원 1명 출력");
System.out.println("4. 회원 정보 수정");
System.out.println("5. 회원 정보 삭제");
System.out.println("0. 종료");
System.out.print("메뉴 입력 > ");
int menu = sc.nextInt();
sc.nextLine();
switch (menu) {
case 1:
insertMember(); // 회원 정보 등록
break;
case 2:
printAllMember(); // 전체 회원 춮력
break;
case 3:
printOneMember(); // 회원 1명 출력
break;
case 4:
updateMember(); // 회원 정보 수정
break;
case 5:
deleteMember(); // 회원 정보 삭제
break;
case 0:
System.out.println("프로그램이 종료되었습니다..");
return;
default:
System.out.println("잘못된 입력입니다.");
break;
}
}
}
// 회원 정보 등록
@Override
public void insertMember() {
System.out.println("=======회원 정보 등록=======");
System.out.print("등급 : ");
String grade = sc.nextLine();
System.out.println("이름 : ");
String name = sc.nextLine();
int srchIdx = searchInfo(name);
if (srchIdx == -1) {
System.out.println("포인트 : ");
int point = sc.nextInt();
sc.nextLine();
switch (grade) {
case "silver":
list.add(new Silver(grade, name, point)); // Grade는 추상 클래스이기 때문에 객체 생성이 안됨 상속 받은 자식 클래스로 객체 생성
System.out.println("회원 등록 완료");
break;
case "gold":
list.add(new Gold(grade, name, point));
System.out.println("회원 등록 완료");
break;
case "vip":
list.add(new Vip(grade, name, point));
System.out.println("회원 등록 완료");
break;
default:
System.out.println("잘못된 등급입니다.");
return;
}
} else {
System.out.println("중복된 이름입니다. ");
}
}
// 전체 회원 출력
@Override
public void printAllMember() {
System.out.println("=======회원 전체 조회=======");
for (int i = 0; i < list.size(); i++) {
Grade member = list.get(i);
String grade = member.getGrade();
switch (grade) {
case "silver":
Silver s = (Silver) member;
System.out.println(s.silverToString());
break;
case "gold":
Gold g = (Gold) member;
System.out.println(g.goldToString());
break;
case "vip":
Vip v = (Vip) member;
System.out.println(v.vipToString());
break;
default:
System.out.println("잘못된 등급 포함");
return;
}
}
}
// 회원 1명 출력
@Override
public void printOneMember() {
System.out.println("=======회원 1명 조회=======");
System.out.print("조회할 회원 이름 입력 : ");
String name = sc.nextLine();
int srchIdx = searchInfo(name);
if (srchIdx == -1) {
System.out.println("존재하지 않는 회원입니다.");
} else {
Grade member = list.get(srchIdx);
String grade = member.getGrade();
switch (grade) {
case "silver":
Silver s = (Silver) member;
System.out.println(s.silverToString());
break;
case "gold":
Gold g = (Gold) member;
System.out.println(g.goldToString());
break;
case "vip":
Vip v = (Vip) member;
System.out.println(v.vipToString());
break;
default:
System.out.println("잘못된 등급 포함");
return;
}
}
}
// 회원 정보 수정
@Override
public void updateMember() {
System.out.println("=======회원 1명 조회=======");
System.out.print("수정할 회원 이름 입력 : ");
String name = sc.nextLine();
int srchIdx = searchInfo(name);
if (srchIdx == -1) {
System.out.println("존재하지 않는 회원입니다.");
} else {
System.out.println("등급 : ");
String grade = sc.nextLine();
System.out.println("포인트 : ");
int point = sc.nextInt();
sc.nextLine();
switch (grade) {
case "silver":
list.set(srchIdx, new Silver(grade, name, point));
System.out.println("수정 완료");
break;
case "gold":
list.set(srchIdx, new Gold(grade, name, point));
System.out.println("수정 완료");
break;
case "vip":
list.set(srchIdx, new Vip(grade, name, point));
System.out.println("수정 완료");
break;
default:
System.out.println("잘못된 등급 포함");
return;
}
}
}
// 회원 정보 삭제
@Override
public void deleteMember() {
System.out.println("=======회원 정보 삭제=======");
System.out.print("삭제할 회원 이름 입력 : ");
String name = sc.nextLine();
int srchIdx = searchInfo(name);
if (srchIdx == -1) {
System.out.println("존재하지 않는 회원입니다.");
} else {
list.remove(srchIdx);
System.out.println("삭제 완료");
}
}
public int searchInfo(String searchname) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getName().equals(searchname)) {
return i;
}
}
return -1;
}
}
프로그램 메뉴 선택, 회원 정보 등록, 회원 전체 출력, 회원 1명 출력, 회원 정보 수정, 회원 정보 삭제 메소드를 각각 작성해서 구현하였다.
ArrayList를 활용해 코드를 작성해 보니 훨씬 더 코드가 간결해졌다. 특히 수정이나 삭제할 때 좀 더 간결하게 코드를 작성할 수 있는 점이 좋았다.
점점 배우는 것이 많아지고 공부하는 것이 늘어가니 블로그를 쓰며 배운 것을 복습하는게 쉽지 않아졌다. 1일 1블로그는 못하더라도 주에 1개는 꼭 올려봐야겠다.