Backend
home
👨🏻‍🎓

학생 관리 시스템 예제 코드

Student.java
// Student.java package com.practice; import lombok.Getter; import lombok.Setter; import java.util.HashMap; import java.util.Map; @Getter @Setter public class Student { // 필드 // 이름과 아이디는 문자열 // 내부에서만 접근 private String name; // 이름 private String id; // 아이디 // grades는 Map<String, Double> private Map<String, Double> grades; // 맵(키:문자열, 값:실수) 타입의 변수 grades 선언 (내부에서만 접근 가능) // 생성자(String name, String id) // 점수는 new HashMap(); public Student(String name, String id) { this.name = name; // name 초기화 (외부에서 값을 받아 초기화) this.id = id; // id 초기화 (외부에서 값을 받아 초기화) this.grades = new HashMap<>(); // grades 초기화 } public Student() { } // toString @Override public String toString() { return "Student [" + "name='" + name + '\'' + ", id='" + id + '\'' + ", grades=" + grades + ']'; } // addGrade 메소드(String subject, Double grade) public void addGrade(String subject, double grade) { // 매개변수로 들어온 과목(키)과 점수(값)를 추가 grades.put(subject, grade); } // updateGrade 메소드(String subject, Double grade) public void updateGrade(String subject, double grade) { for (String sub : grades.keySet()) { if (sub.equals(subject)) { // 매개변수로 들어온 과목(키)과 점수(값)를 변경 grades.put(subject, grade); } return; } } }
Java
복사
StudentManagementSystem.java
package com.practice; import java.util.*; import static java.util.Map.entry; public class StudentManagementSystem { // 필드 // students / 타입 : List<Student> = new ArrayList<>(); // studentIds / 타입 : Set<String> = new HashSet<>(); private List<Student> students = new ArrayList<>(); // 학생 리스트를 필드로 초기화 (내부에만 접근) private Set<String> studentIds = new HashSet<>(); // 학생 아이디셋을 필드로 초기화 (내부에만 접근) // 기본 생성자만 있음 public StudentManagementSystem() { } // addStudent 메소드(String name, String id) // studentIds에 없는 id라면 Student 생성해서 students에 추가 & studentIds에 추가 public void addStudent(String name, String id) { // 학생 추가 시.. 중복되어 들어가지 않도록 if (studentIds.contains(id)) { // studentIds 셋에 id가 있으면 System.out.println("이미 존재하는 ID입니다."); return; // 추가하지 않고, 바로 종료 } students.add(new Student(name, id)); // 해당 Student 객체를 students 리스트에 추가 studentIds.add(id); // 매개변수로 받은 id를 studentIds 셋에 추가 } // removeStudent 메소드 (String id) // 만약 students에 id가 같은 학생이 있으면, 제거 // studentIds에서도 제거 public void removeStudent(String id) { // for (Student s : students) { // Students 리스트에서 반복문 실행 (각각의 Student 요소가 반복) // if (id.equals(s.getId())) { // 만약 Student의 아이디가 매개변수 아이디와 같으면 // students.remove(s); // 해당 Student를 Student 리스트에서 삭제 // break; // 반복문 더 이상 실행할 필요 없으니, 탈출! // } // } students.removeIf(s -> s.getId().equals(id)); // 위의 for문을 대체할 수 있음 studentIds.remove(id); // studentIds 셋에서도 삭제 } // updateStudent 메소드 (String id, String newName, Map<String, Double> newGrade) // students 반복해서 만약 id가 같은 학생이 있으면, // 해당 학생의 이름 변경(setName), 점수 변경 (updateGrade 메소드) 실행 public void updateStudent(String id, String newName, Map<String, Double> newGrade) { for (Student s : students) { // Students 리스트에서 반복문 실행 (각각의 Student 요소가 반복) if (id.equals(s.getId())) { // 만약 Student의 아이디가 매개변수 아이디와 같으면 s.setName(newName); // 해당 학생 이름 변경 for (Map.Entry<String, Double> entry : newGrade.entrySet()) { // newGrade를 반복해서 키와 값으로 구성된 엔트리 반복 // 엔트리에서 과목(키), 점수(값) 가져와 업데이트 s.updateGrade(entry.getKey(), entry.getValue()); } return; // 점수까지 업데이트 후에 바로 함수 종료 } } System.out.println("해당 학생을 찾을 수 없습니다."); } // listStudents 메소드 () // students 반복해서 모든 student 출력 public void listStudents() { for (Student s : students) { System.out.println(s); } System.out.println("해당 학생을 찾을 수 없습니다."); } // listStudentGrades 메소드 (String id) // students 반복해서 만약 id가 같은 학생이 있으면, 해당 학생 점수 출력 public void listStudentGrades(String id) { for (Student s : students) { // Students 리스트에서 반복문 실행 (각각의 Student 요소 반복) if (id.equals(s.getId())) { // 만약 Student의 아이디가 매개변수 아이디와 같으면 System.out.println(s.getGrades()); // 해당 Studnet 점수를 가져와 출력 return; // 함수 종료 } } System.out.println("해당 학생을 찾을 수 없습니다."); } }
Java
복사
StudentExample.java
package com.practice; import java.util.Map; public class StudentExample { public static void main(String[] args) { StudentManagementSystem system = new StudentManagementSystem(); system.addStudent("김윤아", "S1001"); system.addStudent("손흥민", "S1002"); system.listStudents(); system.updateStudent("S1001", "김연아", Map.of("수학", 99.7, "과학", 95.3)); system.listStudentGrades("S1001"); system.listStudents(); system.removeStudent("S1002"); system.listStudents(); } }
Java
복사