图书管理系统

https://v.douyin.com/i8d6yMFV 这个程序是使用PyQt5构建的简单图书管理系统,用于图形用户界面 (GUI),并使用SQLite作为数据库。该系统允许用户执行与图书管理相关的各种操作,包括添加书籍、查询书籍信息、删除书籍、注册借阅者、借书、还书、修改书籍信息以及在表格中显示书籍信息。

图书管理系统

以下是程序主要组件和功能的详细说明:

  1. 数据库初始化:

    • 该程序使用SQLite创建两个表:booksborrowers,用于存储有关图书和借阅者的信息。
  2. 用户界面(UI):

    • 使用PyQt5创建了应用程序的主窗口(BookManagementSystem)。
    • UI包括输入字段、按钮和表格小部件,以与用户进行交互。
  3. UI交互的方法:

    • 实现了诸如add_bookquery_bookdelete_bookregister_borrowerborrow_bookreturn_bookmodify_bookupdate_book_tableshow_message等方法,以处理用户的操作并相应地更新UI。
  4. 与数据库的交互:

    • 该程序与SQLite数据库交互,从数据库加载和保存数据。
    • 使用load_data_from_db从数据库加载数据到程序的数据结构(书籍和借阅者列表)中。
    • 使用save_data_to_db将程序的数据保存回数据库。
  5. 事件处理:

    • 重写closeEvent方法以确保在关闭应用程序之前将数据保存到数据库。
  6. 执行:

    • 通过if __name__ == '__main__':作为独立应用程序执行。
  7. 用法:

    • 用户可以运行程序并与GUI进行交互,执行各种图书管理任务,如添加、查询、删除书籍等。
  8. 依赖关系:

    • 该程序依赖于PyQt5用于GUI组件和SQLite用于数据库。
  9. 退出处理:

    • sys.exit(app.exec_())确保用户关闭应用程序时能够进行干净的退出。

注意:该程序设计用于教育目的,可能不涵盖所有边缘情况,也可能不符合生产级应用程序的最佳实践。这是一个基本示例,用于说明如何使用PyQt5进行GUI编程以及与SQLite进行数据库交互。

注意:以下代码是图书信息管理系统代码非以上程序代码

import sys
import json
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout, QMessageBox, QTableWidget, QTableWidgetItem, QFormLayout, QComboBox, QDialog, QDialogButtonBox


class BookDialog(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setWindowTitle("图书信息输入")
        self.form_layout = QVBoxLayout(self)

        self.login_label = QLabel("登录号:")
        self.login_input = QLineEdit(self)

        self.title_label = QLabel("书名:")
        self.title_input = QLineEdit(self)

        self.author_label = QLabel("作者名:")
        self.author_input = QLineEdit(self)

        self.category_label = QLabel("分类号:")
        self.category_input = QLineEdit(self)

        self.publisher_label = QLabel("出版单位:")
        self.publisher_input = QLineEdit(self)

        self.publish_date_label = QLabel("出版时间:")
        self.publish_date_input = QLineEdit(self)

        self.price_label = QLabel("价格:")
        self.price_input = QLineEdit(self)

        self.form_layout.addWidget(self.login_label)
        self.form_layout.addWidget(self.login_input)
        self.form_layout.addWidget(self.title_label)
        self.form_layout.addWidget(self.title_input)
        self.form_layout.addWidget(self.author_label)
        self.form_layout.addWidget(self.author_input)
        self.form_layout.addWidget(self.category_label)
        self.form_layout.addWidget(self.category_input)
        self.form_layout.addWidget(self.publisher_label)
        self.form_layout.addWidget(self.publisher_input)
        self.form_layout.addWidget(self.publish_date_label)
        self.form_layout.addWidget(self.publish_date_input)
        self.form_layout.addWidget(self.price_label)
        self.form_layout.addWidget(self.price_input)

        self.button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        self.form_layout.addWidget(self.button_box)

        self.button_box.accepted.connect(self.accept)
        self.button_box.rejected.connect(self.reject)


class BookManagementSystem(QWidget):
    def __init__(self):
        try:
            super().__init__()

            self.books = []  # 存储图书信息的列表
            self.load_books_from_file()  # 从文件加载图书信息

            self.init_ui()
        except Exception as e:
            print(f"Error during initialization: {e}")
            raise

    def init_ui(self):
        try:
            # 创建界面元素
            self.title_label = QLabel("图书信息管理系统")
            self.book_table = QTableWidget()
            self.book_table.setColumnCount(7)
            self.book_table.setHorizontalHeaderLabels(["登录号", "书名", "作者名", "分类号", "出版单位", "出版时间", "价格"])

            self.search_combobox = QComboBox()
            self.search_combobox.addItems(["按书名查询", "按作者名查询", "条件组合查询"])

            self.search_input = QLineEdit()
            self.search_button = QPushButton("查询")
            self.add_button = QPushButton("添加图书")
            self.delete_button = QPushButton("删除图书")
            self.modify_button = QPushButton("修改图书")

            # 布局管理
            form_layout = QFormLayout()
            form_layout.addRow("查询方式:", self.search_combobox)
            form_layout.addRow("查询条件:", self.search_input)

            button_layout = QHBoxLayout()
            button_layout.addWidget(self.search_button)
            button_layout.addWidget(self.add_button)
            button_layout.addWidget(self.delete_button)
            button_layout.addWidget(self.modify_button)

            main_layout = QVBoxLayout()
            main_layout.addWidget(self.title_label)
            main_layout.addLayout(form_layout)
            main_layout.addWidget(self.book_table)
            main_layout.addLayout(button_layout)

            self.setLayout(main_layout)

            # 信号与槽连接
            self.search_button.clicked.connect(self.search_books)
            self.add_button.clicked.connect(self.add_book)
            self.delete_button.clicked.connect(self.delete_book)
            self.modify_button.clicked.connect(self.modify_book)

            # 设置窗口属性
            self.setGeometry(100, 100, 800, 600)
            self.setWindowTitle('图书信息管理系统')

            # 显示加载的图书信息
            self.display_books(self.books)

            self.show()
        except Exception as e:
            print(f"Error during UI initialization: {e}")
            raise

    def load_books_from_file(self):
        try:
            with open('books_data.json', 'r', encoding='utf-8') as file:
                self.books = json.load(file)
            print("Successfully loaded books from file.")
        except FileNotFoundError:
            print("File not found. Starting with an empty book list.")
        except Exception as e:
            print(f"Error loading books from file: {e}")

    def save_books_to_file(self):
        try:
            with open('books_data.json', 'w', encoding='utf-8') as file:
                json.dump(self.books, file, ensure_ascii=False, indent=4)
            print("Successfully saved books to file.")
        except Exception as e:
            print(f"Error saving books to file: {e}")

    def search_books(self):
        try:
            search_type = self.search_combobox.currentText()
            search_value = self.search_input.text()

            if search_type == "按书名查询":
                result = [book for book in self.books if search_value.lower() in book["书名"].lower()]
            elif search_type == "按作者名查询":
                result = [book for book in self.books if search_value.lower() in book["作者名"].lower()]
            elif search_type == "条件组合查询":
                result = [book for book in self.books if
                          search_value.lower() in book["书名"].lower() or search_value.lower() in book["作者名"].lower()]

            self.display_books(result)
        except Exception as e:
            print(f"Error during search_books: {e}")

    def display_books(self, book_list):
        try:
            self.book_table.setRowCount(0)

            for row, book in enumerate(book_list):
                self.book_table.insertRow(row)
                for col, (key, value) in enumerate(book.items()):
                    item = QTableWidgetItem(str(value))
                    self.book_table.setItem(row, col, item)
        except Exception as e:
            print(f"Error during display_books: {e}")

    def add_book(self):
        try:
            dialog = BookDialog(self)
            result = dialog.exec_()

            if result == QDialog.Accepted:
                login = dialog.login_input.text()
                title = dialog.title_input.text()
                author = dialog.author_input.text()
                category = dialog.category_input.text()
                publisher = dialog.publisher_input.text()
                publish_date = dialog.publish_date_input.text()
                price = dialog.price_input.text()

                new_book = {
                    "登录号": login,
                    "书名": title,
                    "作者名": author,
                    "分类号": category,
                    "出版单位": publisher,
                    "出版时间": publish_date,
                    "价格": price
                }

                self.books.append(new_book)

                self.display_books(self.books)
                self.save_books_to_file()  # 保存图书信息到文件
        except Exception as e:
            print(f"Error during add_book: {e}")

    def delete_book(self):
        try:
            current_row = self.book_table.currentRow()

            if current_row >= 0:
                result = QMessageBox.question(self, '删除确认', '确认删除所选图书吗?',
                                              QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

                if result == QMessageBox.Yes:
                    del self.books[current_row]
                    self.display_books(self.books)
                    self.save_books_to_file()  # 保存图书信息到文件
        except Exception as e:
            print(f"Error during delete_book: {e}")

    def modify_book(self):
        try:
            current_row = self.book_table.currentRow()

            if current_row >= 0:
                current_book = self.books[current_row]
                dialog = BookDialog(self)

                # 设置对话框中的输入框初始值
                dialog.login_input.setText(current_book["登录号"])
                dialog.title_input.setText(current_book["书名"])
                dialog.author_input.setText(current_book["作者名"])
                dialog.category_input.setText(current_book["分类号"])
                dialog.publisher_input.setText(current_book["出版单位"])

                # 在设置之前将值转换为字符串
                dialog.publish_date_input.setText(str(current_book["出版时间"]))
                dialog.price_input.setText(str(current_book["价格"]))

                result = dialog.exec_()

                if result == QDialog.Accepted:
                    # 更新图书信息
                    self.books[current_row] = {
                        "登录号": dialog.login_input.text(),
                        "书名": dialog.title_input.text(),
                        "作者名": dialog.author_input.text(),
                        "分类号": dialog.category_input.text(),
                        "出版单位": dialog.publisher_input.text(),
                        "出版时间": dialog.publish_date_input.text(),
                        "价格": dialog.price_input.text()
                    }
                    self.display_books(self.books)
                    self.save_books_to_file()  # 保存图书信息到文件
        except Exception as e:
            print(f"Error during modify_book: {e}")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = BookManagementSystem()
    sys.exit(app.exec_())

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值