1번째 팀플에서 has a관계에서 각자 자기가 기능을 하나씩 구현하여 합쳤는데 큰 문제없이 몇 가지 오류만 수정하게 되었다.
또한 혼자가 아닌 팀원들과 소통하면서 내가 생각하지 못했던 문제점들과 아이디어를 내는 거 보고 팀플을 하는 이유를 절실히 느꼈다.
이번 2번쨰 팀플은 has a관계인 프로그램을 만들고 상속관계로 바꾸는 것이었다. 동적 바인딩을 사용하여 코드수가 거의 절반에 가까운 수준으로 줄었다.

import java.util.Scanner;
public class Salary {
private int id;//사번 개인정보 확인 할 때
private String typei;//정규직, 비정규직
private Employee[] em; //사원 클래스 has ~a
private FEmployeeInfo[] fei; //정규직 배열
private PEmployeeInfo[] pei; //비정규직 배열
private int fpos;//정규직 클래스 배열 index
private int ppos;//비정규직 클래스 배열 index
private int empos=0; //시원 클래스 배열 index
private static int check=1; //1이 괸리자 0이 사용자
public Salary(int f, int p) {
fpos=0; //정규직 클래스 배열 index=0
ppos=0; //비정규직 클래스 배열 index=0
//객체 생성
em=null;
fei = new FEmployeeInfo[f];
pei = new PEmployeeInfo[p];
for (int i=0; i<fei.length; i++) {
fei[i] = new FEmployeeInfo();
}
for(int i=0;i<pei.length;i++) {
pei[i] = new PEmployeeInfo();
}
}
public void loginUser() {
String empnum; //사원번호
String empw; //비밀번호
Scanner sc= new Scanner(System.in);
System.out.print("사번을 입력해주세요 : ");
empnum = sc.next();
System.out.print("비밀번호를 입력해주세요 : ");
empw = sc.next();
if(empnum.charAt(0)=='F') { //사원번호 첫글자가 F인경우, 정규직인 경우
em=fei; //동적바인딩
typei = "F";
}
else if(empnum.charAt(0)=='P') { //사원번호 첫글자가 P인경우, 비정규직인 경우
em=pei; //동적바인딩
typei = "P";
}
if(empnum.charAt(0)=='F' || empnum.charAt(0)=='P') {
for(int i=0; i<em.length; i++) { //사원 배열 크기만큼 for문을 돈다
if(em[i]!=null) { //em[i]값이 null이 아니면
if (empnum.equals(em[i].getEmployeeNum())) { //empnum(사용자가 입력한 사번)과 getEmployeeNum(FEmployeeInfo 클래스에서 사원 번호를 가져오기) 비교
if(empw.equals(em[i].getPassword())) { //empw(사용자가 입력한 사번)과 getPassword = 사원이 입력해둔 비밀번호 가져오기
System.out.println("로그인 성공!");
id = i; //사원 개인정보 확인하는 변수 id에 i값을 집어 넣음.
check = 0; //사용자 모드
for(;;) {
System.out.println("1. 검색 2. 수정 3. 출력 0.로그아웃");
int userNum=sc.nextInt();//입력
switch(userNum) {
case 1: //검색
findInfo(sc);
break;
case 2: //수정
modifyInfo(sc);
break;
case 3: //출력
dispInfo(sc);
break;
case 0: //로그아웃
break;
}
if (userNum==0) { //로그아웃, 무한 루프를 벗어난다.
break;
}
}
break;
}
else{
System.out.println("비번오류 다시입력해주세요");
loginUser();
break;
}
}
}
else if(check!=0) { //관리자인지 사용자인지 구분하는 check변수가 0이 아닐 경우, 제일 위에 for문 벗어난다.
break;
}
}
}
else if (empnum.equals("admin")) { // 입력한 아이디와 admin인지 맞는지 비교
if (empw.equals("admin")) {// 입력한 비번이 admin인지 맞는지 비교
System.out.println("관리자 모드 ");
check=1;
typei="admin";
for(;;) { //무한루프
System.out.println("1. 입력 2. 수정 3. 삭제 4. 검색 5.출력 0.로그아웃");
int num =sc.nextInt();
switch(num) {
case 1:
System.out.println("<<<<입력>>>>");
addInfo(); //addInfo 메소드 실행 (직원 추가한는 메소드)
break;
case 0:
System.out.println("로그아웃");
check=0;
break;
case 2:
System.out.println("<<<<수정>>>>");
modifyInfo(sc); //수정메소드 실행(직원정보 수정)
break;
case 3:
System.out.println("<<<<삭제>>>>");
deleteInfo(sc); //삭제 메소드 실행 (직원 삭제)
break;
case 4:
System.out.println("<<<<검색>>>>");
findInfo(sc); //검색 메소드 실행(직원 검색)
break;
case 5:
System.out.println("<<<<출력>>>>");
dispInfo(sc); //출력 메소드 실행(직원 출력)
break;
}
if(check==0) {
break; //무한루프탈출
}
}
}
}
else {
System.out.println("저장되어 있는 데이터가 없습니다.");
}
}
//사원
public void setEmployeeInfo(String employeeNum, String position, String department, int salary,
String name , int birthday, int call, String address, int accountNum, String password, String workerType){
if (workerType.equals("F")||workerType.equals("f")) {
em=fei;
empos=fpos;
}
else if(workerType.equals("P")||workerType.equals("p"))
{
em=pei;
empos=ppos;
}
em[empos].setEmployeeNum(employeeNum);
em[empos].setPosition(position);
em[empos].setDepartment(department);
em[empos].setSalary(salary);
em[empos].calRealSalary(salary, em[empos].getPosition());
em[empos].setName(name);
em[empos].setBirthday(birthday);
em[empos].setCall(call);
em[empos].setAddress(address);
em[empos].setAccountNum(accountNum);
em[empos].setPassword(password);
empos++;
if (workerType.equals("F")||workerType.equals("f")) {
fpos=empos;
}
else if(workerType.equals("P")||workerType.equals("p"))
{
ppos=empos;
}
}
public void addInfo() { //입력 메소드
//feild
//정규직/비정규직 + 번호 = 사번
String workerType; //정규직인지 비정규직인지 물어볼때
int empnum;//사번의 번호는 int형
String employeenum;//정규직/비정규직 + 번호 = 사번
String position = null; //직책
String department; //부서
int salary;//급여
//개인정보 처음에 입력은 그대로
String name;
int birthday;
int call;
String address;
int accountNum;
String password;
Scanner sc = new Scanner(System.in);
System.out.print("정규직(F) / 비정규직(P)인가요? : ");
workerType = sc.next();
System.out.print("번호를 입력해주세요(숫자): ");
empnum = sc.nextInt();
employeenum = workerType+empnum;
System.out.println("사번 : " + employeenum);
if (workerType.equals("F")||workerType.equals("f")) {
System.out.print("직책을 입력해주세요 ex)사원, 과장, 팀장, 사장: ");
position = sc.next();
}
else if(workerType.equals("P")||workerType.equals("p")) {
}
else {
System.out.println("잘못 입력했습니다.");
//메뉴로 가기?
//while문으로 할건
}
System.out.print("부서를 입력해주세요 ex)총무, 인사, 홍보, 기획: ");
department = sc.next();
System.out.print("급여를 입력해주세요(100): ");
salary = sc.nextInt();
//개인정보 입력 (처음에는 그냥 넣음)
System.out.print("이름을 입력해주세요:");
name = sc.next();
System.out.print("출생년도를 입력해주세요 ex)011013: ");
birthday = sc.nextInt();
System.out.print("전화번호를 입력해주세요 ex)01012341234: ");
call = sc.nextInt();
System.out.print("주소를 입력해주세요 ex)충남: ");
address = sc.next();
System.out.print("계좌번호를 입력해주세요 ex)0123456789: ");
accountNum = sc.nextInt();
System.out.print("비밀번호를 입력해주세요 ex)1234: ");
password = sc.next();
setEmployeeInfo(employeenum, position, department, salary, name, birthday, call, address, accountNum, password, workerType);
}
public void modifyInfo(Scanner sc) { //수정 메소드
if(typei.equals("admin")) { //관리자모드
System.out.println("변경할 사원의 사원번호를 입력하시오");
String eNum=sc.next();
if(eNum.charAt(0)=='F') {
em=fei; // 동적바인딩
}else if(eNum.charAt(0)=='P') {
em=pei; //동적바인딩
}
for(int i=0;i<em.length;i++) {
if(em[i]!=null) {
if(eNum.equals(em[i].getEmployeeNum())) {
System.out.println("사원번호: "+em[i].getEmployeeNum());
System.out.println("수정할 정보를 선택하시오");
System.out.print("직책: "+em[i].getPosition()+"\t");
System.out.print("부서: "+em[i].getDepartment()+"\t");
System.out.println("급여: "+em[i].getSalary()+"\t");
System.out.println("1.직책 2. 부서 3.급여 0.종료");
int n=sc.nextInt();
if(n==1) {
if(eNum.charAt(0)=='P') {
System.out.println("비정규직은 직책변경이 불가합니다");
break;
}else {
System.out.println("직책을 무엇으로 변경하시겠습니다.");
System.out.println("1.사원 2. 팀장 3. 과장 4. 사장");
String jobN=sc.next();
if(jobN.equals("1")||jobN.equals("사원")) {
em[i].setPosition("사원");
System.out.println("---사원으로 변경완료---");
}else if(jobN.equals("2")||jobN.equals("팀장")) {
em[i].setPosition("팀장");
System.out.println("---팀장으로 변경완료---");
}else if(jobN.equals("3")||jobN.equals("과장")) {
em[i].setPosition("과장");
System.out.println("---과장으로 변경완료---");
}else if(jobN.equals("4")||jobN.equals("사장")) {
em[i].setPosition("사장");
System.out.println("---사장으로 변경완료---");
}else {
System.out.println("입력오류");
}
em[i].calRealSalary(em[i].getSalary(),em[i].getPosition());
break;
}
}else if(n==2) {
System.out.println("부서를 무엇으로 변경 하시겠습니까");
System.out.println("1.총무 2. 인사 3. 홍보 4. 기획");
String departN=sc.next();
if(departN.equals("1")||departN.equals("총무")) {
em[i].setDepartment("총무");
System.out.println("---총무로 변경완료---");
}else if(departN.equals("2")||departN.equals("인사")) {
em[i].setDepartment("인사");
System.out.println("---인사로 변경완료---");
}else if(departN.equals("3")||departN.equals("홍보")) {
em[i].setDepartment("홍보");
System.out.println("---홍보로 변경완료---");
}else if(departN.equals("4")||departN.equals("기획")) {
em[i].setDepartment("기획");
System.out.println("---기획으로 변경완료---");
}else {
System.out.println("입력오류");
}
break;
}else if(n==3) {
System.out.println("변경된 급여 입력");
int sal=sc.nextInt();
em[i].setSalary(sal);
em[i].calRealSalary(sal,em[i].getPosition());
System.out.println("---급여변경 완료---");
break;
}else if(n==0) {
System.out.println("종료");
break;
}
} else {
}
}
}
}else {
if(typei.equals("F")){
em=fei;
}else if(typei.equals("P")){
em=pei;
}
for(;;) {
System.out.println("수정할 개인정보를 선택하시오");
System.out.println("이름"+em[id].getName());
System.out.print("생년월일: "+em[id].getBirthday()+"\t");
System.out.print("전화번호: "+em[id].getCall()+"\t");
System.out.print("주소: "+em[id].getAddress()+"\t");
System.out.print("계좌번호: "+em[id].getAccountNum()+"\t");
System.out.println("비밀번호: "+em[id].getPassword());
System.out.println();
System.out.println("1.이름 2. 생년월일 3. 전화번호 4. 주소 5. 계좌번호 6. 비밀번호 0.종료");
int n=sc.nextInt(); // 입력 숫자
if(n==1) {
System.out.println("이름을 무엇으로 변경하십니까?");
em[id].setName(sc.next());
System.out.println("---"+em[id].getName()+":으로 변경완료");
}else if(n==2) {
System.out.println("생년월일을 변경하십시오");
em[id].setBirthday(sc.nextInt());
System.out.println("---"+em[id].getBirthday()+"으로 변경완료");
}else if(n==3) {
System.out.println("전화번호를 변경해주세요");
em[id].setCall(sc.nextInt());
System.out.println("---"+em[id].getCall()+"으로 변경완료");
}else if(n==4) {
System.out.println("주소를 변경해주세요");
em[id].setAddress(sc.next());
System.out.println("---"+em[id].getAddress()+"으로 변경완료");
}else if(n==5) {
System.out.println("계좌번호를 변경해주세요");
em[id].setAccountNum(sc.nextInt());
System.out.println("---"+em[id].getAccountNum()+"으로 변경완료");
}else if(n==6) {
System.out.println("비밀번호를 변경해주세요");
em[id].setPassword(sc.next());
System.out.println("---"+em[id].getPassword()+"으로 변경완료");
}else if(n==0) {
System.out.println("개인정보수정 종료");
break;
}
}
}
}
public void deleteInfo(Scanner sc) { //삭제 메소드
System.out.println("삭제할 사원번호");
String eNum=sc.next();
if(eNum.charAt(0)=='F') { //정규직일 경우
em=fei; //동적바인딩
empos=fpos;
}else if(eNum.charAt(0)=='P') { //비정규직일 경우
em=pei; //동적바인딩
empos=ppos;
}
for(int i=0;i<empos;i++) {
if(eNum.equals(em[i].getEmployeeNum())) { //삭제할 사원번호와 일치할 경우
System.out.print("이름: "+em[i].getName()+"\t");
System.out.println("직책: "+em[i].getPosition()+"의 사원정보를 삭제하시는게 맞습니까?");
System.out.println("1.예(삭제) 2. 취소");
int dN=sc.nextInt();
if(dN==1) { //삭제
for(int j=i;j<em.length-1;j++) {
em[j]=em[j+1];
}
if(eNum.charAt(0)=='F') { //정규직일 경우
fpos--; //정규직 클래스 배열 index -1
}else if(eNum.charAt(0)=='P') { //비정규직일 경우
ppos--; //비정규직 클래스 배열 index -1
}
}else { //삭제 취소
break;
}
}
}
}
public void findInfo(Scanner sc) { //검색 메소드
if(typei.equals("admin")) //관리자 모드
{
System.out.println("1 이름 검색 2 직책 검색 3 부서 검색");
System.out.print("검색하고 싶은 숫자를 입력하세요:");
int num = sc.nextInt();
switch(num)
{
case 1: //1. 이름 검색
System.out.print("검색하고 싶은 이름을 입력하세요: ");
String name = sc.next();
System.out.println("========================================"+name+"출력========================================");
em=fei;//동적바인딩
System.out.println("<정규직>");
for (int j=0;j<2;j++) { // 정규직 비정규직 출력을 나눠서 출력하기위해
System.out.println("사원번호\t이름\t직책\t부서\t실급여\t생년월일\t전화번호\t\t주소\t계좌번호\t\t비밀번호");
for(int i=0; i<em.length; i++) //정규직 출력
{
if(em[i]!=null && name.equals(em[i].getName())) //null값이 아니면 출력
{
System.out.println(em[i].getEmployeeNum()+"\t"+em[i].getName()+"\t"+em[i].getPosition()+"\t"+em[i].getDepartment()+"\t"+em[i].getRealSalary()+"\t"+
em[i].getBirthday()+"\t"+em[i].getCall()+"\t"+em[i].getAddress()+"\t"+em[i].getAccountNum()+"\t"+em[i].getPassword());
}
}
if(j==1) { //j가 1이면 break, for문 탈출
break;
}
em=pei;//동적바인딩
System.out.println("<비정규직>");
}
System.out.println();
break;
case 2: //직책 검색
System.out.print("검색하고 싶은 직책을 입력하세요: ");
String pos = sc.next();
System.out.println("========================================"+pos+"출력========================================");
em=fei;//동적바인딩
System.out.println("<정규직>");
for (int j=0;j<2;j++) { // 정규직 비정규직 출력을 나눠서 출력하기위해
System.out.println("사원번호\t이름\t직책\t부서\t실급여\t생년월일\t전화번호\t\t주소\t계좌번호\t\t비밀번호");
for(int i=0; i<em.length; i++) //정규직 출력
{
if(em[i]!=null && pos.equals(em[i].getPosition())) //null값이 아니면 출력
{
System.out.println(em[i].getEmployeeNum()+"\t"+em[i].getName()+"\t"+em[i].getPosition()+"\t"+em[i].getDepartment()+"\t"+em[i].getRealSalary()+"\t"+
em[i].getBirthday()+"\t"+em[i].getCall()+"\t"+em[i].getAddress()+"\t"+em[i].getAccountNum()+"\t"+em[i].getPassword());
}
}
if(j==1) { //j가 1이면 break, for문 탈출
break;
}
em=pei;//동적바인딩
System.out.println("<비정규직>");
}
System.out.println();
break;
case 3: //부서 검색
System.out.print("검색하고 싶은 부서를 입력하세요: ");
String dep = sc.next();
System.out.println("========================================"+dep+"출력========================================");
em=fei;//동적바인딩
System.out.println("<정규직>");
for (int j=0;j<2;j++) { // 정규직 비정규직 출력을 나눠서 출력하기위해
System.out.println("사원번호\t이름\t직책\t부서\t실급여\t생년월일\t전화번호\t\t주소\t계좌번호\t\t비밀번호");
for(int i=0; i<em.length; i++) //정규직 출력
{
if(em[i]!=null && dep.equals(em[i].getDepartment())) //null값이 아니면 출력
{
System.out.println(em[i].getEmployeeNum()+"\t"+em[i].getName()+"\t"+em[i].getPosition()+"\t"+em[i].getDepartment()+"\t"+em[i].getRealSalary()+"\t"+
em[i].getBirthday()+"\t"+em[i].getCall()+"\t"+em[i].getAddress()+"\t"+em[i].getAccountNum()+"\t"+em[i].getPassword());
}
}
if(j==1) { //j가 1이면 break, for문 탈출
break;
}
em=pei;//동적바인딩
System.out.println("<비정규직>");
}
System.out.println();
break;
}
}
else //사용자 모드
{
System.out.println("1 이름 검색 2 직책 검색 3 부서 검색");
System.out.print("검색하고 싶은 숫자를 입력하세요:");
int num = sc.nextInt();
switch(num)
{
case 1: //1. 이름 검색
System.out.print("검색하고 싶은 이름을 입력하세요: ");
String name = sc.next();
System.out.println("========================================"+name+"출력========================================");
em=fei;//동적바인딩
System.out.println("<정규직>");
for (int j=0;j<2;j++) { // 정규직 비정규직 출력을 나눠서 출력하기위해
System.out.println("사원번호\t이름\t직책\t부서");
for(int i=0; i<em.length; i++) //정규직 출력
{
if(em[i]!=null && name.equals(em[i].getName())) //null값이 아니면 출력
{
System.out.println(em[i].getEmployeeNum()+"\t"+em[i].getName()+"\t"+em[i].getDepartment());
}
}
if(j==1) { //j가 1이면 break, for문 탈출
break;
}
em=pei;//동적바인딩
System.out.println("<비정규직>");
}
System.out.println();
break;
case 2: //직책 검색
System.out.print("검색하고 싶은 직책을 입력하세요: ");
String pos = sc.next();
System.out.println("========================================"+pos+"출력========================================");
em=fei;//동적바인딩
System.out.println("<정규직>");
for (int j=0;j<2;j++) { // 정규직 비정규직 출력을 나눠서 출력하기위해
System.out.println("사원번호\t이름\t직책\t부서");
for(int i=0; i<em.length; i++) //정규직 출력
{
if(em[i]!=null && pos.equals(em[i].getPosition())) //null값이 아니면 출력
{
System.out.println(em[i].getEmployeeNum()+"\t"+em[i].getName()+"\t"+em[i].getDepartment());
}
}
if(j==1) { //j가 1이면 break, for문 탈출
break;
}
em=pei;//동적바인딩
System.out.println("<비정규직>");
}
System.out.println();
break;
case 3: //부서 검색
System.out.print("검색하고 싶은 부서를 입력하세요: ");
String dep = sc.next();
System.out.println("========================================"+dep+"출력========================================");
em=fei;//동적바인딩
System.out.println("<정규직>");
for (int j=0;j<2;j++) { // 정규직 비정규직 출력을 나눠서 출력하기위해
System.out.println("사원번호\t이름\t직책\t부서");
for(int i=0; i<em.length; i++) //정규직 출력
{
if(em[i]!=null && dep.equals(em[i].getDepartment())) //null값이 아니면 출력
{
System.out.println(em[i].getEmployeeNum()+"\t"+em[i].getName()+"\t"+em[i].getDepartment());
}
}
if(j==1) { //j가 1이면 break, for문 탈출
break;
}
em=pei;//동적바인딩
System.out.println("<비정규직>");
}
System.out.println();
break;
}
}
}
public void dispInfo(Scanner sc) { //출력 메소드
if(typei.equals("admin"))
{
System.out.println("1 전체 출력 2 정규직 전체 출력 3 비정규직 전체 출력");
System.out.print("출력하고 싶은 숫자를 입력하세요:");
int num = sc.nextInt();
switch(num)
{
case 1: //1. 전체 출력
System.out.println("========================================전체 출력========================================");
em=fei;//동적바인딩
System.out.println("<정규직>");
for (int j=0;j<2;j++) { // 정규직 비정규직 출력을 나눠서 출력하기위해
System.out.println("사원번호\t이름\t직책\t부서\t실급여\t생년월일\t전화번호\t\t주소\t계좌번호\t\t비밀번호");
for(int i=0; i<em.length; i++) //정규직 출력
{
if(em[i]!=null && em[i].getEmployeeNum()!=null) //null값이 아니면 출력
{
System.out.println(em[i].getEmployeeNum()+"\t"+em[i].getName()+"\t"+em[i].getPosition()+"\t"+em[i].getDepartment()+"\t"+em[i].getRealSalary()+"\t"+
em[i].getBirthday()+"\t"+em[i].getCall()+"\t"+em[i].getAddress()+"\t"+em[i].getAccountNum()+"\t"+em[i].getPassword());
}
}
if(j==1) { //j가 1이면 break, for문 탈출
break;
}
em=pei;//동적바인딩
System.out.println("<비정규직>");
}
break;
case 2: //2. 정규직 전체 출력
em=fei; //동적바인딩
System.out.println("========================================정규직 출력========================================");
case 3: //3. 비정규직 전체 출력
if(num==3) { //num이 3일 경우
em=pei; //동적바인딩
System.out.println("========================================비정규직 출력========================================");
}
System.out.println("사원번호\t이름\t직책\t부서\t실급여\t생년월일\t전화번호\t\t주소\t계좌번호\t\t비밀번호");
for(int i=0; i<em.length; i++) //비정규직 출력
{
if(em[i]!=null && em[i].getEmployeeNum()!=null) //null값이 아니면 출력
{
System.out.println(em[i].getEmployeeNum()+"\t"+em[i].getName()+"\t"+em[i].getPosition()+"\t"+em[i].getDepartment()+"\t"+em[i].getRealSalary()+"\t"+
em[i].getBirthday()+"\t"+em[i].getCall()+"\t"+em[i].getAddress()+"\t"+em[i].getAccountNum()+"\t"+em[i].getPassword());
}
}
System.out.println();
break;
}
}else { //사용자 모드
if(typei.equals("F"))
{
em=fei; //동적바인딩
}
else if(typei.equals("P"))
{
em=pei; //동적바인딩
}
//자기 값만 출력
System.out.println("사원번호\t이름\t직책\t부서\t실급여\t생년월일\t전화번호\t\t주소\t계좌번호\t\t비밀번호");
System.out.println(em[id].getEmployeeNum()+"\t"+em[id].getName()+"\t"+em[id].getPosition()+"\t"+em[id].getDepartment()+"\t"+em[id].getRealSalary()+"\t"+
em[id].getBirthday()+"\t"+em[id].getCall()+"\t"+em[id].getAddress()+"\t"+em[id].getAccountNum()+"\t"+em[id].getPassword());
}
}
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
System.out.println("정규직 인원수를 입력하시오");
int pop=sc.nextInt();
System.out.println("비정규직인원수를 입력하시오");
int pop2=sc.nextInt();
Salary iidd=new Salary(pop,pop2);
for(;;) {
System.out.println("1.사용자 로그인 0. 시스템종료");
int loginN=sc.nextInt();
if(loginN==1) { //사용자 로그인
iidd.loginUser();
}else if(loginN==0) { //시스템 종료
System.out.println("시스템을 종료합니다");
break;
}
}
}
}
PersonInfo는 사원들의 개인정보를 담고 있는 클래스이다
public class PersonInfo {
// ʵ
private String name; //
private int birthday;
private int call; //
private String address; //
private int accountNum; //
//
public PersonInfo() {//
}
public PersonInfo(String n, int b, int c, String ad, int an) {// ü
name = n;
birthday = b;
call = c;
address = ad;
accountNum = an;
}
//get ߰
public String getName() {
return name;
}
public int getBirthday() {
return birthday;
}
public int getCall() {
return call;
}
public String getAddress() {
return address;
}
public int getAccountNum() {
return accountNum;
}
//set ߰
public void setName(String n) {
this.name=n;
}
public void setBirthday(int b) {
this.birthday = b;
}
public void setCall(int c) {
this.call = c;
}
public void setAddress(String ad) {
this.address = ad;
}
public void setAccountNum(int an) {
this.accountNum = an;
}
}
사원 클래스는 개인정보를 상속받고 있다.
abstract public class Employee extends PersonInfo {
private String employeeNum;
private String position;
private String department;
private String password;
private int year;
private int salary;
private int realSalary;
public String getEmployeeNum() {//사원번호 get
return employeeNum;
}
public String getPosition() {//get 직책
return position;
}
public String getDepartment() {//부서 get
return department;
}
public int getSalary() {//get 급여
return salary;
}
public int getRealSalary() {
return realSalary;
}
public String getPassword() {
return password;
}
public int getYear() {
return year;
}
public void setEmployeeNum(String en) { //사원번호 set
this.employeeNum = en;
}
public void setPosition(String p) {//직책 set
this.position = p;
}
public void setDepartment(String d) {//set 부서
this.department = d;
}
public void setSalary(int s) {//set 급여
this.salary=s;
}
public void setRealSalary(int s) {
this.realSalary=s;
}
public void setPassword(String pw) {
this.password = pw;
}
public void setYear(int year) {
this.year=year;
}
abstract public void calRealSalary(int s, String po);
}
그 아래로 비정규직 정규직 클래스가 있다. 비정규직 클래스와 정규직 차이점에는 직책의 차이와 급여의 차이가 있어서 오버 라이딩을 해주었다.
public class PEmployeeInfo extends Employee {
private int basicSalary;
private int realSalary;
@Override
public void calRealSalary(int s, String po) { //급여, 직책
realSalary = (int)(s*0.8); //급여
setRealSalary(realSalary);
}
public final String getPosition() {
return "인턴";
}
}
public class FEmployeeInfo extends Employee{
// public FEmployeeInfo(String name, int birthday, int call, String address, int accountNum) {
// super(name, birthday, call, address, accountNum);
// }
private int basicSalary;
private int realSalary;
@Override
public void calRealSalary(int s, String po) { //급여, 사원번호, 직책
int insentive=0;
basicSalary = s; //급여
if(po.equals("사원")) //직책이 사원인 경우
{
insentive = (int)(basicSalary*0.1); //insentive=급여*0.1
}
else if(po.equals("팀장")) //직책이 팀장인 경우
{
insentive = (int)(basicSalary*0.3); //insentive=급여*0.3
}
else if(po.equals("과장")) //직책이 과장인 경우
{
insentive = (int)(basicSalary*0.5); //insentive=급여*0.5
}
else if(po.equals("사장")) //직책이 사장인 경우
{
insentive = (int)(basicSalary*0.7); //insentive=급여*0.7
}else if(po.equals(null)){
insentive=0;
}
realSalary = basicSalary + insentive; //실급여= 정규직에 따른 급여+insentive
setRealSalary(realSalary);
}
}
has a 관계로 하고 상속관계로 바꾸는 작업을 했는데 자바에서 상속을 쓰고 동적 바인딩을 왜 사용하는지 몸으로 느끼는 과제였던 거 같다. 앞으로 효율적인 코드를 작성하기 위해 더 많이 배우고 활용해봐야겠다.
'Java기초' 카테고리의 다른 글
| Socket 통신 Unicast (1) | 2022.09.02 |
|---|---|
| [Java]Random 클래스 사용 로또생성기활용 (0) | 2022.07.11 |
| [Java]Map<E> 성적관리 (0) | 2022.07.07 |
| [Java]Set<E> 성적관리 (0) | 2022.07.07 |
| [Java] List 성적관리 (0) | 2022.07.07 |
댓글