반응형

 

 

👇 공부한 자료들의 실제 소스파일들을 기록해논 공간입니다 👇

 

 

 


 

 

오늘의 과제 : 자유주제

지금까지 자바를 배운 내용으로 종합과제를 주셨다.

주제는 자유 주제 이고 써야 기술은 List or Hashmap 컬렉션, I/O 파일입출력 등 1번씩 다 쓰는 게 좋다

어렵다면 한가지라도 하는 방향으로 노력해야 한다

주말까지 간단한 ppt까지 만들어서 교사선생님 메일로 전송해야 함

 

 

 


 

 

 

기능 시나리오 고민 및 요구사항 분석

# 사원관리 프로그램 
사원의 정의
- 사원번호
- 이름
- 나이
- 주소
- 근무부서 
- 직책
------------------

주요 요구기능 1 - 메뉴 
사원 추가 
사원 수정
사원 삭제 
사원 전체 보기
부서별 조회 
부서별 txt파일 추출
프로그램 종료


요구기능 프로그램 실행 시 최초 시나리오
1. 프로그램이 실행되면 중요 메뉴로 이동한다

요구기능 사원 추가 시나리오
1. 사원 1을 생성한다
2. 사원의 정의는 바뀌어선 안된다
3. 사원번호는 중복되지 않는다
4. 사원 정상 추가 시 사원을 모아놓는 곳에 등록되야 한다 
5. 등록되는 사항은 사원 번호와 이름 부서명만 등록된다

요구기능 사원 수정 시나리오
1. 수정할 사원의 사 번을 적는다
2. 사원 수정 기능에서 수정 가능한 영역은 직책만 변경 가능하다

요구기능 부서 및 직위 변경 시나리오 
1. 변경을 희망하는 사람의 사번을 적는다 
2. 변경 가능한 것은 부서변경과 직위변경이다
3. 등록된 부서나 직위 외에 다른 내용이 입력된다면 처리 불가하다
4. 부서 변경 시 기존 부서와 변경 후 내용을 알려준다
5. 직위 변경시 기존 직위와 변경 후 직위를 알려준다

요구기능 사원 삭제 시나리오
1. 삭제할 사원의 사 번을 적는다
2. 삭제할지 재차 묻는다


필요한 것?
1. 사원 등록 시 사원번호와 사원객체를 담을 배열 : hashmap 이용 < Int형, 사원클래스 > 
2. 부서, 직위 목록이 있는 배열

 

 

 


 

 

 

클래스 명세서

 

 

 


 

 

 

 

클래스 다이어그램

 

 

 

 

 


 

 

 

소스코드

 

package employees_program;

import employees_program.activeProgram.AcitveEmplyoeeProgram;

public class Main {
    public static void main(String[] args) {
        // TODO : 주제 - 사원 관리 프로그램
        new AcitveEmplyoeeProgram();
    }
}

 

package employees_program.activeProgram;
import java.util.HashMap;
public class AcitveEmplyoeeProgram {
    private Functions fn = new Functions();
    // 사원 생성 시 입력받아 저장하는 hashMap
    private static HashMap<Integer, Employees> employessList = new HashMap<>();
    private static String[] deptName = {"인사팀", "회계팀", "개발팀", "영업팀", "인프라팀", "경영팀"};
    private static String[] jobTitle = {"임원", "부장", "차장", "과장", "대리", "주임", "사원"};

    // 사원들을 각각 등록할 HashMap
    public AcitveEmplyoeeProgram(){
        boolean flag = true;
        while (flag){
            info();
            int selNum = Integer.parseInt(fn.returnText("메뉴 번호"));
            switch (selNum){
                case 1 : // 사원 추가
                    new AddEmplyoees();
                    break;
                case 2 : // 사원 수정
                    new ModEmplyoees();
                    break;
                case 3 : // 사원 전체보기
                    viewEmplyoees();
                    break;
                case 4 :  // 부서별 사원 정보 조회
                    new DeptList();
                    break;
                case 5 :  // 사원 삭제
                    new DelEmplyoees();
                    break;
                case 6 : // 부서별 사원 정보 txt파일로 추출
                    new FileManager();
                    break;
                case 7 :
                    System.out.println("프로그램 종료합니다");
                    flag = false;
                    break;
                default :
                    System.out.println("입력한 번호는 없습니다. 다시 입력하세요");
            }
        }
    }

    private void viewEmplyoees() {
        System.out.println("사원 전체 보기 메뉴 입니다");
        for (Integer key : employessList.keySet()) {
            fn.prtEmployees(employessList.get(key));
        }
    }

    public static HashMap<Integer, Employees> getEmployessList() {
        return employessList;
    }

    public static void setEmployessList(Integer num, Employees em) {
        employessList.put(num,em);
    }

    public static String[] getDeptName() {
        return deptName;
    }

    public static String[] getJobTitle() {
        return jobTitle;
    }
    private void info(){
        System.out.println("------------------------------------------");
        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. 프로그램 종료");
    }
}

 

package employees_program.activeProgram;

import static employees_program.activeProgram.AcitveEmplyoeeProgram.*;

public class AddEmplyoees {
    // 사원 추가
    private Functions fn = new Functions();
    AddEmplyoees() {
        addEmplyoees();
    }

    private void addEmplyoees() {
        Employees em = new Employees();
        System.out.println("사원 등록 메뉴 입니다");
        try {
            int emNum = Integer.parseInt(fn.returnText("사원 번호"));
            // 동일 사번이 있는지 판단 후 리턴
            if (!(fn.compareEmNumber(emNum))) {
                em.setEmNum(emNum);
                em.setEmName(fn.returnText("이름"));
                em.setEmAge(Integer.parseInt(fn.returnText("사원 나이")));
                fn.prtDeptAndJobTitle("부서");
                em.setEmDept(fn.returnText("근무 부서"));
                // 입력된 부서가 내부 부서목록과 일치 판단 후 리턴
                if (fn.compareDept(em.getEmDept())) {
                    fn.prtDeptAndJobTitle("직위");
                    em.setEmJobTitle(fn.returnText("직위 등록"));
                    // 입력된 직위가 내부 직위목록과 일치 판단 후 리턴
                    if ( fn.compareJobTitle(em.getEmJobTitle()))
                        setEmployessList(em.getEmNum(), em);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Unable to process");
        }
    }
}

 

package employees_program.activeProgram;
import java.util.HashMap;
import static employees_program.activeProgram.AcitveEmplyoeeProgram.getEmployessList;

public class DelEmplyoees {
    // 사원 삭제
    Functions fn = new Functions();
    private HashMap<Integer,Employees> employeesList = getEmployessList();

    DelEmplyoees(){
        deleteEmplyoees();
    }

    private void deleteEmplyoees() {
        System.out.println("사원 삭제 메뉴 입니다");
        try {
            int delEmNumber = Integer.parseInt(fn.returnText("삭제할 사원 번호"));
            if (fn.compareEmNumber(delEmNumber)) {
                String result = fn.returnText("정말 삭제하겠습니까 ? Y / N ").toLowerCase();
                if (result.equals("y")) {
                    employeesList.remove(delEmNumber);
                    System.out.println("사번 : " + delEmNumber + " 삭제 완료");
                } else System.out.println("초기 메뉴로 돌아갑니다");
            }
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("Unable to process");
        }
    }
}
package employees_program.activeProgram;

import java.util.HashMap;

import static employees_program.activeProgram.AcitveEmplyoeeProgram.getEmployessList;

public class DeptList {
    private HashMap<Integer, Employees> employeesList = getEmployessList();
    private Employees em = null;
    private String[] deptName = null;
    private Functions fn = new Functions();

    DeptList() {deptListSearch();}

    private void deptListSearch() {
        deptName = AcitveEmplyoeeProgram.getDeptName();
        System.out.println("부서별 근무 사원 정보 메뉴입니다");
        // 부서목록 출력 메서드
        fn.prtDeptAndJobTitle("부서");
        String deptNames = fn.returnText("조회 부서 명");
        // 일치한 부서의 사원 정보를 출력해주는 메서드
        if (fn.compareDept(deptNames)) isDept(deptNames);
    }

    private String isDept(String deptNames) {
        for (Integer key : employeesList.keySet()) {
            this.em = getEmployessList().get(key);
            if (em.getEmDept().equals(deptNames)) {
                fn.prtEmployees(em);
            }
        }
        return null;
    }
}
package employees_program.activeProgram;

public class Employees {
    // 사원 번호
    private int emNum = 0;
    // 사원 이름
    private String emName= null;
    // 사원 나이
    private int emAge= 0;
    // 근무 부서
    private String emDept = null;
    // 직위
    private String emJobTitle = null;

    public int getEmNum() {
        return emNum;
    }

    public void setEmNum(int emNum) {
        this.emNum = emNum;
    }

    public String getEmName() {
        return emName;
    }

    public void setEmName(String emName) {
        this.emName = emName;
    }

    public int getEmAge() {
        return emAge;
    }

    public void setEmAge(int emAge) {
        this.emAge = emAge;
    }

    public String getEmDept() {
        return emDept;
    }

    public void setEmDept(String emDept) {
        this.emDept = emDept;
    }

    public String getEmJobTitle() {
        return emJobTitle;
    }

    public void setEmJobTitle(String emJobTitle) {
        this.emJobTitle = emJobTitle;
    }
}
package employees_program.activeProgram;

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;

import static employees_program.activeProgram.AcitveEmplyoeeProgram.getEmployessList;

public class FileManager {
    private HashMap<Integer, Employees> employeesList = getEmployessList();
    private ArrayList<String> outEmInfo = null;
    private Employees em = null;

    FileManager() {
        fileCreate();
    }

    private void fileCreate() {
        Functions fn = new Functions();
        fileInfo();
        boolean choic = (Integer.parseInt(fn.returnText("번호")) == 1) ? true : false;
        fn.prtDeptAndJobTitle("부서");
        // 조회할 부서명 입력
        String deptTitle = fn.returnText("부서");
        if (fn.compareDept(deptTitle)) {
            File file = null;
            FileWriter fw = null;
            BufferedWriter bw = null;
            try {
                // File에 입력될 내용을 List형식으로 등록함으로 List 생성
                outEmInfo = new ArrayList<>();
                file = new File(deptTitle + ".txt");
                fw = new FileWriter(file, choic);
                bw = new BufferedWriter(fw);
                // employeesList <key 사번, value Employees> value값 가져오는 반복문
                for (Integer key : employeesList.keySet()) {
                    this.em = employeesList.get(key);
                    // 입력한 부서명과 등록된 사원들 중 부서명이 일치한 사원이 확인하는 판단문
                    if (employeesList.get(key).getEmDept().equals(deptTitle)) {
                        // 부서명 동일한 Employees 대상의 정보를 txt파일에 입력되기 전 작업
                        emReturnList(em);
                        // 파일에 저장하는 작업
                        for (String writeText : outEmInfo) {
                            bw.write(writeText);
                            bw.write("\n");
                        }
                    }
                }
                bw.flush();
                System.out.println(" [ " + deptTitle + " ] 추출 완료");
            } catch (IOException e) { throw new RuntimeException(e);
            } catch (Exception ee) {ee.printStackTrace();
            } finally {
                try { bw.close();
                } catch (IOException e) { throw new RuntimeException(e);}
            }
        }
    }

    // txt파일 정보 입력 시 내용을 보기 쉽도록 처리하는 메서드
    private ArrayList<String> emReturnList(Employees tmpEm) {
        this.outEmInfo = new ArrayList<>();
        this.em = tmpEm;
        String[] outGuides = {"사원 번호 : ", "이    름 : ", "나    이 : ", "부    서 : ", "직    위 : "};
        String[] emInfo = {String.valueOf(em.getEmNum()), em.getEmName(), String.valueOf(em.getEmAge()), em.getEmDept(), em.getEmJobTitle()};
        for (int i = 0; i < emInfo.length; i++) {
            outEmInfo.add(outGuides[i] + emInfo[i]);
        }
        outEmInfo.add("------------------------------");
        return outEmInfo;
    }

    private void fileInfo() {
        System.out.println("부서별 사원 정보를 txt 파일로 만들어 저장합니다.");
        System.out.println("부서명이 파일명으로 자동 생성 됩니다");
        System.out.println("1번 : 기존 txt 파일 내용 유지 및 현재 기록 추가");
        System.out.println("2번 : 기존 txt 파일 내용 삭제 후 현재 상태로 기록 작성");
    }
}
package employees_program.activeProgram;
import java.util.HashMap;
import java.util.Scanner;
import static employees_program.activeProgram.AcitveEmplyoeeProgram.getEmployessList;

public class Functions {

    private HashMap<Integer, Employees> employeesList = null;
    private Employees em = null;
    private Scanner in = new Scanner(System.in);
    private String[] deptName = AcitveEmplyoeeProgram.getDeptName();
    private String[] jobTitle = AcitveEmplyoeeProgram.getJobTitle();

    // 부서와 직위목록 출력해주는 메서드
    public void prtDeptAndJobTitle(String text) {
        if (text.equals("부서")) {
            System.out.print("선택 가능한 부서 목록 : ");
            for (String dept : this.deptName) System.out.print(dept + " ");
        } else {
            System.out.print("선택 가능한 직위 목록 : ");
            for (String job : this.jobTitle) System.out.print(job + " ");
        }
        System.out.println();
    }


    // 입력한 부서가 목록에 있는 부서인지 판단후 결과리턴
    public boolean compareDept(String isDeptName) {
        for (String tmp : this.deptName)
            if (isDeptName.equals(tmp)) return true;
        System.out.println("해당 부서는 찾을 수 없습니다");
        return false;
    }


    // 입력한 직위가 목록에 있는 직위인지 판단후 결과리턴
    public boolean compareJobTitle(String jobTitle) {
        for (String job : this.jobTitle)
            if (job.equals(jobTitle))  return true;
        System.out.println("해당 직위는 찾을 수 없습니다");
        return false;
    }

    // 사원번호 동일한 사람이 있는지 확인 후 결과 리턴
    public boolean compareEmNumber(int num){
        employeesList = getEmployessList();
        if (employeesList.containsKey(num)) return true;
        else System.out.println("동일한 사원 번호가 있습니다");
        return false;
    }


    // 사원 정보 출력
    public void prtEmployees (Employees em){
        this.em = em;
        System.out.println("------------------------------------------");
        System.out.println("직   위 : " + em.getEmJobTitle());
        System.out.println("사원번호 : " + em.getEmNum());
        System.out.println("근무부서 : " + em.getEmDept());
        System.out.println("이   름 : " + em.getEmName());
        System.out.println("나   이 : " + em.getEmAge());
    }

    // 입출력 리턴
    public String returnText(String text) {
        System.out.print("\t\t" + text + " 입력 >> ");
        String outPutText = in.nextLine();
        return outPutText;
    }
}
package employees_program.activeProgram;

import java.util.HashMap;

import static employees_program.activeProgram.AcitveEmplyoeeProgram.getEmployessList;

public class ModEmplyoees {
    // 사원 수정 메뉴
    Functions fn  = new Functions();
    private HashMap<Integer, Employees> employeesList = getEmployessList();
    ModEmplyoees(){
        modEmplyoees();
    }

    private void modEmplyoees(){
        Employees em = null;
        System.out.println("사원 정보 수정 입니다");
        try {
            int emNum = Integer.parseInt(fn.returnText("수정 할 사원 번호"));
            if (fn.compareEmNumber(emNum)) {
                em = employeesList.get(emNum);
                System.out.println("수정 가능 항목 : 직위 or 부서");
                String editStr = fn.returnText("수정 항목");
                if (editStr.equals("부서")) {
                    fn.prtDeptAndJobTitle("부서");
                    String afterStr = fn.returnText("부서");
                    if (fn.compareDept(afterStr)) {
                        System.out.println(" 변경 전 [ " + em.getEmDept() + " ] ");
                        em.setEmDept(afterStr);
                        System.out.println(" 변경 후 [ " + em.getEmDept() + " ] ");
                        System.out.println(" [ " + em.getEmName() + " ] 부서 변경 완료 ");
                    }
                } else if (editStr.equals("직위")) {
                    fn.prtDeptAndJobTitle("직위");
                    String afterStr = fn.returnText("직위");
                    if (fn.compareJobTitle(afterStr)) {
                        System.out.println(" 변경 전 [ " + em.getEmJobTitle() + " ] ");
                        em.setEmJobTitle(afterStr);
                        System.out.println(" 변경 후 [ " + em.getEmJobTitle() + " ] ");
                        System.out.println(" [ " + em.getEmName() + " ] 님 직위 변경 완료 ");
                    }
                } else {
                    System.out.println("Unable to process");
                }
            }
        } catch (Exception e){
            e.printStackTrace();
            System.out.println("Unable to process");
        }
    }
}

 

 

반응형
유리쯔의일상