콘텐츠로 이동

미니 프로젝트 세트 4 모범답안: 학생 성적 리포트

완성 프로그램

import java.util.ArrayList;
import java.util.HashMap;

class Student {
    private String name;
    private int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }

    public String getGrade() {
        if (score >= 90) {
            return "A";
        } else if (score >= 80) {
            return "B";
        } else if (score >= 70) {
            return "C";
        } else if (score >= 60) {
            return "D";
        } else {
            return "F";
        }
    }
}

public class Main {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("Mina", 88));
        students.add(new Student("Jin", 72));
        students.add(new Student("Hana", 95));
        students.add(new Student("Leo", 95));
        students.add(new Student("Sara", 54));

        HashMap<String, Integer> gradeCounts = new HashMap<>();
        int totalScores = 0;
        int bestIndex = 0;
        int passingStudents = 0;

        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            String grade = s.getGrade();

            System.out.println(s.getName() + ": " + s.getScore() + " (" + grade + ")");

            totalScores += s.getScore();

            if (s.getScore() > students.get(bestIndex).getScore()) {
                bestIndex = i;
            }

            if (s.getScore() >= 60) {
                passingStudents++;
            }

            if (gradeCounts.containsKey(grade)) {
                gradeCounts.put(grade, gradeCounts.get(grade) + 1);
            } else {
                gradeCounts.put(grade, 1);
            }
        }

        double average = (double) totalScores / students.size();

        System.out.printf("Average score: %.2f%n", average);
        System.out.println("Top student: " + students.get(bestIndex).getName());
        System.out.println("Passing students: " + passingStudents);

        String[] grades = {"A", "B", "C", "D", "F"};
        for (String grade : grades) {
            if (gradeCounts.containsKey(grade)) {
                System.out.println(grade + " grades: " + gradeCounts.get(grade));
            }
        }
    }
}

출력

Mina: 88 (B)
Jin: 72 (C)
Hana: 95 (A)
Leo: 95 (A)
Sara: 54 (F)
Average score: 80.80
Top student: Hana
Passing students: 4
A grades: 2
B grades: 1
C grades: 1
F grades: 1

핵심 포인트

  • Student 클래스는 자신의 데이터를 캡슐화하고, getGrade()가 성적 규칙을 담당한다.
  • ArrayList<Student>는 객체를 순서대로 저장하며, 최상위 학생을 기억하기 위해 인덱스를 사용한다.
  • gradeCounts는 성적 문자를 키로, 학생 수를 값으로 사용한다.
  • containsKey + get + put으로 기존 개수를 잃지 않고 증가시킨다.
  • 평균을 계산하기 전 double 형변환이 필요하다.