• 검색 결과가 없습니다.

3 과목 처리하기

문서에서 객체의 표현 4 (페이지 30-40)

실습 30

© J.-H. Kang, CNU

 제 2 단계 [프로그램 13-2]

 문제

 [프로그램 13-1]에서는 한번에 하나의 점수만 입력받았 다.

 여기서는 한번에 3 과목의 점수를 입력 받는다.

과목은 Korean, English, Computer

 각 학생에 대해,

각 과목의 학점을 계산한다.

각 학점을 평점으로 환산한다.

세 과목의 평점의 평균, 즉 평균평점을 계산한다.

 전체 학급에 대해,

학급의 평균평점, 즉 학생들의 평균 평점의 평균을 구한다.

학급 평균 평점 이상인 학생의 수를 구한다.

실습 31

© J.-H. Kang, CNU

 입출력

 입력:

매번 학번과 성적을 입력할지 (Yes/No) 여부를 먼저 묻는다.

Yes 이면 한 학생의 학번과 각 과목의 점수를 입력 받는다.

성적이 0보다 작거나 100 보다 크면 오류메시지를 내보내고, 입력을 다

시 받는다.

No 이면 입력을 종료한다.

 출력

입력된 학번과 점수와 그에 해당하는 학점을 출력한다.

평균점과 평균 이상인 학생의 학생 정보를 출력한다.

마지막에 학점 별 학생수를 출력한다.

실습 32

© J.-H. Kang, CNU

 출력의 예

실습 33

? 학생정보를 입력하려면 ‘Y’를 , 입력을 종료하려면 ‘N’을 치시오: Y - 학번을 입력하시오: 201199999

- 국어 점수를 입력하시오: 82 - 영어 점수를 입력하시오: 77 - 컴퓨터 점수를 입력하시오: 90

? 학생정보를 입력하려면 ‘Y’를 , 입력을 종료하려면 ‘N’을 치시오: Y - 학번을 입력하시오: 201188888

- 국어 점수를 입력하시오: 45 - 영어 점수를 입력하시오: 66 - 컴퓨터 점수를 입력하시오: 88

? 학생정보를 입력하려면 ‘Y’를 , 입력을 종료하려면 ‘N’을 치시오: Y - 학번을 입력하시오: 201122222

- 국어 점수를 입력하시오: 93 - 영어 점수를 입력하시오: 156

[오류] 정상 범위 (0~100)의 점수가 아닙니다. 다시 입력하시오.

- 영어 점수를 입력하시오: 56 - 컴퓨터 점수를 입력하시오: 72

? 학생정보를 입력하려면 ‘Y’를 , 입력을 종료하려면 ‘N’을 치시오: Y - 학번을 입력하시오: 201155555

- 국어 점수를 입력하시오: 102

[오류] 정상 범위 (0~100)의 점수가 아닙니다. 다시 입력하시오.

- 국어 점수를 입력하시오: 66 - 영어 점수를 입력하시오: 85 - 컴퓨터 점수를 입력하시오: -1

[오류] 정상 범위 (0~100)의 점수가 아닙니다. 다시 입력하시오.

- 컴퓨터 점수를 입력하시오: 20

? 학생정보를 입력하려면 ‘Y’를 , 입력을 종료하려면 ‘N’을 치시오: Y - 학번을 입력하시오: 201133333

- 국어 점수를 입력하시오: 87 - 영어 점수를 입력하시오: 95 - 컴퓨터 점수를 입력하시오: 99

? 학생정보를 입력하려면 ‘Y’를 , 입력을 종료하려면 ‘N’을 치시오: N 입력을 종료합니다.

학생수는 모두 5 명입니다.

학생들의 성적 목록입니다.

학번: 201199999, 국어: 82(B), 영어: 77(C), 컴퓨터: 90(A), 평균평점: 3.0 학번: 201188888, 국어: 45(F), 영어: 66(D), 컴퓨터: 88(B), 평균평점: 1.3 학번: 201122222, 국어: 93(A), 영어: 56(F), 컴퓨터: 72(C), 평균평점: 2.0 학번: 201155555, 국어: 66(D), 영어: 85(B), 컴퓨터: 20(F), 평균평점: 1.3 학번: 201133333, 국어: 87(B), 영어: 95(A), 컴퓨터: 99(A), 평균평점: 3.7 학급의 평균평점은 2.27 입니다.

평균평점 이상인 학생수는 2 명 이상입니다.

프로그램을 종료합니다.

© J.-H. Kang, CNU

 Class Student

public class Student {

private Subject _korean ; private Subject _english ;

private Subject _computer ; private double _GPA ;

public Student() { ...

}

public void setKorean(Subject aSubject) { ... } public Subject korean() { ...}

public void setEnglish(Subject aSubject) { ... } public Subject english() { ...}

public void setComputer(Subject aSubject) { ... } public Subject computer() { ...}

pubic void setGPA (double aGPA) {...}

public double GPA() {...}

} // End of class “Student”

실습 34

© J.-H. Kang, CNU

 Class Subject

public class Subject { private int _score ; public Subject() {...}

public void setScore(int aScore) { ... } public int score {...}

public char grade {...}

public double point {...}

} End of class “Subject”

실습 35

© J.-H. Kang, CNU

 Class Ban

public class Ban {

private int _maxNumberOfStudents ; private int _numberOfStudents ;

private Student[] _students ;

private double _classAverageGPA ;

private int _numberOfStudentsAboveAverageGPA ; public Ban (int givenMaxNumberOfStudents) {...}

public boolean isFull() {...}

public boolean isEmpty() {...}

public int maxNumberOfStudents() {...}

public int numberOfStudents() {...}

public double classAverageGPA() {...}

public int numberOfStudentsAboveAverageGPA() {...}

public boolean addStudent(Student aStudent) {...}

public Student studentWithOrderOf (int order) {...}

public boolean processScores() {...}

} End of class “Ban”

실습 36

© J.-H. Kang, CNU

 Class AppController

public class AppController {

private AppView _appView = null ; // View 객체 private Ban _ban = null ; // Model 객체 ...

public AppController() {...}

// 공개함수의 구현 public void run ()

{

// (1) 학생 정보를 입력 받는다 this.inputAndStoreStudentInfo() ;

// 이 시점에 모든 학생 정보, 즉 학급 정보는 this._ban 이 소유한다.

if ( this._ban.isEmpty() ) { // 입력된 학생이 없으면

this._appView.outputMessage(MessageID.Error_NoInputOfStudents) ;

} else {

// (2) 학생 정보를 출력한다.

this.showStudentInfo() ;

// (3) 학급평균평점과 평균 이상인 학생수를 _ban에게 계산하도록 시키고, // 결과를 출력한다.

this._ban.processScores() ; this.showAverageInfo() ;

//(4)학급의평점 정보를 출력한다.

this.showGradeInfo() ;

this._appView.outputMessage(MessageID.Notice_EndOfProgram) ;

}

}

실습 37

© J.-H. Kang, CNU

 Class "AppView" 의 구현

 출력 관련 함수들

public void outputStudentInfo (Student aStudent) { ... // 여기를 채우시오

}

public void outputAverageInfo

(double aClassAverage, int numberOfStudentsAboveAverageGPA) { ... // 여기를 채우시오

}

public void outputGradeInfo

(char aGrade, int numberOfStudentsForGivenGrade) { ... // 여기를 채우시오

}

public void outputMessage (MessageID aMessageID) { ... // 여기를 채우시오

}

38

© J.-H. Kang, CNU

 실행하기

 먼저 슬라이드에 나온 결과 화면 데이터를 사용하 여 동일한 결과가 나오는 것을 보인다.

 그 다음, 각자 임의대로 테스트 데이터를 20명 이 상 준비하여 처리 한다.

 데이터에는 모든 종류의 오류가 발생하도록 만든다.

 이 두 가지 상황을 실행한 결과 화면을 capture 하 여 보고서에 포함시킨다.

실습 39

© J.-H. Kang, CNU

문서에서 객체의 표현 4 (페이지 30-40)

관련 문서