자바 인사 관리 시스템

Soozoo·2024년 6월 26일

JAVA

목록 보기
24/41

개요

이 프로젝트는 학생과 직장인에 대한 정보를 관리하기 위한 기본 인사 관리 시스템을 자바로 구현한 것입니다. 콘솔 기반의 인터랙티브한 애플리케이션으로, 사용자는 학생과 직장인의 정보를 등록, 수정, 삭제 및 조회할 수 있습니다.

클래스 설명

이 시스템은 네 개의 주요 클래스로 구성되어 있습니다: MainEntry, Person, Student, 그리고 Worker.

MainEntry 클래스

MainEntry 클래스는 애플리케이션의 시작점을 정의합니다. 사용자가 학생 또는 직장인 관리 시스템을 선택할 수 있도록 메뉴를 제공하며, 각각의 시스템으로 진입하여 관련 작업을 수행할 수 있습니다.

public class MainEntry {
    public static void main(String[] args) {
        Student st = new Student(null, null, null, null);
        Worker er = new Worker(null, null, null, null);
        
        Scanner sc = new Scanner(System.in);
        System.out.println("인사관리 시스템 입니다. 1.학생 2.직장");
        
        while (true) {
            int choice = sc.nextInt();
            switch (choice) {
                case 1:
                    System.out.println("학생 인사관리 시스템입니다.");
                    st.all();
                    break;
                case 2:
                    System.out.println("직장인 인사관리 시스템입니다.");
                    er.all();
                    break;
            }
        }
    }
}

Person 클래스

Person 클래스는 학생과 직장인 공통의 속성을 정의한 부모 클래스입니다. 이름, 주소, 전화번호, 번호 등의 속성과 이에 대한 getter와 setter 메서드를 포함하고 있습니다.

public class Person {
    String name, address, tel, no;
    int age;
    
    public Person(String name, String address, String tel, String no) {
        this.name = name;
        this.address = address;
        this.tel = tel;
        this.no = no;
    }
    
    @Override
    public String toString() {
        return "Person [name=" + name + ", address=" + address + ", tel=" + tel + ", no=" + no + ", age=" + age + "]";
    }
    
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    
    public String getAddress() { return address; }
    public void setAddress(String address) { this.address = address; }
    
    public String getTel() { return tel; }
    public void setTel(String tel) { this.tel = tel; }
    
    public String getNo() { return no; }
    public void setNo(String no) { this.no = no; }
    
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}

Student 클래스

Student 클래스는 Person 클래스를 상속하며, 학생에 특화된 속성과 메서드를 추가로 정의합니다. 학생의 성적을 관리하고 성적에 따라 학점을 부여하는 기능을 포함하고 있습니다.

public class Student extends Person {
    private int en, cn, kr, total, average;
    private char grade;
    HashMap<String, Student> st = new HashMap<>();
    Scanner sc = new Scanner(System.in);

    public Student(String no, String name, String address, String tel) {
        super(name, address, tel, no);
    }
    
    // 학생 등록
    public void enroll() {
        sc.nextLine();
        System.out.println("학생의 학번을 입력하세요.");
        no = sc.nextLine();
        System.out.println("학생의 이름을 입력하세요.");
        name = sc.nextLine();
        System.out.println("학생의 주소를 입력하세요.");
        address = sc.nextLine();
        System.out.println("학생의 번호를 입력하세요.");
        tel = sc.nextLine();

        Student student = new Student(no, name, address, tel);
        st.put(no, student);
        System.out.println("학생을 추가 했습니다. 학생 학번:" + student.no + " 학생 이름:" + student.name + " 학생 전화번호:" + student.tel);
    }
    
    // 성적 등록
    public void grade() {
        sc.nextLine();
        System.out.println("학생의 학번을 입력하세요.");
        no = sc.nextLine();
        if (st.containsKey(no)) {
            Student student = st.get(no);
            System.out.println("고전문학 점수를 입력하세요.");
            kr = sc.nextInt();
            System.out.println("이산수학 점수를 입력하세요.");
            cn = sc.nextInt();
            System.out.println("영어문학 점수를 입력하세요.");
            en = sc.nextInt();

            student.setCn(cn);
            student.setEn(en);
            student.setKr(kr);

            average = (cn + en + kr) / 3;
            student.setAverage(average);
            student.setGrade(rank(student.getAverage()));

            System.out.println("성적이 등록되었습니다. 평균 점수:" + student.getAverage() + " 학점은 " + student.getGrade());
        } else {
            System.out.println("등록된 학생정보가 없습니다.");
        }
    }

    // 성적 등급
    public char rank(int average) {
        if (average >= 90) return 'A';
        else if (average >= 80) return 'B';
        else if (average >= 70) return 'C';
        else if (average >= 60) return 'D';
        else return 'F';
    }
    
    // 학생 정보 출력
    public void print() {
        if (st.isEmpty()) {
            System.out.println("등록된 학생 정보가 없습니다.");
        } else {
            for (Student student : st.values()) {
                System.out.println("학생 학번:" + student.no + " 학생 이름:" + student.name + " 학생 전화번호:" + student.tel + " 학생 학점은:" + student.getGrade());
            }
        }
    }

    // 학생 관련 모든 기능 실행
    public void all() {
        while (true) {
            System.out.println("1.학생정보 등록 2.학생정보 삭제 3.학생정보 수정 4.성적 등록 5.학생정보 출력 6.프로그램 종료");
            int num = sc.nextInt();
            switch (num) {
                case 1:
                    System.out.println("학생정보 등록");
                    enroll();
                    break;
                case 2:
                    System.out.println("학생정보 삭제");
                    del();
                    break;
                case 3:
                    System.out.println("학생정보 수정");
                    set();
                    break;
                case 4:
                    System.out.println("성적 등록");
                    grade();
                    break;
                case 5:
                    System.out.println("학생 정보 출력");
                    print();
                    break;
                case 6:
                    System.out.println("시스템 종료");
                    System.exit(0);
                    break;
                default:
                    System.out.println("올바른 숫자를 입력하세요");
            }
        }
    }
    
    public void del() {
        sc.nextLine();
        System.out.println("삭제할 학생의 학번을 입력하세요.");
        no = sc.nextLine();
        if (st.containsKey(no)) {
            st.remove(no);
            System.out.println("학생정보가 삭제되었습니다.");
        } else {
            System.out.println("등록된 학생정보가 없습니다.");
        }
    }

    public void set() {
        sc.nextLine();
        System.out.println("변경할 학생의 학번을 입력하세요.");
        String no = sc.nextLine();
        if (st.containsKey(no)) {
            Student student = st.get(no);
            System.out.println("수정 1.학생 이름 2.학생 번호 3.점수 변경");
            int num = sc.nextInt();
            sc.nextLine();

            if (num == 1) {
                System.out.println("변경할 학생의 이름을 입력하세요.");
                String newName = sc.nextLine();
                student.setName(newName);
                System.out.println("학생의 이름이 변경되었습니다.");
            } else if (num == 2) {
                System.out.println("변경할 학생의 전화번호를 입력하세요.");
                String newtel = sc.nextLine();
                student.setTel(newtel);
                System.out.println("학생의 전화번호가 변경되었습니다.");
            } else if (num == 3) {
                System.out.println("변경할 과목을 고르세요. 1.고전 문학 2.이산 수학 3.영어 문학");
                int nm = sc.nextInt();
                sc.nextLine();
                switch (nm) {
                    case 1:
                        System.out.println("변경할 점수를 입력하세요.");
                        int newKr = sc.nextInt();
                        student.setKr(newKr);
                        break;
                    case 2:
                        System.out.println("변경할 점수를 입력하세요.");
                        int newCn = sc.nextInt();
                        student.setCn(newCn);
                        break;
                    case 3:
                        System.out.println("변경할 점수를 입력하세요.");
                        int newEn = sc.nextInt();
                        student.setEn(newEn);
                        break;
                    default:
                        System.out.println("올바른 과목 번호를 입력하세요.");
                        return;
                }
                updateRank(student);
            }
        } else {
            System.out.println("등록된 학생 정보가 없습니다.");
        }
    }

    private void updateRank(Student student) {
        int averageScore = (student.getKr() + student.getCn() + student.getEn()) / 3;
        student.setAverage(averageScore);
        student.setGrade(rank(averageScore));
    }
}

Worker 클래스

Worker 클래스는 Person 클래스를 상속하며, 직장인에 특화된 속성과 메서드를 추가로 정의합니다. 직장인의 주급을 계산하고 관리하는 기능을 포함하고 있습니다

public class Worker extends Person {
    private double hour, weekHour, weekWage;
    HashMap<String, Worker> wr = new HashMap<>();
    Scanner sc = new Scanner(System.in);
    
    public Worker(String name, String address, String tel, String no) {
        super(name, address, tel, no);
    }
    
    public double getHour() { return hour; }
    public void setHour(double hour) { this.hour = hour; }
    
    public double getWeekHour() { return weekHour; }
    public void setWeekHour(double weekHour) { this.weekHour = weekHour; }
    
    public double getWeekWage() { return weekWage; }
    public void setWeekWage(double weekWage) { this.weekWage = weekWage; }
    
    // 직장인 등록
    public void enroll() {
        sc.nextLine();
        System.out.println("사원번호를 입력하세요.");
        no = sc.nextLine();
        System.out.println("사원 이름을 입력하세요.");
        name = sc.nextLine();
        System.out.println("사원의 주소를 입력하세요.");
        address = sc.nextLine();
        System.out.println("사원의 번호를 입력하세요.");
        tel = sc.nextLine();

        Worker worker = new Worker(no, name, address, tel);
        wr.put(no, worker);
        System.out.println("사원을 추가 했습니다. 사원 번호:" + worker.no + " 사원 이름:" + worker.name + " 사원 전화번호:" + worker.tel);
    }
    
    // 직장인 정보 삭제
    public void del() {
        sc.nextLine();
        System.out.println("삭제할 사원의 사원번호를 입력하세요.");
        no = sc.nextLine();
        if (wr.containsKey(no)) {
            wr.remove(no);
            System.out.println("사원정보가 삭제되었습니다.");
        } else {
            System.out.println("등록된 사원정보가 없습니다.");
        }
    }

    // 직장인 정보 수정
    public void set() {
        sc.nextLine();
        System.out.println("변경할 사원번호를 입력하세요.");
        String no = sc.nextLine();
        if (wr.containsKey(no)) {
            Worker worker = wr.get(no);
            System.out.println("수정 1.사원 이름 2.사원 번호");
            int num = sc.nextInt();
            sc.nextLine();

            if (num == 1) {
                System.out.println("변경할 사원의 이름을 입력하세요.");
                String newName = sc.nextLine();
                worker.setName(newName);
                System.out.println("사원의 이름이 변경되었습니다.");
            } else if (num == 2) {
                System.out.println("변경할 사원의 전화번호를 입력하세요.");
                String newtel = sc.nextLine();
                worker.setTel(newtel);
                System.out.println("사원의 전화번호가 변경되었습니다.");
            }
        } else {
            System.out.println("등록된 사원 정보가 없습니다.");
        }
    }

    // 직장인 정보 출력
    public void print() {
        if (wr.isEmpty()) {
            System.out.println("등록된 사원 정보가 없습니다.");
        } else {
            for (Worker worker : wr.values()) {
                System.out.println("사원 번호:" + worker.no + " 사원 이름:" + worker.name + " 사원 전화번호:" + worker.tel + " 사원 임금:" + worker.weekWage);
            }
        }
    }

    // 주급 계산
    public void wage() {
        sc.nextLine();
        System.out.println("임금을 계산할 직원의 사원번호를 입력하세요.");
        String no = sc.nextLine();
        
        if (wr.containsKey(no)) {
            Worker worker = wr.get(no);
            System.out.println("시간당 임금을 입력하세요.");
            double hour = sc.nextDouble();
            System.out.println("주당 근무 시간을 입력하세요.");
            double weekHour = sc.nextDouble();
            
            worker.setHour(hour);
            worker.setWeekHour(weekHour);
            double weekWage = hour * weekHour;
            worker.setWeekWage(weekWage);
            
            System.out.println("임금이 계산되었습니다. 주급: " + worker.getWeekWage());
        } else {
            System.out.println("등록된 사원정보가 없습니다.");
        }
    }
    
    // 직장인 관련 모든 기능 실행
    public void all() {
        while (true) {
            System.out.println("1.사원정보 등록 2.사원정보 삭제 3.사원정보 수정 4.임금 등록 5.사원정보 출력 6.프로그램 종료");
            int num = sc.nextInt();
            switch (num) {
                case 1:
                    System.out.println("사원정보 등록");
                    enroll();
                    break;
                case 2:
                    System.out.println("사원정보 삭제");
                    del();
                    break;
                case 3:
                    System.out.println("사원정보 수정");
                    set();
                    break;
                case 4:
                    System.out.println("임금 등록");
                    wage();
                    break;
                case 5:
                    System.out.println("사원 정보 출력");
                    print();
                    break;
                case 6:
                    System.out.println("시스템 종료");
                    System.exit(0);
                    break;
                default:
                    System.out.println("올바른 숫자를 입력하세요");
            }
        }
    }
}
profile
넙-죽

0개의 댓글