본문 바로가기

JAVA/기초 프로그래밍

야구선수 등록 프로그램(Me)

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