// 근로자 클래스
package Data;
public class Employee {
private String id;
private String pw;
private String name;
private int sal;
public Employee() {
this.sal = 200;
}
public String getid() {
return id;
}
public void setid(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSal() {
return sal;
}
public void setSal(int sal) {
this.sal = sal;
}
}
// 정규직 클래스
package Data;
public class Permanent extends Employee {
private String dept;
private String empNo;
private float bonus;
private String position;
public Permanent() {
this.bonus = 0;
}
public String getEmpNo() {
return empNo;
}
public void setEmpNo(String empNo) {
this.empNo = empNo;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public float getBonus() {
return bonus;
}
public void setBonus(String position) {
switch (position) {
case "부장":
this.bonus = 3.0f;
break;
case "과장":
this.bonus = 2.5f;
break;
case "대리":
this.bonus = 2.0f;
break;
case "사원":
this.bonus = 1.5f;
break;
}
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
}
// 비정규직 클래스
package Data;
public class Irregular extends Employee {
private int extraSal;
public int getExtraSal() {
return extraSal;
}
public void setExtraSal(int extraSal) {
this.extraSal = extraSal;
}
}
// 시간제 클래스
package Data;
public class PartTime extends Irregular {
private int workTime;
public int getWorkTime() {
return workTime;
}
public void setWorkTime(int workTime) {
this.workTime = workTime;
}
}
// 기간제 클래스
package Data;
public class FixedTerm extends Irregular {
private int workDate;
public int getWorkDate() {
return workDate;
}
public void setWorkDate(int workDate) {
this.workDate = workDate;
}
}
// 관리 클래스
import Data.FixedTerm;
import Data.PartTime;
import Data.Permanent;
public class EmployeeManage {
private Permanent[] per;
private PartTime[] pt;
private FixedTerm[] ft;
private int perCnt;
private int ptCnt;
private int ftCnt;
public EmployeeManage() {
this.per = new Permanent[100];
this.pt = new PartTime[50];
this.ft = new FixedTerm[50];
// 근무 형태 별 근무자 수
this.perCnt = 0;
this.ptCnt = 0;
this.ftCnt = 0;
}
public Permanent[] getPer() {
return per;
}
// setPer 오버로딩
public void setPer(Permanent[] per) {
this.per = per;
}
public void setPer(Permanent per) {
this.per[perCnt++] = per;
}
public void setPer(String id, String pw, String name, String dept, String empNo, String position) {
this.per[perCnt++] = newPermanent(id, pw, name, dept, empNo, position);
}
// 신규 정규직
public Permanent newPermanent(String id, String pw, String name, String dept, String empNo, String position) {
Permanent per = new Permanent();
per.setid(id);
per.setPw(pw);
per.setName(name);
per.setDept(dept);
per.setEmpNo(empNo);
per.setPosition(position);
per.setBonus(per.getPosition());
return per;
}
// 관리자
public void setManager(Permanent manager) {
per[perCnt++] = manager;
}
public Permanent getManager(int index) {
return this.per[index];
}
//
public PartTime[] getPt() {
return pt;
}
// setPt 오버로딩
public void setPt(PartTime[] pt) {
this.pt = pt;
}
public void setPt(PartTime pt) {
this.pt[ptCnt++] = pt;
}
public void setPt(String id, String pw, String name, int workTime) {
}
// 신규 시간제
public PartTime newPartTime(String id, String pw, String name, int workTime) {
PartTime pt = new PartTime();
pt.setName(name);
pt.setid(id);
pt.setPw(pw);
pt.setWorkTime(workTime);
pt.setExtraSal(pt.getWorkTime()/5);
return pt;
}
public FixedTerm[] getFt() {
return ft;
}
// setFt 오버로딩
public void setFt(FixedTerm[] ft) {
this.ft = ft;
}
public void setFt(String id, String pw, String name, int workDate) {
this.ft[ftCnt++] = newFixedTerm(id, pw, name, workDate);
}
// 신규 기간제
public FixedTerm newFixedTerm(String id, String pw, String name, int workDate) {
FixedTerm ft = new FixedTerm();
ft.setid(id);
ft.setPw(pw);
ft.setName(name);
ft.setWorkDate(workDate);
ft.setExtraSal((ft.getWorkDate()/30)*10);
return ft;
}
public void setFt(FixedTerm ft) {
this.ft[ftCnt++] = ft;
}
public int[] getEmpCnt() {
int empCnt[] = { perCnt, ptCnt, ftCnt };
return empCnt;
}
public void setPerCnt(int perCnt) {
this.perCnt = perCnt;
}
public void setFtCnt(int ftCnt) {
this.ftCnt = ftCnt;
}
public void setPtCnt(int ptCnt) {
this.ptCnt = ptCnt;
}
}
// 메인 클래스
import java.util.Scanner;
import Data.FixedTerm;
import Data.PartTime;
import Data.Permanent;
public class EmployeeMain {
private EmployeeManage em;
private Permanent manager;
public EmployeeMain() {
this.em = new EmployeeManage();
manager = new Permanent();
setManager();
setGeneral();
}
public EmployeeManage getEm() {
return em;
}
public void setEm(EmployeeManage em) {
this.em = em;
}
// 관리자
public void setManager() {
this.manager.setid("m000");
this.manager.setName("manager");
this.manager.setPw("m1234");
this.manager.setDept("인사");
this.manager.setEmpNo("P001");
this.manager.setPosition("부장");
this.manager.setBonus(this.manager.getPosition());
getEm().setManager(this.manager);
}
// 평사원
public void setGeneral() {
getEm().setFt("f001", "f1234", "f001", 25);
}
public Permanent getManager() {
return getEm().getManager(0);
}
// 사원 추가
static void insertEmp(EmployeeMain emain) {
Scanner sc = new Scanner(System.in);
System.out.println("사원 추가");
System.out.print("고용 형태를 선택하세요. 1. 정규직 / 2. 기간제 비정규직 / 3. 시간제 비정규직 : ");
String id = "";
String pw = "";
String name = "";
int empType = sc.nextInt();
switch (empType) {
// 정규직
case 1:
String dept = "";
String empNo = "";
String position = "";
System.out.print("아이디를 입력하세요. : ");
id = sc.next();
System.out.print("비밀번호를 입력하세요. : ");
pw = sc.next();
System.out.print("이름을 입력하세요. : ");
name = sc.next();
System.out.print("부서를 입력하세요.(기획/개발/영업/인사) : ");
dept = sc.next();
System.out.print("사번을 입력하세요. : ");
empNo = sc.next();
System.out.print("직급을 입력하세요. : ");
position = sc.next();
emain.getEm().setPer(id, pw, name, dept, empNo, position);
break;
// 시간제
case 2:
int workDate = 0;
System.out.print("아이디를 입력하세요. : ");
id = sc.next();
System.out.print("비밀번호를 입력하세요. : ");
pw = sc.next();
System.out.print("이름을 입력하세요. : ");
name = sc.next();
System.out.print("근무 일수를 입력해주세요. : ");
workDate = sc.nextInt();
emain.getEm().setFt(id, pw, name, workDate);
break;
// 기간제
case 3:
int workTime = 0;
System.out.print("아이디를 입력하세요. : ");
id = sc.next();
System.out.print("비밀번호를 입력하세요. : ");
pw = sc.next();
System.out.print("이름을 입력하세요. : ");
name = sc.next();
System.out.print("근무 시간 입력해주세요. : ");
workTime = sc.nextInt();
emain.getEm().setPt(id, pw, name, workTime);
break;
}
}
// 사원 수정
static void modEmp(EmployeeMain emain) {
Permanent per[] = emain.getEm().getPer();
PartTime pt[] = emain.getEm().getPt();
FixedTerm ft[] = emain.getEm().getFt();
int empCnt[] = emain.getEm().getEmpCnt();
Scanner sc = new Scanner(System.in);
System.out.print("수정하고 싶은 아이디를 입력해주세요. : ");
String id = sc.next();
boolean nonResult = false;
// 정규직
for (int i = 0; i < empCnt[0]; i++) {
if (per[i].getid().equals(id)) {
Permanent p = per[i];
// 이름 부서 직급만 수정 가능
System.out.print("수정할 정보를 선택해주세요.(1. 이름 / 2. 부서 / 3. 직급) : ");
switch(sc.nextInt()) {
case 1:
System.out.print("수정할 이름을 입력해주세요. : ");
p.setName(sc.next());
break;
case 2:
System.out.print("수정할 부서를 입력해주세요. : ");
p.setDept(sc.next());
break;
case 3:
System.out.print("수정할 직급을 입력해주세요. : ");
p.setPosition(sc.next());
p.setBonus(p.getPosition());
break;
}
per[i] = p;
nonResult = false;
} else {
nonResult = true;
}
}
// 시간제
for(int i = 0; i < empCnt[1]; i++) {
if(pt[i].getid().equals(id)) {
PartTime p = pt[i];
// 이름 근무 시간만 수정 가능
System.out.print("수정할 정보를 선택해주세요.(1. 이름 / 2. 근무 시간) : ");
switch(sc.nextInt()) {
case 1:
System.out.print("수정할 이름을 입력해주세요. : ");
p.setName(sc.next());
break;
case 2:
System.out.print("근무 시간을 변경해주세요. : ");
p.setWorkTime(sc.nextInt());
p.setExtraSal(p.getWorkTime());
break;
}
pt[i] = p;
nonResult = false;
} else {
nonResult = true;
}
}
// 기간제
for(int i = 0; i < empCnt[2]; i++) {
if(ft[i].getid().equals(id)) {
FixedTerm f = ft[i];
// 이름 근무 기간만 수정 가능
System.out.print("수정할 정보를 선택해주세요.(1. 이름 / 2. 근무 기간) : ");
switch(sc.nextInt()) {
case 1:
System.out.print("수정할 이름을 입력해주세요. : ");
f.setName(sc.next());
break;
case 2:
System.out.print("근무 기간을 변경해주세요. : ");
f.setWorkDate(sc.nextInt());
f.setExtraSal(f.getWorkDate());
break;
}
ft[i] = f;
nonResult = false;
} else {
nonResult = true;
}
}
if(nonResult) {
System.out.println("검색된 결과가 없습니다. \n아이디를 확인해주세요.");
}
}
// 삭제
static void delEmp(EmployeeMain emain) {
Permanent per[] = emain.getEm().getPer();
PartTime pt[] = emain.getEm().getPt();
FixedTerm ft[] = emain.getEm().getFt();
int empCnt[] = emain.getEm().getEmpCnt();
Scanner sc = new Scanner(System.in);
System.out.print("삭제하고싶은 아이디를 입력해주세요. : ");
String id = sc.next();
boolean nonResult = false;
// 정규직
for (int i = 0; i < empCnt[0]; i++) {
if (per[i].getid().equals(id)) {
per[i] = per[i++];
emain.getEm().setPerCnt(--empCnt[0]);
nonResult = false;
} else {
nonResult = true;
}
}
// 시간제
for(int i = 0; i < empCnt[1]; i++) {
if(pt[i].getid().equals(id)) {
pt[i] = pt[i++];
emain.getEm().setPtCnt(--empCnt[1]);
nonResult = false;
} else {
nonResult = true;
}
}
// 기간제
for(int i = 0; i < empCnt[2]; i++) {
if(ft[i].getid().equals(id)) {
ft[i] = ft[i++];
emain.getEm().setFtCnt(--empCnt[2]);
nonResult = false;
} else {
nonResult = true;
}
}
if(nonResult) {
System.out.println("검색된 결과가 없습니다. \n아이디를 확인해주세요.");
}
}
// 원하는 아이디로 검색
static void searchEmp(EmployeeMain emain) {
Permanent per[] = emain.getEm().getPer();
PartTime pt[] = emain.getEm().getPt();
FixedTerm ft[] = emain.getEm().getFt();
int empCnt[] = emain.getEm().getEmpCnt();
Scanner sc = new Scanner(System.in);
System.out.print("찾고싶은 아이디를 입력해주세요. : ");
String id = sc.next();
boolean nonResult = false;
// 정규직
for (int i = 0; i < empCnt[0]; i++) {
if (per[i].getid().equals(id)) {
System.out.println("아이디 : " + per[i].getid()
+ " 이름 : " + per[i].getName()
+ " 부서 : " + per[i].getDept()
+ " 사번 : " + per[i].getEmpNo()
+ " 급여 : " + (per[i].getSal() * per[i].getBonus())
+ " 직급 : " + per[i].getPosition());
nonResult = false;
} else {
nonResult = true;
}
}
// 시간제
for(int i = 0; i < empCnt[1]; i++) {
if(pt[i].getid().equals(id)) {
System.out.println("아이디 : " + pt[i].getid()
+ " 이름 : " + pt[i].getName()
+ " 근무 시간 : " + pt[i].getWorkTime()
+ " 급여 : " + (pt[i].getSal() * pt[i].getExtraSal()));
nonResult = false;
} else {
nonResult = true;
}
}
// 기간제
for(int i = 0; i < empCnt[2]; i++) {
if(ft[i].getid().equals(id)) {
System.out.println("아이디 : " + ft[i].getid()
+ " 이름 : " + ft[i].getName()
+ " 근무 일자 : " + ft[i].getWorkDate()
+ " 급여 : " + (ft[i].getSal() + ft[i].getExtraSal()));
nonResult = false;
} else {
nonResult = true;
}
}
if(nonResult) {
System.out.println("검색된 결과가 없습니다. \n아이디를 확인해주세요.");
}
}
// 본인 정보 검색
static void searchEmp(EmployeeMain emain, String id) {
Permanent per[] = emain.getEm().getPer();
PartTime pt[] = emain.getEm().getPt();
FixedTerm ft[] = emain.getEm().getFt();
int empCnt[] = emain.getEm().getEmpCnt();
Scanner sc = new Scanner(System.in);
// 정규직
for (int i = 0; i < empCnt[0]; i++) {
if (per[i].getid().equals(id)) {
System.out.println("아이디 : " + per[i].getid()
+ " 이름 : " + per[i].getName()
+ " 부서 : " + per[i].getDept()
+ " 사번 : " + per[i].getEmpNo()
+ " 급여 : " + (per[i].getSal() * per[i].getBonus())
+ " 직급 : " + per[i].getPosition());
}
}
// 시간제
for(int i = 0; i < empCnt[1]; i++) {
if(pt[i].getid().equals(id)) {
System.out.println("아이디 : " + pt[i].getid()
+ " 이름 : " + pt[i].getName()
+ " 근무 시간 : " + pt[i].getWorkTime()
+ " 급여 : " + (pt[i].getSal() * pt[i].getExtraSal()));
}
}
// 기간제
for(int i = 0; i < empCnt[2]; i++) {
if(ft[i].getid().equals(id)) {
System.out.println("아이디 : " + ft[i].getid()
+ " 이름 : " + ft[i].getName()
+ " 근무 일자 : " + ft[i].getWorkDate()
+ " 급여 : " + (ft[i].getSal() + ft[i].getExtraSal()));
}
}
}
// 전체 조회
static void allEmp(EmployeeMain emain) {
Permanent per[] = emain.getEm().getPer();
PartTime pt[] = emain.getEm().getPt();
FixedTerm ft[] = emain.getEm().getFt();
int empCnt[] = emain.getEm().getEmpCnt();
// 정규직
for(int i = 0; i < empCnt[0]; i++) {
System.out.println("아이디 : " + per[i].getid()
+ " 이름 : " + per[i].getName()
+ " 부서 : " + per[i].getDept()
+ " 사번 : " + per[i].getEmpNo()
+ " 급여 : " + (per[i].getSal() * per[i].getBonus())
+ " 직급 : " + per[i].getPosition());
}
// 시간제
for(int i = 0; i < empCnt[1]; i++) {
System.out.println("아이디 : " + pt[i].getid()
+ " 이름 : " + pt[i].getName()
+ " 근무 시간 : " + pt[i].getWorkTime()
+ " 급여 : " + (pt[i].getSal() * pt[i].getExtraSal()));
}
// 기간제
for(int i = 0; i < empCnt[2]; i++) {
System.out.println("아이디 : " + ft[i].getid()
+ " 이름 : " + ft[i].getName()
+ " 근무 일자 : " + ft[i].getWorkDate()
+ " 급여 : " + (ft[i].getSal() + ft[i].getExtraSal()));
}
}
// 관리자 기능
static void manage(EmployeeMain emain) {
Scanner sc = new Scanner(System.in);
int option = 6;
do {
System.out.println();
System.out.println("현재 사원 - 정규직 : " + emain.getEm().getEmpCnt()[0]
+ "명, 시간제 : " + emain.getEm().getEmpCnt()[1]
+ "명, 기간제 : " + emain.getEm().getEmpCnt()[2] + "명");
System.out.println("\n사용할 기능을 선택해주세요.(1~5, 그 외 번호를 입력하면 종료.)");
System.out.print("1. 사원 추가 / 2. 사원 수정 / 3. 사원 삭제 / 4. 사원 검색 / 5. 전체 사원 조회 : ");
option = sc.nextInt();
switch (option) {
case 1:
insertEmp(emain); // 사원 추가
break;
case 2:
modEmp(emain); // 사원 수정
break;
case 3:
delEmp(emain); // 사원 삭제
break;
case 4:
searchEmp(emain); // 사원 검색
break;
case 5:
allEmp(emain); // 사원 전채 조회
break;
default:
option = 6;
}
// 1~5 중 하나가 아니면 6으로 종료
} while (option != 6);
}
// 일반 사원은 본인의 정보만 확인 가능
static void general(EmployeeMain emain, String id) {
searchEmp(emain, id);
}
static boolean checkPosition(EmployeeMain emain, String id, String pw) {
// 등록된 정규직, 시간제, 기간제 근로자 가져옴
Permanent per[] = emain.getEm().getPer();
PartTime pt[] = emain.getEm().getPt();
FixedTerm ft[] = emain.getEm().getFt();
// 각 근로 형태에 따른 근무자 수
int empCnt[] = emain.getEm().getEmpCnt();
boolean invalid = false; // 아이디와 비밀번호가 일치하는지 여부
boolean isManager = false; // 부장 이상인지 여부
for (int i = 0; i < empCnt[0]; i++) {
// 정규직인지
if (per[i].getid().equals(id) && per[i].getPw().equals(pw)) {
// 찾았으니 true
invalid = true;
System.out.print("로그인된 계정 - ");
System.out.println("사번 : " + per[i].getid() + ", 이름 : " + per[i].getName() + "님.");
// 부장이상(관리자 인지)
if (per[i].getPosition().equals("부장")) {
System.out.println("관리자로 접속하였습니다.");
isManager = true;
}
} else {
invalid = false;
}
}
// 정규직이 아닐때
if(!invalid) {
for (int i = 0; i < empCnt[1]; i++) {
if (pt[i].getid().equals(id) && pt[i].getPw().equals(pw)) {
invalid = true;
System.out.print("로그인된 계정 - ");
System.out.println("사번 : " + pt[i].getid() + ", 이름 : " + pt[i].getName() + "님.");
} else {
invalid = false;
}
}
// 시간제가 아닐때
if (!invalid) {
for (int i = 0; i < empCnt[2]; i++) {
if (ft[i].getid().equals(id) && ft[i].getPw().equals(pw)) {
invalid = true;
System.out.print("로그인된 계정 - ");
System.out.println("사번 : " + ft[i].getid() + ", 이름 : " + ft[i].getName() + "님.");
} else {
invalid = false;
}
}
}
}
// 검색결과가 없을때
if (!invalid) {
System.out.println("등록되지 않은 사원입니다. 아이디와 비밀번호를 확인해주세요.");
return invalid;
}
// 관리자면
if (isManager) {
manage(emain);
} else { // 일반 사원이면
general(emain, id);
}
// 사원이 없으면 다시 로그인으로
return invalid;
}
static void login(EmployeeMain emain) {
Scanner sc = new Scanner(System.in);
String id = "";
String pw = "";
String check = "";
// 로그인
System.out.print("아이디를 입력해주세요. : ");
id = sc.next();
System.out.print("비밀번호를 입력해주세요. : ");
pw = sc.next();
do {
// 고용형태 및 직급 구분
if (checkPosition(emain, id, pw)) {
System.out.print("\n로그아웃 하시겠습니까(y/n)? : ");
check = sc.next();
}
} while (check.equals("n") || check.equals("N"));
}
public static void main(String[] args) {
// manager 1명, 일반 사원 1명을 만들기 위해 main 생성자 호출
EmployeeMain emain = new EmployeeMain();
Scanner sc = new Scanner(System.in);
String check = "";
do {
// 로그인 호출
login(emain);
System.out.print("\n종료 하시겠습니까?(y/n) : ");
check = sc.next();
} while (check.equals("n") || check.equals("N"));
}
}
'Language > Java' 카테고리의 다른 글
[JAVA] this에 대해 (0) | 2021.02.03 |
---|---|
[JAVA] Class에 대해 (0) | 2021.02.03 |
[JAVA] Method호출 방식(Call by Reference, Name, Value) (0) | 2021.02.02 |
[JAVA]반, 학생 수 를 입력받는 성적 프로그램 (0) | 2021.02.01 |
[JAVA] 별찍기 (0) | 2021.01.30 |