728x90
반응형
main class
/TestEx.java
package step6.ex;
import step6.model.*;
public class TestEx {
public static void main(String[] args) {
CompanyService service = new CompanyService(100);
System.out.println("**********사원등록 시작**********");
service.add(new Manager("17", "씨위드수민", 700, "기획부"));
service.add(new Engineer("19", "스탑윤", 900, "spring"));
service.add(new Employee("20", "진드래곤현", 600));
service.add(new Employee("21", "무빙욱", 650));
System.out.println("**********사원등록 끝**********");
System.out.println("\n**********전체사원정보 출력**********");
service.printAll();
/* 출력값:
* **********전체사원정보 출력**********
* Manager [empId=17, name=씨위드수민,salary=700, department=기획부]
* Engineer [empId=19, name=스탑윤, salary=900,skill=spring]
* Employee [empId=20, name=진드래곤현, salary=600]
* Employee [empId=21, name=무빙욱, salary=650]
*/
System.out.println("\n**********사원아이디로 검색**********");
Employee e = service.findById("20");
Employee e2 = service.findById2("17");
System.out.println("방법1 / "+e);
System.out.println("방법2 / "+e2);
/* 출력값:
* **********사원아이디로 검색**********
* 방법1 / Employee [empId=20, name=진드래곤현,salary=600]
* 방법2 / Manager [empId=17, name=씨위드수민, salary=700, department=기획부]
*/
System.out.println("\n******사원아이디에 해당하는 배열요소 idnex 찾기******");
System.out.println("**********사원아이디로 삭제*********");
service.removeById("20");
System.out.println("방법 1/ "); service.printAll();
/* 출력값:
* ******사원아이디에 해당하는 배열요소 index 찾기******
* 사원아이디로 삭제*********
* 방법 1/
* Manager [empId=17, name=씨위드수민, salary=700, department=기획부]
* Engineer [empId=19,name=스탑윤, salary=900, skill=spring]
* Employee [empId=21, name=무빙욱, salary=650]
*/
service.removeById2("17");
System.out.println("\n방법 2/ "); service.printAll();
/* 출력값:
* 방법 2/
* Engineer [empId=19, name=스탑윤, salary=900, skill=spring]
* Employee [empId=21, name=무빙욱, salary=650]
*/
}
}
Service class
/CompanyService.java
package step6.model;
import java.lang.reflect.Array;
public class CompanyService {
public Employee[] empArray;
public int index;
public CompanyService(int length) {
empArray = new Employee[length];
}
public void add(Employee emp) {
empArray[index++] = emp;
}
public void printAll() {
for (int i = 0; i < index; i++) {
System.out.println(empArray[i].toString());
}
}
// findById 방법 1)
/**
* 전달된 사원아이디에 일치되는
* 사원객체(엔지니어, 매니저 포함)를 호출한 곳으로 반환하는 메서드.
* 만약 사원아이디에 일치하는 사원객체가
* 배열에 존재하지 않는다면 null을 반환
*
* @param id
* @return
*/
public Employee findById(String empId) {
Employee emp = null;
// 배열 요소가 존재할 때까지만 반복하면 된다
for (int i = 0; i < index; i++) {
// 전달된 사원번호와 배열요소의 사원번호가 일치하면,
// **equals함수를 이용하여 비교한다
if (empId.equals(empArray[i].getEmpId())) {
emp = empArray[i];
break; // 실행문을 벗어난다
} // if
} // for
return emp;
}// findById
// findById 방법 2)
public Employee findById2(String empId) {
Employee room;
for (int i = 0; i < index; i++) {
room = empArray[i];
if (room.getEmpId() == empId) {
return room;
}
}
return null;
}
// removeById 방법 1)
// id로 index를 찾은 후 -> id를 지우는 방법
/**
* 사원아이디에 해당하는 요소의 index 위치를 반환하는 메서드
* 만약 일치되는 사원아이디에 해당하는 요소가 배열에 없다면
* -1을 반환
* @param empId
* @return
*/
public int findIndexByIndex(String empId) {
int position = -1;
for (int i = 0; i < index; i++) {
//사원아이디가 배열요소의 사원아이디와 일치하면
if(empId.equals(empArray[i].getEmpId())) {
position = i; //배열요소의 위치를 지역변수에 할당한다
break;
}
}
return position;
}
/**
* 매개변수로 전달된 사원아이디와 배열요소의
* 사원객체의 사원아이디가 일치하면 해당 배열 요소를 삭제하는 메서드
* 1. findIndexByEmpId() 메서드를 이용해, 사원아이디에 해당하는 배열요소의
* 위치를 반환받는다.
* 만약 일치하는 사원이 없으면 -1이 반환된다.
* 2. -1이 반환되면 일치하는 사원이 없습니다 라는 메세지를 출력하고 작업종료
* 3. -1이 아니면 일치하는 사원이 있으면 해당 사원이 위치한 값을 이용해
* 그 지점부터 index(사원수)보다 작을 동안 계속 반복하면서
* 뒤 요소를 아 요소에 할당하는 방식으로 삭제한다.
* 3.1 만약 삭제요소가 마지막 요소라면 ( empArray[i] = empArray[i+1] -> 불가능)
* 직접 null을 할당한다
* @param empId
*/
public void removeById(String empId) {
int position = findIndexByIndex(empId); //삭제 대상 배열 요소 위치 반환
if (position == -1) { //position(삭제 대상)이 없으면
System.out.println(empId+" 사원아이디에 해당하는 사원이 없으므로 삭제가 불가능합니다.\n");
} else { //삭제대상이 배열에 있으면 삭제한다
for (int i = position; i<index; i++) {
if (i+1 == empArray.length) {//마지막 요소를 삭제할 때는 직접 null을 할당
empArray[i] = null;
} else {
empArray[i] = empArray[i+1];
}
} //for
index--; //삭제했으므로, index를 1 감소시킴
} //else
}// removeById method
// removeById 방법 2)
// 위 방법을 하나의 함수에 넣는 방법
public void removeById2(String empId) {
for (int i = 0; i < index; i++) {
if (empId.equals(empArray[i].getEmpId())) {
int point = i;
for (int j = point; j < index; j++) {
if(j+1 == index) {
--index;
//empArray[j+1] = null;
//return;
}else {
empArray[j] = empArray[j+1];
}
} // for
} // if
} // for
}// removeById
}// class
VO class
/Employee.java
package step6.model;
public class Employee {
private String empId;
private String name;
private int salary;
public Employee(String empId, String name, int salary) {
this.empId = empId;
this.name = name;
this.salary = salary;
}
public String getEmpId() {
return empId;
}
public void setEmpId(String empId) {
this.empId = empId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Employee [empId=" + empId + ", name=" + name + ", salary=" + salary + "]";
}
}
/Engineer.java
package step6.model;
public class Engineer extends Employee {
private String skill;
public Engineer(String empId, String name, int salary, String skill) {
super(empId, name, salary);
this.skill = skill;
}
public String getSkill() {
return skill;
}
public void setSkill(String skill) {
this.skill = skill;
}
@Override
public String toString() {
return "Engineer [empId=" + getEmpId() + ", name="
+ getName() + ", salary=" + getSalary() + ", skill=" + skill + "]" ;
}
}
/Manaeger.java
package step6.model;
public class Manager extends Employee {
private String department;
public Manager(String empId, String name, int salary, String department) {
super(empId, name, salary);
this.department = department;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
@Override
public String toString() {
return "Manager [empId=" + getEmpId() + ", name="
+ getName() + ", salary=" + getSalary() + ", department=" + department + "]" ;
}
}
728x90
반응형