Archive

Java Day 7 배열 가변길이 응용문제(성적표)

|

Java Day 7 배열 가변길이 응용 성적표관리 구현


  1. 성적표 관리 프로그램

    • 다차원배열의 가변길이를 응용하여 성적표 관리 프로그램을 구현해보자

    • 제시된 조건 : 인원수와 과목수에 자유도 부여, 평균으로 순위 표시, 평균은 소수점 둘째자리 반올림(메서드 이용 x)
    • 출력화면

    ————————————성적표————————————-

    이름 국어 영어 수학 총점 평균 등급 등수

    홍길동 90 90 90 270 90 A 1

    ——————————–성적표——————————-

    이름 사회 과학 총점 평균 등급 등수

    사오정 80 80 160 80 B 2

  2. 순서도

    1. 멤버변수 선언

      • 인원수는 main 클래스의 String 배열에 저장

                           - 입력을 받을 과목과 점수는 다차원배열로 생성
                           - 이름,총점,평균,등급,등수 배열의 길이는 인원수만큼 생성
                           - 총점은 점수 배열의 마지막 인덱스에 저장
        
    2. 인원수만큼 for문 돌려서 이름,과목수,과목,점수 입력받아 배열에 저장(배열의 길이 중요)
    3. 평균 구해서 반올림 구현
    4. switch문으로 평균별 등급 매기기
    5. 등수 매기기 구현
    6. 출력
  3. 코딩

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아이티뱅크 자바 수업 내용