본문 바로가기
Java기초

[Java]상속관계 간단급여관리 프로그램 Team Project

by jackypark 2022. 7. 10.

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

댓글