Programming Language/Java

상속을 이용하여 학생과 직원을 관리하는 프로그램을 구현하기

Ma_Sand 2022. 3. 7. 23:38
반응형

① 부모 클래스 Person 먼저 생성하기

  - 부모 클래스 필드값 생성

  - 부모 클래스 기본 생성자 생성 후 매개변수 생성자로 필드값 초기화

  - 매개변수에 대해 getter/setter 메소드 생성

  - 문자열로 필드값을 전부 모아 출력값 반환

public class Person {
// 필드
    protected String name;  // 이름
    private int age;  // 나이
    private double height;  // 신장
    private double weight;  // 체중
    
// 생성자
    public Person() {}  // 기본 생성자
    public Person(int age, double height, double weight) {  // 매개변수 생성자
        this.age = age;
        this.height = height;
        this.weight = weight;
    }
// 메소드
    public String getName() {  // getter/setter 메소드
		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;
	}
    // 문자열로 모아 전부 출력
    public String information() {
        return "Name: "+name+", Age: "+age+", Height: "+height+", weight"+weight;
    }
}

 

 

② 자식 클래스 Student와 Employee 생성하기

  - 부모 클래스 상속받기(extends)

  - 자식 클래스 필드값 생성

  - 자식 클래스 기본 생성자 생성 후 매개변수 생성자 생성

    → name은 접근제한자가 protected이므로 참조변수 super.를 사용하여 부모 필드값에 직접 접근한다.

    → age, height, weight는 부모 클래스의 생성자(super();)를 통해 초기화한다. 이때, 'super();'는 가장 위에 적어야 한다.

  - 자식 매개변수 getter/setter 메소드 생성

  - 부모 메소드 information()에 대해 자식 필드값을 오버라이딩하여 출력값 반환

// 자식 클래스 Student
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();는 가장 위에 적어야 한다.(부모 생성자를 통해 초기화)
        super(age, height, weight);
        // 접근제한자가 protected일 때 참조변수 super.를 사용하여 부모 필드값에 직접 접근한다.
        super.name = name; 
        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 information() {
        return super.information()+", Grade: "+grade+", Major: "+major;
    }
}



// 자식 클래스 Employee
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(age, height, weight);
        super.name = name;
        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 information() {
        return super.information()+", Salary: "+salary+", Dept: "+dept;
    }
}

 

 

③ 부모 클래스와 자식 클래스를 실행할 실행 클래스 Execute 생성하기

  - 학생 클래스: 3명의 학생 정보를 기록할 객체 배열을 만든 후 객체를 생성하여 반복문으로 출력

  - 직원 클래스: 최대 6명의 사원 정보를 기록할 수 있는 객체 배열을 만든 후 반복문으로 사원 정보를 입력받도록 구현

                     2명의 사원 정보를 입력받아 객체에 저장한 후 사원 정보 출력

                     입력받을 때 while문으로 무한으로 입력받기

                     입력값이 'Y'이면 객체를 추가하고, 'N'이면 더 입력받지 않기

public class Execute {
    public static void main(String[] args) {
        // 학생 클래스 객체 배열 생성
        Student sArr = new Student[3];  // sArr이라는 배열 생성 후 크기 3 할당
        sArr[0] = new Student("홍길동", 27, 170.1, 65.5, 4, "경제학과");
        sArr[1] = new Student("허준", 23, 169.8, 64.3, 3, "한의학과");
        sArr[2] = new Student("황진이", 21, 166, 58.4, 2, "공연예술학과");
        
        for(int i = 0; i < sArr.length; i++) {  // 반복문으로 출력
            System.out.println(sArr[i].information());
        }
        
        Employee[] eArr = new Employee[6];  // eArr이라는 배열 생성 후 크기 6 할당
        
        Scanner sc = new Scanner(System.in);  // 스캐너로 입력받기
        
        int count = 0;  // 횟수 세기
        
        while(true) {  // while(true) : 무한 반복문
            System.out.print("Name: \n");
            String name = sc.next();
            
            System.out.print("Age: \n");
            int age = sc.nextInt();
            
            System.out.print("Height: \n");
            double height = sc.nextDouble();
            
            System.out.print("Weight: \n");
            double weight = sc.nextDouble();
            
            System.out.print("Salary: \n");
            int salary = sc.nextInt();
            
            System.out.print("Dept: \n");
            String dept = sc.next();
            
            eArr[] = new Employee(name, age, height, weight, salary, dept);
            count++; // 증감식(횟수 1회씩 추가)
            
            // 한 사원 정보를 입력할 때마다 묻기
            System.out.println("계속 입력하겠습니까? [Y/N]");
            char ch = sc.next().charAt();  // .charAt()으로 한 글자만 받기
            if(ch == 'Y' || ch == 'y') {  // 대답이 'Y' or 'y'일 때엔 지나가기
                continue;
            } 
            // 대답이 'N' or 'n'일 때엔 프로그램을 종료한다고 출력한 후 중지
            else if(ch == 'N' || ch == 'n') {
                System.out.println("프로그램을 종료합니다.");
                break;
            }
        }
        System.out.println(count+"명 입력되었습니다.");  // 입력한 사원 수 세기
        
        for(int i = 0; i < count; i++) {  // 입력한 수만큼의 사원 정보 출력하기
            System.out.println(eArr[i].information());
        }
    }
}
반응형