종합 실습 과제
사원 관리 & 월급 정산 프로그램 만들기
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 – 회사에 갓 입사한 상태 (이름 + 전화번호만 아는 상태)
Employee(String name, String phone)
- 넘겨받은 값:
name,phone
- 나머지 필드의 기본값은 다음과 같이 넣으세요.
dept:"미정"empNo:0(아직 안 나온 번호라는 뜻)salary:0(월급 미정)account:""(빈 문자열)position:"사원"(기본 직급)
- 생성자 2 – 부서까지 정해진 상태
Employee(String name, String phone, String dept)
- 넘겨받은 값:
name,phone,dept
- 나머지 필드 기본값:
empNo:0salary:0account:""position:"사원"
- 생성자 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. 사원 등록하기
- 사용자에게 메뉴 또는 질문으로 다음을 입력받습니다.
- 이름
- 전화번호
- 부서(모르면 Enter 치게 해서 "미정"으로 처리해도 됨)
- 월급(모르면 0 입력)
- 계좌번호(모르면 빈 문자열)
- 직급(모르면 "사원")
- 입력된 정보의 상황에 맞게 생성자를 선택해서 사용합니다.
- 이름 + 전화번호만 알고 있다 → 생성자 1 사용
- 이름 + 전화번호 + 부서를 알고 있다 → 생성자 2 사용
- 모든 정보가 다 있다 → 생성자 3 사용
- 생성한
Employee객체를employees[count]에 저장하고,count++합니다.
⚠ 배열이 꽉 찼을 때(= 10명 등록됐을 때) 더 이상 추가 등록이 안 되도록 체크하는 if문도 넣어보세요.
기능 2. 전체 사원 목록 출력하기
for문을 이용해서employees배열을 0부터count-1까지 순회합니다.
- 각 사원에 대해
printInfo()메서드를 호출해서 정보를 출력합니다.
기능 3. 월급 / 연봉 정산하기
- 이번 달 전체 월급 합계 구하기
- 전체 연봉 합계 구하기
- 보너스를 포함한 전체 연봉 합계
기능 4. 특정 사원 승진시키기
- 사용자에게 사원번호(empNo) 를 입력받습니다.
- 배열에서 해당 사원번호를 가진
Employee를 찾아서
promote()메서드를 실행합니다.
- 승진 후 변경된 직급과 월급을 출력합니다.
기능 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