본문 바로가기
JAVA SE/Code

CODE [20.07.27/Day_13] Java SE / School Project_semi - list

by 파프리카_ 2020. 7. 28.
728x90
반응형

**학사 관리 프로젝트**


[ 요구사항 ]


학교 구성원 정보를 관리하는 시스템을 구축하고자 한다
학교 구성원은 학생 , 교사 , 직원이 있다 
학생은 전화번호 이름 주소 학번 정보로 구성된다 
교사는 전화번호 이름 주소 과목 정보로 구성된다 
직원은 전화번호 이름 주소 부서 정보로 구성된다 

-시스템 주요 기능
1. 구성원 등록(추가) 
학교 구성원(학생,교사,직원) 정보를 추가할 수 있다 
전화번호는 유일해야 하므로 등록(추가)시 기존 구성원 전화번호가
동일한 번호가 있을 경우 추가되어서는 안된다 
0101231234 tel 이 중복되므로 등록될 수 없습니다!  --> 메세지 출력 

2. 전체 구성원 리스트 출력 

3. 구성원 검색 
전화번호로 구성원 정보를 검색할 수 있다 
구성원 정보가 없을 때 null을 반환한다 

4. 구성원 삭제
전화번호로 구성원 정보를 삭제할 수 있다 

 


[ 진행 과정 ]

 

  1. class diagram 도출
    -VO(Value Object) 계열 클래스 구현 (Person, Student, Teacher, Employee)

  2. 테스트 클래스(TestSchoolService) 와 비즈니스 로직 클래스(SchoolService)를 정의
  3. 구성원 정보를 추가하고 전체 리스트를 출력을 구현해서 확인
    (중복호가인 같은 제역조건은 일단 뺀다)
  4. 구성정 정보를 tel을 이용해 검색
  5. 구성정 정보를 tel을 이용해 삭제

SchoolService
> 인스턴스 변수
list : Array(바구니)
> 메서드 
1. 추가 (insert) : 동일한 tel X

2. 검색 (select) : tel이 일치하면 검색해서 반환한다
3. 삭제 (delete) : tel이 일치하면 list에서 삭제한다
* 3개의 메서드 모두 동일한 tel이 있는지와 있으면 인덱스 반환(findByTel)

 

→ 요구사항의 공통적인 기능은 tel에 대해 구성원 정보를 저장하는 리스트에 존재한는지 여부와 존재한다면 리스트 몇번 째 요소인지이다. 이러한 공통기능을 수행하는 별도의 메서드를 만들고, 3.4.5 구현 시, 재사용하면 생산성이 높아질 수 있다.

메서드 추가

 * 매개변수로 전달된 tel과 리스트의 요소 내의 구성원 tel과 비교해서
 * 일치하는 요소가 없으면 -1을 반환,
 * 일치하는 요소가 있으면 리스트 요소의 인덱스를 반환하는 메서드

 


Test Class

: 비즈니스 로직을 담당하는 SchoolService를 단위 테스트하는 클래스


/TestSchoolService.java

package test;

import model.Employee;

/*
 * 비즈니스 로직을 담당하는 SchoolService를 단위 테스트하는 클래스
 */

import model.*;

public class TestSchoolService {
	public static void main(String[] args) {
		SchoolService service = new SchoolService();
		service.addPerson(new Student("0101231234", "데이빗", "용인", "17"));
		service.addPerson(new Teacher("0101231235", "알렉스", "수지", "국어"));
		service.addPerson(new Student("0101231236", "엠마", "수원", "16"));
		service.addPerson(new Employee("0101231237", "챨리", "화성", "재무부"));
		service.addPerson(new Student("0101231238", "리챠드", "용인", "18"));
		service.addPerson(new Teacher("0101231239", "앨리스", "용인", "수학"));
		
		System.out.println("**구성원 전체 등록 시작**");
		System.out.println("**구성원 전체 등록 완료**");
	
		service.printAll();
		/* 출력값:
		 * [tel=0101231234, name=데이빗, address=용인, stuId=17] 
		 * [tel=0101231235, name=알렉스,address=수지, subject=국어] 
		 * [tel=0101231236, name=엠마, address=수원, stuId=16]
		 * [tel=0101231237, name=챨리, address=화성, department=재무부] 
		 * [tel=0101231238,name=리챠드, address=용인, stuId=18] 
		 * [tel=0101231239, name=앨리스, address=용인, subject=수학]
		 */
		
		System.out.println("\n**findIndexByTel() TEST**");
		// 존재하는 tel
		System.out.println("존재 O :"+service.findIndexByTel("0101231236")); //5
		// 존재하지 않은 tel
		System.out.println("존재 X :"+service.findIndexByTel("123")); //-1
		System.out.println("**findIndexByTel() TEST 끝**");
	
		System.out.println("\n**findPersonByTel() TEST**");
		Person p = service.findPersonByTel("0101231236");
		System.out.println("검색결과: "+p+"]");
		/*출력값:
		 * 검색결과: [tel=0101231239, name=앨리스, address=용인, subject=수학]
		 */
		
		System.out.println("\n**removePeronByTel() TEST**");
		Person rp = service.removePeronByTel("0101231236");
		System.out.println("삭제대상: "+ rp+"]");
		System.out.println("\n삭제 후 리스트 확인");
		service.printAll();
		
		System.out.println("\n**추가 시 중복확인**");
		//존재하는 전화번호의 구성원이 추가되려고 할 때
		service.addPerson(new Student("0101231234", "크리스탈", "용인", "17"));
		System.out.println("\n**중복테스트 후 리스트 확인**");
		service.printAll();
		/* 출력값 : 
		 * **추가 시 중복확인**
		 * 추가 시 중복확인 tel이 중복되어 추가할 수 없습니다.
		 * 
		 * **중복테스트 후 리스트 확인** 
		 * [tel=0101231234, name=데이빗, address=용인, stuId=17]
		 * [tel=0101231235, name=알렉스, address=수지, subject=국어] 
		 * [tel=0101231237, name=챨리, address=화성, department=재무부] 
		 * [tel=0101231238, name=리챠드, address=용인, stuId=18]
		 * [tel=0101231239, name=앨리스, address=용인, subject=수학]
		 */
	}
}

 

비즈니스 로직 Class

:  시스템 내에서 비즈니스 로직을 담당하는 클래스 *  (업무를 담당)

 

/SchoolService.java

package model;

import java.util.ArrayList;

/*
 *  Service : 시스템 내에서 비즈니스 로직을 담당한다
 *  (업무를 담당)
 */
public class SchoolService {
	private ArrayList<Person> list = new ArrayList<Person>();
	
	// 1. 구성원 등록(추가) 
	// : 매개변수로 부모변수를 선언하면,
	// 다양한 자식객체를 하나의 메서드에서 처리할 수 있다(다형성)
	public void addPerson(Person p) {
		if (findIndexByTel(p.getTel()) == -1) //존재하지 않으면 추가
			list.add(p);
		else 
			System.out.println("tel이 중복되어 추가할 수 없습니다.");
	}
	
	//2. 전체 구성원 리스트 출력 
	public void printAll() {
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i)+"]");
		}
	}
	
	/**
	 * 매개변수로 전달된 tel과 리스트의 요소 내의 구성원 tel과 비교해서
	 * 일치하는 요소가 없으면 -1을 반환,
	 * 일치하는 요소가 있으면 리스트 요소의 인덱스를 반환하는 메서드
	 * @param tel
	 * @return
	 */
	// 추가) tel로 list의 인덱스 찾는 메서드
	public int findIndexByTel(String tel) {
		int index = -1;
		for (int i = 0; i <list.size(); i++) {
				if (tel.equals(list.get(i).getTel())) {
					index = i;
					break;
				}
		}
		return index;
	}


	//3. 구성원 검색 
	public Person findPersonByTel(String tel) {
		Person p = null;
		int position = findIndexByTel(tel);
		
		if (position != -1) {
			p = list.get(position);
			
		}
		
		return p;
	}

	
	//4. 구성원 삭제
	public Person removePeronByTel(String tel) {
		Person p = null;
		int position = findIndexByTel(tel);
		if (position != -1) {
			p = list.get(position);
			list.remove(position);
		}
		return p;
	}
}

 

VO class

/Person.java

package model;

public abstract class Person {
	private String tel;
	private String name;
	private String address;

	public Person(String tel, String name, String address) {
		this.tel = tel;
		this.name = name;
		this.address = address;
	}

	@Override
	public String toString() {
		return "[tel=" + tel + ", name=" + name + ", address=" + address+ ", ";
	}

	public String getTel() {
		return tel;
	}

	public void setTel(String tel) {
		this.tel = tel;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

}

 

/Student.java

package model;

public class Student extends Person{
	private String stuId;

	public Student(String tel, String name, String address, String stuId) {
		super(tel, name, address);
		this.stuId = stuId;
	}
	
	@Override
	public String toString() {
		return super.toString()+"stuId=" + stuId;
	}
	
	public String getStuId() {
		return stuId;
	}

	public void setStuId(String stuId) {
		this.stuId = stuId;
	}
	
}

 

/Teacher.java

package model;

public class Teacher extends Person {
	private String subject;

	public Teacher(String tel, String name, String address, String subject) {
		super(tel, name, address);
		this.subject = subject;
	}

	@Override
	public String toString() {
		return super.toString() + "subject=" + subject;
	}

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

}

 

/Employee.java

package model;

public class Employee extends Person {
	private String department;

	public Employee(String tel, String name, String address, String department) {
		super(tel, name, address);
		this.department = department;
	}

	@Override
	public String toString() {
		return super.toString() + "department=" + department;
	}

	public String getDepartment() {	
		return department;
	}

	public void setDepartment(String department) {
		this.department = department;
	}

}
728x90
반응형