Full-Stack 개발자가 되려는 작은 개발자의 블로그
학교 인적 관리 프로그램(SchoolPrj) 본문
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