1. Human, Batter, Pitcher은 모두 끌어다 쓸 거여서 getter,setter셋팅, 기본생성자, this. , (toString-> 나중에 출력을 위한것: 오버라이딩 주의)까지 생성해준다
-> 자식클래스의 this. 변수에 Human this.를 추가
-> 자식클래스의 toString()출력부분 앞에 super.toString()을 추가. = Human값까지 출력
(ex, Human [number=4, name=3, age=5, height=3.0] Batter [batcount=4, hit=5, hitAvg=5.0])
2. 나는 데이터 불러오기와 저장까지는 못했음
3. 배열은 부모클래스의 배열로 잡아서 대입
(상속을 받았을 땐 부모클래스의 인스턴스로 자식 클래스를 묶을 수 있음 -> pit[], bt[]가 아닌 human[];)
4. setter, getter 사용을 위해
Batter_me bt = new Batter_me(); 와 같이 자식클래스 객체 생성
5. 주의 할 것으로는
선수의 등번호는 일반적으로 입력받지 않음,
투수인지 / 타자인지 먼저 입력받아 나눠서 정보 수령
6. 삭제 시
allClean()이라는 메서드를 각각 자식클래스에 생성하여 호출하여 사용함
7. 정해진 배열에 입력하기 위해 findIndex를 통해 빈곳을 찾아 대입함
main
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
MemberDao_me dao = new MemberDao_me();
// String member[][] = dataLoad();
/*
메인클래스 - 선수등록 선수삭제
DAO - 배열(사람 아래 pitcher와batter), 함수 :
DTO - human 아래 pitcher와 batter가 존재
최종 - 파일 저장, 불러오기
*/
/*
메인
//menu 구성
//1.선수추가
//
*/
int choice;
while(true) {
System.out.println("-----------------메뉴");
System.out.println("1. 선수 추가");
System.out.println("2. 선수 삭제");
System.out.println("3. 선수 검색");
System.out.println("4. 선수 정보 수정");
System.out.println("5. 선수 정보 모두 출력");
System.out.println("6. 데이터의 저장");
System.out.println("원하시는 번호를 입력해 주십시오");
System.out.print(">>> ");
choice = sc.nextInt();
switch(choice) {
case 1: // 학생추가
dao.insert();
dao.allPrint();
break;
case 2:
dao.delete();
break;
case 3:
dao.select();
break;
case 4:
dao.update();
break;
case 5:
dao.allPrint();
break;
// case 6:
// dao.dataSave();
// break;
}
}
}
Dao
public class MemberDao_me {
Scanner sc = new Scanner(System.in);
Human_me human[] = new Human_me[20];//상속을 받았을 땐 부모클래스의 인스턴스로 자식 클래스를 묶을 수 있음 -> pit[], bt[]가 아닌 human[];
Pitcher_me pit = new Pitcher_me();
Batter_me bt = new Batter_me(); //->setter, getter 사용의미
Human_me hu = new Human_me();
int count = 0;
int num;
// 배열에 저장
public MemberDao_me() {
}
public void insert() {
System.out.println("입력할 선수의 타입을 작성해주세요 1.투수 2.타자");
num = sc.nextInt();
if(num == 1) { //투수
System.out.println("등번호를 입력해 주세요");//Human의 요소인 4가지는 if문 위에 먼저 입력받고 if로 나눠 줄 수 있음
//일반적으로 투수와 타자의 등번호 앞자리는 다름.
pit.setNumber(sc.nextInt());//사실 번호는 충돌날 수 있기 때문에 입력을 받는게 아니고 지정을 해줘야 함.
//등번호는 memberCount = 1000으로 고정해서 ++ , 타자는 memberCount +1000 으로 시작해서 ++
//그렇게 되면 타자에서 1000을 빼도 중복없이 1001,~ 2 3 4 5로 나옴.
System.out.println("이름을 입력해 주세요");
pit.setName(sc.next());
System.out.println("나이를 입력해 주세요");
pit.setAge(sc.nextInt());
System.out.println("신장을 입력해 주세요");
pit.setHeight(sc.nextInt());
System.out.println("이긴 횟수를 입력해 주세요");
pit.setWin(sc.nextInt());
System.out.println("진 횟수를 입력해 주세요");
pit.setLose(sc.nextInt());
System.out.println("방어율을 입력해 주세요");
pit.setDefence(sc.nextInt());
human[count] = pit;
count++;
}else if(num == 2){ //타자
System.out.println("등번호를 입력해 주세요");
bt.setNumber(sc.nextInt());
System.out.println("이름을 입력해 주세요");
bt.setName(sc.next());
System.out.println("나이를 입력해 주세요");
bt.setAge(sc.nextInt());
System.out.println("신장을 입력해 주세요");
bt.setHeight(sc.nextInt());
System.out.println("타수를 입력해 주세요");
bt.setBatcount(sc.nextInt());
System.out.println("안타수를 입력해 주세요");
bt.setHit(sc.nextInt());
System.out.println("타율을 입력해 주세요");
bt.setHitAvg(sc.nextInt());
human[count] = bt;
count++;
}
}
public void delete() { //삭제, 검색, 수정의 공통분모는 함수로 따로 빼서 사용
System.out.println("삭제 할 선수의 등번호를 입력해 주세요");
int num = sc.nextInt();
int findIndex = seach(num);
if (findIndex == -1) {
System.out.println("선수 명단에 없습니다. 삭제 할 수 없습니다");
return;
}
//삭제
if (human[findIndex] instanceof Pitcher_me) {
Batter_me b = (Batter_me)human[findIndex];
b.setNumber(0);
b.setName("");
b.setAge(0);
b.setHeight(0);
b.setBatcount(0);
b.setHit(0);
b.setHitAvg(0);
}
//위와같이 전체를 리셋해줘도 되고, 해당 클래스 안에 allClean메서드 생성 후 호출해줘도 된다.
else if (human[findIndex] instanceof Pitcher_me) {
Pitcher_me p = (Pitcher_me)human[findIndex];
p.allClean();
}
}
//내가 한것
// for (int j = 0; j < human.length; j++) {
// if((human[j].getNumber())== num) {
// human[j].setName("");
//
//
// System.out.println("데이터를 삭제하였습니다");
// }else {
// System.out.println("삭제할 선수의 이름을 찾지 못했습니다");
// }
// }
//
public void select() {
System.out.print("검색 할 선수의 등번호를 입력해 주세요 ");
int num = sc.nextInt();
//findIndex를 사용할 것
int findIndex = seach(num);
if (findIndex == -1) {
System.out.println("선수 명단에 없습니다");
}else {
// System.out.println("번호 : "+human[findIndex].getNumber());
// System.out.println("이름 : "+human[findIndex].getName());
// System.out.println("나이 : "+human[findIndex].getAge());
// System.out.println("신장 : "+human[findIndex].getHeight());
if (human[findIndex] instanceof Pitcher_me) {
System.out.println("승리 : "+((Pitcher_me)human[findIndex]).getWin());
System.out.println("패전 : "+((Pitcher_me)human[findIndex]).getLose());
System.out.println("방어율 : "+((Pitcher_me)human[findIndex]).getWin());
}else if(human[findIndex] instanceof Batter_me) {
System.out.println(human[findIndex]);
//한바퀴 돌려도 됨
}
}
//내가한거
// for (int j = 0; j < human.length; j++) {
// if((human[j].getNumber())== num) {
// System.out.println(human[j]);
// }else System.out.println("데이터를 찾을 수 없습니다");
// }
}
public void update() {
System.out.print("수정 할 선수의 등번호를 입력해 주세요 ");
int num = sc.nextInt();
boolean ok = false;
for (int i = 0; i < human.length; i++) {
while((human[i].getNumber())== num) {
if(human[i] instanceof Pitcher_me){
System.out.println("수정 데이터를 입력해 주십시오.");
System.out.println("이긴 횟수를 입력해 주세요");
pit.setWin(sc.nextInt());
System.out.println("진 횟수를 입력해 주세요");
pit.setLose(sc.nextInt());
System.out.println("방어율을 입력해 주세요");
pit.setDefence(sc.nextInt());
human[i] = pit;
ok = true;
break;
}else if(human[i] instanceof Batter_me) {
System.out.println("수정 데이터를 입력해 주십시오.");
System.out.println("batcount를 입력해 주세요");
bt.setBatcount(sc.nextInt());
System.out.println("안타를 입력해 주세요");
bt.setHit(sc.nextInt());
System.out.println("타율을 입력해 주세요");
bt.setHitAvg(sc.nextInt());
human[i] = bt;
ok = true;
break;
}
}
if(ok = true) {
System.out.println("데이터가 수정되었습니다");
}else {
System.out.println("데이터를 찾을 수 없습니다");
}
}
}
public void allPrint() {
for (int i = 0; i < human.length; i++) {
if (!(human[i] == null || human[i].getName().equals("") )) {
System.out.println(human[i].toString());
}
}
}
// static int getSearchIndex(Human human[], String name) {
//
// int findIndex = -1;
// for (int i = 0; i < human.length; i++) {
//
// if(human[i].equals(name)) {
// findIndex = i;
// break;
// }
// }
// return findIndex;
// }
public int seach(int num) {
int index = -1;
for (int i = 0; i < human.length; i++) {
if (human[i] != null) {
if (num ==(human[i].getNumber())) {
index = i;
break;
}
}
}return index;
}
}
Human
public class Human_me {
private int number;//선수번호 = 주민번호->중복 없음 = sequence number
private String name;
private int age;
private double height;
public Human_me() {
// TODO Auto-generated constructor stub
}
//Human 오버로드
public Human_me(int number, String name, int age, double height) {
super();
this.number = number;
this.name = name;
this.age = age;
this.height = height;
}
//setter getter 생성
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
@Override
public String toString() {
return "Human [number=" + number + ", name=" + name + ", age=" + age + ", height=" + height + "]";
}
}
Batter
public class Batter_me extends Human_me {
private int batcount;
private int hit;//안타
private double hitAvg;//타율(0.0~1.0)
public Batter_me() {
// TODO Auto-generated constructor stub
}
public Batter_me(int number, String name, int age, double height, int batcount, int hit, double hitAvg) {
super(number, name, age, height);
this.batcount = batcount;
this.hit = hit;
this.hitAvg = hitAvg;
}
public int getBatcount() {
return batcount;
}
public void setBatcount(int batcount) {
this.batcount = batcount;
}
public int getHit() {
return hit;
}
public void setHit(int hit) {
this.hit = hit;
}
public double getHitAvg() {
return hitAvg;
}
public void setHitAvg(double hitAvg) {
this.hitAvg = hitAvg;
}
@Override
public String toString() {
return super.toString()+" Batter [batcount=" + batcount + ", hit=" + hit + ", hitAvg=" + hitAvg + "]";
}
}
Pitcher
public class Pitcher_me extends Human_me {
private int win;
private int lose;
private double defence;
Human_me hu = new Human_me();
public Pitcher_me() {
// TODO Auto-generated constructor stub
}
public Pitcher_me(int number, String name, int age, double height,int win, int lose, double defence) {
super(number, name, age, height);//**human의 기본생성자가 아닌 변수를 가진 생성자 호출을 위해 or this.setName(number);~부터 아래 변수 아래 입력
this.win = win;
this.lose = lose;
this.defence = defence;
}
public int getWin() {
return win;
}
public void setWin(int win) {
this.win = win;
}
public int getLose() {
return lose;
}
public void setLose(int lose) {
this.lose = lose;
}
public double getDefence() {
return defence;
}
public void setDefence(double defence) {
this.defence = defence;
}
@Override
public String toString() {
return super.toString()+" Pitcher [win=" + win + ", lose=" + lose + ", defence=" + defence + "]";
}
//앞에 super.toString()을 추가해주면 부모클래스도 같이 호출됨
public void allClean() {
setNumber(0);
setName("");
setAge(0);
setHeight(0);
setWin(0);
setLose(0);
setDefence(0);
}
}
'JAVA > 기초 프로그래밍' 카테고리의 다른 글
interface//인터페이스 NameCard (0) | 2020.06.09 |
---|---|
야구선수 등록 프로그램(답안) (0) | 2020.06.05 |
Calendar 캘린더 Class (0) | 2020.06.03 |
객체//베팅게임 (0) | 2020.06.02 |
객체//tv프로그램 (0) | 2020.06.02 |