본문 바로가기
카테고리 없음

Swing으로 만드는 미니언 성적관리프로그램 예제

by sftt 2023. 12. 4.

Swing으로 만드는 미니언 성적 관리 프로그램 예제

이번 포스팅에서는 Swing을 사용하여 미니언 성적 관리 프로그램을 만드는 예제를 소개합니다.

1. 프로그램 개요

  • 이 예제는 미니언 성적 관리를 위한 간단한 프로그램을 만들어보는 것입니다.
  • 프로그램에는 총 세 명의 미니언이 등록되어 있으며, 사용자는 각 미니언의 이름과 성적을 입력할 수 있습니다.
  • 입력한 성적은 리스트에 저장되고, 평균 성적과 최고 성적이 자동으로 계산됩니다.

2. 필요한 라이브러리 및 컴포넌트

  • 이 예제를 위해 다음과 같은 라이브러리와 컴포넌트를 사용합니다.
    • Swing 라이브러리
    • JFrame 클래스: 프로그램의 기본 프레임
    • JPanel 클래스: 프레임의 컨텐츠를 담을 패널
    • JLabel 클래스: 텍스트를 표시하기 위한 레이블
    • JTextField 클래스: 사용자로부터의 입력을 받기 위한 텍스트 필드
    • JButton 클래스: 버튼
    • JList 클래스: 성적 리스트를 표시하기 위한 리스트

3. 프로그램 흐름

  1. 프로그램이 시작되면 메인 프레임이 나타납니다.
  2. 사용자는 각 미니언의 이름과 성적을 입력합니다.
  3. 입력한 성적은 리스트에 저장되고, 평균 성적과 최고 성적이 자동으로 계산됩니다.
  4. 사용자는 성적을 업데이트하거나 삭제할 수 있습니다.
  5. 사용자는 모든 성적을 초기화할 수도 있습니다.

4. 예제 코드

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

public class MiniyonGradeManagementProgram extends JFrame {
    // 미니언 클래스 정의
    class Minion {
        private String name;
        private int grade;

        public Minion(String name, int grade) {
            this.name = name;
            this.grade = grade;
        }

        public String getName() {
            return name;
        }

        public int getGrade() {
            return grade;
        }
    }

    // 컴포넌트 정의
    private ArrayList<Minion> minions;
    private DefaultListModel<String> listModel;
    private JList<String> gradeList;
    private JTextField nameField;
    private JTextField gradeField;
    private JLabel averageLabel;
    private JLabel maxLabel;

    public MiniyonGradeManagementProgram() {
        // 프레임 기본 설정
        super("미니언 성적 관리");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        // 패널 생성
        JPanel inputPanel = new JPanel();
        inputPanel.setLayout(new FlowLayout());

        // 컴포넌트 초기화
        minions = new ArrayList<>();
        listModel = new DefaultListModel<>();
        gradeList = new JList<>(listModel);
        nameField = new JTextField(10);
        gradeField = new JTextField(10);
        averageLabel = new JLabel("평균 성적: ");
        maxLabel = new JLabel("최고 성적: ");
        JButton addButton = new JButton("추가");
        addButton.addActionListener(new AddButtonListener());
        JButton updateButton = new JButton("업데이트");
        updateButton.addActionListener(new UpdateButtonListener());
        JButton deleteButton = new JButton("삭제");
        deleteButton.addActionListener(new DeleteButtonListener());
        JButton resetButton = new JButton("초기화");
        resetButton.addActionListener(new ResetButtonListener());

        // 패널에 컴포넌트 추가
        inputPanel.add(new JLabel("이름: "));
        inputPanel.add(nameField);
        inputPanel.add(new JLabel("성적: "));
        inputPanel.add(gradeField);
        inputPanel.add(addButton);
        inputPanel.add(updateButton);
        inputPanel.add(deleteButton);
        inputPanel.add(resetButton);
        add(inputPanel, BorderLayout.NORTH);
        add(new JScrollPane(gradeList), BorderLayout.CENTER);
        add(averageLabel, BorderLayout.SOUTH);
        add(maxLabel, BorderLayout.SOUTH);

        // 프레임 크기 및 가시성 설정
        setSize(300, 400);
        setVisible(true);
    }

    // "추가" 버튼 리스너
    class AddButtonListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            String name = nameField.getText();
            int grade = Integer.parseInt(gradeField.getText());
            minions.add(new Minion(name, grade));
            listModel.addElement(name);
            calculateAverageGrade();
            calculateMaxGrade();
        }
    }

    // "업데이트" 버튼 리스너
    class UpdateButtonListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            int selectedIndex = gradeList.getSelectedIndex();
            String name = nameField.getText();
            int grade = Integer.parseInt(gradeField.getText());
            minions.set(selectedIndex, new Minion(name, grade));
            listModel.set(selectedIndex, name);
            calculateAverageGrade();
            calculateMaxGrade();
        }
    }

    // "삭제" 버튼 리스너
    class DeleteButtonListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            int selectedIndex = gradeList.getSelectedIndex();
            minions.remove(selectedIndex);
            listModel.remove(selectedIndex);
            calculateAverageGrade();
            calculateMaxGrade();
        }
    }

    // "초기화" 버튼 리스너
    class ResetButtonListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            minions.clear();
            listModel.clear();
            calculateAverageGrade();
            calculateMaxGrade();
        }
    }

    // 평균 성적 계산
    private void calculateAverageGrade() {
        int sum = 0;
        for (Minion minion : minions) {
            sum += minion.getGrade();
        }
        int average = sum / minions.size();
        averageLabel.setText("평균 성적: " + average);
    }

    // 최고 성적 계산
    private void calculateMaxGrade() {
        int max = Integer.MIN_VALUE;
        for (Minion minion : minions) {
            if (minion.getGrade() > max) {
                max = minion.getGrade();
            }
        }
        maxLabel.setText("최고 성적: " + max);
    }

    // 메인 메서드
    public static void main(String[] args) {
        new MiniyonGradeManagementProgram();
    }
}

5. 실행 결과

  • 실행하면 다음과 같이 미니언 성적 관리 프로그램이 나타납니다.

미니언 성적 관리 프로그램

위 예제는 Swing을 사용하여 미니언 성적 관리 프로그램을 만드는 예제입니다. 다음 포스팅에서는 이 예제를 더 발전시켜 실제로 데이터베이스와 연동하여 성적을 저장하고 관리하는 프로그램을 만드는 방법에 대해 소개할 예정입니다.

댓글