티스토리 뷰

[주제]

- 클래스를 활용하여 배열 기반의 스택 구현하기



[중요]

- 'playerCls' 객체를 이용하여 'DTOClass'에 접근 후 멤버 변수의 값을 저장

  ※ 'playerCls'라는 가상의 껍데기만 있는 선수를 만든 후 정보(man_id ~ money)를 입력 후 저장


- 'dto'라는 배열(스택) 객체를 통해 'DTOClass'에 접근하여 배열 인덱스에 'playerCls'를 저장



[소스 코딩]

■ DTOClass.java

package sampleDao;
 
public class DTOClass {
    private int man_id;
    private String first_name;
    private String last_name;
    private String position;
    private int money;
    
    public DTOClass() {}
 
    public int getMan_id() {
        return man_id;
    }
 
    public void setMan_id(int man_id) {
        this.man_id = man_id;
    }
 
    public String getFirst_name() {
        return first_name;
    }
 
    public void setFirst_name(String first_name) {
        this.first_name = first_name;
    }
 
    public String getLast_name() {
        return last_name;
    }
 
    public void setLast_name(String last_name) {
        this.last_name = last_name;
    }
 
    public String getPosition() {
        return position;
    }
 
    public void setPosition(String position) {
        this.position = position;
    }
 
    public int getMoney() {
        return money;
    }
 
    public void setMoney(int money) {
        this.money = money;
    }
}
cs



■ DAOClass.java

package sampleDao;
 
import java.util.Scanner; 
import sampleDao.DTOClass;
 
public class DAOClass {
    Scanner sc = new Scanner(System.in);
    
    private int top;
    private final int maxSize = 2;        // 배열의 최대 개수
    private DTOClass dto[];
    
    ///// 생성자. 리스트 공간 초기화
    public DAOClass() {
        dto = new DTOClass[maxSize];
        top = -1;
    }
    
    ///// 리스트에 등록된 선수가 없는지 확인
    public boolean empty() {
        return (top == -1);
    }
    
    ///// 리스트에 선수를 더 이상 등록할 수 없는 상태인지 확인
    public boolean full() {
        return (top == maxSize-1);
    }
    
    ///// 선수 등록
    public void push() {
        if (full())
            throw new ArrayIndexOutOfBoundsException((top + 1+ ">=" + maxSize);
        
        DTOClass playerCls = new DTOClass();
        
        System.out.println("선수를 등록합니다.");
        System.out.print("번호: ");
        playerCls.setMan_id(sc.nextInt());
        
        System.out.print("이름: ");
        playerCls.setFirst_name(sc.next());
        
        System.out.print("성: ");
        playerCls.setLast_name(sc.next());
        
        System.out.print("위치: ");
        playerCls.setPosition(sc.next());
        
        System.out.print("연봉: ");
        playerCls.setMoney(sc.nextInt());
        
        dto[++top] = playerCls;
        System.out.println();
    }
    
    ///// 선수 검색
    public DTOClass peek() {
        if(empty()) 
            throw new ArrayIndexOutOfBoundsException(top);
        
        // 가장 마지막에 등록된 선수의 정보 출력
        System.out.println("번호:" + dto[top].getMan_id()
                + " 이름:" + dto[top].getFirst_name()
                + " 성:" + dto[top].getLast_name()
                + " 위치:" + dto[top].getPosition()
                + " 연봉:" + dto[top].getMoney());
        System.out.println();
        
        return dto[top];
    }
    
    ///// 선수 삭제  ※ 실제 데이터가 삭제되지 않음
    public DTOClass pop() {        
        
        // 가장 마지막에 등록된 선수의 정보 출력
        DTOClass player = peek();
        top--;
        
        return player;
    }
 
    ///// 선수의 정보 수정
    public void update() {
        System.out.print("수정할 선수 번호: ");
        
        int fPos = 0;
        int fNum = sc.nextInt();
        // 리스트에서 동일한 번호의 선수 찾기
        for (int i = 0; i < dto.length; i++) {
            if (fNum == dto[i].getMan_id()) {
                fPos = i;
                break;
            }
        }
 
        boolean endUpdate = false;
        while (!endUpdate) {
            System.out.println();
            System.out.println("번호(1), 위치(2), 연봉(3), 종료(4)");
            System.out.print("무엇을 수정 하시겠습니까?: ");
            
            while (true) {
                switch (sc.nextInt()) {
                    case 1:
                        System.out.print("새로운 번호: ");
                        dto[fPos].setMan_id(sc.nextInt());
                        break;
                
                    case 2:
                        System.out.print("새로운 위치: ");
                        dto[fPos].setPosition(sc.next());
                        break;
                    
                    case 3:
                        System.out.print("새로운 연봉: ");
                        dto[fPos].setMoney(sc.nextInt());
                        break;
                        
                    case 4:
                        System.out.println("수정을 종료합니다.");
                        endUpdate = true;
                        break;
    
                    default:
                        System.out.println("'1 or 2 or 3 or 4'를 입력해주세요.");
                        break;
                }
                break;
            }
        }
        System.out.println();
    }
    
    ///// 리스트에 등록된 모든 선수 정보 출력  ※ 리스트에선 삭제됨
    public void daoprint() {
        System.out.println();
        System.out.println("[선수 리스트]");
        
        while (top >= 0) {
            pop();
        }
    }
}
cs



■ mainClass.java

package sampleDao;
 
import java.util.Scanner;
 
public class mainClass {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        DAOClass daocls = new DAOClass();
        
        System.out.println("[선수 관리자 모드]");
        
        boolean endManager = false;
        while (!endManager) {
            System.out.println("추가(1), 삭제(2), 검색(3), 수정(4), 출력(5), 종료(6)");
            System.out.print("어느 작업을 하시겠습니까?: ");
            
            while (true) {
                switch (sc.nextInt()) {
                case 1:
                    daocls.push();
                    break;
                    
                case 2:
                    System.out.println("제명된 선수");
                    daocls.pop();
                    break;
            
                case 3:
                    System.out.println("가장 최근에 등록된 선수");
                    daocls.peek();
                    break;
                
                case 4:
                    daocls.update();
                    break;
            
                case 5:
                    daocls.daoprint();
                    break;
 
                case 6:
                    System.out.println("관리자 모드를 종료합니다");
                    endManager = true;
                    break;
                
                default:
                    System.out.println("'1 or 3 or 4 or 5'를 입력해주세요");
                    break;
                }
                break;
            }
        }
        sc.close();
    }
}
cs



■ 실행결과





■ 첨부파일

DAOClass.java


DTOClass.java


mainClass.java

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 29 30 31
글 보관함