JAVA 객체 지향 핵심

Book으로 연습문제 재복습

mynote6676 2025. 4. 19. 17:00
package book;

public class Books {

    //객체의 속성을 부여하자
    private String name;
    private String author;

    // 프라이빗한 객체의 초기값을 정해주자
    public Books(String name, String author) {
        this.name = name;
        this.author = author;
    }
    //이 클래스에만  사용 가능한 프라이빗을 겟을 통하여 사용할 수 있게 핮
    //이것을 사용하는 이유는 java는 객체 지향 프로그램이기에 사용한다.
    public String getName() {
        return name;
    }
    public String getAuthor() {
        return author;
    }



    public void showInfo() {
        System.out.println(">>>**책의 이름과 저자 **<<<<");
        System.out.println("name : " + name);
        System.out.println("author : " + author);

    }


}//end of class

 

 

package book;

import java.util.Scanner;

public class BookStore {
    static int basic = 6;

    //코드의 진입점
    public static void main(String[] args) {
        //스크린 도국를 불러 올 수 있게 하자.
        Scanner sc = new Scanner(System.in);
        //북의 인덱스파일을 생성해주자
        Books[] books = new Books[100];
        //TODO샘플파일이기에 실제 프로그램이 돌아갈 시 제게해주자.
        //샘플로 인덱스 파일에 생성할 객체를 생성해주자
        //샘플 파일의 순서대로 책이 저장되기 위해 저장된 책 이후 쌓일 변수를 지정해주자

        books[0] = new Books("홍길동전", "허균");
        books[1] = new Books("미움 받을 용기", "기시노");
        books[2] = new Books("노인과 바다", "허밍웨이");
        books[3] = new Books("사막에서 길을 묻지말라", "나태주");
        books[4] = new Books("모순", "양귀자");

        //책을 1. 저장 2. 모든 책 표시 3. 책 제목으로 책 찾기 4. 책 저장 기록 삭제 5. 프로그램 종료를 만드시오
        //위 프로그램은 선택시에도 순차적으로 사용하게끔 하시오 while문을 사용하자.

        // 먼저 문자열도 사능 가능한 변수를 생성해 보자.
        final String SAVE = "1";
        final String SEARCH_ALL = "2";
        final String SEARCH_BY_TITLE = "3";
        final String DELETE = "4";
        final String END = "5";

        //함수열을 생성하여 프로그램을 돌아가게하자
        //함수안에 많은 식은 가독성을 떨어 뜨리므로 메서드를 활용하자.
        //while문을 사용할 것이기에 사용 가능하게끔 한 flag를 꼽자
        boolean flag = true;

        while (flag) {
            System.out.println("메뉴 선택");
            System.out.println("1. 등록 2. 전체조회 3. 도서 검색 4.삭제 5. 종료");
            String selectedNumber = sc.nextLine();
            //방어문 기제 (1~5의 숫자를 벗어날때 다시 번호를 입력하게 설정해주자)
            if (selectedNumber.equals(SAVE)) {
                System.out.println(">>>>>저장하기<<<<<<");
                save(sc, books);
            } else if (selectedNumber.equals(SEARCH_ALL)) {
                System.out.println(">>>>>전체조회<<<<<<");
                readAll(books);
            } else if (selectedNumber.equals(SEARCH_BY_TITLE)) {
                System.out.println(">>>>>도서조회<<<<<<");
                readTitle(sc, books);
            } else if (selectedNumber.equals(DELETE)) {
                System.out.println(">>>>>도서 삭제<<<<<<");
                delete(sc, books);
            } else if (selectedNumber.equals(END)) {
                System.out.println(">>>>>프로그램을 종료합니다.<<<<<<");
                //end();
                break;
            } else {
                System.out.println("--잘못된 번호 입니다-- \n==다시 입력해주세요==");
            }


        } // end  of while
    } // end of main

    //저장
    public static void save(Scanner sc, Books[] books) {
        System.out.println("------저장-------");
        System.out.println("책 제목을 입력하세요");
        String title = sc.nextLine();
        System.out.println("저자를 입력하세요");
        String author = sc.nextLine();
        Books book = new Books(title, author);
        //방어적 코드
        if (books.length < basic) {
            System.out.println("더 이상 저장할 공간이 없습니다");
        }
        books[basic] = book;
        basic++;
    }

    //전부검색
    public static void readAll(Books[] books) {
        System.out.println("----보유 목록의 도서------");
        for (int i = 0; i < books.length; i++) {
            //방어적 코드
            if (books[i] != null) {
                System.out.println(books[i].getName() + " , " + books[i].getAuthor());
            }
        }
    }

    //도서명 검색
    public static void readTitle(Scanner sc, Books[] books) {
        System.out.println(">>>>>도서 검색<<<<<");
        System.out.println("-------찾을 실 도서의 이름을 검색해주세요------");
        String title = sc.nextLine();
        boolean findBook = false;
        for (int i = 0; i < books.length; i++) {
            if (books[i] != null) {
                if (books[i].getName().equals(title.trim())) {
                    System.out.println(books[i].getName() + " , " + books[i].getAuthor());
                    findBook = true;
                    break;
                }
            }
        }
    }

    //삭제
    public static void delete(Scanner sc, Books[] books) {
        System.out.println(">>>>>>>>>>도서 폐기<<<<<<<<<<<<");
        System.out.println("---------도서명을 기입하세요--------");
        String title = sc.nextLine();
        boolean findBook = false;
        for (int i = 0; i < books.length; i++) {
            if (books[i] != null) {
                if (books[i].getName().equals(title.trim())) {
                    System.out.println(books[i].getName() + " 폐기 되었습니다.");
                    books[i] = null;
                    findBook = true;
                    break;
                }
            }
        }
    }

}// end of class