[JAVA]ArrayList를 활용한 회원 포인트관리 프로그램

이정원·2025년 3월 7일
0

기능명세

  1. 회원 정보 등록
  2. 전체 회원 출력(등급(silver,gold,vip), 이름, 포인트, 보너스(포인트))
  3. 회원 1명 출력
  4. 회원 정보 수정
  5. 회원 정보 삭제
  6. 프로그램 종료

코드

  • PointerInterface.java
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를 활용하여 작성되어야 할 기능 메소드들을 명세하였다.

  • Grade.java
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 클래스 정의하였다.

  • Silver.java
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() 메소드 정의하였다.

  • Gold.java
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()메소드 재정의하였다.

  • Vip.java
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()메소드 재정의하였다.

  • PointController.java
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개는 꼭 올려봐야겠다.

profile
Study.log

0개의 댓글