급여 계산하기
문제
실습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;
}
}
}
}