package hasA;
import java.util.Scanner;
public class PartTimeEmployeeManagementSystem implements ManagementSystem {
private PartTimeEmployee[] partTimeEmployee; // 비정규직 직원 클래스
private SalaryManagement salaryManagement; // 급여관리 클래스
private int maxNum; // 비정규직 최대 인원수
private int empCount; // 입력받을 직원 수
private int empIndex; // 현재 입력받을 수 있는 reference index
public PartTimeEmployeeManagementSystem() {
this(0);
}
public PartTimeEmployeeManagementSystem(int maxNum) {
this.maxNum = maxNum;
/*
* PartTimeEmployeeManagementSystem을 생성한 클래스에서 비정규직 수를 최대로 받아 그만큼 생성합니다.
*/
partTimeEmployee = new PartTimeEmployee[maxNum];
salaryManagement = null;
empCount = 0;
empIndex = 0;
}
// setter,getter
public PartTimeEmployee getPartTimeEmployee(int index) { // 주입된 index를 통해 partTimeEmployee[index]의 값을 return
return partTimeEmployee[index];
}
public void setPartTimeEmployee(PartTimeEmployee[] pe) {
this.partTimeEmployee = pe;
}
public SalaryManagement getSalaryManagement() {
return salaryManagement;
}
public void setSalaryManagement(PartTimeEmployee pe) {
salaryManagement = new SalaryManagement(pe);
salaryManagement.putOnRecord();
}
public void setNumOfRegular(int maxNum) {
this.maxNum = maxNum;
}
public int getNumOfRegular() {
return maxNum;
}
public PartTimeEmployee getClass(int index) {
return partTimeEmployee[index];
}
public long getSalary(PartTimeEmployee pe) {
this.salaryManagement = new SalaryManagement(pe);
this.salaryManagement.putOnRecord();
return this.salaryManagement.getRealSalary();
}
// 입력
public void input() {
Scanner sc = new Scanner(System.in);
if (empIndex == maxNum) { // 입력을 다 하였을 경우..
System.out.println("더 이상 입력할 수 없습니다.");
} else {
System.out.print("비정규직 직원 몇명 입력하시겠어요? ");
this.empCount = sc.nextInt(); // 입력받을 직원 수
System.out.println();
if (empCount + empIndex > maxNum) {
System.out.println("입력할 수 있는 범위를 초과하였습니다..");
System.out.println("다시 시도해주세요..");
} else {
for (int i = 0; i < empCount; i++) {
partTimeEmployee[empIndex] = new PartTimeEmployee();
System.out.println("비정규직 " + (empIndex + 1) + "번째 직원 정보 입력");
// 사번
partTimeEmployee[empIndex].setEmpNum(empIndex + 1);
// 이름입력
System.out.print((empIndex + 1) + "번째 직원 이름 입력 : ");
String name = sc.next();
System.out.println();
// 나이입력
System.out.print((empIndex + 1) + "번째 직원 나이 입력 : ");
int age = sc.nextInt();
System.out.println();
// 생년월일
System.out.print((empIndex + 1) + "번째 직원 생년월일 입력(YYYY-MM-DD) : ");
String birth = sc.next();
System.out.println();
// 주소
System.out.print((empIndex + 1) + "번째 직원 주소 입력 : ");
String address = sc.next();
System.out.println();
// 연락처
System.out.print((empIndex + 1) + "번째 직원 연락처 입력 : ");
String tel = sc.next();
System.out.println();
// 이메일 입력
System.out.print((empIndex + 1) + "번째 직원 이메일 입력 : ");
String email = sc.next();
System.out.println();
// 은행명 입력
System.out.print((empIndex + 1) + "번째 직원 은행명 입력 : ");
String bankName = sc.next();
System.out.println();
// 계좌 입력
System.out.print((empIndex + 1) + "번째 직원 계좌 입력 : ");
String account = sc.next();
System.out.println();
// 개인정보 입력
partTimeEmployee[empIndex].setPersonalInfo(name, age, birth, address, tel, email, bankName,
account);
// 소속팀 입력
System.out.print((empIndex + 1) + "번째 직원 소속팀 입력 : ");
partTimeEmployee[empIndex].setTeam(sc.next());
System.out.println();
// 소속부서 입력
System.out.print((empIndex + 1) + "번째 직원 소속부서 입력 : ");
partTimeEmployee[empIndex].setDept(sc.next());
System.out.println();
// 입사년도 입력
System.out.print((empIndex + 1) + "번째 직원 입사년도 입력(YYYY) : ");
partTimeEmployee[empIndex].setYear(sc.nextInt());
System.out.println();
// 계약기간 입력
System.out.print((empIndex + 1) + "번째 직원 계약기간 : ");
partTimeEmployee[empIndex].setPeriod(sc.nextInt());
System.out.println();
// 비밀번호 입력
System.out.print((empIndex + 1) + "번째 직원 비밀번호 입력 : ");
partTimeEmployee[empIndex].setPassword(sc.next());
System.out.println();
///////////
// 사용자에게 입력을 받을 필요가 없는 부분
partTimeEmployee[empIndex].setEndOfDate(); // 퇴사일자 = 입사년도 + 계약기간
// 사용자에게 입력받을 필요가 없는 부분 등록..
// 급여등록 : 직책으로 급여계산
// 급여등록
long salary = this.getSalary(partTimeEmployee[empIndex]);
partTimeEmployee[empIndex].setSalary(salary);
System.out.println();
empIndex++;
}
}
}
}
// 수정
public void modifi() {// 이름검색
Scanner sc = new Scanner(System.in);
if (empIndex == 0) {
System.out.println("직원정보가 없습니다.");
} else {
System.out.print("검색하고 싶은 직원 이름을 입력하세요 : ");
String tmpName = sc.next();
boolean exist = true;
for (int i = 0; i < empIndex; i++) {
if (partTimeEmployee[i].getPersonalInfo().getName().equals(tmpName)) {
System.out.println("수정하고 싶은 데이터를 선택하세요..");
System.out.println("1.이름 2.나이 3.생일 4.주소 5.전화번호 6.이메일 7.은행명 8.계좌번호");
System.out.println("9.소속팀 10.소속부서 11.입사년도 12.계약기간 13.비밀번호");
System.out.print("-> ");
int num = sc.nextInt(); // 번호 선택
String sTmp = "";
int iTmp = 0;
switch (num) {
case 1: // 이름
System.out.print("수정할 데이터를 입력하세요 : ");
sTmp = sc.next();
partTimeEmployee[i].getPersonalInfo().setName(sTmp);
break;
case 2: // 나이
System.out.print("수정할 데이터를 입력하세요 : ");
iTmp = sc.nextInt();
partTimeEmployee[i].getPersonalInfo().setAge(iTmp);
break;
case 3: // 생일
System.out.print("수정할 데이터를 입력하세요 : ");
sTmp = sc.next();
partTimeEmployee[i].getPersonalInfo().setBirth(sTmp);
break;
case 4: // 주소
System.out.print("수정할 데이터를 입력하세요 : ");
sTmp = sc.next();
partTimeEmployee[i].getPersonalInfo().setAddress(sTmp);
break;
case 5: // 전화번호
System.out.print("수정할 데이터를 입력하세요 : ");
sTmp = sc.next();
partTimeEmployee[i].getPersonalInfo().setTel(sTmp);
break;
case 6: // 이메일
System.out.print("수정할 데이터를 입력하세요 : ");
sTmp = sc.next();
partTimeEmployee[i].getPersonalInfo().setEmail(sTmp);
case 7: // 은행명
System.out.print("수정할 데이터를 입력하세요 : ");
sTmp = sc.next();
partTimeEmployee[i].getPersonalInfo().setBankName(sTmp);
case 8: // 계좌
System.out.print("수정할 데이터를 입력하세요 : ");
sTmp = sc.next();
partTimeEmployee[i].getPersonalInfo().setAccount(sTmp);
break;
case 9: // 팀
System.out.print("수정할 데이터를 입력하세요 : ");
sTmp = sc.next();
partTimeEmployee[i].setTeam(sTmp);
break;
case 10: // 소속부서
System.out.print("수정할 데이터를 입력하세요 : ");
sTmp = sc.next();
partTimeEmployee[i].setDept(sTmp);
break;
case 11: // 입사년도
System.out.print("수정할 데이터를 입력하세요 : ");
iTmp = sc.nextInt();
partTimeEmployee[i].setYear(iTmp);
break;
case 12: // 계약기간
System.out.println("수정할 데이터를 입력하세요 : ");
iTmp = sc.nextInt();
partTimeEmployee[i].setPeriod(iTmp);
break;
case 13: // 비밀번호
System.out.print("수정할 데이터를 입력하세요 : ");
sTmp = sc.next();
partTimeEmployee[i].setPassword(sTmp);
break;
default:
System.out.println("잘못 입력하였습니다.");
}
exist = true;
System.out.println();
System.out.println("수정완료!!");
}
if (!exist)
System.out.println("검색하신 " + tmpName + " 직원에 대한 정보가 없습니다.");
}
}
}
// 삭제
public void delete() {
Scanner sc = new Scanner(System.in);
if (empIndex == 0) {
System.out.println("직원정보가 없습니다.");
} else {
System.out.print("삭제할 직원의 이름을 입력하세요 : ");
String tmpName = sc.next();
boolean exist = true;
for (int i = 0; i < empIndex; i++) {
if (partTimeEmployee[i].getPersonalInfo().getName().equals(tmpName)) {
partTimeEmployee[i] = null;
exist = true;
}
if (!exist)
System.out.println("검색하신 " + tmpName + " 직원에 대한 정보가 없습니다.");
}
}
}
// 검색
public void search() {
Scanner sc = new Scanner(System.in);
if (empIndex == 0) {
System.out.println("직원정보가 없습니다.");
} else {
System.out.print("검색하고 싶은 직원 이름을 입력하세요 : ");
String tmpName = sc.next();
boolean exist = false;
for (int i = 0; i < empIndex; i++) {
if (partTimeEmployee[i].getPersonalInfo().getName().equals(tmpName)) {
this.disp(partTimeEmployee[i]);
exist = true;
}
if (!exist)
System.out.println("검색하신 " + tmpName + " 직원에 대한 정보가 없습니다.");
exist = !exist;
}
}
}
// 출력
public void allOutput() {
if (empIndex == 0) {
System.out.println("직원정보가 없습니다.");
} else {
boolean exist = true;
System.out.println("-----------------------------------");
System.out.println("----------비정규직 직원 전체 출력----------");
System.out.println("-----------------------------------");
for (int i = 0; i < empIndex; i++) {
if (partTimeEmployee[i] != null) {
System.out.println((i + 1) + "번째 직원 출력");
this.disp(partTimeEmployee[i]);
exist = true;
}
if (!exist)
System.out.println("직원 정보가 없습니다.");
}
}
}
public void userSearch(String num, String password) { // 사용자에서 사번과 이름을 받아옴
if (empIndex == 0) {
System.out.println("직원정보가 없습니다.");
} else {
for (int i = 0; i < empIndex; i++) {
if (partTimeEmployee[i] != null) {
if (partTimeEmployee[i].getEmpNum().equals(num)
&& partTimeEmployee[i].getPassword().equals(password))
this.disp(partTimeEmployee[i]);
}
}
}
}
public void disp(PartTimeEmployee pe) {
System.out.println("----------------------------------------");
System.out.println("사번 : " + pe.getEmpNum()); // 사번
// 직원 개인정보 출력
System.out.println("이름 : " + pe.getPersonalInfo().getName()); // 이름
System.out.println("나이 : " + pe.getPersonalInfo().getAge()); // 나이
System.out.println("연락처 : " + pe.getPersonalInfo().getBirth()); // 연락처
System.out.println("주소 : " + pe.getPersonalInfo().getAddress()); // 주소
System.out.println("전화번호 : " + pe.getPersonalInfo().getTel()); // 전화번호
System.out.println("이메일 : " + pe.getPersonalInfo().getEmail()); // 이메일
System.out.println("은행명 : " + pe.getPersonalInfo().getBankName()); // 은행명
System.out.println("계좌번호 : " + pe.getPersonalInfo().getAccount()); // 계좌번호
System.out.println("소속팀 : " + pe.getTeam()); // 소속팀
System.out.println("소속부서 : " + pe.getDept()); // 소속부서
System.out.println("급여 : " + pe.getSalary()); // 급여
System.out.println("근속년도 : " + pe.getYear()); // 근속년도
System.out.println("계약기간 : " + pe.getPeriod() + "년"); // 계약기간
System.out.println("퇴사일자 : " + pe.getEndOfDate() + "년"); // 퇴사일자
System.out.println("----------------------------------------");
}
}