✿∘˚˳°∘°

12일차 : 객체지향프로그래밍 - 회원(포인트)관리 프로그램 본문

국비수업/JAVA

12일차 : 객체지향프로그래밍 - 회원(포인트)관리 프로그램

_HYE_ 2022. 12. 13. 16:26

2022/12/13

 

1 - 1 ) 회원관리프로그램v1(클래스 : 실행/기능제공/vo) - 등급은 silver만

 

VO : Silver.java

(bonus는 point에 따라 달라지는 값이므로 변수로 선언하지않고 getter로 가능)

package kh.java.vo;

public class Silver {

	private String grade;
	private String name;
	private int point;
	//private double bonus; 
	//변수로 관리하게되면 수정이 힘들다 - 보너스는 포인트에 종속되어있기때문에 딱히 작성할 필요x
	//getter만 작성햐여 리턴을 point*0.02를 해준다(getter는 다른클래스에서 사용하기위해사용)
	
	//기본생성자
	public Silver() {
		
	}	
	//매개변수가 있는 생성자
	public Silver(String grade, String name, int point) {
		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;
	}
	
	public double getBonus() {
		return point*0.02;
	}
	/*
	public void setBonus(double bonus) {
		this.bonus = bonus;
	}*/
}

 

Controller : PointMgr.java

- 내가 작성한 코드

package kh.java.controller;

import java.util.Scanner;

import kh.java.vo.Silver;

public class PointMgr {

	private Scanner sc; //Scanner도 silver[]도 참조형이므로 초기값null이 들어있다
	private Silver[] members; //실버를 여러개 관리 
	private int index;

	public PointMgr() {
		sc = new Scanner(System.in);
		members = new Silver[10];
		//전역변수에 작성해도 되지만 배열에 1~100까지 넣고싶거나할때 for문을 사용하면
		//전역변수위치에서 for문같은 복잡한걸 사용하면 에러 -> 생성자에서는 가능하므로 여기서
		//위에서는 선언만, 사용할준비는 생성자에서
		index = 0;
	}

	public void main() {
		while(true) {
			System.out.println("==== 회원 관리 프로그램v1 ====");
			System.out.println("1. 회원 등록 ");
			System.out.println("2. 회원 전체 출력");
			System.out.println("3. 선택 회원 출력");
			System.out.println("4. 회원 정보 수정");
			System.out.println("5. 회원 삭제");
			System.out.println("0. 프로그램 종료");
			System.out.print("선택 > ");
			int sel = sc.nextInt();
			
			switch(sel) {
			case 1: 
				insertMember();
				break;
			case 2:
				printAllMember();
				break;
			case 3:
				printOneMember();
				break;
			case 4:
				updateMember();
				break;
			case 5:
				deleteMember();
				break;
			case 0:
				System.out.println("프로그램을 종료합니다.");
				return;
			default:
				System.out.println("잘못입력하셨습니다.");
				break;
			}
		}
	}
	
	public void insertMember() {
		System.out.println("==== 회원 정보 입력 ====");
		System.out.print("등급 : ");
		String grade = sc.next();
		System.out.print("이름 : ");
		String name = sc.next();
		System.out.print("포인트 : ");
		int point = sc.nextInt();
		
		Silver s = new Silver();
		s.setGrade(grade);
		s.setName(name);
		s.setPoint(point);
		
		members[index] = s;
		index++;
	}
	
	public void printAllMember() {
		System.out.println("==== 회원 정보 출력(전체) ====");
		System.out.println("등급\t이름\t포인트\t보너스");
		System.out.println("====================");
		for(int i=0; i<index; i++) {
			Silver s = members[i];
			System.out.println(s.getGrade()+"\t"+s.getName()+"\t"+s.getPoint());
		}
	}
	
	public void printOneMember() {
		System.out.println("==== 회원 정보 출력(1명) ====");
		System.out.print("조회할 회원 이름 입력 : ");
		String name = sc.next();
		int searchIndex = searchIndex(name);
		if(searchIndex == -1) {
			System.out.println("회원정보를 출력할 수 없습니다.");
		}else {
			Silver s = members[searchIndex];
			System.out.println("이름 : "+s.getName());
			System.out.println("등급 : "+s.getGrade());
			System.out.println("포인트 : "+s.getPoint());
		}
	}
	
	public void updateMember() {
		System.out.println("==== 회원 정보 수정 ====");
		System.out.print("수정할 회원 이름 입력 : ");
		String name = sc.next();
		int searchIndex = searchIndex(name);
		if(searchIndex != -1) {
			System.out.print("수정할 이름 입력 : ");
			String updateName = sc.next();
			System.out.print("수정할 등급 입력 : ");
			String updateGrade = sc.next();
			System.out.print("수정할 포인트 입력 : ");
			int updatePoint = sc.nextInt();
			
			Silver s = new Silver();
			s.setGrade(updateGrade);
			s.setName(updateName);
			s.setPoint(updatePoint);
			
			members[searchIndex] = s;	
			System.out.println("회원정보수정완료!");
			
		}else {
			System.out.println("회원정보를 조회할 수 없습니다.");
		}
	}
	
	public void deleteMember() {
		System.out.println("==== 회원 삭제 ====");
		System.out.print("삭제할 회원 이름 입력 : ");
		String name = sc.next();
		int searchIndex = searchIndex(name);
		if(searchIndex == -1) {
			System.out.println("회원정보를 조회할 수 없습니다.");
		}else {
			for(int i=searchIndex; i<index-1; i++) {
				members[i] = members[i+1];
			}
			index--;
			members[index] = null;
			System.out.println("회원삭제완료!");
		}
	}
	
	public int searchIndex(String name) {
		
		for(int i=0; i<index; i++) {
			if(members[i].getName().equals(name)) {
				return i;
			}
		}
		
		return -1;
	}
}

- 강사님 실습 코드

package kh.java.controller;

import java.util.Scanner;

import kh.java.vo.Silver;

public class PointMgr2 {

	Scanner sc;
	Silver[] members;
	int index;
	
	public PointMgr2() {
		sc = new Scanner(System.in);
		members = new Silver[10];
		index = 0;
	}
	
	public void main() {
		while(true) {
			System.out.println("==== 회원 관리 프로그램v1 ====");
			System.out.println("1. 회원 등록 ");
			System.out.println("2. 회원 전체 출력");
			System.out.println("3. 선택 회원 출력");
			System.out.println("4. 회원 정보 수정");
			System.out.println("5. 회원 삭제");
			System.out.println("0. 프로그램 종료");
			System.out.print("선택 > ");
			int sel = sc.nextInt();
			
			switch(sel) {
			case 1: 
				insertMember();
				break;
			case 2:
				printAllMember();
				break;
			case 3:
				printOneMember();
				break;
			case 4:
				updateMember();
				break;
			case 5:
				deleteMember();
				break;
			case 0:
				System.out.println("프로그램을 종료합니다.");
				return;
			default:
				System.out.println("잘못입력하셨습니다.");
				break;
			}
		}
	}
	
	public void insertMember() {
		System.out.println("==== 회원 정보 등록 ====");
		System.out.print("등급입력[silver] : ");
		String grade = sc.next();
		System.out.print("이름 입력 : ");
		String name = sc.next();
		System.out.print("포인트 입력 : ");
		int point = sc.nextInt();
		
		/*
		Silver s = new Silver(); //스택에 참조형변수 s의 자리가 생기고 s는 silver의 주소를 참조하고있다.
		s.setGrade(grade); 
		//silver.java의 grade변수가 private로 선언되어있으므로 접근x -> setter를 이용한접근
		s.setName(name);
		s.setPoint(point);
		s.setBonus(point*0.02); 
		*/
		// 또는 이렇게 매개변수가있는 생성자를이용해도 OK
		Silver s = new Silver(grade, name, point); 
		// Silver s = new Silver(grade, name, point, point*0.02);
		
		members[index] = s; //입력받은 값을 members[]라는 Silver타입 여러개를 저장하는 배열에 넣어준다.
		index++;//넣을때마다 자동으로 배열의 위치를 알려주기위해 사용하는 변수
		System.out.println("회원 정보 등록 완료!");
	}
	
	public void printAllMember() {
		System.out.println("==== 회원 정보 출력(전체) ====");
		System.out.println("등급\t이름\t포인트\t보너스");
		System.out.println("=====================");
		for(int i=0; i<index; i++) { //i<members.length로하면 비어있는배열도 출력될테니까 지정해준index까지
			Silver s = members[i];//members[0]을 silver타입의 s에 넣은것
			//silver배열이 있는데 배열인덱스마다 각각 주소를 참조하고 있을것
			//s를 만들면 같은데이터를 바라보게 만듬(얕은복사개념으로 이해하면된다)
			System.out.println(s.getGrade()+"\t"+s.getName()+"\t"+s.getPoint()+"\t"+s.getBonus());
			//String name = s.getName(); members[i].getName()으로 작성해도된다.
		}
	}
	
	public void printOneMember() {
		System.out.println("==== 회원 정보 출력(1명) ====");
		System.out.print("조회할 회원 이름 입력 : ");
		String searchName = sc.next();
		int searchIndex = searchIndex(searchName);
		if(searchIndex != -1) {
			System.out.println("이름 : "+members[searchIndex].getName());
			System.out.println("등급 : "+members[searchIndex].getGrade());
			System.out.println("포인트 : "+members[searchIndex].getPoint());
		}else {
			System.out.println("회원정보를 조회할 수 없습니다.");
		}
	}
	
	public void updateMember() {
		System.out.println("==== 회원 정보 수정 ====");
		System.out.print("회원 이름 입력 : ");
		String name = sc.next();
		int searchIndex = searchIndex(name);
		if(searchIndex == -1) {
			System.out.println("회원 정보를 조회할 수 없습니다.");
		}else {
			System.out.println("변경할 등급 입력 : ");
			String updateGrade = sc.next();
			System.out.print("변경할 이름 입력 : ");
			String updateName = sc.next();
			System.out.println("변경할 포인트 입력 : ");
			int updatePoint = sc.nextInt();
			//Silver s = members[searchIndex];
			//s.setGrade(updateGrade);
			members[searchIndex].setGrade(updateGrade);
			members[searchIndex].setName(updateName);
			members[searchIndex].setPoint(updatePoint);
			
			System.out.println("정보 수정 완료!");
		}
	}
	
	public void deleteMember() {
		System.out.println("==== 회원 정보 삭제 ====");
		System.out.print("회원 이름 입력 : ");
		String name = sc.next();
		int searchIndex = searchIndex(name);
		if(searchIndex == -1) {
			System.out.println("회원정보를 조회할 수 없습니다.");
		}else {
			for(int i=searchIndex; i<index-1; i++) {
				members[i] = members[i+1];//빈칸없이 앞으로 당기기(덮어쓰기)
			}
			index--;//다 당기고나면 members[5] == members[6]이 되므로 인덱스를 당기고 데이터를 null로 변경
			members[index] = null;
		}
	}
	
	public int searchIndex(String searchName) {
		for(int i=0; i<index; i++) {
			//Silver s = members[i]; 
			//String name = s.getName()
			//if(name.equals(searchName)){ }
			if(members[i].getName().equals(searchName)) {
				return i;
			}
		}
		return -1;
		//배열에서 절대쓰지못하니까 조회할수없을경우 -1리턴
		//0~양수는 배열크기가 커지면 사용할 가능성이 있음
	}
}

 

1 - 2 ) 회원관리프로그램v2(클래스 : 실행/기능제공/vo)  - 등급 silver, gold, vip

 상속(inherit) : 다른클래스가 가지고있는 멤버(변수와메소드)들을 새로 작성할 클래스에서 직접만들지않고 상속받아


 -장점 : 코드를 공통적으로관리(추가/수정용이), 중복제거(생산성,유지보수용이), 적은양의 코드로 새클래스생성


 -방법 : [접근제어지시자]class 클래스B extends 클래스A{ }
  클래스B : 자식클래스/후손클래스/서브클래스/파생클래스/상속받는클래스 - 부모클래스의 그대로 가져와 사용가능
  클래스A : 부모클래스/선조클래스/슈퍼클래스/선조클래스/상속하는클래스


 -단일상속 : 하나의 클래스만 상속가능, 명확하고 신뢰성있는 코드작성이 가능하다(자바는 단일상속)
   B(자식)가 A(부모)를 상속받고 C(자식)가 B(부모)를 상속받게하여 사용


 -super() : 부모객체의 생성자를 호출하는 메소드
 -자바의 모든클래스들은 자동적으로 Object를 상속

 

오버라이딩 : 자식클래스가 상속받은 부모 메소드를 재작성하는것(오버로딩과구분!)

                     부모가 제공하는 기능을 후손이 일부 고쳐서 사용

 

 

VO : Silver.java(부모클래스)

package kh.java.vo;

public class Silver {

	private String grade;
	private String name;
	private int point;	
	//Alt+Shift+S(or 마우스우클릭-Source) generate Constructors for superclass
	public Silver() {
		super();
	}
	public Silver(String grade, String name, int point) {
		super();
		this.grade = grade;
		this.name = name;
		this.point = point;
	}
	
	//Alt+Shift+S(or 마우스우클릭-Source) generate getter/setter
	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;
	}
	

	public double getBonus() {
		return point*0.02;
	}
	
}

VO : Gold.java(자식클래스, Silver를 종속받음)

package kh.java.vo;

public class Gold extends Silver{

	
	public Gold() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public Gold(String grade, String name, int point) {
		super(grade, name, point);
		// TODO Auto-generated constructor stub
	}

	@Override
	public double getBonus() {
		return getPoint()*0.05;
	}	
}

VO : Vip.java(자식클래스, Silver를 종속받음)

package kh.java.vo;

/*
 상속(inherit) : 다른클래스가 가지고있는 멤버(변수와메소드)들을 새로 작성할 클래스에서 직접만들지않고 상속받아
 -장점 : 코드를 공통적으로관리(추가/수정용이), 중복제거(생산성,유지보수용이), 적은양의 코드로 새클래스생성
 -방법 : [접근제어지시자]class 클래스B extends 클래스A{ 
 		클래스B : 자식클래스/후손클래스/서브클래스/파생클래스/상속받는클래스 - 부모클래스의 그대로 가져와 사용가능
 		클래스A : 부모클래스/선조클래스/슈퍼클래스/선조클래스/상속하는클래스
 -단일상속 : 하나의 클래스만 상속가능, 명확하고 신뢰성있는 코드작성이 가능하다(자바는 단일상속)
 		 B(자식)가 A(부모)를 상속받고 C(자식)가 B(부모)를 상속받게하여 사용
 -super() : 부모객체의 생성자를 호출하는 메소드
 -자바의 모든클래스들은 자동적으로 Object를 상속
  */
	 
//Vip : 자식클래스 / Silver : 부모클래스
public class Vip extends Silver{ 
	//Silver에 있는 변수와 메소드를 모두 가져옴
	//아무것도 작성하지않았지만 PointMgr에서 Silver에 있는 변수,메소드를 Vip객체로도 사용할 수 있다.
	//Silver가 Object를 상속하고 있으므로 Vip는 Silver/Object를 모두사용가능	
	public Vip() {
		super();//부모의 생성자호출
		//vip는 silver를 상속한 상태 -> vip를 만들기 위해서는 silver가 먼저 만들어져야 하기때문에
		//작성하지않아도 자동으로 돌아감
	}
	//눈에보이진않지만 silver의 변수들을 얘도 가지고있으므로 매개변수로 적어줘야한다.
	//부모의 private변수에 접근은X -> getter/setter이용
	//protected 변수는 상속한애도 접근이 가능
	public Vip(String grade, String name, int point) {
		super(grade, name, point);//부모생성자 중 매개변수 있는 생성자
		//슈퍼가 제일먼저 동작해야함 -> 슈퍼보다 먼저오는 코드가 있으면 안됨
		
		//super(매개변수)가 다받아오므로 아래코드를 작성할 필요x
		/*
		setGrade(grade);
		setName(name);
		setPoint(point);
		*/
		/*
		this.grade = grade;
		this.name = name;
		this.point = point;
		*/
	}
	@Override //오타가날수있으니 명시해주는게 좋다(오타나면 그냥 새메소드만들어지는것)
	public double getBonus() {
		return getPoint()*0.07;
	}	
}

Controller : PointMgr.java

package kh.java.controller;

import java.util.Scanner;

import kh.java.vo.Gold;
import kh.java.vo.Silver;
import kh.java.vo.Vip;

public class PointMgr {

	private Scanner sc;
	private Silver[] sMembers;
	private int sIndex;
	private Gold[] gMembers;
	private int gIndex;
	private Vip[] vMembers;
	private int vIndex;
	private char flag; // searchMember2()에서 배열구분을위한 변수

	public PointMgr() {
		super();
		sc = new Scanner(System.in);
		sMembers = new Silver[10];
		gMembers = new Gold[10];
		vMembers = new Vip[10];
		sIndex = 0;
		gIndex = 0;
		vIndex = 0;
		flag = 'A';
	}

	public void main() {
		while (true) {
			System.out.println("\n-------회원관리프로그램v2-------\n");
			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 sel = sc.nextInt();

			switch (sel) {
			case 1:
				insertMember();
				break;
			case 2:
				printAllMember();
				break;
			case 3:
				printOneMember();
				break;
			case 4:
				updateMember();
				break;
			case 5:
				deleteMember();
				break;
			case 0:
				System.out.println("프로그램을 종료합니다.");
				return;
			default:
				System.out.println("잘못 입력하셨습니다.");
				break;
			}
		}
	}

	public void insertMember() {
		System.out.println("\n-------회원 정보 등록-------\n");
		System.out.print("등록할 회원 등급 입력[silver/gold/vip] : ");
		String grade = sc.next();
		System.out.print("등록할 회원 이름 입력 : ");
		String name = sc.next();
		System.out.print("등록할 회원 포인트 입력 : ");
		int point = sc.nextInt();

		switch (grade) {
		case "silver":
			Silver s = new Silver(grade, name, point);
			sMembers[sIndex] = s;
			sIndex++;
			break;
		case "gold":
			gMembers[gIndex] = new Gold(grade, name, point);
			gIndex++;
			break;
		case "vip":
			vMembers[vIndex++] = new Vip(grade, name, point); // 후위연산으로 실행후 +1
			break;
		default:
			System.out.println("등급을 잘못 입력하셨습니다.");
			return;
		}
		System.out.println("회원정보 등록 완료!");
	}

	public void printAllMember() {
		System.out.println("\n-------전체 회원 정보 출력-------\n");
		System.out.println("등급\t이름\t포인트\t보너스");
		System.out.println("---------------------------------");
		// sMembers 출력
		for (int i = 0; i < sIndex; i++) {
			Silver s = sMembers[i];
			System.out.println(s.getGrade() + "\t" + s.getName() + "\t" + s.getPoint() + "\t" + s.getBonus());
		}
		// gMembers 출력
		for (int i = 0; i < gIndex; i++) {
			Gold g = gMembers[i];
			String grade = g.getGrade();
			String name = g.getName();
			int point = g.getPoint();
			double bonus = g.getBonus();
			System.out.println(grade + "\t" + name + "\t" + point + "\t" + bonus);
		}
		// vMembers 출력
		for (int i = 0; i < vIndex; i++) {
			System.out.println(vMembers[i].getGrade() + "\t" + vMembers[i].getName() + "\t" + vMembers[i].getPoint()
					+ "\t" + vMembers[i].getBonus());
		}
	}

	public void printOneMember() {
		System.out.println("\n-------회원 1명 정보 출력-------\n");
		System.out.print("조회 할 회원 이름 입력 : ");
		String name = sc.next();
		int[] searchIndex = searchMember1(name);
		if (searchIndex[0] == 0) {
			System.out.println("회원 정보를 조회할 수 없습니다.");
		} else {
			if (searchIndex[0] == 1) {
				// sMembers[]
				int i = searchIndex[1];
				Silver s = sMembers[i];
				System.out.println("등급 : " + s.getGrade());
				System.out.println("이름 : " + s.getName());
				System.out.println("포인트 : " + s.getPoint());
				System.out.println("보너스 : " + s.getBonus());
			} else if (searchIndex[0] == 2) {
				// gMembers[]
				System.out.println("등급 : " + gMembers[searchIndex[1]].getGrade());
				System.out.println("이름 : " + gMembers[searchIndex[1]].getName());
				System.out.println("포인트 : " + gMembers[searchIndex[1]].getPoint());
				System.out.println("보너스 : " + gMembers[searchIndex[1]].getBonus());
			} else if (searchIndex[0] == 3) {
				// vMembers[]
				Vip v = vMembers[searchIndex[1]];
				System.out.println("등급 : " + v.getGrade());
				System.out.println("이름 : " + v.getName());
				System.out.println("포인트 : " + v.getPoint());
				System.out.println("보너스 : " + v.getBonus());
			}
		}
	}

	public void updateMember() {
		System.out.println("\n-------회원 정보 수정-------\n");
		System.out.print("수정할 회원 이름 입력 : ");
		String name = sc.next();
		int searchIndex = searchMember3(name);
		if (searchIndex == -1) {
			System.out.println("회원 정보를 조회할 수 없습니다.");
		} else {
			System.out.print("변경할 등급 입력[silver/gold/vip] : ");
			String updateGrade = sc.next();
			System.out.print("변경할 이름 입력 : ");
			String updateName = sc.next();
			System.out.print("변경할 포인트 입력 : ");
			int updatePoint = sc.nextInt();
			// 0~9 : s / 10~19 : g / 100~109 : v
			if (searchIndex / 100 == 1) {
				// vMembers
				searchIndex -= 100; // 100더해서 return했으므로 빼줘야함
				for(int i=searchIndex; i<vIndex-1; i++) {
					vMembers[i] = vMembers[i+1];
				}
				vMembers[--vIndex] = null;
			} else if (searchIndex / 10 == 1) {
				// gMembers
				searchIndex -= 10;
				for(int i=searchIndex; i<gIndex-1; i++) {
					gMembers[i] = gMembers[i+1];
				}
				gMembers[--gIndex] = null;
			} else {
				// sMembers
				for(int i=searchIndex; i<sIndex-1; i++) {
					sMembers[i] = sMembers[i+1];
				}
				sMembers[-sIndex] = null;
			}
			switch(updateGrade) {
			case "silver":
				sMembers[sIndex] = new Silver(updateGrade, updateName, updatePoint);
				sIndex++;
				break;
			case "gold":
				gMembers[gIndex++] = new Gold(updateGrade, updateName, updatePoint);
				break;
			case "vip":
				vMembers[vIndex++] = new Vip(updateGrade, updateName, updatePoint);
				break;
			}
		}
	}
	public void noUdateMember() {
		System.out.println("\n-------회원 정보 수정-------\n");
		System.out.print("수정할 회원 이름 입력 : ");
		String name = sc.next();
		int searchIndex = searchMember3(name);
		if (searchIndex == -1) {
			System.out.println("회원 정보를 조회할 수 없습니다.");
		} else {
			System.out.print("변경할 등급 입력[silver/gold/vip] : ");
			String updateGrade = sc.next();
			System.out.print("변경할 이름 입력 : ");
			String updateName = sc.next();
			System.out.print("변경할 포인트 입력 : ");
			int updatePoint = sc.nextInt();
			// 0~9 : s / 10~19 : g / 100~109 : v
			// if(0<=searchIndex && searchIndex <=9) {}이런식으로사용도ok
			if (searchIndex / 100 == 1) {
				// vMembers
				searchIndex -= 100; // 100더해서 return했으므로 빼줘야함
				Vip v = vMembers[searchIndex];
				v.setGrade(updateGrade);
				//setter를 사용해서는 수정x - 객체가 아닌 글씨만 바뀐다
				//vip -> gold라고 바뀌엇지만 여전히 vip객체인것(보너스문제)
				//등급이바뀌면 객체도 바뀌도록 해줘야함 - 기존입력을 삭제하고 새로등급을 작성해줘야함
				v.setName(updateName);
				v.setPoint(updatePoint);
			} else if (searchIndex / 10 == 1) {
				// gMembers
				searchIndex -= 10;
				Gold g = gMembers[searchIndex];
				g.setGrade(updateGrade);
				g.setName(updateName);
				g.setPoint(updatePoint);
				
			} else {
				// sMembers
				sMembers[searchIndex].setGrade(updateGrade);
				sMembers[searchIndex].setName(updateName);
				sMembers[searchIndex].setPoint(updatePoint);
			}

		}
	}

	public void deleteMember() {
		System.out.println("\n-------회원 정보 삭제-------\n");
		System.out.print("삭제할 회원 이름 입력 : ");
		String name = sc.next();
		int searchIndex = searchMember2(name);
		if (searchIndex == -1) {
			System.out.println("회원정보를 조회할 수 없습니다.");
		} else {
			if (flag == 's') {
				for (int i = searchIndex; i < sIndex - 1; i++) {
					sMembers[i] = sMembers[i + 1];
				}
				sIndex--;
				sMembers[sIndex] = null;
			} else if (flag == 'g') {
				for (int i = searchIndex; i < gIndex - 1; i++) {
					gMembers[i] = gMembers[i + 1];
				}
				gIndex--;
				gMembers[gIndex] = null;
			} else if (flag == 'v') {
				for (int i = searchIndex; i < vIndex - 1; i++) {
					vMembers[i] = vMembers[i + 1];
				}
				vMembers[--vIndex] = null;// 전위연산으로 빼고작업
			}
			System.out.println("회원삭제 완료");
		}
	}

	// searchMember 방법1.배열을 사용(회원검색)

	// searchMember 방법1.배열을 되돌려주기
	public int[] searchMember1(String searchName) {
		// return i만 받으면 문제발생 ) index숫자는 받았는데 어느배열의 index인지 알 수 없음
		// 구분할 값이 두개는 있어야함 - 어떤배열인지 / 그배열의 몇번째인지
		// 메소드에서 return은 하나밖에 못씀
		// 방법1. 이 용도의 vo만들기
		// 방법2. 배열을 되돌려주기
		int[] arr = new int[2];
		for (int i = 0; i < sIndex; i++) {
			Silver s = sMembers[i];
			String name = s.getName();
			if (name.equals(searchName)) {
				arr[0] = 1;
				arr[1] = i;
				return arr;
			}
		}
		for (int i = 0; i < gIndex; i++) {
			Gold g = gMembers[i];
			if (g.getName().equals(searchName)) {
				arr[0] = 2;
				arr[1] = i;
				return arr;
			}
		}
		for (int i = 0; i < vIndex; i++) {
			if (vMembers[i].getName().equals(searchName)) {
				arr[0] = 3;
				arr[1] = i;
				return arr;
			}
		}
		return arr;
	}

	// searchMember 방법2.구분을위한 변수(char flag)를 이용(회원삭제)
	public int searchMember2(String searchName) {
		for (int i = 0; i < sIndex; i++) {
			Silver s = sMembers[i];
			if (s.getName().equals(searchName)) {
				flag = 's';
				return i;
			}
		}
		for (int i = 0; i < gIndex; i++) {
			if (gMembers[i].getName().equals(searchName)) {
				flag = 'g';
				return i;
			}
		}
		for (int i = 0; i < vIndex; i++) {
			Vip v = vMembers[i];
			String name = v.getName();
			if (name.equals(searchName)) {
				flag = 'v';
				return i;
			}
		}
		return -1;
	}

	// searchMember 방법3.return에 특정값을 더해서 인덱스번호를 겹치지않게 사용하여 구분(회원수정)
	// 대신 위메소드에서 사용할 때 더한값을 빼줘야한다!
	// 배열크기가 10이기때문에 +10 +100사용할수있음 길이가 다르면 바꿔줘야한다. 
	public int searchMember3(String searchName) {
		for (int i = 0; i < sIndex; i++) {
			Silver s = sMembers[i];
			if (s.getName().equals(searchName)) {
				return i;// 0~9
			}
		}
		for (int i = 0; i < gIndex; i++) {
			if (gMembers[i].getName().equals(searchName)) {
				return i + 10;// 10~19
			}
		}
		for (int i = 0; i < vIndex; i++) {
			Vip v = vMembers[i];
			String name = v.getName();
			if (name.equals(searchName)) {
				return i + 100;// 100~109
			}
		}
		return -1;
	}

}

 

Comments