문제

실습2: 급여계산하기

  • 입력: 기본급, 직책(사원/대리/과장/부장)

  • 출력: 실수령액 =xxx원

계산식은 다음과 같다

실수령액 = 기본급 +직책수당 – 세금
세금 = 기본급의 10%


직책 수당표

  • 과장: 200,000

  • 부장: 500,000


풀이

package p20200623;

import java.util.Scanner;

class Employee{   //Employee 객체를 추상화하기 위해 새 클래스 생성
	double salary;   // 월급이라는 변수 추가, 소수점 계산을 위해 double로 설정했는데 int여도 문제 없는지는 잘 모르겠음.
}

class EmployeeSalary extends Employee{  // 임플로이의 자식 메소드로 새 클래스를 생성했는데, 그냥 EmployeeService로 메소드만 모인 클래스 만드는게 깔끔해보임.  
	public void setSalary(double salary) { //월급의 게터세터
		this.salary = salary;
	}
	public double getSalary() {
		return salary;
	}
	public double getRAF() {  // 직급별 실수령액의 게터. 세터는 따로 필요 없어서 만들지 않았음. 세금 10% 계산을 위해 0.9를 곱한 후 리턴.
		return salary*0.9;
	}
	public double getDeputy() {
		return salary*0.9;
	}
	public double getChief() {
		return (salary+200000)*0.9;
	}
	public double getHead() {
		return (salary+500000)*0.9;
	}
}

public class Practice02 {
	
	public static void main(String[] args) { // 메인메소드
		Scanner scanner = new Scanner(System.in); // 스캐너 호출용 인스턴스 생성
		EmployeeSalary instance = new EmployeeSalary(); // 메소드 호출을 위한 인스턴스 생성
		while(true) {
			System.out.println("0. 종료  1. 기본급 입력  2. 실수령액 조회");
			switch(scanner.nextInt()) {
				case 0 : System.out.println("종료"); return;
				case 1 : 
					System.out.println("기본급을 입력해주세요 (단위 : 원)");
					instance.setSalary(scanner.nextDouble()); //setSalary 메소드 호출, 매개변수는 스캐너로 받겠음. 더블을 받아야 하니 넥스트더블 메소드 사용.
					System.out.printf("현재 설정된 기본급은 %.0f원 입니다.%n",instance.getSalary()); //%.0f는 실수값을 띄울건데 소수점 0번쨰 자리까지 표기해라라는 의미.
					break;                                                                   //getSalary 게터 메소드를 사용해 입력한 기본급을 보여주어봤음
				case 2 :
					System.out.println("조회할 직책을 선택하세요");
					System.out.println("0. 뒤로가기  1. 사원  2. 대리  3. 과장  4. 부장");
					switch(scanner.nextInt()) {
						case 0 : break;
						case 1 :
							System.out.printf("사원 직책의 실수령액 : %.0f원%n",instance.getRAF()); break; //각 선택지에 대해 게터 메소드로 실수령액을 표기해준다.
						case 2 :
							System.out.printf("대리 직책의 실수령액 : %.0f원%n",instance.getDeputy()); break;
						case 3 :	
							System.out.printf("과장 직책의 실수령액 : %.0f원%n",instance.getChief()); break;
						case 4 :
							System.out.printf("부장 직책의 실수령액 : %.0f원%n",instance.getHead()); break;
						default : System.out.println("올바른 메뉴를 선택하세요");break; //케이스에 등록되지 않은 값이 들어오면 디폴트로 오며 에러 메세지가 출력된다. 
					}
					break;
				default : System.out.println("올바른 메뉴를 선택하세요"); break;
			}
		}
		
	}

}