inblog logo
|
DailyCoding
    Practice

    13-1. 사원관리(~자바 클래스 생성자까지)_문제

    박은서's avatar
    박은서
    Dec 10, 2025
    13-1. 사원관리(~자바 클래스 생성자까지)_문제
    Contents
    종합 실습 과제사원 관리 & 월급 정산 프로그램 만들기패키지 example01 만들어서 하기1. Employee 클래스 만들기2. 메인 클래스 설계3. 메인에서 어떻게 호출되는지 & 실행 예시

    종합 실습 과제

    사원 관리 & 월급 정산 프로그램 만들기

    0. 과제 목표

    지금까지 배운 내용을 한 번에 써먹어 보는 종합 미니 프로젝트입니다.
    • 기본 자료형, 연산자
    • if / for 문
    • 클래스, 객체, 생성자, 생성자 오버로딩
    • static / heap / stack 개념
    • 배열(Employee[])
    위 내용을 모두 사용해서 사원 관리 프로그램을 만드세요.

     

    패키지 example01 만들어서 하기

    1. Employee 클래스 만들기

    1-1. 필드 정의

    Employee 클래스에 다음과 같은 필드를 만드세요.
    String name; // 이름 String phone; // 전화번호 String dept; // 부서 int empNo; // 사원번호 int salary; // 월급 (정수, 단위: 원) String account; // 계좌번호 String position; // 직급 (예: "사원", "대리", "과장", "부장")
    모든 변수는 private을 붙이고, 메서드를 통해 변경합니다.

    1-2. 생성자 오버로딩 (핵심)

    다음 3개의 생성자를 만드세요.
    “상황을 가정하고 왜 필요한지” 생각하면서 작성해 봅니다.
    1. 생성자 1 – 회사에 갓 입사한 상태 (이름 + 전화번호만 아는 상태)
    Employee(String name, String phone)
    • 넘겨받은 값: name, phone
    • 나머지 필드의 기본값은 다음과 같이 넣으세요.
      • dept : "미정"
      • empNo : 0 (아직 안 나온 번호라는 뜻)
      • salary : 0 (월급 미정)
      • account : "" (빈 문자열)
      • position : "사원" (기본 직급)

    1. 생성자 2 – 부서까지 정해진 상태
    Employee(String name, String phone, String dept)
    • 넘겨받은 값: name, phone, dept
    • 나머지 필드 기본값:
      • empNo : 0
      • salary : 0
      • account : ""
      • position : "사원"

    1. 생성자 3 – 모든 정보가 다 정해진 상태
    Employee(String name, String phone, String dept, int empNo, int salary, String account, String position)
    • 넘겨받은 값으로 모든 필드를 초기화합니다.

    1-3. 메서드 정의

    (1) 사원 정보 출력 메서드

    void printInfo()
    • 사원의 모든 정보를 한 줄 또는 여러 줄로 보기 좋게 출력하세요.
      • 예시)
        • 홍길동 / 010-1111-2222 / 개발팀 / 사원번호: 1001 / 직급: 대리 / 월급: 3,000,000 / 계좌: 123-456-7890

    (2) 사원 정보 수정용 메서드 (Setter 역할)

    아직 setter를 정식으로 배우지 않았어도, 아래 메서드를 직접 만들어 보세요.
    반드시 필요한 메서드 (예시):
    void setDept(String dept) void setEmpNo(int empNo) void setSalary(int salary) void setAccount(String account) void setPosition(String position)
    나중에 생성자로 못 넣었던 값(부서, 사원번호, 월급, 계좌, 직급)을
    **“입사 후에 수정한다”**는 느낌으로 사용해 봅니다.

    (3) 연봉 계산 메서드 (기본)

    int calcYearSalary()
    • 리턴값: salary * 12
    • 월급이 3,000,000 이라면 → 연봉은 36,000,000

    (4) 연봉 + 직급별 보너스를 포함한 연봉 (심화)

    if(position.equals("사원")){ }
    int calcYearSalaryWithBonus()
    • 직급에 따라 보너스를 다르게 줍니다. (예시 규칙)
      • "사원" : 기본 연봉의 10% 보너스
      • "대리" : 기본 연봉의 20% 보너스
      • "과장" : 기본 연봉의 30% 보너스
      • "부장" : 기본 연봉의 40% 보너스
    • if문 또는 switch문을 사용해서 구현하세요.
    • 계산 예시
      • 과장, 월급 3,000,000원
        • 기본 연봉: 3,000,000 * 12 = 36,000,000
        • 보너스: 36,000,000 * 0.3 = 10,800,000
        • 총 연봉: 46,800,000

    (5) 승진 메서드 (심화)

    void promote()
    • 직급 순서: "사원" → "대리" → "과장" → "부장"
    • promote()를 한 번 호출할 때마다 다음 직급으로 올라가게 만드세요.
    • 이미 "부장"이면 더 이상 올라가지 않고, 그대로 유지되도록 만드세요.
    • 승진할 때 월급을 함께 올려줍니다. (예: 10% 인상)

    2. 메인 클래스 설계

    EmpApp.java 에 만들기

    2-1. 기본 조건

    • 클래스 이름 예시: EmployeeMain
    • main 메서드 안에서 다음을 준비합니다.
    Employee[] employees = new Employee[10]; // 최대 10명

    2-2. 필수 기능

    기능 1. 사원 등록하기

    1. 사용자에게 메뉴 또는 질문으로 다음을 입력받습니다.
        • 이름
        • 전화번호
        • 부서(모르면 Enter 치게 해서 "미정"으로 처리해도 됨)
        • 월급(모르면 0 입력)
        • 계좌번호(모르면 빈 문자열)
        • 직급(모르면 "사원")
    1. 입력된 정보의 상황에 맞게 생성자를 선택해서 사용합니다.
        • 이름 + 전화번호만 알고 있다 → 생성자 1 사용
        • 이름 + 전화번호 + 부서를 알고 있다 → 생성자 2 사용
        • 모든 정보가 다 있다 → 생성자 3 사용
    1. 생성한 Employee 객체를 employees[count] 에 저장하고, count++ 합니다.
    ⚠ 배열이 꽉 찼을 때(= 10명 등록됐을 때) 더 이상 추가 등록이 안 되도록 체크하는 if문도 넣어보세요.

    기능 2. 전체 사원 목록 출력하기

    1. for문을 이용해서 employees 배열을 0부터 count-1 까지 순회합니다.
    1. 각 사원에 대해 printInfo() 메서드를 호출해서 정보를 출력합니다.

    기능 3. 월급 / 연봉 정산하기

    1. 이번 달 전체 월급 합계 구하기
     
    1. 전체 연봉 합계 구하기
      1.  
    1. 보너스를 포함한 전체 연봉 합계
      1.  

    기능 4. 특정 사원 승진시키기

    1. 사용자에게 사원번호(empNo) 를 입력받습니다.
    1. 배열에서 해당 사원번호를 가진 Employee를 찾아서
    1. promote() 메서드를 실행합니다.
    1. 승진 후 변경된 직급과 월급을 출력합니다.

    기능 5. 월급 이체 시뮬레이션


    3. 메인에서 어떻게 호출되는지 & 실행 예시

    public class EmployeeMain { public static void main(String[] args) { Employee[] employees = new Employee[10]; // 1. 더미로 사원을 10명 만든다. (생성자 유형을 다 써보기) Employee e1 = new Employee("홍길동", "0102222"); Employee e2 = new Employee("장보고", "0105555", "개발팀"); Employee e3 = new Employee("장보고", "0102222", "인사팀", 3, 1000, "8888", "사원"); // 2. 사원 10명을 employees에 담는다. (배열) employees[0]=e1; employees[1]=e2; employees[2]=e3; // 3. printInfo 호출 (전체사원) for (int i = 0; i < employees.length; i++) { employees[i].printInfo(); } // 4. 전체사원의 월급의 합 출력 int totalMonthSalary; System.out.println("기본 월급 총액 = " + totalMonthSalary + "원"); // 5. 전체사원의 연봉의 합 출력 int totalYearSalary; System.out.println("기본 연봉 총액 = " + totalYearSalary + "원"); // 6. 전체사원의 연봉+보너스 출력 int totalYearSalaryWithBonus; System.out.println("보너스 포함 연봉 총액 = " + totalYearSalaryWithBonus + "원"); // 7. 특정 사원 승진 시키기 -------------------------- for(int i=0; i<employees.length; i++){ // 이름이 김철수이면 // promote() 메서드 호출하여 한단계 위로 승진 시키기 } // 승진됐는지 확인하기 for (int i = 0; i < employees.length; i++) { employees[i].printInfo(); } // 8. 월급 이체 시뮬레이션 --------------------------- for(int i=0; i<employees.length; i++){ // 전체사원 월급 이체 시키기 // payAll(); // [급여 이체 완료] 홍길동님께 3000000원이 111-111-111111 계좌로 지급되었습니다. // [급여 이체 완료] 김철수님께 3200000원이 222-222-222222 계좌로 지급되었습니다. // [급여 이체 완료] 이영희님께 3500000원이 333-333-333333 계좌로 지급되었습니다. } } }

    3-2. 콘솔 출력 예시 (어떤 결과가 나와야 하는지)

    이건 샘플 예시라서 숫자/직급/이름은 자유롭게 바꿔도 됨.
    학생들이 “아, 이런 느낌으로 나오면 되는구나” 감만 잡게 해주면 돼.

    1) 처음 전체 사원 출력

    == 전체 사원 목록 == 홍길동 / 010-1111-1111 / 개발팀 / 사원번호: 1001 / 직급: 사원 / 월급: 3000000 / 계좌: 111-111-111111 김철수 / 010-2222-2222 / 인사팀 / 사원번호: 1002 / 직급: 대리 / 월급: 2800000 / 계좌: 222-222-222222 이영희 / 010-3333-3333 / 영업팀 / 사원번호: 1003 / 직급: 과장 / 월급: 3500000 / 계좌: 333-333-333333

    2) 월급 / 연봉 정산 결과 예시

    이번 달 월급 총액 = 9300000원 기본 연봉 총액 = 111600000원 보너스 포함 연봉 총액 = 139480000원
    (보너스 규칙에 따라 숫자는 달라질 수 있음.
    예를 들어 사원 10%, 대리 20%, 과장 30% 보너스라고 가정했을 때.)

    3) 승진 후 출력 예시

    == 김철수 대리 승진 처리 == == 전체 사원 목록 == 홍길동 / 010-1111-1111 / 개발팀 / 사원번호: 1001 / 직급: 사원 / 월급: 3000000 / 계좌: 111-111-111111 김철수 / 010-2222-2222 / 인사팀 / 사원번호: 1002 / 직급: 과장 / 월급: 3200000 / 계좌: 222-222-222222 이영희 / 010-3333-3333 / 영업팀 / 사원번호: 1003 / 직급: 과장 / 월급: 3500000 / 계좌: 333-333-333333
    여기서는 예시로
    • 대리 → 과장 승진
    • 승진하면서 월급 2,800,000 → 3,200,000 으로 인상했다고 가정.

    4) 월급 이체 시뮬레이션 예시

    == 이번 달 월급 이체 시작 == [급여 이체 완료] 홍길동님께 3000000원이 111-111-111111 계좌로 지급되었습니다. [급여 이체 완료] 김철수님께 3200000원이 222-222-222222 계좌로 지급되었습니다. [급여 이체 완료] 이영희님께 3500000원이 333-333-333333 계좌로 지급되었습니다.
     
    Share article
    Contents
    종합 실습 과제사원 관리 & 월급 정산 프로그램 만들기패키지 example01 만들어서 하기1. Employee 클래스 만들기2. 메인 클래스 설계3. 메인에서 어떻게 호출되는지 & 실행 예시

    DailyCoding

    RSS·Powered by Inblog