IT 개발노트
직원관리 프로그램 만들기 본문
문제
: 당신은 프로그램 개발 회사 CARE AP에서 응용 프로그램 개발을 담당하고 있는 엔지니어이다.
CARE LAB을 운영하는 계열사에서 회사 직원들을 관리하는 직원관리 프로그램의 제작을 의뢰해왔다.
다음 요구 사항에 따라 프로그램을 제작하여라.
관리하려는 항목은 이름, 직급, 기본급, 수당, 세율, 월급이다.
세율은 200만원 이하 : 1%(0.01), 400만원 이하 : 2%(0.02), 400만원 초과 : 3%(0.03)으로 설정한다.
월급은 "기본급 + 수당 - (기본급 + 수당) * 세율"로 계산을 한다.
시작화면으로 메뉴를 보여준다.
각 메뉴의 기능은 다음과 같다.
등록 : 이름, 직급, 기본급, 수당을 입력받는다.
출력 : 모든 직원의 이름, 직급, 기본급, 수당, 세율, 월급을 보여준다.
수정 : 특정 직원의 직급, 기본급, 수당을 입력받아서 수정한다.
검색 : 이름을 입력하면, 그 직원의 이름, 직급, 기본급, 수당, 세율, 월급을 보여준다.
종료 : 프로그램을 종료한다.
위의 내용과 아래의 조건에 맞추어 월급관리 프로그램을 작성하세요.
(CompanyBasics 클래스는 기본 값(이름, 직급, 기본급 등)들의 setter, getter이 있는 클래스이다.)
<조건>
1. 사원 등록 기능을 구현한다. CompanyBasics 객체를 포함시켜 처리한다.
2. 직원 1명의 데이터는 자바빈(CompanyBasics) 객체로 처리한다.
3. 수정하고자 하는 사원이 존재할 경우 수정 가능하게 처리한다.
4. 저장되어 있는 사원들 중 검색하는 사원이 존재하면 내용 출력 처리한다.
5. 종료를 선택하기 전까지는 프로그램이 종료되면 안 된다.
6. 화면 메뉴는 아래를 참조하며, MainClass의 main 메서드에서 동작하게 만든다.
1. 등록
2. 출력
3. 수정
4. 검색
5. 종료
<<소스코드>>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | package Java.sungju.LimSungJu_CARE; import java.util.Scanner; public class MainClass { public static void main(String[] args) { // Scanner기능을 사용하기 위해 객체 생성 Scanner sc = new Scanner(System.in); // CompanyService 클래스를 사용하기 위해 객체 생성 CompanyService cs = new CompanyService(); //while문 탈출용도로 사용할 boolean 선언 boolean bo = true; // 직원관리 프로그램을 종료전까지 반복 동작 시키기 위해 while문 사용 while(bo) { System.out.println("1. 등록"); System.out.println("2. 출력"); System.out.println("3. 수정"); System.out.println("4. 검색"); System.out.println("5. 종료"); System.out.print(">>> "); // switch-case문을 사용하기 위해 key값 입력받기 int key = sc.nextInt(); // 원하는 case문을 사용하기 위해 입력받은 key값 넣어주기 switch(key) { case 1: // 등록 cs.saveWorker(); break; case 2: // 출력 cs.outpub(); break; case 3: // 수정 cs.modify(); break; case 4: // 검색 cs.search(); break; case 5: // 종료 System.out.println("프로그램 종료"); bo = false; break; } } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package Java.sungju.LimSungJu_CARE; public interface Company { //입력 public void saveWorker(); // 직원 한명의 값 전달 메서드 //연산 public void modify(); // 특정 직원의 직급, 기본급, 수당 수정 메서드 public void search(); // 이름 값으로 해당 값을 가진 직원 찾기 & 해당 값 출력 메서드 //출력 public void outputTitle(); // 출력되는 정보들의 타이틀 출력 메서드 public void outpub(); // 모든 직원의 정보 출력 메서드 } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 | package Java.sungju.LimSungJu_CARE; import java.util.ArrayList; import java.util.InputMismatchException; import java.util.Scanner; public class CompanyService implements Company { // Scanner기능을 사용하기 위해 객체 생성 Scanner sc = new Scanner(System.in); // CompanyBasics 클래스를 사용하기 위해 객체 생성 CompanyBasics cb = new CompanyBasics(); // CompanyBasics객체만 담을 수 있는 ArrayList 생성 ArrayList<CompanyBasics> csarr = new ArrayList<CompanyBasics>(); // 직원 한명의 값 전달 메서드 @Override public void saveWorker() { // savaWorker메서드 안에서 새로 생성해주지 않으면 ArrayList에 넣어줄때 // 모든값이 마지막에 입력한 값으로 일괄변경 되기 때문에 생성해준다. CompanyBasics cb = new CompanyBasics(); // 입력받는 타입이 다르면 예외처리를 해주기위해 try-catch문 사용 try { System.out.print("등록할 직원의 이름을 입력하세요 : "); // Scanner로 입력받은 값을 setName메서드를 이용해서 넣어주기 String name = sc.next(); cb.setName(name); System.out.print("등록할 직원의 직급을 입력하세요 : "); // Scanner로 입력받은 값을 setRank메서드를 이용해서 넣어주기 String rank = sc.next(); cb.setRank(rank); } catch (InputMismatchException e) { System.out.println("문자를 입력하세요."); // 잘못입력된 값 비워주기 sc.nextLine(); } try { System.out.print("등록할 직원의 기본급을 입력하세요(만원) : "); // Scanner로 입력받은 값을 setNormal메서드를 이용해서 넣어주기 int normal = sc.nextInt(); cb.setNormal(normal); System.out.print("등록할 직원의 수당을 입력하세요(만원) : "); // Scanner로 입력받은 값을 setExtrapay메서드를 이용해서 넣어주기 int extrapay = sc.nextInt(); cb.setExtrapay(extrapay); // Scanner로 입력받은 Normal, Extrapay값을 이용해서 Tariff값 넣어주기 if ((cb.getNormal() + cb.getExtrapay()) <= 200) { cb.setTariff(0.01); } else if ((cb.getNormal() + cb.getExtrapay()) <= 400) { cb.setTariff(0.02); } else if ((cb.getNormal() + cb.getExtrapay()) > 400) { cb.setTariff(0.03); } // Normal, Extrapay, Tariff값을 이용해서 Salary값 넣어주기 cb.setSalary( (cb.getNormal() + cb.getExtrapay()) - (((cb.getNormal() + cb.getExtrapay()) * cb.getTariff()))); // 설정한 값들이 저장된 CompanyBasics객체를 ArrayList에 저장 csarr.add(cb); } catch (InputMismatchException e) { sc.nextLine(); System.out.println("숫자를 입력하세요."); } } // 특정 직원의 직급, 기본급, 수당 수정 메서드 @Override public void modify() { try { if (csarr.size() == 0) { throw new IndexOutOfBoundsException("저장되있는 직원 정보가 없습니다."); } // 모든 직원들의 정보를 보여주기 위해 outpub메서드 호출 outpub(); try { System.out.print("수정할 직원의 입사번호를 입력하세요 : "); // 수정할 직원의 입사번째 번호를 입력 int i = sc.nextInt(); // ArrayList는 0번째 방부터 저장되기 때문에 입력한 값에서 1을 빼서 저장 i = i - 1; // 입력한 입사자의 정보를 ArrayList에서 삭제 csarr.remove(i); System.out.print("수정할 직원의 이름을 입력하세요 :"); // Scanner로 입력받은 값을 setName메서드를 이용해서 넣어주기 cb.setName(sc.next()); System.out.print("직원의 직급을 수정하세요 : "); // Scanner로 입력받은 값을 setRank메서드를 이용해서 넣어주기 cb.setRank(sc.next()); System.out.print("직원의 기본급을 수정하세요 : "); // Scanner로 입력받은 값을 setNormal메서드를 이용해서 넣어주기 cb.setNormal(sc.nextInt()); System.out.print("직원의 수당을 수정하세요 : "); // Scanner로 입력받은 값을 setExtrapay메서드를 이용해서 넣어주기 cb.setExtrapay(sc.nextInt()); if ((cb.getNormal() + cb.getExtrapay()) <= 200) { cb.setTariff(0.01); } else if ((cb.getNormal() + cb.getExtrapay()) <= 400) { cb.setTariff(0.02); } else if ((cb.getNormal() + cb.getExtrapay()) > 400) { cb.setTariff(0.03); } // Normal, Extrapay, Tariff값을 이용해서 Salary값 넣어주기 cb.setSalary( (cb.getNormal() + cb.getExtrapay()) - (((cb.getNormal() + cb.getExtrapay()) * cb.getTariff()))); // 새로 입력받은 직원의 정보를 삭제한 자리에 저장 csarr.add(i, cb); } catch (InputMismatchException e) { sc.nextLine(); System.out.println("숫자를 입력하세요."); } } catch (IndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } // 이름 값으로 해당 값을 가진 직원 찾기 & 해당 값 출력 메서드 @Override public void search() { try { if (csarr.size() == 0) { throw new IndexOutOfBoundsException("저장되있는 직원 정보가 없습니다."); } try { System.out.print("찾으려는 직원의 이름을 입력하세요 : "); // 찾으려는 직원의 이름을 입력받고 name2에 저장 String name2 = sc.next(); for (int i = 0; i < csarr.size(); i++) { // ArrayList에 저장되있는 값들의 Name을 불러오기 cb = csarr.get(i); cb.getName(); // ArrayList의 Name과 입력한 Name2가 같으면 // 그 Name의 정보를 모두 출력 if (name2.equals(cb.getName())) { outputTitle(); System.out.println(csarr.get(i)); } } } catch (InputMismatchException e) { sc.nextLine(); System.out.println("문자를 입력하세요."); } } catch (IndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } // 출력되는 정보들의 타이틀 출력 메서드 @Override public void outputTitle() { System.out.println("이름\t직급\t기본급\t수당\t세율\t월급"); } // 모든 직원의 정보 출력 메서드 @Override public void outpub() { int cnt = 1; try { if (csarr.size() == 0) { throw new IndexOutOfBoundsException("저장되있는 직원 정보가 없습니다."); } for (int i = 0; i < csarr.size(); i++) { System.out.print(cnt + "번째 입사자 "); // ArrayList에 저장된 모든 객체 출력해서 보여주기 System.out.println(csarr.get(i)); cnt = cnt + 1; } } catch (IndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | package Java.sungju.LimSungJu_CARE; public class CompanyBasics { private String name, rank; // 이름, 직급 private int normal, extrapay; // 기본급, 수당 private double tariff, salary; // 세율, 월급 public String getName() { // 이름 받아오기 return name; } public void setName(String name) { // 이름 지정하기 this.name = name; } public String getRank() { // 직급 받아오기 return rank; } public void setRank(String rank) { // 직급 지정하기 this.rank = rank; } public int getNormal() { // 기본급 받아오기 return normal; } public void setNormal(int normal) { // 기본급 지정하기 this.normal = normal; } public int getExtrapay() { // 수당 받아오기 return extrapay; } public void setExtrapay(int extrapay) { // 수당 지정하기 this.extrapay = extrapay; } public double getTariff() { // 세율 받아오기 return tariff; } public void setTariff(double tariff) { // 세율 지정하기 this.tariff = tariff; } public double getSalary() { // 월급 받아오기 return salary; } public void setSalary(double salary) { // 월급 지정하기 this.salary = salary; } // toString을 오버라이드 해주지 않으면 // 저장된 객체의 주소가 출력된다. @Override public String toString() { return "이름 : " + this.getName() + ", 직급 : " + this.getRank() + ", 기본급 : " + this.getNormal() + "만원" + ", 수당 : " + this.getExtrapay() + "만원" + ", 세율 : " + (int)(this.getTariff()*100) + "%" + ", 월급 : " + this.getSalary() +"만원"; } } |
고민했던 점
- ArrayList에 대한 이해도가 부족해서 입력한 이름만 출력하는데 어려움이 있었지만, ArrayList가 저장하고 있는 객체들을 모두 호출한다음에 getter메서드를 이용해서 원하는 값이 있는 객체와 입력한 값을 비교하는 방법을 사용하면 된다는 것을 알고 해결했다.
'알고리즘 > JAVA' 카테고리의 다른 글
for문 예제 (입력한 수를 거꾸로 반환) (0) | 2019.02.14 |
---|---|
HashMap예제 (메뉴 등록, 메뉴별 가격보기, 수정, 삭제하기) (0) | 2019.02.13 |
ArrayList예제 (연락처 저장 프로그램 만들기) (0) | 2019.02.12 |
2차원 배열 예제 (0) | 2019.02.11 |
2차원 배열 예제 (입력받은 값을 출력하기) (0) | 2019.02.11 |