Test116 인터페이스(Interface) / 인터페이스를 활용하여 성적 처리 프로그램을 구현
※ 실습 문제
성적 처리 프로그램을 구현한다.
단, 인터페이스를 활용할 수 있도록 한다.
※ 100-90 수
90-80 우
80-70 미
70-60 양
import java.util.Scanner;
import java.io.IOException;
// 속성만 존재하는 클래스 → 자료형 활용
Record.java
class Record
{
String hak, name; //-- 학번, 이름
int kor, eng, mat; //-- 국어, 영어, 수학 점수
int tot, avg; //-- 총점, 평균(편의상 정수 처리)
}
// 인터페이스
Sungjuk.java
interface Sungjuk
{
public void set();
public void input();
public void print();
}
// 문제 해결 과정에서 설계해야 할 클래스
SungjukImpl.java
class SungjukImpl implements Sungjuk
{
int num, i, j;
int[][] temp;
char[][] rank;
Record[] rc;
@Override
public void set()
{
Scanner sc = new Scanner(System.in);
do
{
System.out.print("인원 수 입력(1~10) : ");
num = sc.nextInt();
}
while (num<1 || num>10);
rc = new Record[num];
temp = new int[num][3];
rank = new char[num][3];
}
@Override
public void input()
{
Scanner sc = new Scanner(System.in);
for (i=0; i<num; i++)
{
rc[i] = new Record();
System.out.printf("%d번째 학생의 학번 이름 입력(공백 구분) : ",(i+1));
rc[i].hak = sc.next();
rc[i].name = sc.next();
System.out.printf("국어 영어 수학 점수 입력 (공백 구분) : ");
temp[i][0] = rc[i].kor = sc.nextInt();
temp[i][1] = rc[i].eng = sc.nextInt();
temp[i][2] = rc[i].mat = sc.nextInt();
rc[i].tot = rc[i].kor + rc[i].eng + rc[i].mat;
rc[i].avg = rc[i].tot/3;
}
System.out.println();
for (i=0; i<num; i++)
{
for(j=0; j<3; j++)
{
switch (temp[i][j] - temp[i][j]%10)
{
case 100: case 90: rank[i][j]='수'; break;
case 80: rank[i][j]='우'; break;
case 70: rank[i][j]='미'; break;
case 60: rank[i][j]='양'; break;
default: rank[i][j]='가'; break;
}
}
}
}
// Sungjuk 인터페이스의 모든 메소드를 Override하지 않으면 SungjukImpl 클래스가 추상클래스가 되기때문에 Override해줘야 한다.
//-- Sungjuk 인터페이스의 print() 메소드를 Override한 SungjukImpl 클래스의 print() 메소드
@Override
public void print()
{
System.out.println();
//-- 입력된 질문들과 분리시키기 위해 개행을 해준다.
for (i=0; i<num; i++) //-- 단일포문은 입력된 인원수(num)만큼 반복하며 첫번째 학생(re[0], rank[0])부터 시작된다.
{
System.out.printf("%s %s %3d %3d %3d\t%3d %3d\n", rc[i].hak, rc[i].name, rc[i].kor, rc[i].eng, rc[i].mat, rc[i].tot, rc[i].avg);
//-- 학번, 이름, 국어점수, 영어점수, 수학점수, 총합, 평균을 출력한다.
System.out.printf("\t\t%3c%3c%3c\n", rank[i][0], rank[i][1], rank[i][2]);
//-- rank[][] 배열은 해당 학생의 국어등급(rank[i][0]), 영어등급(rank[i][1]), 수학등급(rank[i][2])를 담고 있다.
// 따라서 해당 rc[i] 학생의 등급이 출력된다.
}
}//end print()
}
// main() 메소드를 포함하고 있는 외부 클래스
Test116.java
public class Test116
{
public static void main(String[] args) throws IOException
{
SungjukImpl ob;
// 문제 해결 과정에서 작성해야 할 ob 구성
ob = new SungjukImpl();
ob.set();
ob.input();
ob.print();
}
}
cmd
인원 수 입력(1~10) : 2
1번째 학생의 학번 이름 입력(공백 구분) : 20182887 나서스
국어 영어 수학 점수 입력 (공백 구분) : 20 40 20
2번째 학생의 학번 이름 입력(공백 구분) : 20171887 베어
국어 영어 수학 점수 입력 (공백 구분) : 10 50 10
20182887 나서스 20 40 20 80 26
가 가 가
20171887 베어 10 50 10 70 23
가 가 가
계속하려면 아무 키나 누르십시오 . . .
'Study Note > Java' 카테고리의 다른 글
JAVA_ Test118_ 중첩 클래스 종류 / 지역 클래스(로컬 클래스, local class) (0) | 2018.06.16 |
---|---|
JAVA_ Test117_ 중첩 클래스 종류 / static 중첩 클래스 / 내부 클래스 / 지역 클래스 / 무명 클래스 (0) | 2018.06.16 |
JAVA_ Test115_ 인터페이스(Interface) 정의 / 『extends』 vs 『implements』 쓰이는 영역 정의 (0) | 2018.06.16 |
JAVA_ Test114_ 인터페이스(Interface) 정의 (0) | 2018.06.16 |
JAVA_ Test113_ 인터페이스(Interface) 정의 (0) | 2018.06.16 |
댓글