Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

Full-Stack 개발자가 되려는 작은 개발자의 블로그

학교 인적 관리 프로그램(SchoolPrj) 본문

강의 정리/Java

학교 인적 관리 프로그램(SchoolPrj)

jhjin 2020. 4. 18. 16:33

Data Transaction Object

Person > 최상위 DTO 객체

package com.school.dto;

public class Person {
	private String name; //이름
	private String birth; //생년월일
	private boolean gender; //성별
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getBirth() {
		return birth;
	}
	public void setBirth(String birth) {
		this.birth = birth;
	}
	public boolean isGender() {
		return gender;
	}
	public void setGender(boolean gender) {
		this.gender = gender;
	}
	public String toString() {
		//Person클래스의 기본 필드들 출력하도록 작성
		String gen=(gender)?"male":"female";
		String str="================================\n"
				+ "이름 : "+this.name+"\n"
				+ "생년월일 : "+this.birth+"\n"
				+ "성별 : "+gen+"\n";
				
		return str;
	}
}

StudentPerson

package com.school.dto;

public class StudentPerson extends Person{
	private String stuNum; //학번
	private String sMajor; //학과
	private boolean state; // 재학/휴학 상태 (true 일경우 재학중)
	public String getStuNum() {
		return stuNum;
	}
	public void setStuNum(String stuNum) {
		this.stuNum = stuNum;
	}
	public String getsMajor() {
		return sMajor;
	}
	public void setsMajor(String sMajor) {
		this.sMajor = sMajor;
	}
	public boolean isState() {
		return state;
	}
	public void setState(boolean state) {
		this.state = state;
	}
	
	public String toString() {
		String state=(this.state)?"재학":"휴학";
		
		String str="학번 : "+this.stuNum+"\n"
				+ "학과 : "+this.sMajor+"\n"
				+ "재학여부 : "+state+"\n";
		return super.toString()+str;
	}
}

ProfessorPerson

package com.school.dto;

public class ProfessorPerson extends Person{
	private String profNum; //교번
	private String pWork; //재직기간
	private String pMajor; //학과
	private boolean dean; // 학과장 여부 (true 일 경우 학과장임)
	public String getProfNum() {
		return profNum;
	}
	public void setProfNum(String profNum) {
		this.profNum = profNum;
	}
	public String getpWork() {
		return pWork;
	}
	public void setpWork(String pWork) {
		this.pWork = pWork;
	}
	public String getpMajor() {
		return pMajor;
	}
	public void setpMajor(String pMajor) {
		this.pMajor = pMajor;
	}
	public boolean isDean() {
		return dean;
	}
	public void setDean(boolean dean) {
		this.dean = dean;
	}
	
	public String toString() {
		String state=(this.dean)?"학과장":"평교수";
		
		String str="교번 : "+this.profNum+"\n"
				+ "재직기간 : "+this.pWork+"\n"
				+ "학과 : "+this.pMajor+"\n"
				+ "학과장여부 : "+state+"\n";
		return super.toString()+str;
	}
}

StaffPerson

package com.school.dto;

public class StaffPerson extends Person{
	private String staffNum; //임직원번호
	private String sWork; //재직기간
	private String division; //부서 
	private boolean regular; // 정규직 여부 (true 일 경우 정규직임)
	public String getStaffNum() {
		return staffNum;
	}
	public void setStaffNum(String staffNum) {
		this.staffNum = staffNum;
	}
	public String getsWork() {
		return sWork;
	}
	public void setsWork(String sWork) {
		this.sWork = sWork;
	}
	public String getDivision() {
		return division;
	}
	public void setDivision(String division) {
		this.division = division;
	}
	public boolean isRegular() {
		return regular;
	}
	public void setRegular(boolean regular) {
		this.regular = regular;
	}
	public String toString() {
		String state=(this.regular)?"정규직":"계약직";
		
		String str="임직원번호 : "+this.staffNum+"\n"
				+ "재직기간 : "+this.sWork+"\n"
				+ "부서 : "+this.division+"\n"
				+ "정규직여부 : "+state+"\n";
		return super.toString()+str;
	}
	
}

Controller

regPerson() > 인적사항 등록을 제어하는 메소드

package com.school.controller;

import java.nio.channels.ShutdownChannelGroupException;
import java.util.ArrayList;
import com.school.dto.Person;
import com.school.dto.ProfessorPerson;
import com.school.dto.StaffPerson;
import com.school.dto.StudentPerson;
import com.school.service.SchoolService;
import com.school.view.SchoolView;

//실질적으로 프로그램 전체를 제어하는 클래스
public class MainConrtoller {
	//프로그램의 입/출력을 담당하는 ShcoolView 객체 sv를 생성
	SchoolView sv=new SchoolView();
	//프로그램의 데이터를 저장/불러오기 위한 기능을 담당하는 SchoolService 객체 ss를 생성
	SchoolService ss=new SchoolService();

	//프로그램을 제어하는 메소드 control()
	public void control() {
		//ss객체에서 더미 데이터를 가져오는 메소드 startPs()를 실행
		ss.startPs();
		
		//메뉴 선택 값을 받을 변수
		int menu = 0;
		
		//특정 값이 들어오기 전까지 무한 반복
		while(true) {
			//sv 객체에서 메인 메뉴를 출력하는 메소드 showMainMenu()를 실행
			sv.showMainMenu();
			//sv객체의 메소드 inpuNum()을 실행하여 번호를 menu에 저장
			menu=sv.inputNum();

			//menu에 0이 들어오면 프로그램이 종료된다.
			if(menu==0) {
				//sv에서 출력문구를 모아둔 메소드 printMsg()메소드 실행
				sv.printMsg(0);
				//break로 무한 루프를 빠져나간다.
				break;
			}
			//메뉴 번호에 따라 다른 처리를 하기 위한 switch문
			switch(menu) {
			case 1://사람 등록
				//인적 사항을 등록
				regPerson();
				break;
			case 2://등록 내역 출력
				printPerson();
				break;
			case 3://등록 내역 검색
				searchPerson();
				break;
			case 4://등록 내용 수정
				updatePerson();
				break;
			case 5://등록 내용 삭제
				deletePerson();
				break;
			default:
				break;
			}
		}
	}

	//인적사항 등록을 기능을 제어하는 메소드 regPerson()
	private void regPerson() {
		//인적사항 등록에서 사용할 서브메뉴 번호를 담을 변수
		int sub=0;
		
		//등록 후 결과를 담을 boolean 변수 result
		boolean result;
		
		//sv에 넘겨 데이터를 입력하고
		//sc에서 데이터를 저장하기 위한 정보를 담을 객체
		Person person=null;

		//서브 메뉴 무한 루프
		while(true) {
			//title과 번호를 매개변수로 넘겨
			//서브 메뉴를 출력하는 메소드 showSubMenu()실행
			sv.showSubMenu("인적사항등록", 1);
			//변수 sub에 메뉴 번호를 받는다.
			sub=sv.inputNum();

			//sub에 0 값이 들어오면 return을 통해 메소드를 종료 후
			//이전 메뉴로 돌아간다.
			if(sub==0) {
				sv.printMsg(1);
				return;
			}
			//sub 값에 따라 다른 처리를 하는 switch문
			switch(sub) {
			case 1: //학생등록
				//StudentPerson객체 생성 한 후 upcasting하여 저장
				person=new StudentPerson();
				break;		
			case 2: //교수등록
				//ProfessorPerson객체 생성 한 후 upcasting하여 저장
				person=new ProfessorPerson();
				break;		
			case 3: //임직원등록
				//StaffPerson객체 생성 한 후 upcasting하여 저장
				person=new StaffPerson();
				break;	
			default : //잘못된 입력
				//2에 해당하는 문구 출력
				sv.printMsg(2);
				break;
			}
			//upcasting된 후 저장 된 person 객체를 매개변수로 전달
			//sv에서 person의 종류에 따른 값을 입력하는 메소드 registPer()을 실행
			sv.registPer(person);
			
			//실질적으로 객체 배열에 객체 person을 저장하는 메소드 registPerson()메소드를 실행
			//person에는 registPer()에서 입력 된 값이 담겨있다.
			//저장 성공의 여부를 반환하여 result에 저장
			result = ss.registPerson(person);

			//저장에 성공했을 경우
			if(result) {
				sv.printMsg(4);
			}else { //저장에 실패했을 경우
				sv.printMsg(7);
			}
		}
	}
}

View

registPer(Person person) > person에 데이터를 입력하는 메소드

package com.school.view;

import java.util.ArrayList;
import java.util.Scanner;

import com.school.dto.Person;
import com.school.dto.ProfessorPerson;
import com.school.dto.StaffPerson;
import com.school.dto.StudentPerson;

public class SchoolView {
	Scanner scan=new Scanner(System.in);
	//매개변수로 넘어오 person객체의 실제 타입을 확인 후 다른 입력방식을
	//취하는 메소드
	public void registPer(Person person) {
		String yesno;
		//공통사항
		person.setName(inputStr("이름 : "));
		person.setBirth(inputStr("생년월일 : "));;
		while(true) { //값이 제대로 입력 될 때까지 반복
			yesno=inputStr("성별(f/m) : ");
			//입력 된 값이 f/F일 경우
			if(yesno.equals("f")||yesno.equals("F")) {
				//setter메소드를 이용해 false 값을 저장
				person.setGender(false);
			}
			//입력 된 값이 m/M일 경우
			else if(yesno.equals("m")||yesno.equals("M")){
				//setter메소드를 이용해 true 값을 저장
				person.setGender(true);
			}else { //만약 제대로 된 입력 값이 오지 않을경우
				printMsg(2);
				//while문 가장 위로 돌아가 반복한다.
				continue;
			}
			//제대로 된 입력 값이 들어오는 경우 무한 루프를 종료한다.
			break;
		}
		//instanceof 연산자를 통해 person에 실제 타입을 확인하여
		//다른 입/출력 방식을 지정한다.

		//person의 실제 타입이 StudentPerson일 경우
		if(person instanceof StudentPerson) {
			//person을 실제 타입으로 downcasting하여 저장
			StudentPerson sp=(StudentPerson)person;
			sp.setStuNum(inputStr("학번 : "));
			sp.setsMajor(inputStr("학과 : "));
			//제대로 된 입력값이 들어오기 전까지 무한 루프
			while(true) {
				yesno=inputStr("재학/휴학(y/n) : ");
				if(yesno.equals("y")||yesno.equals("Y")) {
					sp.setState(true);
				}else if(yesno.equals("n")||yesno.equals("N")) {
					sp.setState(false);
				}else {
					printMsg(2);
					continue;
				}
				break;
			}
		}
		//person의 실제 타입이 ProfessorPerson인 경우
		if(person instanceof ProfessorPerson) {
			//person객체를 실제 타입인 ProfessorPerson으로 downcasting하여 저장
			ProfessorPerson pp=(ProfessorPerson)person;
			pp.setProfNum(inputStr("교번 : "));
			pp.setpWork(inputStr("재직기간 : "));
			pp.setpMajor(inputStr("학과 : "));
			//제대로 된 입력 값이 들어오기 전까지 무한 루프
			while(true) {
				yesno=inputStr("학과장 여부(y/n) : ");
				if(yesno.equals("y")||yesno.equals("Y")) {
					pp.setDean(true);
				}else if(yesno.equals("n")||yesno.equals("N"))  {
					pp.setDean(false);
				}else {
					printMsg(2);
					continue;
				}
				break;
			}
		}
		//person의 실제 타입이 StaffPerson인 경우
		if(person instanceof StaffPerson) {
			//person객체를 실제 타입인 StaffPerson으로 downcasting하여 저장
			StaffPerson stp=(StaffPerson)person;
			stp.setStaffNum(inputStr("임직원 번호 : "));
			stp.setsWork(inputStr("재직기간 : "));
			stp.setDivision(inputStr("부서 : "));
			//제대로 된 값이 들어 올 때까지 무한 루프
			while(true) {
				yesno=inputStr("정규직 여부(y/n) : ");
				if(yesno.equals("y")||yesno.equals("Y")) {
					stp.setRegular(true);
				}else if(yesno.equals("n")||yesno.equals("N")) {
					stp.setRegular(false);
				}else {
					printMsg(2);
					continue;
				}
				break;
			}
		}
	}
}

Service

registPerson(Person p) > 데이터를 실제 객체에 저장하는 메소드

package com.school.service;

import java.util.ArrayList;

import com.school.dto.Person;
import com.school.dto.ProfessorPerson;
import com.school.dto.StaffPerson;
import com.school.dto.StudentPerson;
import com.school.util.TestDataInput;
import com.school.view.SchoolView;

//데이터를 관리하는 기능을 가지는 클래스
public class SchoolService {
	//학생/교수/입직원들의 정보가 담긴 Person을 저장 할 
	//ArrayList 객체 배열 personList 생성 
	ArrayList<Person> personList=new ArrayList<>();
	//입/출력을 담당하는 SchoolView 객체 sv 생성
	SchoolView sv=new SchoolView();

	//더미 데이터 추가용 메소드(테스트용)
	public void startPs() {
		//더미 데이터를 각 객체에 저장한 TestDataInput객체 tdi 생성
		TestDataInput tdi =new TestDataInput();
		//더미 데이터를 저장하기 위해 SchoolService에서 생성한 
		//personList객체를 매개변수로 전달
		tdi.addTestData(personList);
	}

	//인적사항 목록을 전달하는 메소드
	public ArrayList<Person> getPersontList(){
		return personList;
	}

	//인적사항을 실질적으로 객체 배열 personList에 등록하는 메소드
	public boolean registPerson(Person p) {
		//객체 배열 personList에 매개변수로 받은 Person객체 p를 저장
		personList.add(p);

		//성공 여부를 반환 > DB를 사용하지 않으므로 실패하는 경우가 없음
		//true값 만을 반환
		return true;
	}

}

 

'강의 정리 > Java' 카테고리의 다른 글

JAVA_JDBC연동  (0) 2020.05.04
객체지향 실습5  (0) 2020.04.18
객체 지향 실습 4  (0) 2020.04.07
객체 지향 실습2  (0) 2020.04.01
물품 관리 프로그램(Homeminus)  (1) 2020.04.01
Comments