사람 클래스를 만들어 이름과 주소를 입력받는다
.
.
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
반응형
'Java > 본격 Java 퀴즈 기초' 카테고리의 다른 글
[Java] 원의 중심과 원의 관계(상속과 클래스 배열 이용) (0) | 2020.07.10 |
---|---|
[Java] 동물 울음소리 (다형성(polymorphism) 이용) (0) | 2020.07.10 |
[Java] 원과 원기둥 둘레와 넓기 구하기(상속 이용) (0) | 2020.07.09 |
[Java] 책 정보 출력하기 (클래스 배열 이용) (0) | 2020.07.09 |
[Java] 사원정보 출력하기 (Composition(포함)관계 이용) (0) | 2020.07.09 |