Java

급여관리프로그램

충 민 2022. 7. 15. 14:05

has a , is a 를 이용하여 만든 급여관리프로그램이다 

 

 

 

데이터관리 클래스

- Admin Class

import java.util.ArrayList;
import java.util.Scanner;
class Admin extends User{
   private String name_; //관리자 아이디
   private int password_; //관리자 비밀번호
   private String id;
   ArrayList<User> arr = new ArrayList<>();
   Scanner sc = new Scanner(System.in);


   public Admin() {
   }


   public void search() {
      //관리자가 user 배열에 접속하여 이름을 찾아서 결과를 출력하는 메소드

      System.out.print("찾고자하는 사원 이름을 입력하세요 : ");
      String yourName = sc.next();

      for (int i = 0 ; i < arr.size(); i++) {//arr배열의 크기보다 작으면 반복
         if (getName().equals(yourName)) {//검색한 이름과 getName()의 이름이 일치하면

            //검색한 사원의 정보를 출력
            System.out.println("고용조건 : "+getWorkType());
            System.out.println("일한시간(주) : "+getWeeklyTime());
            System.out.println("직급 : "+getPosition());
            System.out.println("이름 : "+getName());
            System.out.println("기본급 : "+getSalary());
            System.out.println("수당 : "+getBonus());
            System.out.println("세율 : "+arr.get(i).getTaxRate());
            System.out.println("실수령액 : "+arr.get(i).getMonthSalary());
            System.out.println("휴대전화 : "+arr.get(i).getPhone());
            System.out.println("주소 : "+getAdress());
            System.out.println("은행 : "+getBank());

            break;
         }

      }
   }
   public void input() {

      //관리자가 user 배열에 접속하여 수정, 입력을 하는 메소드
      while(true) {
         User us =new User();
         System.out.println("고용 조건 :");
         workType =    sc.next();
         us.setWorkType(workType);
         if(workType.equals("R")||workType.equals("r")) {
            System.out.print("일한시간(주) : ");
            weeklyTime = sc.nextInt();
            us.setWeeklyTime(weeklyTime);
            System.out.print("직급 : ");
            position = sc.next();
            us.setPosition(position);
            System.out.print("이름 : ");
            name = sc.next();
            us.setName(name);
            System.out.print("주소 정보 : ");
            adress = sc.next();
            us.setAdress(adress);
            System.out.print("은행 : ");
            bank = sc.next();
            us.setBank(bank);
            System.out.print("기본급 : ");
            salary = sc.nextInt();
            us.setSalary(salary);
            System.out.print("수당 : ");
            bonus = sc.nextInt();
            us.setBonus(bonus);
            System.out.print("전화 번호 : ");
            phone = sc.next();
            us.setPhone(phone);
            us.getRegMonthSalary() ;
            us.getTaxRate();
            us.getRegMonthSalary();
            arr.add(us);

            break;
         }
         else if(workType.equals("N")||workType.equals("n")) {
            System.out.print("일한시간(주) : ");
            weeklyTime = sc.nextInt();
            us.setWeeklyTime(weeklyTime);
            System.out.print("직급 : ");
            position = sc.next();
            us.setPosition(position);
            System.out.print("이름 : ");
            name = sc.next();
            us.setName(name);
            System.out.print("주소 정보 : ");
            adress = sc.next();
            us.setAdress(adress);
            System.out.print("은행 : ");
            bank = sc.next();
            us.setBank(bank);
            System.out.print("기본급 : ");
            salary = sc.nextInt();
            us.setSalary(salary);
            System.out.print("수당 : ");
            bonus = sc.nextInt();
            us.setBonus(bonus);
            System.out.print("전화 번호 : ");
            phone = sc.next();
            us.setPhone(phone);
            us.getNonMonthSalary() ;
            us.getTaxRate();
            us.getNonMonthSalary();
            arr.add(us);

            break;
         }
         else {
            System.out.println("잘못입력하였습니다.");
         }
      }
  }
   public void delete() {
      System.out.println("삭제할 이름 적어주세요.");
      String name = sc.next();
      for(int i=0; i<arr.size(); i++) {
         if(arr.get(i).getName().equals(name)) {
            arr.remove(i);
            System.out.println("삭제 되었습니다.");
         }
      }


   }
   public void modify() {
      System.out.println("수정하고 싶은 이름을 입력하시오.");
      String serchName = sc.next();
      boolean flag = true;
      for (int i=0; i<arr.size(); i++) {
         if(arr.get(i).getName().equals(serchName)) {

            flag = false;
            System.out.println("고용 조건 변경 입력 : ");
            String changeW = sc.next();
            arr.get(i).setWorkType(changeW);
            System.out.println("일한시간(주) 변경 입력 : ");
            String changeWT = sc.next();
            arr.get(i).setWorkType(changeWT);
            System.out.println("직급 변경 입력 : ");
            String changeP = sc.next();
            arr.get(i).setPosition(changeP);
            System.out.println("기본급 변경 입력 : ");
            int changeS = sc.nextInt();
            arr.get(i).setSalary(changeS);
            System.out.println("수당 변경 입력 : ");
            int changeB = sc.nextInt();
            arr.get(i).setBonus(changeB);
            System.out.println("휴대전화 변경 입력 : ");
            String changePhone = sc.next();
            arr.get(i).setPhone(changePhone);
            System.out.println("주소 변경 입력 : ");
            String changeA = sc.next();
            arr.get(i).setAdress(changeA);
            System.out.println("은행 변경 입력 : ");
            String changeBank = sc.next();
            arr.get(i).setBank(changeBank);
            System.out.println("수정이 정상적으로 되었습니다.");
            break;

         }
         if(flag) {

            System.out.println("해당 하는 사람이 없습니다.");
         }
      }


   }
   public void output() {

      System.out.println("==================모든 노동자 목록===================");
      System.out.println("|고용형태| 일한시간(주)  | 직급  | 이름 |   기본급   |   수당   |  세율  |  실수령액   | 휴대전화 | 주소 | 은행 |");
      System.out.println("=================================================");
      for(int i =0; i<arr.size();i++) {
         System.out.println("|   "+arr.get(i).getWorkType()+"  |  "+arr.get(i).getWeeklyTime()+"  |  "+arr.get(i).getPosition()+"  |  "+arr.get(i).getName()+"  |  "+arr.get(i).getSalary()
               +"  |  "+arr.get(i).getBonus()+"  |  "+arr.get(i).getTaxRate()+"  |  "+arr.get(i).getMonthSalary()+"  |  "+arr.get(i).getPhone()+"  |  "+arr.get(i).getAdress()+"  |  "+arr.get(i).getBank()+"  |  ");


      }
   }
   //-------------------------------------
   public void searchRn(String id) {
      this.id = id;

      System.out.print("해당하는 id로 검색하겠습니다. ");
      for (int i = 0 ; i < arr.size(); i++) {//arr배열의 크기보다 작으면 반복
         if (arr.get(i).getName().equals(id)) {//검색한 이름과 getName()의 이름이 일치하면

            //검색한 사원의 정보를 출력
            System.out.println("고용조건 : "+arr.get(i).getWorkType());
            System.out.println("일한시간(주) : "+arr.get(i).getWeeklyTime());
            System.out.println("직급 : "+arr.get(i).getPosition());
            System.out.println("이름 : "+arr.get(i).getName());
            System.out.println("기본급 : "+arr.get(i).getSalary());
            System.out.println("수당 : "+arr.get(i).getBonus());
            System.out.println("세율 : "+arr.get(i).getTaxRate());
            System.out.println("실수령액 : "+arr.get(i).getMonthSalary());
            System.out.println("휴대전화 : "+arr.get(i).getPhone());
            System.out.println("주소 : "+getAdress());
            System.out.println("은행 : "+getBank());

            break;
         }
         else {
            System.out.println("등록되지 않은 사람입니다.");
         }

      }

   }
   public void modifyRn(String id) {
      this.id = id;
      System.out.println("해당하는 ID로 접속하겠습니다.");

      boolean flag = true;
      for (int i=0; i<arr.size(); i++) {
         if(arr.get(i).getName().equals(id)) {

            flag = false;

            System.out.println("휴대전화 변경 입력 : ");
            String changePhone = sc.next();
            arr.get(i).setPhone(changePhone);
            System.out.println("주소 변경 입력 : ");
            String changeA = sc.next();
            arr.get(i).setAdress(changeA);
            System.out.println("은행 변경 입력 : ");
            String changeBank = sc.next();
            arr.get(i).setBank(changeBank);
            System.out.println("수정이 정상적으로 되었습니다.");
            break;

         }
         if(flag) {

            System.out.println("해당 하는 사람이 없습니다.");
         }
      }

   }
}

Main Class

import java.util.Scanner;


public class Main {
      public static void main(String []args) {
         Scanner sc= new Scanner(System.in);
         
         User us=new User();
         Admin ad = new Admin();
         String str="Admin";   //ID와 Password가 str과 동일하면 관리자모드 로그인 허용 
         
         
         while(true) {//name과 worktype을 받아 관리자면 관리자 모드로 가게끔 ㄱㄱ
            System.out.println("ID: ");
             String id = sc.next();
             System.out.print("Password: ");
             String password = sc.next();
             if(id.equals(str)&&password.equals(str)) {
                System.out.println("1.입력 2.수정 3.출력 4.삭제 5.종료");
                 int num_2  = sc.nextInt();
                 switch(num_2) {
                 case 1:
                    ad.input();
                    break;
                 case 2:
                    ad.modify();
                    break;
                 case 3:
                    ad.output();
                    break;
                 case 4:
                    ad.delete();
                    break;
                 case 5:
                    System.exit(-1);
                    break;
                 default:
                    System.out.println("잘못 입력하셨습니다.");
                    break;
           
              }
             }
             else {
                System.out.println("고용조건(R/N):");
                String jobtype=sc.next(); // 메인문에서 자기가 정규직인지 비정규직인지 넣는 변수
             if(jobtype.equals("R")||jobtype.equals("r")||jobtype.equals("N")||jobtype.equals("n")) {
                System.out.println("1.수정 2.검색 3.종료");
               int num=sc.nextInt();
               if(num==1) {
                  ad.modifyRn(id);
               }
               else if(num==2) {
                  ad.searchRn(id);
               }
               else if(num==3) {
                  System.exit(-1);
               }
               else {
                  System.out.println("잘못입력하였습니다");
               }
                
                
               
             }
             else {
                System.out.print("잘못입력하였습니다. 다시입력해주세요");
             }
             }
             do {
                
             System.out.print("계속하시겠습니까?(Y/N)");
             char choice=sc.next().charAt(0);
             if(choice=='y'||choice=='Y') {
               break;
             }
             else if(choice=='N'||choice=='n') {
                System.exit(-1);
             }
             else {
                System.out.print("잘못입력하였습니다 다시입력하세요");
             }
             }while(true);
         }
      }
      
   }

데이터클래스

-User Class

import java.util.ArrayList;
import java.util.Scanner;
class User  {
   String name;//이름
   int age;
   String position;//직급
   String workType;//정규직 비정규직을 구분해주는 변수
   int weeklyTime;//1주에 일한 시간
   int salary;//기본급:관리자가 설정 
   int bonus;//보너스:관리자가 설정
   int monthSalary;//실수령액
   double taxRate;//세금
   String adress;//주소
   String phone;//전화번호
   String bank;//계좌번호
   Main ma = new Main();
   ArrayList<User> arr = new ArrayList<>(); //arr 이라는 배열을 만들었음 바로 쓰면 됌
   Scanner sc = new Scanner(System.in);
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public String getPosition() {
      return position;
   }
   public void setPosition(String position) {
      this.position = position;
   }
   public String getWorkType() {
      return workType;
   }
   public void setWorkType(String workType) {
      this.workType = workType;
   }
   public int getWeeklyTime() {
      return weeklyTime;
   }
   public void setWeeklyTime(int weeklyTime) {
      this.weeklyTime=weeklyTime;
   }
   public int getSalary() {
      return salary;
   }
   public void setSalary(int salary) {
      this.salary = salary;
   }
   public int getBonus() {
      return bonus;
   }
   public void setBonus(int bonus) {
      this.bonus = bonus;
   }
   public int getMonthSalary() {
      return monthSalary;
   }
   public void setMonthSalary(int monthSalary) {
      this.monthSalary = monthSalary;
   }

   public void setTaxRate(double taxRate) {
      this.taxRate = taxRate;
   }
   public String getAdress() {
      return adress;
   }
   public void setAdress(String adress) {
      this.adress = adress;
   }
   public String getPhone() {
      return phone;
   }
   public void setPhone(String phone) {
      this.phone = phone;
   }
   public String getBank() {
      return bank;
   }
   public void setBank(String bank) {
      this.bank = bank;
   }
   public ArrayList<User> getArr() {
      return arr;
   }
   public void setArr(ArrayList<User> arr) {
      this.arr = arr;
   }

   
   public int getNonMonthSalary() {//월급을 계산하는 메소드

      if(weeklyTime>=48) {
         monthSalary=(int)(salary*(1.2));
         return monthSalary;
      }
      else {
         return monthSalary;
      }
   }
   public int getRegMonthSalary() {//월급을 계산하는 메소드
      monthSalary = (int)((salary+bonus)*(1.0-taxRate));
      return monthSalary;
   }
   public double getTaxRate() {// 급여에 따라 세율을 정하는 메소드
      if(salary <= 2000000) {
         taxRate = 0.1;
         return taxRate;

      }
      else if(salary>2000000 && salary<=4000000) {
         taxRate = 0.2;
         return taxRate;
      }
      else {
         taxRate = 0.3;
         return taxRate;
      }
   }
}