실습 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