본문 바로가기
문제 풀이/Java

[Java] 상속과 메서드 오버로딩을 활용하여 급여관리 시스템 만들어보기

by 찐코딩 2021. 8. 30.

package overriding;

import java.util.Scanner;

// 부모 클래스
class Employee {
	
	// 멤버 변수
	String name;	// 이름
	
	// 게터
	String getName() {	// 이름 획득
		return name;		
	}
	
	// 세터
	void setName(String n) {	// 이름 지정
		this.name=n;	
	}
	
	// 상속을 받을 클래스에서 재정의를 진행할 메서드
	int getPays() {		// 급여 계산
		return 0;
	}
}

// 정규직_자식 클래스
class Permanent extends Employee {

	// 멤버변수
	// String name;
	int pays;                 // 급여
	int bonus;                // 보너스
	
	Permanent() {  }   // 기본 생성자
	
	Permanent(String name, int pays, int bonus) {	// 인자 생성자
		this.name = name;
		this.pays = pays;
		this.bonus = bonus;
	} 
	
	int getBonus() {
		return bonus;
	}

	void setBonus(int bonus) {
		this.bonus = bonus;
	}

	void setPays(int pays) {
		this.pays = pays;
	}

	// 부모의 원형 메서드를 재정의한 메서드.
	@Override
	int getPays() {
		return pays + bonus;
	}	
}

// 임시직_자식 클래스
class Temporary extends Employee {
	
	// 멤버 변수
	// String name;
	int time;                // 작업 시간
	int pays;                // 시간당 급여
	
	public Temporary() {  }  // 기본 생성자
	
	public Temporary(String name, int time, int pays) {	// 인자 생성자
		this.name = name;
		this.time = time;
		this.pays = pays;
	}
	
	public int getTime() {
		return time;
	}
	
	public void setTime(int time) {
		this.time = time;
	}
	
	public void setPays(int pays) {
		this.pays = pays;
	}
	
	// 부모의 원형 메서드를 재정의한 메서드.
	@Override
	int getPays() {
		return time * pays;
	}

}


public class Exam01_Employee {

	public static void main(String[] args) {
		
		Scanner sc=new Scanner(System.in);
				
		String employee="";

		System.out.println("고용형태-정규직<P>, 임시직<T>를 입력하세요.");
		employee=sc.next();
		
		if(employee.equalsIgnoreCase("P")) {     //정규직일 때
			Permanent permanent = new Permanent();
			employee="정규직";
			System.out.println("이름, 기본급, 보너스를 입력하세요");
			permanent.setName(sc.next());
			permanent.setPays(sc.nextInt());
			permanent.setBonus(sc.nextInt());
			
			System.out.println("==============================");
			System.out.println("고용형태 :" + employee);
			System.out.println("이름 : " + permanent.getName());
			System.out.printf("급여 : %,d원\n", permanent.getPays()); }
		
		else if(employee.equalsIgnoreCase("T")) {     //임시직일 때
			Temporary temporary = new Temporary();
			employee="임시직";
			System.out.println("이름, 작업시간, 시간당 급여를 입력하세요");
			temporary.setName(sc.next());
			temporary.setTime(sc.nextInt());
			temporary.setPays(sc.nextInt());
			
			System.out.println("==============================");
			System.out.println("고용형태 : " + employee);
			System.out.println("이름 : " + temporary.getName());
			System.out.printf("급여 : %,d원\n", temporary.getPays());	}
			
		else {
			System.out.println("잘못 입력하셨습니다.");
		}
		
		sc.close();
	}
}

결과

고용형태-정규직<P>, 임시직<T>를 입력하세요.
p
이름, 기본급, 보너스를 입력하세요
홍길동
2000000
50000
==============================
고용형태 :정규직
이름 : 홍길동
급여 : 2,050,000원

 

댓글