•
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
복사