[Mini Project] Library Service : Book 관련 메서드(method for Book)

2022. 2. 26. 01:30·◈ Human Project/Mini : Library Service📚
728x90


- Library Service : Book 관련 메서드(method for Book)

1. Book 관련 주요 메서드

findBook() : 도서 데이터를 목록화하여 전체재고조회(1)와 도서번호검색(2)으로 출력하는 메서드.

 

public void findBook() { // 사서(관리자)용 기능
    int storageIndex = nextInt("1.전체재고조회 2.도서번호검색 > ", 1, 2);

    switch (storageIndex) {

    case 1:
        bookList();
        break;

    case 2:
        List<LibBook> booksInven = findLibBookListByBookID(nextInt("조회할 도서의 도서번호를 입력해주세요. > "));
        if (booksInven.size() > 0) { // 북ID(책번호)가 없을 경우
            libBookIndex();
            for (LibBook lB : booksInven) {
                System.out.print("│     " + convert(lB.getBookID() + "", 3) + "    │ ");
                System.out.print("  " + convert(lB.getId() + "", 3) + "    │ ");
                System.out.print(convertLeft(bookTitleLength(findBookByID(lB.getBookID())), 24) + " │ ");
                System.out.print(convertLeft(bookAuthorLength(findBookByID(lB.getBookID())), 20) + " │ ");
                System.out.print(convertLeft(bookPublisherLength(findBookByID(lB.getBookID())), 20) + " │   ");
                System.out.println(convert(checkRentState(findLibBookByID(lB.getId())), 4) + "   │");
                System.out.printf("───────────────────────────────────────────────────────────────────────────────────────────────────────────────%n");
            }
        } else {
            System.out.println("존재하지 않는 도서번호입니다.");
            return;
        }
        break;

    default:
        System.out.println("올바른 번호를 입력하세요.");
        break;
    } // switch
}

 

findBook() : 전체재고조회
findBook() : 도서번호검색


searchBook() : 도서를 제목(1), 저자(2), 출판사(3)로 검색하는 메서드.

@return bookShelf : 검색한 도서정보를 Book 타입의 List로 반환

 

public List<Book> searchBook() {
    int index = nextInt("1. 제목 검색 2. 저자 검색 3. 출판사 검색 > ", 1, 3);

    List<Book> bookShelf = null;

    switch (index) {

    case 1: // 제목으로 검색
        String word = nextLine("제목을 입력해주세요. > ");
        bookShelf = searchBookIf(word, index);
        break;

    case 2: // 저자로 검색
        String word2 = nextLine("저자를 입력해주세요. > ");
        bookShelf = searchBookIf(word2, index);
        break;

    case 3: // 출판사로 검색
        String word3 = nextLine("출판사를 입력해주세요. > ");
        bookShelf = searchBookIf(word3, index);
        break;

    default:
        System.out.println("올바른 번호를 입력하세요.");
        break;
    }
    return bookShelf;
}

 

searchBook() / 제목 검색
searchBook() / 저자 검색
searchBook() / 출판사 검색


regBook() : 소장도서 데이터를 등록하는 메서드. 새로운 책 추가(1) 시, Book 클래스에도 데이터가 생성된다.

 

public void regBook() { // 사서(관리자)용 기능
    int regIndex = nextInt("1.새로운 책 추가 2.기존의 책 추가 > ", 1, 2);

    switch (regIndex) {

    case 1:
        int regKey = duplBookID(nextInt("추가할 책의 도서번호 > ")); // 도서번호(bookID) 입력

        switch (regKey) {

        case 0: // 추가할 책의 번호가 이미 존재하는지 확인
            System.out.println("존재하는 도서번호입니다.");
            break;

        default:
            books.add(new Book(regKey, nextLine("제목 > ", true, false), nextLine("저자 > ", true, false),
                                nextLine("출판사 > ", true, false), nextLine("ISBN > ", false, true)));
            lBooks.add(new LibBook(lBooks.get(lBooks.size() - 1).getId() + 1, regKey));

            Book enrollBook = findBookByID(regKey); // 재고 증가
            enrollBook.setAmount(enrollBook.getAmount() + 1);
            break;
        }
        break;

    case 2:
        System.out.println("기존의 책을 추가합니다.");
        Book addBook = findBookByID(nextInt("추가할 도서의 도서번호 > "));

        if (addBook != null) {
            lBooks.add(new LibBook(lBooks.get(lBooks.size() - 1).getId() + 1, addBook.getId()));
            addBook.setAmount(addBook.getAmount() + 1);
            break;
        } else {
            System.out.println("존재하지 않는 도서번호입니다.");
            break;
        }

    default:
        System.out.println("올바른 번호를 입력하세요.");
        break;
    }
}

 

regBook() / 새로운 책 추가
regBook() / 기존의 책 추가


modifyBook() : 소장도서 데이터를 수정하는 메서드. ISBN으로 수정할 도서의 정보를 찾는다.

 

public void modifyBook() { // 사서(관리자)용 기능

    Book alterbook = findBookByIsbn(nextLine("변경할 책의 ISBN > "));

    if (alterbook == null) {
        System.out.println("존재하지 않는 ISBN입니다.");
        return;
    }
    // 수정하는 내용 등록
    alterbook.setTitle(nextLine("이름 > ", true, false));
    alterbook.setAuthor(nextLine("저자 > ", true, false));
    alterbook.setPublisher(nextLine("출판사 > ", true, false));
    alterbook.setIsbn(nextLine("ISBN > ", false, true));

    System.out.println("책이 수정되었습니다.");
}

 

modifyBook() / 도서정보수정


removeBook() : 소장도서 데이터를 삭제하는 메서드. 대여 중일 경우, 데이터 삭제는 불가하다.

 

public void removeBook() { // 사서(관리자)용 기능

    List<LibBook> scrapBooks = findLibBookListByBookID(nextInt("삭제할 책의 도서번호 > ")); // BookID로 접근하여 libBookID 검색

    if (scrapBooks.size() > 0) { // 북ID(책번호)가 없을 경우
        libBookIndex();
        for (LibBook lB : scrapBooks) {
            System.out.print("│     " + convert(lB.getBookID() + "", 3) + "    │ ");
            System.out.print("  " + convert(lB.getId() + "", 3) + "    │ ");
            System.out.print(convertLeft(bookTitleLength(findBookByID(lB.getBookID())), 24) + " │ ");
            System.out.print(convertLeft(bookAuthorLength(findBookByID(lB.getBookID())), 20) + " │ ");
            System.out.print(convertLeft(bookPublisherLength(findBookByID(lB.getBookID())), 20) + " │   ");
            System.out.println(convert(checkRentState(findLibBookByID(lB.getId())), 4) + "   │");
            System.out.printf("───────────────────────────────────────────────────────────────────────────────────────────────────────────────%n");
        }

        int scrapKey = nextInt("삭제할 책의 소장번호 > ");

        if (findLibBookByID(scrapKey) == null) {
            System.out.println("소장번호를 확인해주세요.");
        }
        else if (findLibBookByID(scrapKey) != null && findLibBookByID(scrapKey).isRent() == false) {

            Book disuseBook = findBookByLibBookID(scrapKey); // 재고 감소
            disuseBook.setAmount(disuseBook.getAmount() - 1);

            removeRents(scrapKey);

            lBooks.remove(findLibBookIndexBy(scrapKey)); // 상단에 출력된 libBookID 중 선택하여 삭제
            System.out.println("책이 삭제되었습니다.");

        } else if (findLibBookByID(scrapKey).isRent() == true) {
            System.out.println("대여 중인 도서입니다.");
        }

    } else {
        System.out.println("존재하지 않는 도서번호입니다.");
    }
}

 

removeBook() / 도서정보삭제


searchList(List<Book> bookShelf) : searchBook()에서 반환 받은 Book 타입의 List를 도서목록으로 출력하는 메서드.

@param bookShelf : searchBook()에서 반환 받은 List 형식의 도서목록

 

public void searchList(List<Book> bookShelf) { // 이용자 기능
    if (bookShelf.size() > 0) {
        bookIndex();
        for (Book b : bookShelf) {
            System.out.print("│     " + convert(b.getId() + "", 3) + "    │ ");
            System.out.print(convertLeft(bookTitleLength(b), 24) + " │ ");
            System.out.print(convertLeft(bookAuthorLength(b), 20) + " │ ");
            System.out.print(convertLeft(bookPublisherLength(b), 20) + " │ ");
            System.out.print(convertLeft(b.getIsbn(), 10) + " │  ");
            System.out.println(convert(b.getAmount() + "", 2) + "권  │");
            System.out.println("────────────────────────────────────────────────────────────────────────────────────────────────────────────────");
        }
    }
}

 

searchList(List<Book> bookShelf)


2. Book 관련 보조 메서드

bookList() : 도서관에 등록되어 있는 도서의 목록을 보여주는 메서드. 재고 확인 가능.

 

private void bookList() {
    bookIndex();
    for (Book b : books) {
        System.out.print("│     " + convert(b.getId() + "", 3) + "    │ ");
        System.out.print(convertLeft(bookTitleLength(b), 24) + " │ ");
        System.out.print(convertLeft(bookAuthorLength(b), 20) + " │ ");
        System.out.print(convertLeft(bookPublisherLength(b), 20) + " │ ");
        System.out.print(convertLeft(b.getIsbn(), 10) + " │  ");
        System.out.println(convert(b.getAmount() + "", 2) + "권  │");
        System.out.println("────────────────────────────────────────────────────────────────────────────────────────────────────────────────");
    }
}

duplBookID(int bookID) : 신규 도서 등록 시, 중복된 도서번호가 있는지 확인하는 메서드. 해당 도서번호가 존재할 경우, 0을 반환한다.

@param bookID : 확인할 도서번호(Book 클래스의 id)
@return bookID : 중복이 없을 경우, 도서번호 반환. 중복이 있을 경우, 0 반환

 

private int duplBookID(int bookID) {
    for (Book b : books) {
        if (bookID == b.getId()) {
            bookID = 0;
            break;
        }
    }
    return bookID;
}

removeRents(int scrapKey) : 소장도서 삭제 시, 해당 도서의 대여기록을 삭제해주는 메서드.

@param scrapKey : 삭제하려는 소장도서 번호(LibBook 클래스의 id)

 

private void removeRents(int scrapKey) {
    for (int i = 0, cnt = 0; i < rents.size() - cnt; i++) {
        if (rents.get(i).getLibBookID() == scrapKey) {
            rents.remove(i);
            cnt++;
        }
    }
}

transWord(String s) : 문자의 공백을 제거하고, 영문자를 소문자로 변경하는 메서드.

@param s : 검색할 내용의 문자열
@return s : 공백 제거, 영문자는 소문자로 변경

 

private String transWord(String s) {
    s = s.toLowerCase().replaceAll(" ", "");
    return s;
}

findKindBy(String keyword, int kind) : 기존 도서목록 중 검색내용이 도서정보(제목, 저자, 출판사) 안에 포함된 도서를 찾아주는 메서드.

@param keyword : 검색할 내용의 문자열
@param kind : 검색방식(1.제목, 2.저자, 3.출판사)
@return books : 검색내용과 일치한 도서들을 Book 타입의 List 형식으로 반환

 

private List<Book> findKindBy(String keyword, int kind) {
    List<Book> books = new ArrayList<Book>(); // 검색관리를 위한 List생성
    keyword = transWord(keyword); // 검색내용

    for (Book b : this.books) {

        switch (kind) { // 기존 도서목록의 제목과 일치하는 것이 있는지 확인

        case 1: // 제목으로 탐색
            if (transWord(b.getTitle()).contains(keyword)) {
                books.add(b);
            }
            break;

        case 2: // 저자로 탐색
            if (transWord(b.getAuthor()).contains(keyword)) {
                books.add(b);
            }
            break;

        case 3: // 출판사로 탐색
            if (transWord(b.getPublisher()).contains(keyword)) {
                books.add(b);
            }
            break;

        default:
            break;
        }
    }
    return books;
}

searchBookIf(String word, int index) : 검색한 도서의 소장 여부를 확인하는 메서드.

@param word : 검색할 내용의 문자열
@param index : 검색방식(1.제목, 2.저자, 3.출판사)
@return 해당 도서가 존재할 경우, List 형식의 도서목록 반환

 

private List<Book> searchBookIf(String word, int index) { // 소장 여부 확인
    List<Book> bookShelf = findKindBy(word, index);

    if (bookShelf.isEmpty()) {
        System.out.println("소장되지 않은 도서입니다.");
    }
    return bookShelf;
}
728x90
'◈ Human Project/Mini : Library Service📚' 카테고리의 다른 글
  • [Mini Project] Library Service : Rent 관련 메서드(Method for Rent)
  • [Mini Project] Library Service : User 관련 메서드(method for User)
  • [Mini Project] Library Service : 도서대여 데이터(domain.Rent)
  • [Mini Project] Library Service : 계정 데이터(domain.User)
예르미(yermi)
예르미(yermi)
끊임없이 제 자신을 계발하는 개발자입니다👨🏻‍💻
  • 예르미(yermi)
    예르미의 코딩노트
    예르미(yermi)
  • 전체
    오늘
    어제
    • 분류 전체보기 (937)
      • ◎ Java (133)
        • Java☕ (93)
        • JSP📋 (26)
        • Applet🧳 (6)
        • Interview👨🏻‍🏫 (8)
      • ◎ JavaScript (48)
        • JavaScript🦎 (25)
        • jQuery🌊 (8)
        • React🌐 (2)
        • Vue.js🔰 (6)
        • Node.js🫒 (3)
        • Google App Script🐑 (4)
      • ◎ HTML5+CSS3 (17)
        • HTML5📝 (8)
        • CSS3🎨 (9)
      • ──────────── (0)
      • ▣ Framework (67)
        • Spring🍃 (36)
        • Spring Boot🍀 (12)
        • Bootstrap💜 (3)
        • Selenium🌕 (6)
        • MyBatis🐣 (10)
      • ▣ Tools (47)
        • API🎯 (18)
        • Library🎲 (15)
        • JitPack🚀 (3)
        • Jenkins👨🏻 (7)
        • Thymeleaf🌿 (4)
      • ▣ Server (32)
        • Apache Tomcat🐱 (14)
        • Apache HTTP Server🛡️ (1)
        • Nginx🧶 (7)
        • OracleXE💿 (4)
        • VisualSVN📡 (4)
      • ▣ OS : 운영체제 (18)
        • cmd : 명령프롬프트💻 (10)
        • Linux🐧 (8)
      • ▣ SQL : Database (56)
        • Oracle SQL🏮 (26)
        • PL SQL💾 (9)
        • MySQL🐬 (6)
        • MariaDB🦦 (6)
        • H2 Database🔠 (3)
        • SQL 실전문제🐌 (6)
      • ────────── (0)
      • ◈ Human Project (86)
        • Mini : Library Service📚 (15)
        • 화면 설계 [HTML]🐯 (10)
        • 서버 프로그램 구현🦁 (15)
        • Team : 여수어때🛫 (19)
        • Custom : Student🏫 (9)
        • Custom : Board📖 (18)
      • ◈ Yermi Project (40)
        • 조사모아(Josa-moa)📬 (5)
        • Riddle-Game🧩 (6)
        • 맛있을 지도🍚 (2)
        • 어디 가! 박대리!🙋🏻‍♂️ (5)
        • 조크베어🐻‍❄️ (4)
        • Looks Like Thirty🦉 (2)
        • Toy Project💎 (12)
        • 오픈소스 파헤치기🪐 (4)
      • ◈ Refactoring (15)
        • Mini : Library Service📚 (8)
        • 서버 프로그램 구현🦁 (1)
        • Team : 여수어때🛫 (0)
        • 쿼리 튜닝일지🔧 (6)
      • ◈ Coding Test (89)
        • 백준(BOJ)👨🏻‍💻 (70)
        • 프로그래머스😎 (2)
        • 코드트리🌳 (7)
        • 알고리즘(Algorithm)🎡 (10)
      • ◈ Study (102)
        • 기초튼튼 개발지식🥔 (25)
        • HTTP 웹 지식💡 (4)
        • 클린코드(Clean Code)🩺 (1)
        • 디자인패턴(GoF)🥞 (12)
        • 다이어그램(Diagram)📈 (4)
        • 파이썬(Python)🐍 (16)
        • 에러노트(Error Note)🧱 (34)
        • 웹 보안(Web Security)🔐 (6)
      • ◈ 공부모임 (39)
        • 혼공학습단⏰ (18)
        • 코드트리 챌린지👊🏻 (2)
        • 개발도서 100독👟 (8)
        • 나는 리뷰어다🌾 (11)
      • ◈ 자격증 공부 (37)
        • 정보처리기사🔱 (16)
        • 정보처리산업기사🔅 (9)
        • 컴퓨터활용능력 1급📼 (12)
      • ─────────── (0)
      • ◐ 기타 (113)
        • 알아두면 좋은 팁(tip)✨ (46)
        • 개발자의 일상🎈 (44)
        • 개발도서 서평🔍 (10)
        • 개발관련 세미나🎤 (2)
        • 블로그 꾸미기🎀 (9)
        • 사도신경 프로젝트🎚️ (2)
  • 인기 글

  • 최근 댓글

  • 태그

    코딩 테스트
    백준
    꿀팁
    CSS
    백준 티어
    spring
    SQL
    일상
    Project
    자바스크립트
    Error Note
    Oracle
    BOJ
    javascript
    jsp
    Database
    html
    Java
    프로그래밍
    코딩
  • 250x250
  • hELLO· Designed By정상우.v4.10.3
예르미(yermi)
[Mini Project] Library Service : Book 관련 메서드(method for Book)
상단으로

티스토리툴바