Adventure Time - Finn 3
본문 바로가기
JAVA/프로그램 설계 및 제작

연예인 정보 저장 코딩 모듈화 x, 유효성 x

by hyun9_9 2023. 12. 5.
package test;

import java.time.LocalDate;
import java.util.Random;
import java.util.Scanner;

class Celebrity {

	String name;
	int birthYear;
	String agency;
	int hight;
	String type;

	
	Celebrity(String name, int birthYear, String agency, int hight, String type) {
		this.name = name;
		this.birthYear = birthYear;
		this.agency = agency;
		this.hight = hight;
		this.type = type;
	}

	void printInfo() {
		int now = LocalDate.now().getYear();
		System.out.println("이름 : " + this.name);
		System.out.println("나이 : " + (now - this.birthYear));
		System.out.println("소속사 : " + this.agency);
		System.out.println("키 : " + this.hight);
	}

	void simplePrint() {
		int now = LocalDate.now().getYear();
		System.out.println(name + " / " + (now - birthYear));
	}

	void agencyChange() {
		Scanner sc = new Scanner(System.in);
		System.out.println(agency + "(을)를 변경하시겠습니까? ");
		System.out.print("(예 / 아니오) >>>");
		String choose = sc.next();
		if (choose.equals("예")) {
			System.out.println("변경할 소속사를 입력하세요 : ");
			agency = sc.next();
			System.out.println("변경이 완료 되었습니다");
		} else if (choose.equals("아니오")) {
			System.out.println("변경을 취소합니다");
		}

	}

}




class Entertainer extends Celebrity {
	int entertainmentAwardCount;

	Entertainer(String name, int birthYear, int hight) {
		this(name, birthYear, "무소속", hight);
	}

	Entertainer(String name, int birthYear, String agency, int hight) {
		super(name, birthYear, agency, hight, "예능인");
		this.entertainmentAwardCount = 0;
	}

	@Override
	void printInfo() {
		int now = LocalDate.now().getYear();
		System.out.println("직업 : " + this.type);
		System.out.println("이름 : " + this.name);
		System.out.println("나이 : " + (now - this.birthYear));
		System.out.println("소속사 : " + this.agency);
		System.out.println("키 : " + this.hight);
		if (entertainmentAwardCount > 0) {
			System.out.println("연예 대상 횟수 : " + this.entertainmentAwardCount);
		}
	}

}




class Actor extends Celebrity {
	int actingAwardCount;
	String famousLine;

	Actor(String name, int birthYear, int hight, String famousLine) {
		this(name, birthYear, "무소속", hight, famousLine);
	}

	Actor(String name, int birthYear, String agency, int hight, String famousLine) {
		super(name, birthYear, agency, hight, "배우");
		this.actingAwardCount = 0;
	}

	@Override
	void printInfo() {
		int now = LocalDate.now().getYear();
		System.out.println("직업 : " + this.type);
		System.out.println("이름 : " + this.name);
		System.out.println("나이 : " + (now - this.birthYear));
		System.out.println("소속사 : " + this.agency);
		System.out.println("키 : " + this.hight);
		if (actingAwardCount > 0) {
			System.out.println("연기 대상 횟수 : " + this.actingAwardCount);
		}
	}

	void famousLinePrint() {
		System.out.println(this.famousLine);
	}
}

class Singer extends Celebrity {
	int musicAwardsCount;

	Singer(String name, int birthYear, int hight) {
		this(name, birthYear, "무소속", hight);
	}

	Singer(String name, int birthYear, String agency, int hight) {
		super(name, birthYear, agency, hight, "가수");
		this.musicAwardsCount = 0;
	}

	@Override
	void printInfo() {
		int now = LocalDate.now().getYear();
		System.out.println("직업 : " + this.type);
		System.out.println("이름 : " + this.name);
		System.out.println("나이 : " + (now - this.birthYear));
		System.out.println("소속사 : " + this.agency);
		System.out.println("키 : " + this.hight);
		if (musicAwardsCount > 0) {
			System.out.println("가요 대상 횟수 : " + this.musicAwardsCount);
		}
	}
}

public class Test01 {
	static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {

		Celebrity[] datas = new Celebrity[5];
		int index = 0;
		// 연예인을 저장하고 시상식을 진행 할 수 있는 프로그램을 만들어주세요.
		while (true) {
			// =====저장 프로그램=====
			System.out.println("1. 추가");// 1. 연예인 추가
			System.out.println("2. 조회");// 2. 조회
			System.out.println("3. 시상");// 3. 시상
			System.out.println("0. 종료");// 4. 종료
			System.out.print(">>>");
			int action = sc.nextInt();
			if (action == 0) {// 4번 선택시

				// 프로그램 종료
				System.out.println("프로그램 종료");
				break;
			} else if (action == 1) {// 1번 선택시
				System.out.println("1. 가수");// 1. 가수
				System.out.println("2. 배우");// 2. 배우
				System.out.println("3. 예능인"); // 3. 예능인
				System.out.print(">>>");
				action = sc.nextInt();
				if (action == 1) { // 1번 선택시
					System.out.print("이름을 입력하세요 : ");
					String name = sc.next();
					System.out.print("출생년도를 입력하세요 : ");
					int birthYear = sc.nextInt();
					System.out.print("키를 입력하세요 : ");
					int hight = sc.nextInt();
					System.out.println("소속사가 있습니까?");
					System.out.print("(예 / 아니오) >>>");// 소속사가 있습니까?
					String choose = sc.next();
					if (choose.equals("예")) {// 1.예
						System.out.print("소속사를 입력해주세요 : ");
						String agency = sc.next();
						datas[index++] = new Singer(name, birthYear, agency, hight);
					} else if (choose.equals("아니오")) {// 2.아니오
						datas[index++] = new Singer(name, birthYear, hight);
					}

				} else if (action == 2) {// 2번 선택시
					System.out.print("이름을 입력하세요 : ");
					String name = sc.next();
					System.out.print("출생년도를 입력하세요 : ");
					int birthYear = sc.nextInt();
					System.out.print("키를 입력하세요 : ");
					int hight = sc.nextInt();
					System.out.print("명대사를 입력하세요 : ");// 명대사를 입력하세요
					String famousLine = sc.next();
					System.out.println("소속사가 있습니까?");
					System.out.print("(예 / 아니오) >>>");// 소속사가 있습니까?
					String choose = sc.next();
					if (choose.equals("예")) {// 1.예
						System.out.print("소속사를 입력해주세요 : ");
						String agency = sc.next();
						datas[index++] = new Actor(name, birthYear, agency, hight, famousLine);
					} else if (choose.equals("아니오")) {// 2.아니오
						datas[index++] = new Actor(name, birthYear, hight, famousLine);
					}

				} else if (action == 3) { // 3번 선택시
					System.out.print("이름을 입력하세요 : ");
					String name = sc.next();
					System.out.print("출생년도를 입력하세요 : ");
					int birthYear = sc.nextInt();
					System.out.print("키를 입력하세요 : ");
					int hight = sc.nextInt();
					System.out.println("소속사가 있습니까?");
					System.out.print("(예 / 아니오) >>>");// 소속사가 있습니까?
					String choose = sc.next();
					if (choose.equals("예")) {// 1.예
						System.out.print("소속사를 입력해주세요 : ");
						String agency = sc.next();
						datas[index++] = new Entertainer(name, birthYear, agency, hight);
					} else if (choose.equals("아니오")) {// 2.아니오
						datas[index++] = new Entertainer(name, birthYear, hight);
					}
				}
			} else if (action == 2) {// 2번 선택시
				System.out.println("1. 모든 연예인 조회");// 1. 모든 연예인 조회
				System.out.println("2. 각 분야 별 연예인 조회");// 2. 각 분야 별 연예인 조회
				System.out.println("3. 이름으로 연예인 조회");// 3. 이름으로 연예인 조회
				System.out.println("4. 키 순서 조회");// 4. 키 순서 조회
				System.out.print(">>>");
				action = sc.nextInt();
				if (action == 1) {// 1번 선택시
					for (int i = 0; i < index; i++) {// 배열의 모든 연예인 출력
						datas[i].simplePrint();
						if (datas[i] instanceof Actor) {
							((Actor) datas[i]).famousLinePrint();
						}
					}

				} else if (action == 2) {// 2번 선택시
					System.out.println("1.가수");// 1.가수
					System.out.println("2.배우");// 2.배우
					System.out.println("3.예능인");// 3.예능인
					System.out.print(">>>");
					action = sc.nextInt();
					for (int i = 0; i < index; i++) {
						if (action == 1 && datas[i] instanceof Singer) {// 1번 선택시
							datas[i].simplePrint();
							// 배열에서 가수만 찾아서 출력
						} else if (action == 2 && datas[i] instanceof Actor) {// 2번 선택시
							datas[i].simplePrint();
							if (datas[i] instanceof Actor) {
								((Actor) datas[i]).famousLinePrint();
							}
							// 배열에서 배우만 찾아서 출력
						} else if (action == 3 && datas[i] instanceof Entertainer) {// 3번 선택시
							datas[i].simplePrint();
							// 배열에서 예능인만 찾아서 출력
						}
					}
				} else if (action == 3) {// 3번 선택시
					System.out.print("이름을 입력하세요 : ");// 검색하고자 하는 연예인의 이름을 입력하세요
					String name = sc.next();
					for (int i = 0; i < index; i++) {// 검색 받은 연예인의 이름을 찾아서 출력
						if (datas[i].name.equals(name)) {
							datas[i].printInfo();
						}
					}
				} else if (action == 4) {// 4번 선택시
					// 가장큰 맥스 값부터 순서대로 출력(최댓값 찾기 반복)

					int maxIndex = 0;
					for (int i = 1; i < index; i++) {
						if (datas[maxIndex].hight < datas[i].hight) {
							maxIndex = i;
						}
					}
					System.out.print(datas[maxIndex].name+" / "+ datas[maxIndex].hight);
					System.out.println();
					while (true) {
						int max = 0;
						boolean ck=true;
						
						for (int i = 0; i < index; i++) {
							
							if (datas[max].hight < datas[i].hight && datas[i].hight <= datas[maxIndex].hight && maxIndex!=i) {
								max = i;							
								ck=false;
							}
						}
						maxIndex = max;
						System.out.print(datas[maxIndex].name+" / "+ datas[maxIndex].hight);
						System.out.println();
						if(ck) {
							break;
						}
					}
				}
			} else if (action == 3) {// 3번 선택시
				Random rand=new Random();
				Celebrity[] numberOfPeople = new Celebrity[5];// 인원 수와 동일한 길이의 배열 생성
				int cnt=0;
				System.out.println("1.가요대상");// 1.가요대상
				System.out.println("2.연기대상");// 2.연기대상
				System.out.println("3.연예대상");// 3.연예대상
				System.out.print(">>>");
				action = sc.nextInt();

				if (action == 1) {// 1번 선택시
					for(int i=0;i<index;i++) {// 배열 내의 가수 인원수 파악
						if(datas[i] instanceof Singer) {
							numberOfPeople[cnt++]=datas[i];// 배열에 해당 객체 저장
						}
					}
					int winner=rand.nextInt((cnt));
					((Singer)numberOfPeople[winner]).musicAwardsCount++;
					System.out.println("가요 대상은 !!!");
					System.out.println(numberOfPeople[winner].name+"입니다");
					System.out.println("축하합니다");
					
				} else if (action == 2) {// 2번 선택시
					for(int i=0;i<index;i++) {// 배열 내의 배우 인원수 파악
						if(datas[i] instanceof Actor) {
							numberOfPeople[cnt++]=datas[i];// 배열에 해당 객체 저장
						}
					}
					int winner=rand.nextInt((cnt));
					((Actor)numberOfPeople[winner]).actingAwardCount++;
					System.out.println("연기 대상은 !!!");
					System.out.println(numberOfPeople[winner].name+"입니다");
					System.out.println("축하합니다");
				} else if (action == 3) {// 3번 선택시
					for(int i=0;i<index;i++) {// 배열 내의 예능인 인원수 파악
						if(datas[i] instanceof Entertainer) {
							numberOfPeople[cnt++]=datas[i];// 배열에 해당 객체 저장
						}
					}
					int winner=rand.nextInt((cnt));
					((Entertainer)numberOfPeople[winner]).entertainmentAwardCount++;
					System.out.println("연예 대상은 !!!");
					System.out.println(numberOfPeople[winner].name+"입니다");
					System.out.println("축하합니다");
				}

				// 시상의 로직
				// 원하는 대상의 배열을 따로 생성하여 배열의 길이 만큼의 랜덤 숫자를 뽑아 뽑힌 번호의 인덱스의 객체가 시상자.
			}

		}
	}

}