본문 바로가기

Java/본격 Java 퀴즈 기초

[Java] 학생과 선생의 정보(상속, 중복값 확인)

사람 클래스를 만들어 이름과 주소를 입력받는다

.

.

package Person;

public class Person {
	private String name, address;
	
	Person(String name, String address){
		this.name = name;
		this.address = address;
	}
	public String getName() { return name; }
	public String getAddress() { return address; }
	public void setAddress(String address) { this.address = address; }
	
	@Override
	public String toString() {
		return "Person [name=" + name + ", address=" + address + "]";
	}
	
}

.

.

그리고 사람 클래스를 상속 받아 학생 클래스를 작성한다.

.

.

package Person;

public class Student extends Person{
	private int numCourses = 0;
	private String[] courses = {};
	private int[] grades = {};
	private static final int MAX_COURSES = 30;
	
	Student(String name, String address){
		super(name, address);
		numCourses = 0;
		courses = new String[MAX_COURSES];
		grades = new int[MAX_COURSES];
	}
	
	// 수강 과목 추가
	public void addCourseGrade(String course, int grade) {
		if(isUniqueCourse(course)) {
			courses[numCourses] = course;
			grades[numCourses] = grade;
			numCourses++;
		}else {
			System.out.println(course + "을(를) 입력할 수 없습니다.");
		}
	}
	
	// 수강 과목 추가 할 때, 이미 추가했는지 확인
	private boolean isUniqueCourse(String course) {
		if(numCourses == 0) return true;
		
		for(int i = 0; i < numCourses; i++) {
			if(courses[i].equals(course)) {
				System.out.println("이미 입력된 과목입니다.");
				return false;
			}
			if(numCourses >= MAX_COURSES) {
				System.out.println("더 이상 등록할 수 없습니다.");
				return false;
			}
		}
		return true;
	}
	
	// 수강 내역 출력
	public void printGrades() {
		System.out.println(super.getName() + "의 수강 내역");
		for(int i = 0; i < numCourses; i++) {
			System.out.printf("과목 : %s, 점수 : %d\n", courses[i], grades[i]);
		}
	}
	
	// 수강 점수 평균
	public double getAverageGrade() {
		int total = 0;
		for(int i = 0; i < numCourses; i++) {
			total += grades[i];
		}
		if(numCourses == 0) {
			System.out.println("평균을 구할 수 없습니다.");
			return 0;
		}else {
			return total/numCourses;
		}
	}
	
	public String toString() {
		return super.toString();
	}

}

.

.

수강한 과목을 추가할 때 이미 추가했는지 중복값을 확인해야한다.

확인하기 위해 boolean 타입으로 추가한 과목이 이미 있는지 확인한 다음

수강한 과목을 추가한다.

.

.

강의 내역을 확인할 수 있는 선생 클래스를 만든다

.

.

package Person;

public class Teacher extends Person{
	private int numCourses = 0;
	private String[] courses = new String[5];
	private final int MAX_COURSES = 5;
	Person person;
	
	
	public Teacher(String name, String address) {
		super(name, address);
		courses = new String[MAX_COURSES];
	}
	
	// 강의 추가
	public boolean addCourse(String course) {
		
		if(isUniqueCourse(course)) {
			courses[numCourses] = course;
			numCourses++;
			return true;
		}else {
			System.out.println(course + "을(를) 추가할 수 없습니다.");
			return false;
		}
	}
	
	// 강의 추가 할 때, 중복값 확인
	private boolean isUniqueCourse(String course) {
		if(numCourses == 0) return true;
		
		for(int i = 0; i < numCourses; i++) {
			if(courses[i].equals(course)) {
				System.out.println("이미 등록된 과목입니다.");
				return false;
			}
		}
		if(numCourses >= MAX_COURSES) {
			System.out.println("등록할 과목 수는 5개 입니다. 더 이상 과목을 추가할 수 없습니다.");
			return false;
		}
		return true;
	}
	
	// 강의 지우기
	public boolean removeCourse(String course) {
		for(int i = 0; i <= numCourses; i++) {
			if(courses[i].equals(course)) {
				for(int j = i; j <= numCourses; j++) {
					courses[i + j] = courses[i + j + 1];
				}
				courses[numCourses] = null;
				numCourses--;
				return true;
			}else {
				System.out.println(course + "은(는) 존재하지 않은 과목입니다.");
				return false;
			}
		}
		return false;
	}
	
	// 강의 내역 출력
	public void printCourses() {
		String teacherName = super.getName();
		System.out.println(teacherName + "의 강의 내역");
		for(int i = 0; i < numCourses; i++) {
			System.out.printf("과목 : %s\n", courses[i]);
		}
	}
	
	public String toString() {
		return super.toString();
	}

}

.

.

중복값 확인은 학생 클래스와 동일하다.

.

.

그러면 test 메인 클래스를 만들어서 확인해보자.

.

.

package Person;

public class TestPerson {

	public static void main(String[] args) {
		Person man1 = new Person("Hong", "Seoul");
		System.out.println(man1);
		
		Student st1 = new Student("Harry Potter", "Hogh Watt");
		System.out.println(st1);
		System.out.println();
		
		st1.addCourseGrade("English", 97);
		st1.addCourseGrade("Math", 75);
		st1.addCourseGrade("Math", 75); // 중복 입력하기
		System.out.println();
		
		st1.printGrades();
		System.out.println();
		
		System.out.println(st1.getName()+ "의 평균은 " + st1.getAverageGrade() +"입니다.");
		System.out.println();
		
		Teacher teacher1 = new Teacher("Snaffe", "Hogh Watt");
		System.out.println(teacher1);
		System.out.println();
		teacher1.addCourse("English");
		teacher1.addCourse("Math");
		teacher1.addCourse("Korean");
		teacher1.addCourse("Korean"); // 중복 입력하기
		System.out.println();
		teacher1.printCourses();
		System.out.println();
		
		teacher1.removeCourse("English");
		teacher1.removeCourse("Health"); // 없는 데이터 지워보기
		System.out.println();
		
		teacher1.addCourse("Japanese");
		teacher1.printCourses();
	}

}

.

.

 

728x90
반응형