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 + " 삭제되었습니다.");
		}
	}
}

태그: ,

카테고리:

업데이트:

댓글남기기