본문 바로가기
프로그래밍 연구/자바

[자바독학] 자바 프로그램 만들기 - 직원관리 프로그램

by 꽈악 2021. 6. 17.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Management {
	//멤버 필드 선언
	private BufferedReader in;
	private int inputNum;
	private String name;
	private String memberNum;
	private String position;
	private String time;
	private Member s;
	private static final int MEMBER_NUM_LEN = 8;
	private static final int Time_NUM_LEN = 5;
	// 디폴트 생성자
	// 입출력, 메뉴 선택 번호, Member 객체 생성
	public Management(){
		in = new BufferedReader(new InputStreamReader(System.in));
		inputNum = 0;
		s = Member.genTo();
	}
	
	public int getInputNum() {
		return this.inputNum;
	}
	// 메뉴 선택 번호를 정수로 변환
	public void setInputNum() throws IOException {
		this.inputNum = Integer.parseInt(in.readLine());
	}
	public String getName() {
		return this.name;
	}
	
	public void setName() throws IOException {
		this.name = in.readLine();
	}
	
	public String getMemberNum() {
		return this.memberNum;
	}
	// 사번 자리 수 검사를 통해 조건에 맞는 값을 입력시 통과
	public void setMemberNum() throws IOException {
		while(true) {
			this.memberNum = in.readLine();
			if(this.memberNum.length() != MEMBER_NUM_LEN) {
				System.out.println("*사번은 " + MEMBER_NUM_LEN + "자리 입니다.");
				System.out.println("*다시입력해 주시기 바랍니다.");
				System.out.print("사번 : ");
			} else {
				break;
			}
		}
	}
	public String getPosition() {
		return this.position;
	}

	public void setPosition() throws IOException {
		this.position = in.readLine();
	}
	
	
	public String getTime() {
		return this.time;
	}
	// 시간 자리 수 검사를 통해 형식에 맞는 값을 입력시 통과
	public void setTime() throws IOException {
		while(true) {
			this.time = in.readLine();
			if (this.time.length() != Time_NUM_LEN) {
				System.out.println("*시간의 형식은 hh:mm 입니다.");
				System.out.println("*형식에 맞게 다시 입력해 주시기 바랍니다.");
				System.out.print("시간 : ");
			} else {
				break;
			}
		}
	}
	

public static void main(String[] args) {
	// Management 객체 생성
	Management m =new Management();
	
	while(true) {
		try {
			// 메뉴 출력
			printMenu();
			// 메뉴 선택 번호 입력받기
			m.setInputNum();
			// 선택값에 따른 분기
			switch(m.getInputNum()) {
			case 1:
				System.out.print("이름 : ");
				m.setName();
				System.out.print("사번 : ");
				m.setMemberNum();
				System.out.print("시간(hh:mm) : ");
				m.setTime();
				m.s.goWork(m.getName(), m.getMemberNum(), m.getTime());
				
				break;
			case 2:
				System.out.print("이름 : ");
				m.setName();
				m.s.leaveWork(m.getName());
				
				break;
			case 3:
				System.out.print("이름 : ");
				m.setName();
				m.s.checkGo(m.getName());
				break;
			case 4:
				m.s.printGo();
				break;
			case 5:
				System.out.print("이름 : ");
				m.setName();
				System.out.print("사번 : ");
				m.setMemberNum();
				System.out.print("직책 : ");
				m.setPosition();
				m.s.addMember(m.getName(), m.getMemberNum(), m.getPosition());
				break;
			case 6:
				m.s.printMember();
				break;
			case 7:
				System.out.println("프로그램을 종료합니다.");
				System.exit(0);
				break;
			default:
				// 1~7가 아닌 다른 숫자 입력시 예외 던지기
				throw new Exception();
			}
			
			// 조건에 맞지 않는 숫자를 입력시 예외처리하여 출력하기
		} catch(Exception e){
			System.out.println("\n@@@@@@@@@@@@@@@@@@@@@@@@@@");
			System.out.println("입력이 올바르지 않습니다.");
			System.out.println("1 ~ 7 사이의 숫자를 입력해 주세요.");
			System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@");
		}
		
	}

}
// 메뉴 구성
public static void printMenu() {
	System.out.println("==========직원관리프로그램==========");
	System.out.println("1. 출근하기");
	System.out.println("2. 퇴근하기");
	System.out.println("3. 출근확인");
	System.out.println("4. 출근자 확인");
	System.out.println("5. 사원등록");
	System.out.println("6. 사원리스트 보기");
	System.out.println("7. 프로그램 종료");
	System.out.println("*프로그램 종료시 모든 데이터는 소멸됩니다.");
	System.out.println("번호입력 : ");
}




public static class  Member {
	// 등록사원리스트, 등록사원사번리스트, 등록사원직책리스트, 출근자이름리스트, 출근자사번리스트, 출근자시간리스트 선언
	private ArrayList<String> nameList;
	private ArrayList<String> memberNumList;
	private ArrayList<String> positionList;
	private ArrayList<String> todayMem;
	private ArrayList<String> todayNum;
	private ArrayList<String> todayTime;
	private static Member memB;
	
	//디폴트 생성, 의미없음.
	private Member() {}
	
	//객체를 싱글톤으로 관리
	public static Member genTo() {
		if (memB == null) {
			memB = new Member();
			memB.nameList = new ArrayList<String>();
			memB.positionList = new ArrayList<String>();
			memB.todayMem = new ArrayList<String>();
			memB.memberNumList = new ArrayList<String>();
			memB.todayNum = new ArrayList<String>();
			memB.todayTime = new ArrayList<String>();
		}
		return memB;
	}
	// 사원 리스트에 등록하기
	public void addMember(String name, String memberNum, String position) {
		boolean Flag = true;
		// 사원리스트에 동일 사번이 있을 시 중단
		if (Member.memB.memberNumList.size() != 0) {
			for(int i = 0 ; i<Member.memB.memberNumList.size(); ++i) {
				if(memberNum.equals(Member.memB.memberNumList.get(i))) {
					System.out.println("*이미 등록된 사번입니다.\n");
					Flag = false;
				}
			}
		}
		// 사원리스트에 이름, 사번, 직책 등록
		if(Flag) {
			this.nameList.add(name);
			this.memberNumList.add(memberNum);
			this.positionList.add(position);
			System.out.println("\n등록이 완료되었습니다.\n");
		}
	}
	// 사원 리스트 프린트 하기
	public void printMember() {
		if(Member.memB.nameList.size() < 1) {
			System.out.println("*등록된 사원이 없습니다.");
			System.out.println("*사원 등록 후 조회하시기 바랍니다.\n");
		} else {
			System.out.println("--------------- 사원 목록 ---------------");
			for(int i = 0; i<Member.memB.nameList.size(); ++i) {
				System.out.println("* " + "이름 : " + Member.memB.nameList.get(i) + ", "+ "사번 : " + Member.memB.memberNumList.get(i) + ", "+ "직책 : " + Member.memB.positionList.get(i));
			}
			// 이름, 사번, 직책 순으로 등록한 순서대로 나열하기
			System.out.println("--------------------------------------");
			System.out.println();
		}
	}
	// 출근 리스트 등록
	public void goWork(String name, String memberNum, String time) {
		boolean Flag = true;
		int count = 0;
		// 출근 리스트에 동일 사번이 있을 시 중단.
		if (Member.memB.todayNum.size() != 0) {
			for(int i = 0 ; i<Member.memB.todayNum.size(); ++i) {
				if(memberNum.equals(Member.memB.todayNum.get(i))) {
					System.out.println("*이미 출석처리 되었습니다.\n");
					Flag = false;
				} 
			}
		}
		// 사원리스트에 입력한 사번이 없을 시 중단.
		for(int i = 0; i<Member.memB.memberNumList.size(); ++i) {
			if(memberNum.equals(Member.memB.memberNumList.get(i))) {
				count ++;
			}
		}
		if (count == 0) {
			System.out.println("\n사원등록이 안되어 있는 번호입니다. 등록 후 이용해주세요.\n");
			Flag = false;
		}
		// 사원리스트에 이름, 사번, 시간 등록
		if(Flag) {
			this.todayMem.add(name);
			this.todayNum.add(memberNum);
			this.todayTime.add(time);
			System.out.println("\n출근처리가 완료되었습니다.\n");
		}
	}
	// 퇴근 하기
	public void leaveWork(String name) {
		if(Member.memB.todayMem.size() != 0) {
			// 입력한 사원 이름이 있을 시 삭제
			for(int i = 0 ; i<Member.memB.todayMem.size(); ++i) {
				if(name.equals(Member.memB.todayMem.get(i))) {
					Member.memB.todayMem.remove(i);
					Member.memB.todayNum.remove(i);
					Member.memB.todayTime.remove(i);
					System.out.println("\n퇴근처리가 완료되었습니다.\n");
				}
			}
			//입력한 사원 이름이 없을 시 중단.
		}else {
			System.out.println("*이미 퇴근처리가 되었습니다.\n");
		}
	}
	// 출근자 확인
	public void checkGo(String name) {
		// 임시로 1000이라는 값을 넣었음. 만약 사원 수가 1000이 될 시 예외가 생김.
		int k = 1000;
		// 입력한 이름이 리스트에 동일한 이름이 하나라도 있게 되면 해당 사원의 정보를 출력
		if(Member.memB.todayMem.size() != 0) {
			for(int i = 0 ; i<Member.memB.todayMem.size(); ++i) {
				if(name.equals(Member.memB.todayMem.get(i))) {
					k = i;
				}
			} 
			if(k != 1000) {
				System.out.println(Member.memB.todayMem.get(k) +"분은 " + Member.memB.todayTime.get(k) + "에 출근하였습니다.\n");
			}else {
				System.out.println("* 해당 사원은 출근하지 않은 상태입니다.\n");
			}
		}
	}
	// 출근자리스트 출력하기
	public void printGo() {
		// 출근자의 이름, 사번, 출근 시간을 순서대로 나열.
		if(Member.memB.todayMem.size() < 1) {
			System.out.println("아직 출근자가 없습니다.\n");
		} else {
			System.out.println("---------------출근자 목록---------------");
			System.out.println("이름       사번                   출근시간");
			for(int i = 0; i<Member.memB.todayMem.size(); ++i) {
				System.out.println(Member.memB.todayMem.get(i) + "     " + Member.memB.todayNum.get(i) + "     "+ Member.memB.todayTime.get(i));
			}
		System.out.println("--------------------------------------");
		System.out.println();
		}
	}
	
}	
}

'프로그래밍 연구 > 자바' 카테고리의 다른 글

자바 독학 공부[정리 요약]  (0) 2021.06.16