본문 바로가기

한화시스템 BEYOND SW캠프/TIL

[5주차] 24.02.05 월요일

Java Programming

 

package com.encore.hms.service;

import com.encore.hms.domain.EmployeeDTO;
import com.encore.hms.domain.StudentDTO;
import com.encore.hms.domain.TeacherDTO;
import com.encore.hms.domain.sup.Person;
import com.encore.hms.util.HmsType;

/*
    business logic을 가지고 있는 클래스
    1. 배열을 관리
    2. 생성한 배열에 학생, 강사, 직원 객체를 담을 것
    3. 배열의 인덱스를 이용해서 찾기, 수정, 삭제 등의 기능을 수행할 것
 */
public class HmsService {
    private Person[] perArr;
    private int idx;

    public HmsService() {

    }

    public HmsService(int size) {
        perArr = new Person[size];
    }

    // 객체 생성 후 배열에 담는 로직
    public String makePerson(HmsType num, String name, int age, String address, String common) {
        String msg = null;
        Person obj = null;

        switch (num) {
            case STU:
                obj = new StudentDTO(name, age, address, common);
                break;
            case TEA:
                obj = new TeacherDTO(name, age, address, common);
                break;
            case EMP:
                obj = new EmployeeDTO(name, age, address, common);
                break;
        }

        setArr(obj);
        return (idx - 1) + "번지에 데이터를 담았습니다.";
    }

    private void setArr(Person per) {
        perArr[idx++] = per;
    }

    public Person[] getArr() {
        return perArr;
    }

    public int getIdx() {
        return idx;
    }

    // 찾기
    public Person searchPerson(String name) {
        Person person = null;
        for (int i = 0; i < perArr.length; i++) {
            person = perArr[i];
            if (person != null) {
                if (person.getName().equals(name)) {
                    return person;
                }
            }
        }
        return person;
    }
}

 

package com.encore.hms.util;

// enum - 서로 관련있는 상수들끼리 모아 상수들을 대표할 수 있는 이름으로 타입을 정의하는 것

public enum HmsType {
    /*
        상수의 집합인 클래스(static final)
        public static final int STU = 1;
        public static final int TEA = 2;
        public static final int EMP = 3;
     */

    STU, TEA, EMP

}

 

package com.encore.hms.view;

import com.encore.hms.domain.sup.Person;
import com.encore.hms.service.HmsService;
import com.encore.hms.util.HmsType;

import java.util.Scanner;

public class HmsView {
    public static Scanner sc = new Scanner(System.in);

    // HmsView는 HmsService 와 의존성 주입(Dependency Injection)관계가 형성
    // 즉, HmsView는 HmsService의 객체 생성을 통한 접근을 필요로 하는 것

    private final HmsService service;

    public HmsView() {
        this.service = new HmsService(10);
    }

    public void mainMenu() {
        while (true) {
            System.out.println();
            System.out.println(">>>>>> HMS");
            System.out.println("1. 전체출력");
            System.out.println("2. 이름으로 검색");
            System.out.println("3. 이름으로 찾아서 수정");
            System.out.println("4. 이름으로 찾아서 삭제");
            System.out.println("5. 생성");
            System.out.println("99. 종료");
            System.out.print("Input Number : ");

            int num = sc.nextInt();
            switch (num) {
                case 1:
                    perPrint(); // 메서드 생성해야함
                    break;
                case 2:
                    search();
                    break;
                case 3:
                    update();
                    break;
                case 4:
                    remove();
                    break;
                case 5:
                    subMenu();
                    break;
                case 99:
                    System.out.println("프로그램을 종료합니다....데이터는 보관되지 않습니다....");
                    System.exit(0);
            }
        }
    }

    public void perPrint() {
        System.out.println();
        System.out.println(">>> 전체 출력 <<<");

        Person[] perArr = service.getArr();
        if (service.getIdx() == 0) {
            System.out.println();
            System.out.println(">>> 데이터가 존재하지 않습니다.");
            System.out.println();
        } else {
            for (int idx = 0; idx < perArr.length; idx++) {
                Person per = perArr[idx];
                if (per == null) {
                    break;
                }
                System.out.println(per.personInfo());
            }
            ///////// or
			/*
			for(Person per : perAry) {
				System.out.println(per.personInfo());
			}
			*/
        }
    }

    /*
        Scanner 객체를 이용해서 찾고자하는 이름을 입력받아
        존재할 경우 해당 객체의 정보를 출력하고
        존재하지 않을 경우 '정보가 존재하지 않습니다' 라는 메세지 출력
        HmsView - HmsService(searchPerson(String name))
     */
    public void search() {
        System.out.println();
        System.out.println(">>> search <<<");
        System.out.print("이름을 입력하세요 : ");
        sc.nextLine();
        String name = sc.nextLine();
        Person person = service.searchPerson(name);
        if (person == null) {
            System.out.println("정보가 존재하지 않습니다.");
        } else {
            System.out.println(person.personInfo());
        }
    }

    /*
        Scanner 객체를 이용해서 찾고자하는 이름을 입력받아
        존재할 경우 해당 객체의 학생-학번, 강사-과목, 직원-부서를 수정하고
        '정보를 수정하였습니다'라는 메세지 출력
        HmsView - HmsService(updatePerson(String name))
     */
    public void update() {

    }

    /*
        Scanner 객체를 이용해서 찾고자하는 이름을 입력받아
        존재할 경우 해당 객체를 배열에서 삭제하고
        '정보를 삭제하였습니다'라는 메세지 출력
        전체출력을 했을 때 정상적으로 출력되면 OK
        HmsView - HmsService(removePerson(String name))
     */
    public void remove() {
        
    }

    public void subMenu() {
        while (true) {
            System.out.println();
            System.out.println(">>>>>> 객체 생성을 위한 sub Menu");
            System.out.println("1. 학생");
            System.out.println("2. 강사");
            System.out.println("3. 직원");
            System.out.println("99. 상위메뉴 이동");
            System.out.print("Input Number : ");

            int num = sc.nextInt();
            switch (num) {
                case 1:
                    makePerson(num);
                    break;
                case 2:
                    makePerson(num);
                    break;
                case 3:
                    makePerson(num);
                    break;
                case 99:
                    System.out.println("상위 메뉴로 이동합니다.");
                    return;
            }
        }
    }

    public void makePerson(int num) {
        System.out.println();
        System.out.println(">>> 객체 생성 출력 <<<");

        // Scanner 이름, 나이, 주소, comm
        // HmsService - makePerson() 연결
        Scanner sc = new Scanner(System.in);
        System.out.print("이름: ");
        String name = sc.nextLine();
        System.out.print("나이: ");
        int age = sc.nextInt();
        sc.nextLine();
        System.out.print("주소: ");
        String address = sc.nextLine();

        HmsType type = HmsType.STU;
        String comm = null;
        if (num == 1) {
            System.out.print("학번: ");
            comm = sc.nextLine();
        } else if (num == 2) {
            System.out.print("과목: ");
            comm = sc.nextLine();
            type = HmsType.TEA;
        } else if (num == 3) {
            System.out.print("부서: ");
            comm = sc.nextLine();
            type = HmsType.EMP;
        }
        String msg = service.makePerson(type, name, age, address, comm);
        System.out.println(msg);
    }
}

 

import com.encore.hms.service.HmsService;
import com.encore.hms.util.HmsType;
import com.encore.hms.view.HmsView;

// 1. stu 2. tea 3. emp
// enum

public class HmsMain {
    public static void main(String[] args) {
        /*
            HmsService service = new HmsService(10);
            String msg = service.makePerson(HmsType.STU, "임정섭", 20, "서울", "1992");
            // 출력예시) 학생 | 강사 | 직원 객체를 배열에 담았습니다.
            System.out.println(msg);
            msg = service.makePerson(HmsType.TEA, "임정섭", 20, "서울", "자바");
            System.out.println(msg);
            msg = service.makePerson(HmsType.EMP, "임정섭", 20, "서울", "교육서비스팀");
            System.out.println(msg);
         */

        HmsView view = new HmsView();
        view.mainMenu();
    }
}

'한화시스템 BEYOND SW캠프 > TIL' 카테고리의 다른 글

[5주차] 24.02.07 수요일  (0) 2024.02.07
[5주차] 24.02.06 화요일  (0) 2024.02.06
[4주차] 24.02.02 금요일  (0) 2024.02.02
[4주차] 24.02.01 목요일  (0) 2024.02.01
[4주차] 24.01.31 수요일  (0) 2024.01.31