[Основы Java] Подробное объяснение системы управления библиотекой Java.
[Основы Java] Подробное объяснение системы управления библиотекой Java.

представлять

Система управления книгами — это система управления информацией о книгах.、Заимствование записей、Программная система для информации пользователя и т. д. это помогает библиотеке, книжному магазину или личному управлению и организационным книжным ресурсам,Обеспечивает удобные функции заимствования и запроса. в этом блоге,Мы подробно расскажем, как правительство использует язык программирования Java для создания простой системы управления книгами.

Функциональные требования

Прежде чем проектировать систему управления книгой, нам сначала необходимо уточнить, что должна иметь система. Вот простой список функций:

  1. добавить книга: члены руководства могут добавлять новую информацию о книге,включатьназвание книги、автор、Издатель、ISBN-номерждать。
  2. Удалить книгу:управлять Члены могутудалить Существующая информация о книге。
  3. Поиск книг: пользователи могут искать книги по ключевым словам, и система вернет список подходящих книг.
  4. Заимствование книг: пользователи могут брать книги и записывать время заимствования.
  5. Возврат книг: пользователи могут вернуть взятые напрокат книги и записать время возврата.
  6. Просмотр записей о заимствованиях: пользователи могут просматривать свои записи о заимствованиях, включая время заимствования, время возврата и т. д.
  7. пользовательуправлять:управлять Члены могутуправлять Информация о пользователе,включать添加、Удалить пользователя。
  8. Разрешения управлять: управлять участники могут устанавливать разрешения пользователей,Например, обычные пользователи и пользователи-члены.

модель данных

При разработке системы управления книгой в первую очередь необходимо рассмотреть модель данные, то есть, как хранить и управлять информацией о книгах, пользовательской информации, заимствованиях и т. д. данных. Ниже представлена ​​упрощенная модель Принципиальная схема данных:

Язык кода:javascript
копировать
Book
- ID
- Title
- Author
- Publisher
- ISBN
- Status (Available, Checked Out)
- Borrower ID (if checked out)
- Due Date (if checked out)

User
- ID
- Name
- Email
- Password
- Role (Admin, User)

BorrowRecord
- ID
- Book ID
- User ID
- Borrow Date
- Return Date

Модель данных включает в себя три основных объекта: Книга、пользователь(User)и Заимствование записей(BorrowRecord)。图书实体включать图书的基本信息и当前состояние,Пользовательские сущности включают базовую информацию и роли пользователей.,Заимствование записей实体用于Записывать图书的借阅и归还情况。

Архитектурный дизайн

Прежде чем начать писать код,Нам необходимо рассмотреть систему Архитектурный дизайн. в целом,Систему управления книгами можно разделить на следующие модули:

  1. Модуль управления пользователями: отвечает за регистрацию пользователей.、Авторизоватьсяи权限управлять。
  2. Модуль управления библиотекой: отвечает за добавление книг.、удалить、查询исостояниеуправлять。
  3. Модуль управления заимствованиями:负责借阅и Возврат книг,а такжерекордное заимствование Записывать。
  4. Модуль хранения данные: отвечает за хранение данных в базе. данные или файл, и из базы Поиск данных или файлов для данных.

Далее мы будем реализовывать эти модули шаг за шагом.

Среда и инструменты разработки

Прежде чем начать писать код,Убедитесь, что у вас наготове следующие советы:

  • Инструменты разработки Java (такие как Eclipse, IntelliJ IDEA или VS Code)
  • база данные(Вы можете выбрать тип связи база данных, таких как MySQL или SQLite, также можно использовать файловое хранилище)
  • Библиотека подключения данных Javaбаза (например, JDBC)
  • Инструменты сборки проекта (например, Maven или Gradle)

Модуль управления пользователями

Класс пользовательской сущности

первый,Создадим Класс пользовательской сущности,используется для представления системы Информация о пользователе。пользователь实体включатьID、имя пользователя、пароль、Электронная почта и роли.

Язык кода:javascript
копировать
public class User {
    private int id;
    private String username;
    private String password;
    private String email;
    private UserRole role;

    // Конструктор, методы получения и установки
}

UserRoleэто тип перечисления,Представляет роль пользователя,Можно определить как управляющих участников и обычных пользователей.

Язык кода:javascript
копировать
public enum UserRole {
    ADMIN,
    USER
}
Объект доступа к пользовательским данным (DAO)

Далее создайте объект доступа к пользовательским данным (DAO), используется с базой данные или файлы для взаимодействия с данными пользователя. Мы будем использовать JDBC (Java Database Connectivity) для подключения к базе данных и выполнения операций с базой данных.

Сначала нам нужно установить соединение с базой данных. Предполагая, что мы выбрали базу данных MySQL, ниже приведен пример кода для установления соединения с базой данных:

Язык кода:javascript
копировать
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DatabaseConnection {
    private static final String URL = "jdbc:mysql://localhost:3306/library";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "password";

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USERNAME, PASSWORD);
    }
}

В приведенном выше примере мы использовали JDBC для подключения к базе данных MySQL с именем «library», используя имя пользователя «root» и пароль «password». Пожалуйста, внесите изменения в соответствии с фактической конфигурацией вашей базы данных.

Затем создайте пользовательский класс DAO для выполнения операций с базой данных, связанных с пользователем, включая добавление, удаление пользователей, управление запросами и разрешениями. Вот простой пример пользовательского DAO:

Язык кода:javascript
копировать
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class UserDao {
    private Connection connection;

    public UserDao() {
        try {
            connection = DatabaseConnection.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // Добавить пользователя
    public void addUser(User user) {
        String sql = "INSERT INTO users (username, password, email, role) VALUES (?, ?, ?, ?)";
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setString(1, user.getUsername());
            preparedStatement.setString(2, user.getPassword());
            preparedStatement.setString(3, user.getEmail());
            preparedStatement.setString(4, user.getRole().toString());

            preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // Удалить пользователя
    public void deleteUser(int userId) {
        String sql = "DELETE FROM users WHERE id = ?";
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setInt(1, userId);
            preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // Запрос пользователей по имени пользователя
    public User getUserByUsername(String username) {
        String sql = "SELECT * FROM users WHERE username = ?";
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setString(1, username);
            ResultSet resultSet = preparedStatement.executeQuery();

            if (resultSet.next()) {
                return extractUserFromResultSet(resultSet);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    // Опросить всех пользователей
    public List<User> getAllUsers() {
        List<User> userList = new ArrayList<>();
        String sql = "SELECT * FROM users";
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            ResultSet resultSet = preparedStatement.executeQuery();

            while (resultSet.next()) {
                userList.add(extractUserFromResultSet(resultSet));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return userList;
    }

    // Извлечение информации о пользователе из ResultSet
    private User extractUserFromResultSet(ResultSet resultSet) throws SQLException {
        User user = new User();
        user.setId(resultSet.getInt("id"));
        user.setUsername(resultSet.getString("username"));
        user.setPassword(resultSet.getString("password"));
        user.setEmail(resultSet.getString("email"));
        user.setRole(UserRole.valueOf(resultSet.getString("role")));
        return user;
    }
}

В приведенном выше примере,Мы создалиUserDaoдобрый,Этот класс содержит Добавить пользователя、Удалить пользователя、查询пользовательи Опросить всех пользователейметод。Эти методы используют подготовленные операторы(PreparedStatement)выполнитьSQL查询и更新действовать,и сопоставьте результаты запроса сUserобъект。

Класс обслуживания пользователей

Класс обслуживания пользователейдля обработки Модуль управления Бизнес-логика для пользователей. Он может вызвать пользовательскую DAO для выполнения базы. данныхдействовать,Например Добавить пользователя、Удалить пользователя、Запрос пользователей и т. д.

Вот простой пример Класса обслуживания пользователей:

Язык кода:javascript
копировать
public class UserService {
    private UserDao userDao;

    public UserService() {
        userDao = new UserDao();
    }

    // Зарегистрированный пользователь
    public void registerUser(String username, String password, String email, UserRole role) {
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        user.setEmail(email);
        user.setRole(role);

        userDao.addUser(user);
    }

    // Удалить пользователя
    public void deleteUser(int userId) {
        userDao.deleteUser(userId);
    }

    // Запрос пользователей по имени пользователя
    public User getUserByUsername(String username) {
        return userDao.getUserByUsername(username);
    }

    // Опросить всех пользователей
    public List<User> getAllUsers() {
        return userDao.getAllUsers();
    }
}

В приведенном выше примере,UserServiceдобрый提供了Зарегистрированный пользователь、Удалить пользователя、查询пользовательи Опросить всех пользователейметод,Это делается путем вызоваUserDaoреализовать эти функции。

Модуль управления библиотекой

Следующий,Давайте создадим Модуль управления библиотекой, включая книжную организацию, книжную ДАО и Забронировать услуги。

Забронировать класс сущности

первый,Создайте Забронировать класс сущности,используется для представления системы图书信息。图书实体включатьID、название книги、автор、Издатель、ISBN-номер、состояние、Атрибуты, такие как идентификатор заемщика и дата возврата.

Язык кода:javascript
копировать
public class Book {
    private int id;
    private String title;
    private String author;
    private String publisher;
    private String isbn;
    private BookStatus status;
    private int borrowerId;
    private LocalDate dueDate;

    // Конструктор, методы получения и установки
}

BookStatusэто тип перечисления,Указывает статус книги,Могут быть определены как «доступные для заимствования» и «данные взаймы».

Язык кода:javascript
копировать
public enum BookStatus {
    AVAILABLE,
    CHECKED_OUT
}
Объект доступа к данным книги (DAO)

Далее создайте объект доступа к данным книги (DAO), используемый для создания базы данных, связанной с книгами. данныхдействовать,включатьдобавить книгу、Удалить книгу、Поиск книги Обновить статус книги。

Вот простой пример книжного DAO:

Язык кода:javascript
копировать
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class BookDao {
    private Connection connection;

    public BookDao() {
        try {
            connection = DatabaseConnection.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // добавить книгу
    public void addBook(Book book) {
        String sql = "INSERT INTO books (title, author, publisher, isbn, status, borrower_id, due_date) " +
                     "VALUES (?, ?, ?, ?, ?, ?, ?)";
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setString(1, book.getTitle());
            preparedStatement.setString(2, book.getAuthor());
            preparedStatement.setString(3, book.getPublisher());
            preparedStatement.setString(4, book.getIsbn());
            preparedStatement.setString(5, book.getStatus().toString());
            preparedStatement.setInt(6, book.getBorrowerId());
            preparedStatement.setDate(7, Date.valueOf(book.getDueDate()));

            preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // Удалить книгу
    public void deleteBook(int bookId) {
        String sql = "DELETE FROM books WHERE id = ?";
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setInt(1, bookId);
            preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // Запрос книг по идентификатору
    public Book getBookById(int bookId) {
        String sql = "SELECT * FROM books WHERE id = ?";
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setInt(1, bookId);
            ResultSet resultSet = preparedStatement.executeQuery();

            if (resultSet.next()) {
                return extractBookFromResultSet(resultSet);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    // Искать все книги
    public List<Book> getAllBooks() {
        List<Book> bookList = new ArrayList<>();
        String sql = "SELECT * FROM books";
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            ResultSet resultSet = preparedStatement.executeQuery();

            while (resultSet.next()) {
                bookList.add(extractBookFromResultSet(resultSet));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return bookList;
    }

    // Обновить статус книги
    public void updateBookStatus(int bookId, BookStatus status, int borrowerId, LocalDate dueDate) {
        String sql = "UPDATE books SET status = ?, borrower_id = ?, due_date = ? WHERE id = ?";
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setString(1, status.toString());
            preparedStatement.setInt(2, borrowerId);
            preparedStatement.setDate(3, Date.valueOf(dueDate));
            preparedStatement.setInt(4, bookId);
            preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // Извлечь информацию о книге из ResultSet
    private Book extractBookFromResultSet(ResultSet resultSet) throws SQLException {
        Book book = new Book();
        book.setId(resultSet.getInt("id"));
        book.setTitle(resultSet.getString("title"));
        book.setAuthor(resultSet.getString("author"));
        book.setPublisher(resultSet.getString("publisher"));
        book.setIsbn(resultSet.getString("isbn"));
        book.setStatus(BookStatus.valueOf(resultSet.getString("status")));
        book.setBorrowerId(resultSet.getInt("borrower_id"));
        book.setDueDate(resultSet.getDate("due_date").toLocalDate());
        return book;
    }
}

В приведенном выше примере,Мы создалиBookDaoдобрый,该добрый包含了добавить книгу、Удалить книгу、Поиск книг、Обновить статус книгии Искать все книгиметод。Эти методы используют подготовленные операторы(PreparedStatement)выполнитьSQL查询и更新действовать,и сопоставьте результаты запроса сBookобъект。

Забронировать услуги

Забронировать услуги используется для обработки Модуль управления Бизнес-логика библиотеки. Он может вызвать книгу DAO для выполнения базы. данныхдействовать,Напримердобавить книгу、Удалить книгу、Поиск книгждать。

Вот простой пример Забронировать услуги:

Язык кода:javascript
копировать
import java.util.List;

public class BookService {
    private BookDao bookDao;

    public BookService() {
        bookDao = new BookDao();
    }

    // добавить книгу
    public void addBook(String title, String author, String publisher, String isbn) {
        Book book = new Book();
        book.setTitle(title);
        book.setAuthor(author);
        book.setPublisher(publisher);
        book.setIsbn(isbn);
        book.setStatus(BookStatus.AVAILABLE); // Доступно для заимствования по умолчанию

        bookDao.addBook(book);
    }

    // Удалить книгу
    public void deleteBook(int bookId) {
        bookDao.deleteBook(bookId);
    }

    // Запрос книг по идентификатору
    public Book getBookById(int bookId) {
        return bookDao.getBookById(bookId);
    }

    // Искать все книги
    public List<Book> getAllBooks() {
        return bookDao.getAllBooks();
    }

    // Взять книги напрокат
    public void borrowBook(int bookId, int userId, LocalDate dueDate) {
        Book book = bookDao.getBookById(bookId);
        if (book.getStatus() == BookStatus.AVAILABLE) {
            book.setStatus(BookStatus.CHECKED_OUT);
            book.setBorrowerId(userId);
            book.setDueDate(dueDate);
            bookDao.updateBookStatus(bookId, book.getStatus(), book.getBorrowerId(), book.getDueDate());
        }
    }

    // Возврат книг
    public void returnBook(int bookId) {
        Book book = bookDao.getBookById(bookId);
        if (book.getStatus() == BookStatus.CHECKED_OUT) {
            book.setStatus(BookStatus.AVAILABLE);
            book.setBorrowerId(0);
            book.setDueDate(null);
            bookDao.updateBookStatus(bookId, book.getStatus(), book.getBorrowerId(), book.getDueDate());
        }
    }
}

В приведенном выше примере,BookServiceдобрый提供了добавить книгу、Удалить книгу、Поиск книг、Взять книги напрокати Возврат книгметод,Это делается путем вызоваBookDaoреализовать эти функции。

Модуль управления заимствованиями

Модуль управления заимствованиями负责处理пользователь借阅и Возврат книг的действовать,ирекордное заимствование Записывать。

Заимствование класса сущности записи

первый,Создайте Заимствование класса сущности записи,用于表示пользователь的Заимствование записей。Заимствование записей实体включатьID、Идентификатор книги、ID пользователя、Дата займа и дата возврата.

Язык кода:javascript
копировать
public class BorrowRecord {
    private int id;
    private int bookId;
    private int userId;
    private LocalDate borrowDate;
    private LocalDate returnDate;

    // Конструктор, методы получения и установки
}
Заимствование объекта доступа к данным записи (DAO)

Следующий,Создайте Заимствование объекта доступа к данным записи (DAO), используемый для выполнения транзакций, связанных с заимствованиями. данныхдействовать,включатьрекордное заимствованиеи Возврат книг。

Ниже приведен простой пример DAO записи заимствования:

Язык кода:javascript
копировать
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class BorrowRecordDao {
    private Connection connection;

    public BorrowRecordDao() {
        try {
            connection = DatabaseConnection.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // рекордное заимствование
    public void borrowBook(int bookId, int userId, LocalDate borrowDate) {
        String sql = "INSERT INTO borrow_records (book_id, user_id, borrow_date) VALUES (?, ?, ?)";
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setInt(1, bookId);
            preparedStatement.setInt(2, userId);
            preparedStatement.setDate(3, Date.valueOf(borrowDate));

            preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // рекордный возврат
    public void returnBook(int bookId, LocalDate returnDate) {
        String sql = "UPDATE borrow_records SET return_date = ? WHERE book_id = ?";
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setDate(1, Date.valueOf(returnDate));
            preparedStatement.setInt(2, bookId);

            preparedStatement.executeUpdate();
        } catch (SQLException
        e) {
            e.printStackTrace();
        }
    }

    // Запрос записей о займах пользователя
    public List<BorrowRecord> getBorrowRecordsByUserId(int userId) {
        List<BorrowRecord> recordList = new ArrayList<>();
        String sql = "SELECT * FROM borrow_records WHERE user_id = ?";
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setInt(1, userId);
            ResultSet resultSet = preparedStatement.executeQuery();

            while (resultSet.next()) {
                recordList.add(extractBorrowRecordFromResultSet(resultSet));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return recordList;
    }

    // Проверьте записи о выдаче книг
    public List<BorrowRecord> getBorrowRecordsByBookId(int bookId) {
        List<BorrowRecord> recordList = new ArrayList<>();
        String sql = "SELECT * FROM borrow_records WHERE book_id = ?";
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setInt(1, bookId);
            ResultSet resultSet = preparedStatement.executeQuery();

            while (resultSet.next()) {
                recordList.add(extractBorrowRecordFromResultSet(resultSet));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return recordList;
    }

    // Извлечение информации о записи заимствования из ResultSet
    private BorrowRecord extractBorrowRecordFromResultSet(ResultSet resultSet) throws SQLException {
        BorrowRecord record = new BorrowRecord();
        record.setId(resultSet.getInt("id"));
        record.setBookId(resultSet.getInt("book_id"));
        record.setUserId(resultSet.getInt("user_id"));
        record.setBorrowDate(resultSet.getDate("borrow_date").toLocalDate());
        if (resultSet.getDate("return_date") != null) {
            record.setReturnDate(resultSet.getDate("return_date").toLocalDate());
        }
        return record;
    }
}

В приведенном выше примере,Мы создалиBorrowRecordDaoдобрый,该добрый包含了рекордное заимствованиеи Возврат книг、Запрос записей о займах пользователяа также Проверьте записи о выдаче книгждать方法。Эти методы используют подготовленные операторы(PreparedStatement)выполнитьSQL查询и更新действовать,и сопоставьте результаты запроса сBorrowRecordобъект。

Заимствование класса обслуживания записи

Заимствование класса обслуживания записи используются для обработки модуля управления Бизнес-логика заимствований. Он может вызвать запись заимствования DAO для выполнения базы. данныхдействовать,Напримеррекордное заимствованиеи Возврат книг、Запрос записей о займах пользователяа также Проверьте записи о выдаче книг。

Вот простой пример записи «Заимствование класса обслуживания»:

Язык кода:javascript
копировать
import java.util.List;

public class BorrowRecordService {
    private BorrowRecordDao borrowRecordDao;

    public BorrowRecordService() {
        borrowRecordDao = new BorrowRecordDao();
    }

    // рекордное заимствование
    public void borrowBook(int bookId, int userId, LocalDate borrowDate) {
        borrowRecordDao.borrowBook(bookId, userId, borrowDate);
    }

    // рекордный возврат
    public void returnBook(int bookId, LocalDate returnDate) {
        borrowRecordDao.returnBook(bookId, returnDate);
    }

    // Запрос записей о займах пользователя
    public List<BorrowRecord> getBorrowRecordsByUserId(int userId) {
        return borrowRecordDao.getBorrowRecordsByUserId(userId);
    }

    // Проверьте записи о выдаче книг
    public List<BorrowRecord> getBorrowRecordsByBookId(int bookId) {
        return borrowRecordDao.getBorrowRecordsByBookId(bookId);
    }
}

В приведенном выше примере,BorrowRecordServiceдобрый提供了рекордное заимствованиеи Возврат книг、Запрос записей о займах пользователяа также Проверьте записи о выдаче книгметод,Это делается путем вызоваBorrowRecordDaoреализовать эти функции。

Модуль хранения данных

Модуль хранения data отвечает за хранение данных в базе данные или файл, и из базы Поиск данных или файлов для данных. В этом примере мы использовали базу данные как способ хранения данных. Вы можете выбрать подходящий метод хранения данных в соответствии с вашими потребностями.

пользовательский интерфейс

наконец,Нам нужно создать пользовательский интерфейс, позволяющий пользователям взаимодействовать с системой управления книгами. пользовательский Интерфейс может быть интерфейсом командной строки, графическим интерфейсом или веб-интерфейсом, в зависимости от ваших потребностей и технологического стека. пользовательский интерфейс должен называться Класс обслуживания пользователей、Забронировать услугии Заимствование класса обслуживания записи来实现пользователь注册、Авторизоваться、добавить книгу、Взять книги напрокат、Возврат книгждать功能。

Вот простой пример пользовательского интерфейса командной строки:

Язык кода:javascript
копировать
import java.time.LocalDate;
import java.util.List;
import java.util.Scanner;

public class LibraryManagementSystem {
    private UserService userService;
    private BookService bookService;
    private BorrowRecordService borrowRecordService;
    private User currentUser;

    public LibraryManagementSystem() {
        userService = new UserService();
        bookService = new BookService();
        borrowRecordService = new BorrowRecordService();
    }

    public void run() {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            if (currentUser == null) {
                System.out.println("Welcome to the Library Management System!");
                System.out.println("1. Register");
                System.out.println("2. Login");
                System.out.println("3. Exit");
                System.out.print("Please select an option: ");

                int choice = scanner.nextInt();
                scanner.nextLine(); // Consume newline

                switch (choice) {
                    case 1:
                        registerUser(scanner);
                        break;
                    case 2:
                        loginUser(scanner);
                        break;
                    case 3:
                        System.out.println("Goodbye!");
                        return;
                    default:
                        System.out.println("Invalid option. Please try again.");
                        break;
                }
            } else {
                System.out.println("Welcome, " + currentUser.getUsername() + "!");
                System.out.println("1. Add Book");
                System.out.println("2. Borrow Book");
                System.out.println("3. Return Book");
                System.out.println("4. View Borrowed Books");
                System.out.println("5. Logout");
                System.out.print("Please select an option: ");

                int choice = scanner.nextInt();
                scanner.nextLine(); // Consume newline

                switch (choice) {
                    case 1:
                        addBook(scanner);
                        break;
                    case 2:
                        borrowBook(scanner);
                        break;
                    case 3:
                        returnBook(scanner);
                        break;
                    case 4:
                        viewBorrowedBooks();
                        break;
                    case 5:
                        currentUser = null;
                        System.out.println("Logged out successfully.");
                        break;
                    default:
                        System.out.println("Invalid option. Please try again.");
                        break;
                }
            }
        }
    }

    private void registerUser(Scanner scanner) {
        System.out.print("Enter username: ");
        String username = scanner.nextLine();
        System.out.print("Enter password: ");
        String password = scanner.nextLine();
        System.out.print("Enter email: ");
        String email = scanner.nextLine();
        // Assume default role is USER
        UserRole role = UserRole.USER;

        userService.registerUser(username, password, email, role);
        System.out.println("Registration successful. You can now log in.");
    }

    private void loginUser(Scanner scanner) {
        System.out.print("Enter username: ");
        String username = scanner.nextLine();
        System.out.print("Enter password: ");
        String password = scanner.nextLine();

        currentUser = userService.getUserByUsername(username);

        if (currentUser != null && currentUser.getPassword().equals(password)) {
            System.out.println("Login successful. Welcome, " + currentUser.getUsername() + "!");
        } else {
            currentUser = null;
            System.out.println("Login failed. Please check your username and password.");
        }
    }

    private void addBook(Scanner scanner) {
        System.out.print("Enter book title: ");
        String title = scanner.nextLine();
        System.out.print("Enter author: ");
        String author = scanner.nextLine();
        System.out.print("Enter publisher: ");
        String publisher = scanner.nextLine();
        System.out.print("Enter ISBN: ");
        String isbn = scanner.nextLine();

        bookService.addBook(title, author, publisher, isbn);
        System.out.println("Book added successfully.");
    }

    private void borrowBook(Scanner scanner) {
        System.out.print("Enter book ID to borrow: ");
        int bookId = scanner.nextInt();
        scanner.nextLine(); // Consume newline
        LocalDate dueDate = LocalDate.now().plusWeeks(2); // Borrow period of 2 weeks

        bookService.borrowBook(bookId, currentUser.getId(), dueDate);
        System.out.println("Book borrowed successfully.");
    }

    private void returnBook(Scanner scanner) {
        System.out.print("Enter book ID to return: ");
        int bookId = scanner.nextInt();
        scanner.nextLine(); // Consume newline

        bookService.returnBook(bookId);
        System.out.println("Book returned successfully.");
    }

    private void viewBorrowedBooks() {
        List<BorrowRecord> borrowRecords = borrowRecordService.getBorrowRecordsByUserId(currentUser.getId());
        if (borrowRecords.isEmpty()) {
            System.out.println("You have not borrowed any books.");
        } else {
            System.out.println("Your borrowed books:");
            for (BorrowRecord record : borrowRecords) {
                Book book = bookService.getBookById(record.getBookId());
                System.out.println("Book Title: " + book.getTitle());
                System.out.println("Borrow Date: " + record.getBorrowDate
() + "   Due Date: " + record.getDueDate());
                System.out.println("------------------------------------------------");
            }
        }
    }

    public static void main(String[] args) {
        LibraryManagementSystem libraryManagementSystem = new LibraryManagementSystem();
        libraryManagementSystem.run();
    }
}

существовать В приведенном выше примере,Мы создали простой пользовательский интерфейс командной строки.,允许пользователь注册、Авторизоваться、добавить книгу、Взять книги напрокат、Возврат книга также查看已借阅的图书。界面根据пользователь的Авторизоватьсясостояние Показать разные варианты。

Подвести итог

через этот блог,Мы подробно описали, как создать простую систему управления с помощью языка программирования Java. В систему входят Модуль управления пользователями, Модуль управления библиотекой и Модуль управления. заимствованиями, и соответствующая модель данные, объект доступа к данным и классы обслуживания. Кроме того, мы предоставляем простую командную строку для пользователя. интерфейс, позволяет пользователям взаимодействовать с системой.

Чтобы создать полноценную систему управления библиотекой, вам может потребоваться дальнейшее расширение и оптимизация кода, включая добавление таких функций, как обработка исключений, безопасность, оптимизация производительности и т. д. Я надеюсь, что этот блог поможет новичкам понять, как использовать Java для создания базовой системы управления библиотекой, и предоставит справочную информацию для последующего обучения и разработки.

Информация об авторе Автор: Фаньи CSDN: https://techfaNY.blog.csdn.net Самородки: https://juejin.cn/user/4154386571867191

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose