Java 응용 | class 활용 도서관 CRUD

Dalyume·2026년 7월 30일

Java 응용

목록 보기
10/15
post-thumbnail

도서관 책을 추가, 조회, 수정, 삭제를 할 수 있는 도서관 시스템을 만들었다.

이번에 3개의 클래스를 만들어서 간단하게 구현해보았다. 각 클래스의 역할은 다음과 같다.

Book 클래스

  • 책 한권의 데이터를 표현하는 클래스.
package com.oop12;

public class Book {
    private String title;
    private String author;
    private int totalPage;

    private Book(String title, String author) {
        this.title = title;
        this.author = author;
    }

    public Book(String title, String author, int totalPage){
        this(title, author);
        this.totalPage = totalPage;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public String getAuthor() {
        return author;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

    public void showInfo() {
        System.out.println("제목 : " + title);
        System.out.println("저자 : " + author);
        System.out.println("총 페이지 수 : " + totalPage);
    }
}

Library 클래스

  • 책 데이터를 활용한 CRUD 구현
package com.oop12;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Library {
    private List<Book> saveBookData = new ArrayList<>();
    private Scanner scan = new Scanner(System.in);

    public boolean checkMessage() {
        String check;
        while (true) {
            System.out.print(" (Y/N) : ");
            check = scan.next();
            if (check.equalsIgnoreCase("Y")) {
                return true;
            } else if (check.equalsIgnoreCase("N")) {
                return false;
            } else {
                System.out.println("Y 또는 N이 아닙니다 다시 시도해주세요.");
            }
        }

    }

    public void sampleBookAdd(String title, String author, int totalPage){
        Book book = new Book(title, author, totalPage);
        saveBookData.add(book);
    }

    public void addSampleBooks() {
        sampleBookAdd("프린세스전설", "김근호", 100);
        sampleBookAdd("무공남김이파업니다", "김지명", 300);
        sampleBookAdd("흐르는강물처럼", "파울로코엘료", 250);
        sampleBookAdd("리딩으로리드하라", "이지성", 420);
        sampleBookAdd("사피엔스", "유발하라리", 650);
    }

    public void addBook() {
        String title;
        String author;
        int totalPage;
        while(true) {
            System.out.print("추가할 제목을 입력해주세요. : ");
            title = scan.next();
            System.out.print("책의 저자를 입력해주세요. : ");
            author = scan.next();
            System.out.print("책의 총 페이지를 입력해주세요. : ");
            totalPage = scan.nextInt();

            System.out.print("추가하시겠습니까?");
            if (checkMessage()){

                Book book = new Book(title, author, totalPage);

                saveBookData.add(book);
                System.out.println("책이 " + saveBookData.size() + "번 index에 추가 되었습니다.");

                System.out.println("계속 추가하시겠습니까?");
                if (!checkMessage()){
                    break;
                }
            }else {
                break;
            }
        }

    }

    public void searchBook() {
        for (int i = 0; i < saveBookData.size(); i++) {
            System.out.printf(">>> %d번 책 정보 <<<\n", (i + 1));
            saveBookData.get(i).showInfo();
            System.out.println("======================");
        }
    }

    public void updateBookName(int choose) {
        System.out.print("수정할 제목을 입력해주세요 : ");
        String changeName = scan.next();

        System.out.print("수정하시겠습니까? ");
        if (checkMessage()) {
            System.out.println("성공적으로 수정 완료되었습니다.");
            saveBookData.get(choose - 1).setTitle(changeName);
        }else {
            System.out.println("취소되었습니다.");
        }
    }

    public void updateBookAuthor(int choose) {
        System.out.print("수정할 저자명을 입력해주세요 : ");
        String changeName = scan.next();

        System.out.print("수정하시겠습니까? ");
        if (checkMessage()) {
            System.out.println("성공적으로 수정 완료되었습니다.");
            saveBookData.get(choose - 1).setAuthor(changeName);
        }else {
            System.out.println("취소되었습니다.");
        }
    }

    public void updateBookTotalPage(int choose) {
        int changePage = 0;
        while (true) {
            System.out.print("수정할 페이지를 입력해주세요 : ");
            changePage = scan.nextInt();

            if (changePage <= 0) {
                System.out.println("세상에 0 페이지인 책이 어디있습니까 휴먼");
                continue;
            }
            break;
        }

        System.out.print("수정하시겠습니까? ");
        if (checkMessage()) {
            System.out.println("성공적으로 수정 완료되었습니다.");
            saveBookData.get(choose - 1).setTotalPage(changePage);
        }else {
            System.out.println("취소되었습니다.");
        }
    }

    public void updateBook() {
        int choose = 0;
        while (true) {
            System.out.println("수정할 책번호를 골라주세요.");
            System.out.println("====================");
            searchBook();
            System.out.println("====================");
            System.out.print("책 번호 : ");
            choose = scan.nextInt();

            if (choose <= 0 || choose > saveBookData.size()) {
                System.out.println("저장된 책목록에 없는 번호입니다.");
                continue;
            }
            break;
        }
        while (true) {
            System.out.println("1. 제목\n2. 저자\n3. 페이지 수\n4. 전체수정\n0. 취소");
            System.out.print("수정할 부분을 선택해주세요. : ");
            int menuChoose = scan.nextInt();

            if (menuChoose == 1) {
                updateBookName(choose);
            } else if (menuChoose == 2) {
                updateBookAuthor(choose);
            } else if (menuChoose == 3) {
                updateBookTotalPage(choose);
            } else if (menuChoose == 4) {
                updateBookName(choose);
                updateBookAuthor(choose);
                updateBookTotalPage(choose);
            } else if (menuChoose == 0) {
                System.out.println("이전 화면으로 돌아갑니다.");
                return;
            } else {
                System.out.println("없는 기능입니다. 다시 시도해주세요.");
                continue;
            }
            break;
        }
    }

    public void deleteBook() {
        int choose = 0;
        while (true) {
            System.out.println("삭제할 책번호를 골라주세요.");
            System.out.println("====================");
            searchBook();
            System.out.println("====================");
            System.out.print("책 번호 : ");
            choose = scan.nextInt();

            if (choose <= 0 || choose > saveBookData.size()) {
                System.out.println("저장된 책목록에 없는 번호입니다.");
                continue;
            }

            break;
        }

        System.out.print("정말로 삭제하시겠습니까?");
        if (checkMessage()) {
            System.out.println("정상적으로 삭제되었습니다.");
            saveBookData.remove(choose - 1);
        }
    }

}

Main 클래스

  • 프로그램을 시작하고, 상호작용하는 역할
package com.oop12;

import java.util.Scanner;

public class UserInterface {

    public static void main(String[] args) {
        Library library = new Library();
        Scanner scan = new Scanner(System.in);
        library.addSampleBooks();

        System.out.println("도서관에 오신걸 환영합니다.");

        while (true) {
            System.out.println("1. 책 추가\n2. 등록된 책 조회\n3. 책 정보 수정\n4. 책 삭제\n0. 프로그램 종료");
            System.out.print("원하시는 메뉴를 선택해주세요. : ");
            int menuChoose = scan.nextInt();

            if (menuChoose == 1) {
                library.addBook();
            } else if (menuChoose == 2) {
                library.searchBook();
            } else if (menuChoose == 3) {
                library.updateBook();
            } else if (menuChoose == 4) {
                library.deleteBook();
            } else if (menuChoose == 0) {
                System.out.println("프로그램을 종료합니다.");
                return;
            } else {
                System.out.println("없는 기능입니다. 다시 시도해주세요.");
            }
        }
    }
}

점점 클래스로 코드짜는게 안정화가 되어가고 있는 느낌이다.

profile
신생아 개발자

0개의 댓글