[JAVA] 도서관 관리 프로그램

Yeonbi_Kim·2024년 7월 4일
post-thumbnail

전체 프로그램 개요

이 프로그램은 도서관 관리 프로그램이다.
사용자는 책을 추가하고, 가장 오래된 책을 삭제하고, 도서 목록을 출력하는 기능을 사용할 수 있다. LibraryMain 클래스는 프로그램의 시작점이며, Library 클래스는 도서관의 기능을 구현한다.

LibraryMain.java

package nested;

import java.util.Scanner;
//사용자 입력을 받기 위해 Scanner 클래스를 가져온다.

public class LibraryMain {
    public static void main(String[] args) {
    //main 메서드는 프로그램의 시작점.
    
        Library lib = new Library();
        // Library 객체를 생성.
        Scanner scanner = new Scanner(System.in);
        // 사용자 입력을 받기 위한 Scanner 객체를 생성.

        System.out.println("=== 도서 관리 프로그램에 오신 것을 환영 합니다. ===");
        while (true) {
        //무한 루프를 시작.
            System.out.println("=== 원하는 기능을 선택 하세요. ===");
        //기능 선택 메시지를 출력.
            System.out.print("1. 도서 추가 / 2. 가장 오래된 도서 삭제 / 3. 도서 목록 출력 / 4.프로그램 종료 :");
            // 기능 선택 메시지를 출력.
            int choice =scanner.nextInt();
            // 사용자 입력을 정수로 받는다.
            scanner.nextLine();
            // 다음 입력을 위해 개행 문자를 제거.

            if (choice == 1) {
                lib.addBook();
                // 사용자가 1을 입력하면 도서를 추가.
            } else if (choice == 2) {
                lib.removeBook();
               // 사용자가 2를 입력하면 도서 삭제.
            }  else if (choice == 3) {
                lib.showBooks();
               // 사용자가 3을 입력하면 도서 목록 출력.
            } else {
                System.out.println("===프로그램을 종료 합니다===");
                return;
              // 프로그램을 종료.  
          
            }
        }
    }
}

##Library.java

package nested;


import java.util.Scanner;
//사용자 입력을 받기 위해 Scanner 클래스를 가져온다.

public class Library {

    Book[] books;  // Book 객체를 저장할 배열을 선언.
    int bookCount; // 현재 저장된 책의 수를 나타내는 변수를 선언.
    static final int LIBRARY_SIZE = 4; //도서관의 최대 크기를 상수로 정의.

    public Library() {
    //Library 클래스의 생성자이다.
        this.books = new Book[LIBRARY_SIZE];
    //Book 배열을 초기화.
        bookCount = 0;
    // 초기 책의 수를 0으로 설정.
    }

    public void addBook() {
    //도서를 추가하는 메서드.
        if (bookCount == LIBRARY_SIZE) {
        //도서관이 가득 찼다면
            System.out.println("=== 더 이상 책을 보관할 수 없습니다. ===");
        // 더 이상 책을 보관할 수 없습니다.를 알림
            return;
        //메서드를 종료.
        }
        Scanner scanner = new Scanner(System.in);
        // 사용자 입력을 받기 위한 Scanner 객체를 생성.
        System.out.print("책 제목을 입력 하세요 : ");
        String title = scanner.nextLine();
        
        System.out.print("책 저자를 입력 하세요");
        String author = scanner.nextLine();

        books[bookCount++] = new Book(title, author);
        //새로운 책을 배열에 추가하고, 책 수를 증가 시킴.

        System.out.println("보관 된 책의 수는 : " + bookCount);
        System.out.println("=== 책 보관 완료 ===");
    }

    public void removeBook() {
    // 가장 오래된 도서를 삭제하는 메서드.
        if (bookCount == 0){
        //도서관이 비어있다면
            System.out.println("*** 보관 된 책이 존재하지 않습니다 ***");
        //삭제할 책이 없음을 알립니다.
            return;
        // 메서드를 종료
        }
        for (int i = 1; i < bookCount; i++) {
        // 배열의 첫 번째 책을 삭제하고, 나머지 책을 앞으로 이동시킨다.
            books[i - 1] = books[i];
        // 배열의 각 책을 앞쪽으로 이동.
        }

        books[--bookCount] = null;
        // 마지막 책을 null로 설정하고, 책 수를 감소시킴.

        System.out.println("*** 가장 오래된 책이 삭제되었습니다. ***");

    }
    public void showBooks(){
       // 도서 목록을 출력하는 메서드.
        System.out.println("=== 책 목록 출력 ===");
        System.out.println("*** 총 보관 책의 수는 : " + bookCount +" 입니다.***");
        for (int i = 0; i < bookCount; i++) {
        // 현재 보관된 모든 책을 출력.
            System.out.println((i + 1) + ". 제목 : " + books[i].title + " / 저자 : " + books[i].author);

        }
    }
    static class Book {
       // Library클래스 내부에 Book클래스를 정의.
        String title; //책의 제목을 저장할 변수.
        String author; // 책의 저자를 저장할 변수.

        public Book(String title, String author) {
        //Book 클래스의 생성자.
            this.title = title; // 책 제목을 초기화.
            this.author = author; // 책 저자를 초기화.
        }
    }
}

개념 설명

•	패키지 (package): 관련된 클래스들을 그룹화하는 방법으로, 네임스페이스를 제공하여 클래스 이름 충돌을 방지합니다.
•	클래스 (class): 객체 지향 프로그래밍의 기본 단위로, 객체의 설계도입니다. 여기서는 Library와 Book 클래스가 정의되어 있습니다.
•	객체 (object): 클래스의 인스턴스로, 클래스에서 정의된 구조와 행동을 가집니다.
•	메서드 (method): 객체의 동작을 정의하는 함수입니다.
•	배열 (array): 같은 타입의 여러 값을 저장할 수 있는 자료구조입니다.
•	상수 (constant): 프로그램 내에서 변경되지 않는 값을 정의하는 데 사용됩니다.
•	Scanner: 표준 입력을 통해 사용자로부터 입력을 받을 수 있게 해주는 클래스입니다.

활용 방법

•	메서드 호출: lib.addBook(), lib.removeBook(), lib.showBooks() 등을 통해 Library 객체의 기능을 사용할 수 있습니다.
•	배열 관리: 책을 추가하고 삭제할 때 배열을 적절히 관리하는 방법을 보여줍니다.
•	입출력: Scanner를 사용하여 사용자로부터 입력을 받고, System.out.println을 사용하여 출력을 처리합니다.

유의점

1.	배열 크기 제한:
•	배열 크기를 고정된 값으로 정의했기 때문에, 더 많은 책을 저장하려면 다른 자료구조(예: ArrayList)를 사용하는 것이 좋습니다.
2.	입력 유효성 검사:
•	사용자의 입력에 대한 유효성 검사를 추가하여 프로그램의 안정성을 높일 수 있습니다. 예를 들어, 숫자가 아닌 값을 입력했을 때의 예외 처리 등이 필요합니다.
3.	메모리 관리:
•	books 배열에서 책을 삭제할 때 메모리를 해제하는 방식으로 null을 할당하고 있습니다. 이는 작은 프로그램에서는 문제가 없지만, 큰 프로그램에서는 더 신경 써야 합니다.

이 코드는 기본적인 도서 관리 프로그램의 예제로, 객체 지향 프로그래밍의 개념과 자바의 기본 문법을 익히는 데 도움이 된다.

0개의 댓글