Java Day 7 배열 가변길이 응용문제(성적표)
09 Dec 2020 | JavaJava Day 7 배열 가변길이 응용 성적표관리 구현
-
성적표 관리 프로그램
-
다차원배열의 가변길이를 응용하여 성적표 관리 프로그램을 구현해보자
- 제시된 조건 : 인원수와 과목수에 자유도 부여, 평균으로 순위 표시, 평균은 소수점 둘째자리 반올림(메서드 이용 x)
- 출력화면
————————————성적표————————————-
이름 국어 영어 수학 총점 평균 등급 등수
홍길동 90 90 90 270 90 A 1
——————————–성적표——————————-
이름 사회 과학 총점 평균 등급 등수
사오정 80 80 160 80 B 2
-
-
순서도
-
멤버변수 선언
-
인원수는 main 클래스의 String 배열에 저장
- 입력을 받을 과목과 점수는 다차원배열로 생성 - 이름,총점,평균,등급,등수 배열의 길이는 인원수만큼 생성 - 총점은 점수 배열의 마지막 인덱스에 저장
-
- 인원수만큼 for문 돌려서 이름,과목수,과목,점수 입력받아 배열에 저장(배열의 길이 중요)
- 평균 구해서 반올림 구현
- switch문으로 평균별 등급 매기기
- 등수 매기기 구현
- 출력
-
-
코딩
import java.io.*;
public class GradeCard {
public static void main(String[] ar)throws IOException{
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int student = Integer.parseInt(ar[0]); //인원수
String[] name = new String[student]; //이름
String[][] subject = new String[student][]; //과목
int[][] score = new int[student][]; //과목별 점수
float[] avg = new float[student]; //평균
String[] grade = new String[student]; //등급
int[] rank = new int[student]; //등수
for(int i=0; i<student; i++){
//이름 입력받기
System.out.println("이름 입력 : ");
name[i] = br.readLine();
//과목수 입력받기
System.out.println("응시한 과목 개수 입력 : ");
int num = Integer.parseInt(br.readLine());
subject[i] = new String[num];
//과목수 = subject[i].length
score[i] = new int[subject[i].length+1];
for(int j=0; j<subject[i].length; j++){
//과목 입력받기
System.out.println("응시한 과목명 입력 : ");
subject[i][j] = br.readLine();
//점수 입력받기
System.out.println("점수 입력 : ");
score[i][j] = Integer.parseInt(br.readLine());
//총점 구하기
score[i][score[i].length-1] += score[i][j];
}//end for subject&score
//평균 구하기
avg[i] = (float)(score[i][score[i].length-1] / subject[i].length);
//소수점 둘째자리에서 반올림하기
avg[i] = (int)((avg[i]+0.005)*100) / 100.f;
//등급 매기기
switch((int)avg[i] / 10){
case 10 :
case 9 : grade[i] = "A"; break;
case 8 : grade[i] = "B"; break;
case 7 : grade[i] = "C"; break;
case 6 : grade[i] = "D"; break;
default : grade[i] = "F"; break;
}//end for switch
}//end for student
//등수 매기기
for(int i=0; i<student; i++){
rank[i]++;
for(int j=0; j<student; j++){
if(avg[i] < avg[j]) rank[i]++;
}
}//end for rank
System.out.println();
//출력
for(int i=0; i<student; i++){
System.out.print("*************");
for(int j=0; j<subject[i].length; j++)
System.out.print("****");
System.out.print(" 성 적 표 ");
for(int j=0; j<subject[i].length; j++)
System.out.print("****");
System.out.println("*************");
System.out.print("이름\t");
for(int j=0; j<subject[i].length; j++){
System.out.print(subject[i][j]+"\t");
}
System.out.println("총점\t평균\t등급\t등수\t");
System.out.print(name[i]+"\t");
for(int j=0; j<score[i].length; j++){
System.out.print(score[i][j]+"\t");
}
System.out.println(avg[i]+"\t"+grade[i]+"\t"+rank[i]);
}//end for print
}//end for main
}
참고 자료
KG아이티뱅크 자바 수업 내용