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("축하합니다");
}
// 시상의 로직
// 원하는 대상의 배열을 따로 생성하여 배열의 길이 만큼의 랜덤 숫자를 뽑아 뽑힌 번호의 인덱스의 객체가 시상자.
}
}
}
}