Backend/JAVA

[JAVA] 특강 19일차 : 코딩 훈련! 문제 풀이 (① 상속)

JOKUN 2022. 7. 15. 12:52

 

 

 

Person

📑문제

학생 / 사원 관리 프로그램

220713문제(2).pdf
0.21MB

🔍풀이

person.zip
0.00MB

Run

package com.kh.hw.person.run;

import com.kh.hw.person.view.PersonMenu;

public class Run {
    public static void main(String[] args) {
        new PersonMenu().mainMenu();
    }
}

 

 

Person

package com.kh.hw.person.model.vo;

public class Person {
    private String name;
    private int age;
    private double height;
    private double weight;

    public Person() {
    }

    public Person(String name, int age, double height, double weight) {
        this.name = name;
        this.age = age;
        this.height = height;
        this.weight = weight;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    /**
     * 각 필드 반환 메소드
     * @return 강건강, 20, 178.2, 70.0, 1, 정보시스템공학과
     */
    @Override
    public String toString(){
        return name + ", " +  age + ", " + height + ", " + weight;
    }
}

 

 

Student

package com.kh.hw.person.model.vo;

public class Student extends Person{

    /**
     * 학년
     */
    private int grade;

    /**
     * 전공
     */
    private String major;

    public Student(){

    }

    public Student(String name, int age, double height, double weight, int grade, String major) {
        super(name, age, height, weight);
        this.grade = grade;
        this.major = major;
    }


    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    @Override
    public String toString(){
        return super.toString() + ", " + grade + ", " + major;
    }
}

 

 

Employee

package com.kh.hw.person.model.vo;

public class Employee extends Person{
    /**
     * 급여
     */
    private int salary;

    /**
     * 부서
     */
    private String dept;

    public Employee(){

    }

    public Employee(String name, int age, double height, double weight, int salary, String dept) {
        super(name, age, height, weight);
        this.salary = salary;
        this.dept = dept;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    public String getDept() {
        return dept;
    }

    public void setDept(String dept) {
        this.dept = dept;
    }

    @Override
    public String toString(){
        return super.toString() + ", " + salary + ", " + dept;
    }
}

 

 

PersonController

package com.kh.hw.person.controller;

import com.kh.hw.person.model.vo.Employee;
import com.kh.hw.person.model.vo.Student;

public class PersonController {
    // 담을 수 있는 학생,사원 수
    public static final int S_LIMIT = 3;
    public static final int E_LIMIT = 10;


    /**
     * 학생 배열 관리 인덱스
     */
    public int sIndex = -1;

    /**
     * 직원 배열 관리 인덱스
     */
    public int eIndex = -1;

    private Student[] sArr = new Student[S_LIMIT];
    private Employee[] eArr = new Employee[E_LIMIT];


    /**
     * 각 객체배열에 저장된 객체의 수를 정수배열에 담아 반환하는 메소드
     * @return [0]학생 수, [1] 직원 수
     */
    public int[] personCount(){
        int[] resultCount = new int[2];
        int count = 0;

        for (Student st : sArr) {
            if(st != null && st.getName() != null && st.getName().length() > 0){
                 count++;
            }
        }
        resultCount[0] = count;

        count = 0;
        for (Employee em : eArr) {
            if(em != null && em.getName() != null && em.getName().length() > 0){
            count++;
            }
        }
        resultCount[1] = count;
        return resultCount;
    }

    /**
     * 매개변수로 받아온 데이터를 학생 객체 배열 중 빈 곳에 저장하는 메소드
     * @param name
     * @param age
     * @param height
     * @param weight
     * @param grade
     * @param major
     */
    public boolean insertStudent(String name, int age, double height, double weight, int grade, String major){
        sArr[++sIndex] = new Student(name, age, height, weight, grade, major);
        return sIndex < S_LIMIT - 1;
    }

    public Student[] printStudent(){
        return sArr;
    }

    public boolean insertEmployee(String name, int age, double height, double weight, int salary, String dept){
        eArr[++eIndex] = new Employee(name, age, height, weight, salary, dept);
        return eIndex < E_LIMIT - 1;
    }

    public Employee[] printEmplyee(){
        return eArr;
    }
}

 

 

PersonMenu

package com.kh.hw.person.view;

import com.kh.hw.person.controller.PersonController;
import com.kh.hw.person.model.vo.Employee;
import com.kh.hw.person.model.vo.Student;

import java.util.Scanner;

public class PersonMenu {
    private Scanner sc;
    private PersonController pc;

    public PersonMenu(){
        sc = new Scanner(System.in);
        pc = new PersonController();
    }

    public void mainMenu(){
        while (true) {
            int[] personCount = pc.personCount();

            System.out.println("학생은 최대 " + PersonController.S_LIMIT +"명까지 저장할 수 있습니다.");
            System.out.println("현재 저장된 학생은 " + personCount[0] + "명입니다.");

            System.out.println("사원은 최대 "+ PersonController.E_LIMIT +"명까지 저장할 수 있습니다.");
            System.out.println("현재 저장된 사원은 " + personCount[1] + "명입니다.");
            System.out.println("1. 학생 메뉴");
            System.out.println("2. 사원 메뉴");
            System.out.println("9. 끝내기");
            System.out.print("메뉴 번호 : ");
            int menuNum = sc.nextInt();

            switch (menuNum){
                case 1:
                    studentMenu();
                    break;
                case 2:
                    employeeMenu();
                    break;
                case 9:
                    System.out.println("종료합니다.");
                    return;
                default:
                    System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
                    return;
            }
        }
    }

    public void studentMenu(){
        while (true){
            System.out.println("1. 학생 추가");
            System.out.println("2. 학생 보기");
            System.out.println("9. 메인으로");
            boolean isStudentLimit = (pc.sIndex + 1) == PersonController.S_LIMIT;
                if (isStudentLimit){
                    System.out.println("학생을 담을 수 있는 공간이 꽉 찼기 때문에 학생 추가 메뉴는 더 이상 활성화 되지 않습니다.");
                }
            System.out.print("메뉴 번호 : ");
            int menuNum = sc.nextInt();

            switch (menuNum){
                case 1:
                    if(isStudentLimit){
                        System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
                        return;
                    }else {
                        insertStudent();
                    }
                    break;
                case 2:
                    printStudent();
                    break;
                case 9:
                    System.out.println("메인으로 돌아갑니다..");
                    return;
                default:
                    System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
                    return;
            }
        }
    }

    public void employeeMenu(){
        while (true) {
            System.out.println("1. 사원 추가");
            System.out.println("2. 사원 보기");
            System.out.println("9. 메인으로");
            boolean isEmployeeLimit = (pc.eIndex + 1) == PersonController.E_LIMIT;
                if (isEmployeeLimit){
                    System.out.println("사원을 담을 수 있는 공간이 꽉 찼기 때문에 학생 추가 메뉴는 더 이상 활성화 되지 않습니다.");
                }
            System.out.print("메뉴 번호 : ");
            int menuNum = sc.nextInt();

            switch (menuNum){
                case 1:
                    if(isEmployeeLimit){
                        System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
                        return;
                    }else {
                        insertEmployee();
                    }
                    break;
                case 2:
                    printEmployee();
                    break;
                case 9:
                    System.out.println("메인으로 돌아갑니다..");
                    return;
                default:
                    System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
                    return;
            }
        }
    }

    public void insertStudent(){


        while (true){
            System.out.print("학생 이름 : ");
            String name = sc.next();
            System.out.print("학생 나이 : ");
            int age = sc.nextInt();
            System.out.print("학생 키 : ");
            double height = sc.nextDouble();
            System.out.print("학생 몸무게 : ");
            double weight = sc.nextDouble();
            System.out.print("학생 학년 : ");
            int grade = sc.nextInt();
            System.out.print("학생 전공 : ");
            String major = sc.next();
            boolean insertStudent = pc.insertStudent(name, age, height, weight, grade, major);
                if(insertStudent){
                System.out.print("그만하시려면 N(또는 n), 이어하시려면 아무 키나 누르세요 : ");
                sc.nextLine();
                String yn = sc.nextLine();
                yn = yn.toLowerCase();
                if(yn.equals("n")){
                    return;
                }
                }else {
                    System.out.println("학생을 담을 수 있는 공간이 꽉 찼기 때문에 학생 추가를 종료하고 학생메뉴로 돌아갑니다.");
                    return;
                }
        }
    }

    public void printStudent(){
        Student[] printStudent = pc.printStudent();
        for (Student s : printStudent) {
            if(s != null){
                System.out.println(s.toString());
            }
        }
    }

    public void insertEmployee(){
        while (true){
            System.out.print("사원 이름 : ");
            String name = sc.next();
            System.out.print("사원 나이 : ");
            int age = sc.nextInt();
            System.out.print("사원 키 : ");
            double height = sc.nextDouble();
            System.out.print("사원 몸무게 : ");
            double weight = sc.nextDouble();
            System.out.print("사원 급여 : ");
            int salary = sc.nextInt();
            System.out.print("사원 부서 : ");
            String dept = sc.next();
            boolean insertEmployee = pc.insertEmployee(name, age, height, weight, salary, dept);
            if(insertEmployee){
                System.out.print("그만하시려면 N(또는 n), 이어하시려면 아무 키나 누르세요 : ");
                sc.nextLine();
                String yn = sc.nextLine();
                yn = yn.toLowerCase();
                if(yn.equals("n")){
                    return;
                }
            }else {
                System.out.println("사원을 담을 수 있는 공간이 꽉 찼기 때문에 학생 추가를 종료하고 사원 메뉴로 돌아갑니다.");
                    return;
            }
        }
    }

    public void printEmployee(){
        Employee[] printEmployee = pc.printEmplyee();
        for (Employee s : printEmployee) {
            if(s != null){
                System.out.println(s.toString());
            }
        }
    }


}