빅데이터교육과정/JAVA

급여 관리 프로그램

Listeria 2021. 2. 12. 23:24
//근로자들의 공통된 사항들
public class Worker {

	
	private int []id = new int[100];
	private String []name = new String[100];
	private int []pw = new int[100];
	private int []salary = new int[100];
	
	public int getId(int i) {
		return id[i];
	}

	public void setId(int i,int id) {
		this.id[i] = id;
	}

	public String getName(int i) {
		return name[i];
	}

	public void setName(int i,String name) {
		this.name[i] = name;
	}

	public int getPw(int i) {
		return pw[i];
	}

	public void setPw(int i,int pw) {
		this.pw[i] = pw;
	}

	public int getSalary(int i) {
		return salary[i];
	}

	public void setSalary(int i,int salary) {
		this.salary[i] = salary;
	}

	public Worker() {
		
	}
}
//Worker 클래스를 상속하는 정규직 클래스
public class Permanent extends Worker {


	private String []txt = {"과장", "팀장","대리", "사원", "비정규직"};
	private String []grade = new String[100];
	private String team;
	private int bonus[] = new int[100];
	
	public String getTxt(int i) {
		return txt[i-1];
	}
	public void setGrade(int i, String grade) {
		this.grade[i] = grade;
	}
	
	public String getGrade(int i) {
		return grade[i];
	}
	
	public String getTeam() {
		return team;
	}
	public void setTeam(String team) {
		this.team = team;
	}

	public int getBonus(int i) {
		return bonus[i];
	}
	public void setBonus(int i,int bonus) {
		this.bonus[i] = bonus;
	}
}
//Worker를 상속하는 계약직 클래스 
public class Contract extends Worker {

	private int margin;
	
	public Contract() {
		
	}
		
	
	public int getMargin() {
		return margin;
	}
	public void setMargin(int margin) {
		this.margin = margin;
	}
}
//계약직 클래스를 상속하는 시간제 클래스
public class TimeWorker extends Contract {

	private String time[] = new String[100];
	private String[] txt ={"sun","mon","tue","wed","thur","fri","sat"};
	private String[] day = new String[100];
	
	
	public String getTime(int i) {
		return time[i];
	}


	public void setTime(int i,String time) {
		this.time[i] = time;
	}


	public void setDay(int i, int j) {
		this.day[i] = txt[j-1];
	}
	
	public String getDay(int i) {
		return day[i];
	}

}
//계약직 클래스를 상속하는 기간제 클래스
public class TermWorker extends Contract {

	private String term;

	public String getTerm() {
		return term;
	}

	public void setTerm(String term) {
		this.term = term;
	}
	
}
//앞의 클래스들을 이용하여 실제적인 동작 기능들을 담고 있는 클래스
import java.util.Scanner;

public class Function {
	//함수에 필요한 것들을 선언하고 constructor들을 초기화한다.
	private Permanent pm = new Permanent();
	private TimeWorker time = new TimeWorker();
	private TermWorker term;
	
	private int select;
	
	public Function() {
		Permanent pm = new Permanent();
		TimeWorker time = new TimeWorker();
		TermWorker term = new TermWorker();
	}

	Scanner sc1 = new Scanner(System.in);

	public int getId(int i) {
		return pm.getId(i);
	}
	public int getPw(int i) {
		return pm.getPw(i);
	}
	public String getGrade(int i) {
		return pm.getGrade(i);
	}
	
	
	public int ask(int numId) {	//로그인
		int numChk, numPw = 0;
		int i=0;
		int chk =0;
		int answer = 0;
		do {

			for(i=0; i<100 ;i++) {	//사원번호가 존재하는지 조회
				numChk = getId(i);
				
				if(numId == numChk) {	//사원번호가 존재하면 그 번호를 저장
					chk =i;
					break;
				}
	
			}
			if(chk >0) {	//사원번호가 존재할때, 암호를 묻는 단계

				System.out.println("암호를 입력하세요");
				do {
					numPw = sc1.nextInt();
					
					if(numPw != getPw(chk)) {
					System.out.println("틀린 비밀번호 입니다. 다시 입력하세요");
					System.out.println("멈추시러면 0을 입력하세요");					
					}
					else if(numPw==0) { break;}	//0을 눌렀을때 멈춤
					
				}while(numPw !=getPw(chk));
			}else {
				System.out.println("틀린 사번입니다");
				chk++;			
			}	//존재하지 않는 사번을 입력하였을때
		}while(chk==0);
		if( numPw == getPw(chk)) { answer ++;}

		return answer;	//비밀번호가 일치하면 1이 일치하지 않으면 0이 반환된다.
	}
	
	
	public void add(int i) {
		int num;
		System.out.println("추가할 사원 번호를 입력하세요");
		num = sc1.nextInt();
		pm.setId(num,num);
		System.out.println("이름을 입력해 주세요");
		pm.setName(num,sc1.next());
		System.out.println("직급을 입력해 주세요.");
		System.out.println("1.과장, 2.팀장, 3.대리, 4.사원, 5. 비정규직");
		pm.setGrade(num,pm.getTxt((sc1.nextInt())));
		System.out.println("비밀번호를 입력하세요");
		pm.setPw(num, sc1.nextInt());
	}	//관리자 클래스가 입력된 값을 수정할 수 있음
	

	
	public void correct() {	//기본 값들 외에 급여, 근무시간 등을 관리자들이 수정할 수 있음.
		int numId,select;
		System.out.println("수정할 사람의 사번을 입력해주세요");
		numId = sc1.nextInt();
		
		if (pm.getGrade(numId)=="비정규직") {	//비정규직 관련항목
			System.out.println("수정할 사안을 입력해주세요");
			System.out.println("1. 이름, 2. 직급, 3. 급여, 5. 근무날짜, 6. 근무시간");
			
			select = sc1.nextInt();
			switch(select) {
			case 1:
				System.out.println("수정할 이름을 입력해 주세요");
				pm.setName(numId,sc1.next());
				break;
			case 2:
				System.out.println("수정할 직급을 입력해 주세요.");
				System.out.println("1.과장, 2.팀장, 3.대리, 4.사원, 5. 비정규직");
				pm.setGrade(numId,pm.getTxt((sc1.nextInt())));
				break;
			case 3:
				System.out.println("급여를 입력해 주세요.");
				pm.setSalary(numId,sc1.nextInt());
				break;

			case 4:
				System.out.println("근무날짜를 선택해주세요");
				System.out.println("1. sun, 2.mon, 3.tue, 4. wed, 5.thur, 6.fri, 7.sat");
				time.setDay(numId,sc1.nextInt());
			case 5:
				System.out.println("근무시간을 입력해주세요");
				time.setTime(numId, sc1.next());
				break;
			}
		}
		else {	//정규직 관련항목
			System.out.println("수정할 사안을 입력해주세요");
			System.out.println("1. 이름, 2. 직급, 3. 급여, 4. 보너스");
			
			select = sc1.nextInt();
			switch(select) {
			case 1:
				System.out.println("수정할 이름을 입력해 주세요");
				pm.setName(numId,sc1.next());
				break;
			case 2:
				System.out.println("수정할 직급을 입력해 주세요.");
				System.out.println("1.과장, 2.팀장, 3.대리, 4.사원, 5. 비정규직");
				pm.setGrade(numId,pm.getTxt((sc1.nextInt())));
				break;
			case 3:
				System.out.println("급여를 입력해 주세요.");
				pm.setSalary(numId,sc1.nextInt());
			case 4:
				System.out.println("보너스를 입력해 주세요.");
				pm.setBonus(numId,sc1.nextInt());
				break;
			}
		}
	}
	
	public void del() {	//삭제를 할때.
		int numId;
		System.out.println("삭제할 사람의 사번을 입력해주세요");
		numId = sc1.nextInt();
		pm.setName(numId, null);
		pm.setGrade(numId, null);
		pm.setId(numId, 0);

	}
	public void searchIndiv(int i) {	//개인의 급여 내역을조회
		if(pm.getGrade(i)=="비정규직") {
			System.out.print("이름 : "+ pm.getName(i));
			System.out.print("\t"+"직급 : "+ pm.getGrade(i));
			System.out.print("\t기본급 : "+pm.getSalary(i));
			System.out.print("\t근무날짜 : "+time.getDay(i));
			System.out.println("\t근무시간 : "+time.getTime(i));
		}else {
			System.out.print("이름 : "+ pm.getName(i));
			System.out.print("\t직급 : "+ pm.getGrade(i));
			System.out.print("\t기본급 : "+pm.getSalary(i));
			System.out.println("\t보너스 : "+pm.getBonus(i));
				
		}
	}
	public void searchEvery() {
		for (int i = 0; i<100;i++) {
			if(pm.getName(i) != null) {	//비어있는 사번은 출력하지 않음.
				if(pm.getGrade(i)=="비정규직") {
					System.out.print("이름 : "+ pm.getName(i));
					System.out.print("\t"+"직급 : "+ pm.getGrade(i));
					System.out.print("\t기본급 : "+pm.getSalary(i));
					System.out.print("\t근무날짜 : "+time.getDay(i));
					System.out.println("\t근무시간 : "+time.getTime(i));
					System.out.println("----------------------------------------");
				}else {
					System.out.print("이름 : "+ pm.getName(i));
					System.out.print("\t직급 : "+ pm.getGrade(i));
					System.out.print("\t기본급 : "+pm.getSalary(i));
					System.out.println("\t보너스 : "+pm.getBonus(i));
					System.out.println("----------------------------------------");
						
				}
			}
		}
	}
	
	public void manage(String grade,int i) {

	
		if (grade.equals("과장")||grade.equals("팀장")){
			
			System.out.println("작업을 선택해 주세요");
			System.out.println("1. 추가, 2. 수정, 3. 삭제, 4. 개별 조회, 5. 전체 조회");
			select = sc1.nextInt();
			
			switch (select) {
				case 1 : {	add(i);	}break;
				case 2 : {	correct();	}break;
				case 3 : {	del();	}break;
				case 4 : {	
					System.out.println("검색하려는 사람의 사번을 입력하세요");
					i = sc1.nextInt();
					searchIndiv(i);	}break;
				case 5 : {	searchEvery();	}break;	
				default : System.out.println("wrong");
			}
			
		}else {
			searchIndiv(i);	//관리자가 아닌 사람이 로그인 하였을때는 본인의 급여 내역이 조회됨.
		}
			
	}
}
//manage 클래스를 이용하는 main문이 존재하는 class
import java.util.Scanner;

public class Management {


	public static void main(String[] args) {
		
		int i,select =0;
		int numId = 0;
		Scanner sc = new Scanner(System.in);
		Function ftn = new Function();
		//최초 실행, 관리자 임명을 위한 로그인
		ftn.add(0);
		do {
			///로그인///
			System.out.println("사번을 입력하세요.");
			numId = sc.nextInt();
			
			i = ftn.ask(numId);
			//로그인 성공시 manage 프로그램을 불러온다.
			if(i == 1) {
				ftn.manage(ftn.getGrade(numId),numId);
				
			}
			else {
				System.out.println("로그인에 실패했습니다.");
			}

			System.out.println("멈추시려면 0을, 다시 하시려면 아무키를 입력하세요.");
			select = sc.nextInt();
		///판단///
		}while(select!=0);
	
	}
}