2020년 10월 24일
업데이트:
StudentManagementServiceImpl.java
package com.kh.practice.model.service;
import com.kh.practice.model.vo.Student;
public class StudentManagementServiceImpl implements StudentManagementService {
private Student[] students = {
//우리반 교육생 명단
};
// 현재 students 배열의 마지막 값이 저장된 인덱스값을 저장하는 변수
private int currentIndex = students.length -1;
// 전체 학생 정보가 담겨있는 배열을 반환하는 service
@Override
public Student[] selectAll() {
return students;
}
// students 객체 배열에서 이름이 일치하는 학생 객체 반환하는 service
// 일치하는 학생이 없으면 null 반환 (동명이인은 없다고 가정)
@Override
public Student selectName(String name) {
for (int i = 0; i < students.length; i++) {
if (students[i].getName().equals(name)) {
Student newStd = students[i];
return newStd;
}
}
return null;
}
// students 객체 배열에서 전달받은 gender와 성별이 일치하는 학생을 Student 배열로 반환하는 service
@Override
public Student[] selectGender(char gender) {
Student[] strArr = new Student[students.length];
int currentIndex = 0;
for (int i = 0; i < students.length; i++) {
if (students[i].getGender() == gender) {
strArr[currentIndex] = students[i];
currentIndex++;
}
}
return strArr;
}
// students 객체 배열에서 전달받은 age와 나이가 일치하는 학생을 Student 배열로 반환하는 service
// 일치하는 학생이 없으면 null 반환
// 나이가 일치하는 학생이 있는지 검색하기 위해
// 나이를 입력받아 service.selectAge(입력받은나이)를 호출하고
// 결과를 Student[] 타입으로 받아 for문을 이용하여 출력.
// 단, 전달받은 Student[]의 길이가 0일 경우
// "나이가 일치하는 학생이 없습니다." 출력
@Override
public Student[] selectAge(int age) {
Student[] ageArr = new Student[students.length];
int currentIndex = 0;
for (int i = 0; i < students.length; i++) {
if (students[i].getAge() == age) {
ageArr[currentIndex] = students[i];
currentIndex++;
}
}
return ageArr;
}
// 전달받은 Student 객체를 Student[] 배열인 students에 추가
// 만약 students 배열의 크기가 부족할 경우 2배로 증가시킨 후 추가.
@Override
public void insertStudnet(Student std) {
int index = 1;
while (true) {
if (students[currentIndex] != null) {
Student[] newStd = new Student[students.length * 2];
System.arraycopy(students, 0, newStd, 0, students.length);
students = newStd;
}
students[++currentIndex] = std;
break;
}
}
// students 배열 요소 중 name 속성 값이 전달받은 name과 일치 배열 요소를 찾아
// 해당 요소가 참조하는 Student 객체를 전달받은 std로 얕은 복사
@Override
public void updateStudent(String name, Student std) {
// Student newStd = new Student();
for (int i = 0; i < students.length; i++) {
if (students[i].getName().equals(name)) {
students[i] = std;
}
}
}
// 전달받은 name과 일치하는 이름을 가진 학생 정보를 students 배열에서 제거 후
// 배열 중간이 비어있지 않도록 뒤쪽의 내용을 앞으로 당겨오기.
// 이름이 일치하는 학생이 있을 경우 삭제한 학생 정보(Student), 없을 경우 null을 반환
@Override
public Student deleteStudent(String name) {
Student newStd = null;
for (int i = 0; i < students.length; i++) {
if (students[i] != null)
if (students[i].getName().equals(name)) {
newStd = students[i];
for (int j = i; j < students.length - 1; j++) {
students[j] = students[j + 1];
students[currentIndex] = null;
}
}
}
return newStd;
}
}
StudentManagementViewImpl.java
package com.kh.practice.view;
import java.util.Scanner;
import com.kh.practice.model.service.StudentManagementService;
import com.kh.practice.model.service.StudentManagementServiceImpl;
import com.kh.practice.model.vo.Student;
public class StudentManagementViewImpl extends StudentManagementView {
private Scanner sc = new Scanner(System.in);
private StudentManagementService service = new StudentManagementServiceImpl();
// 전체 학생 조회 view
@Override
public void selectAll() {
// service.selectAll() 메소드를 호출하여
// 전체 학생 정보를 Student[]로 반환 받아 화면에 출력
// 단, 배열 요소의 참조값이 null이면 출력 반복문 종료
System.out.println("========== 전체 학생 조회 ==========");
for (int i = 0; i < service.selectAll().length; i++) {
if (service.selectAll()[i] != null)
System.out.println(service.selectAll()[i]);
}
}
// 이름 검색 view
@Override
public void selectName() {
// 이름이 일치하는 학생이 있는지 검색하기 위해
// 이름을 입력받아 service.selectName(입력받은이름)를 호출하고
// 결과를 Student 타입으로 받음.
// 결과가 null이 아닐경우 검색 결과 출력,
// 결과가 null일 경우 "일치하는 학생이 없습니다." 출력
System.out.print("[이름 검색]검색할 학생 이름 입력 : ");
String name = sc.nextLine();
if (service.selectName(name) != null)
System.out.println("[검색 결과]" + service.selectName(name));
else
System.out.println("일치하는 학생이 없습니다.");
}
// 성별 검색 view
@Override
public void selectGender() {
// 이름이 일치하는 학생이 있는지 검색하기 위해
// 이름을 입력받아 service.selectGender(입력받은성별)를 호출하고
// 결과를 Student[] 타입으로 받아 for문을 이용하여 출력.
// 성별을 잘못 입력한 경우 "잘못 입력하셨습니다. (M 또는 F만 입력해주세요.)" 출력
System.out.print("[성별 검색] 검색할 성별 입력(M/F) : ");
char gender = sc.nextLine().charAt(0);
if (gender != 'M' && gender != 'F') {
System.out.println("M 또는 F만 입력해주세요.");
} else {
System.out.println("[성별 검색 결과]");
for (int i = 0; i < service.selectGender(gender).length; i++) {
if (service.selectGender(gender)[i] == null) {
break;
}
System.out.println(service.selectGender(gender)[i].toString());
}
}
}
// 나이 검색 view
@Override
public void selectAge() {
// 나이가 일치하는 학생이 있는지 검색하기 위해
// 나이를 입력받아 service.selectAge(입력받은나이)를 호출하고
// 결과를 Student[] 타입으로 받아 for문을 이용하여 출력.
// 단, 전달받은 Student[]의 길이가 0일 경우
// "나이가 일치하는 학생이 없습니다." 출력
System.out.print("[나이 검색]검색할 나이 입력 : ");
int age = sc.nextInt();
sc.nextLine();
service.selectAge(age);
System.out.println("[나이 검색 결과]");
for (int i = 0; i < service.selectAge(age).length; i++) {
if (service.selectAge(age)[0] == null)
System.out.println("나이가 일치하는 학생이 없습니다.");
if (service.selectAge(age)[i] == null) {
// System.out.println("나이가 일치하는 학생이 없습니다.");
break;
} else {
System.out.println(service.selectAge(age)[i].toString());
}
}
}
// 학생 정보 추가 view
@Override
public void insertStudent() {
// 이름, 나이, 성별을 입력받아 Student 객체를 생성하고,
// service.insertStundet(생성한 Student객체)를 호출하여 삽입.
// (반환값 없음)
System.out.println("[학생 정보 추가]");
System.out.print("이름 : ");
String name = sc.nextLine();
System.out.print("나이 : ");
int age = sc.nextInt();
sc.nextLine();
System.out.print("성별 : ");
char gender = sc.nextLine().charAt(0);
Student newstd = new Student(name, age, gender);
service.insertStudnet(newstd);
}
// 학생 정보 수정 view
@Override
public void updateStudent() {
// 수정할 학생의 이름을 입력받고 이름이 일치하는 학생의 유무를 판단위해
// service.selectName(검색할 이름)을 호출하여 Student 타입을 반환 받음.
// 일치하는 학생이 없을 경우 "일치하는 학생이없습니다." 출력 후 메소드 종료.
// 일치하는 학생이 존재할 경우 이름, 나이 ,성별을 입력받아 Student 객체를 생성하고
// service.updateStudent(검색할 이름, 생성한 학생객체)하여 학생 정보를 수정.
// (반환값 없음)
System.out.print("[수정 학생 이름 검색]입력 : ");
String name = sc.nextLine();
System.out.println("[학생 정보 수정]");
if (service.selectName(name) != null) {
System.out.print("수정할 이름 : ");
String newName = sc.nextLine();
System.out.print("수정할 나이 : ");
int newAge = sc.nextInt();
sc.nextLine();
System.out.print("수정할 성별 : ");
char newGender = sc.nextLine().charAt(0);
Student std = new Student(newName, newAge, newGender);
service.updateStudent(name, std);
} else {
System.out.println("일치하는 학생이없습니다.");
}
}
// 학생 정보 삭제 view
@Override
public void deleteStudent() {
// 삭제할 학생의 이름을 입력 받아
// service.deleteStudent(입력받은학생이름)을 호출하고
// Student 타입을 반환 받아
// 삭제 성공 시 삭제된 학생 정보 + " 삭제되었습니다.,
// 삭제 실패 시 "일치하는 학생이 없습니다." 출력
System.out.print("[학생 정보 삭제]삭제할 학생 이름 : ");
String name = sc.nextLine();
Student std = service.deleteStudent(name);
if (std == null) {
System.out.println("일치하는 학생이 없습니다.");
} else {
System.out.println(std + " 삭제되었습니다.");
}
}
}
댓글남기기