├── .gitignore ├── README.md ├── bookdb.sql ├── compile_ui.bat ├── database └── connector.py ├── lib └── share.py ├── main.py ├── model ├── bookinfomodel.py └── userinfomodel.py ├── readme_src ├── 修改UI.png ├── 编译.png ├── 配置python.png └── 配置python2.png ├── requirements.txt ├── view ├── bookinfoviewforadmin.py ├── bookinfoviewforreader.py └── userinfoview.py ├── widget ├── addbookwidget.py ├── addbookwidget.ui ├── administerloginwidget.py ├── administerloginwidget.ui ├── adminwidget.py ├── adminwidget.ui ├── borrowwidget.py ├── borrowwidget.ui ├── mainwindow.py ├── mainwindow.ui ├── readerloginwidget.py ├── readerloginwidget.ui ├── registerwidget.py ├── registerwidget.ui ├── ui_addbookwidget.py ├── ui_administerloginwidget.py ├── ui_adminwidget.py ├── ui_borrowwidget.py ├── ui_mainwindow.py ├── ui_readerloginwidget.py └── ui_registerwidget.py └── 数据库实验作业要求.docx /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | venv/ 3 | __pycache__/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### 2023/7/3更新 2 | 3 | 上传代码后不断有人点赞并且提issue,说明这个实验课还在开。所以我把代码重构了一下,弄得稍微好看了一点。 4 | 5 | ## 一、说明 6 | 7 | 考虑到这是数据库的实验课,我用了尽量简单的方式写代码。没有任何分层架构,也没有服务器,UI直接通过SQL语句操作数据库。 8 | 9 | UI库用的是Pyside6,数据库用的是MySQL 8.0 10 | 11 | 实验要求见`./数据库实验作业要求.docx` 12 | 13 | ## 二、如何运行 14 | 15 | ### (1) 准备环境 16 | 17 | #### 1. 安装MySQL 8 18 | 19 | 如何安装自行百度,MySQL 8以上版本应该都可以。版本过低可能会造成pymysql不兼容 20 | 21 | #### 2. 配置MySQL 22 | 23 | 用户名密码都设置为root,端口号设置为3306。如果你要设置自己的用户名密码和端口号,需要把代码里的也改了,在`./database/connector.py`里面。 24 | 25 | #### 3. 配置数据库 26 | 27 | 运行`./bookdb.sql`里面的所有SQL语句。运行后会创建一个bookdb数据库,里面保存了图书管理系统需要的信息,里面初始化了一个管理员(帐号和密码都是admin)、一个用户(用户信息在sql文件里面自己找)和几本书籍 28 | 29 | #### 4. 安装Python 30 | 31 | 如何安装Python也自行百度,我的本机环境是Python 3.10。和3.10相差不大应该也可以。 32 | 33 | 注意安装的时候一定要勾选**加入环境变量**(如果你会创建Python虚拟环境就不用) 34 | 35 | #### 5. 配置Python 36 | 37 | 有两种方式: 38 | 39 | + 如果你用Python比较熟,会创建虚拟环境,看这里。不熟的话跳过这部分看下面 40 | 41 | 创建完虚拟环境之后,在你创建的虚拟环境下运行终端(我以PyCharm举例) 42 | 43 | 注意最前面的`(venv)`,这个是你创建的虚拟环境的名称,一会代码一定要在这个虚拟幻境里跑,要不然就白配置了 44 | 45 | 然后输入`pip install -r requirements.txt`回车 46 | 47 | 接下来就会自动下载安装所需要的包,如下图所示(我已经安装过了,所以显示Requirement already satisfied) 48 | 49 | ![配置Python](./readme_src/配置python.png) 50 | 51 | + 如果你对Python不熟,那看这里: 52 | 53 | 在当前项目所在文件夹打开控制台,输入`pip install -r requirements.txt`回车。 54 | 55 | 如果提示`'pip' 不是内部或外部命令,也不是可运行的程序 56 | 或批处理文件。`,说明你的Python没有加入环境变量。如何加入环境变量自行百度,注意一定要把Python目录和Scripts目录都加入环境变量!! 57 | 58 | 如果你的控制台输出像下面一样就成功了。 59 | 60 | ![配置Python2](./readme_src/配置python2.png) 61 | 62 | 注意最后一定要输出`Successfully installed ......` 63 | 64 | 如果没有输出这个,说明前面有报错。这种情况你可以试一下把Python**重新安装**并且版本为**3.10**,应该就不会报错了。 65 | 66 | ### (2) 运行程序 67 | 68 | 在项目目录进入控制台,输入`python main.py`回车即可。 69 | 70 | 如果你前面使用虚拟环境安装Python的包,注意一定要在虚拟环境里运行,否则会报错。 71 | 72 | 73 | ## 三、如果你想修改代码 74 | 75 | ### (1) 修改UI 76 | 77 | `./widget/`目录下所有的`.ui`文件都是程序UI的一部分。 78 | 79 | 按照前面的说明配置好环境后,在Python的`Scripts`目录下(这个目录就是你刚刚加入环境变量的两个目录之一),有一个文件叫`pyside6-designer.exe`。 80 | 81 | 运行这个程序,在里面打开`.ui`文件即可编辑,如下图 82 | 83 | ![修改UI](./readme_src/修改UI.png) 84 | 85 | 右下角的黄色的区域就是用来调整UI的,上面的属性都是字面意思,可以自己修改试一试。 86 | 87 | 其中`styleSheet`这个属性比较重要,支持类似CSS的语法,可以很灵活的修改样式。我已经在mainwindow.ui里面写了一点styleSheet,可以参考 88 | 89 | ### (2) 编译 90 | 91 | 修改ui之后直接运行不会生效,必须先把`.ui`文件编译为`.py`文件。 92 | 93 | 在控制台运行`compile_ui.bat`脚本,如果输出如下图就编译成功。 94 | 95 | ![编译](./readme_src/编译.png) 96 | 97 | 如果编译失败,自己用记事本打开脚本,按照里面的注释修改文件地址即可 98 | 99 | ### (3) 修改数据库配置 100 | 101 | 在前面配置MySQL的时候说了 102 | 103 | ### (4) 修改其他代码需要你会Qt的语法 104 | -------------------------------------------------------------------------------- /bookdb.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE bookdb; 2 | USE bookdb; 3 | 4 | # 这张表存放书籍信息 5 | CREATE TABLE book 6 | ( 7 | `b_id` INT PRIMARY KEY AUTO_INCREMENT, 8 | `b_name` VARCHAR(255) UNIQUE NOT NULL, 9 | `author` VARCHAR(255) NOT NULL, 10 | `publish_date` DATE, 11 | `publish_name` VARCHAR(255), 12 | `borrowed` BOOL DEFAULT FALSE, 13 | `price` FLOAT, 14 | `intro` VARCHAR(255) 15 | ); 16 | 17 | # 这张表存放四种读者的信息 18 | CREATE TABLE role 19 | ( 20 | `r_id` INT PRIMARY KEY, 21 | `r_name` VARCHAR(255), 22 | `max_number` INT, 23 | `max_day` INT 24 | ); 25 | 26 | INSERT INTO `role` 27 | VALUES (1, '教师', 15, 180); 28 | INSERT INTO `role` 29 | VALUES (2, '研究生', 10, 180); 30 | INSERT INTO `role` 31 | VALUES (3, '本科生', 5, 60); 32 | INSERT INTO `role` 33 | VALUES (4, '其他', 5, 30); 34 | 35 | # 这张表存放用户信息,注意外键关系 36 | CREATE TABLE user 37 | ( 38 | `u_id` INT PRIMARY KEY AUTO_INCREMENT, 39 | `u_name` VARCHAR(255), 40 | `password` VARCHAR(255), 41 | `sex` VARCHAR(255), 42 | `balance` FLOAT, 43 | `phone_number` VARCHAR(255), 44 | `r_id` INT, 45 | `unit` VARCHAR(255), 46 | FOREIGN KEY (`r_id`) REFERENCES `role` (`r_id`) 47 | ); 48 | 49 | # 这张表存放管理员信息 50 | CREATE TABLE administer 51 | ( 52 | `a_id` INT PRIMARY KEY AUTO_INCREMENT, 53 | `a_name` VARCHAR(255), 54 | `password` VARCHAR(255) 55 | ); 56 | 57 | # 这张表存放图书借阅的信息,注意外键关系 58 | CREATE TABLE borrow 59 | ( 60 | `b_id` INT NOT NULL, 61 | `u_id` INT NOT NULL, 62 | FOREIGN KEY (`b_id`) REFERENCES `book` (`b_id`), 63 | FOREIGN KEY (`u_id`) REFERENCES `user` (`u_id`) 64 | ); 65 | 66 | INSERT INTO `book` 67 | VALUES (1, '三体', '刘慈欣', '2008-01-15', '重庆出版社', 0, 59.62, '科幻名著三体'); 68 | INSERT INTO `book` 69 | VALUES (2, '活着', '余华', '2012-08-01', '作家出版社', 0, 22.78, '经典名著活着'); 70 | INSERT INTO `book` 71 | VALUES (3, 'C++ PRIMER PLUS', '史蒂芬·普拉达', '2015-07-01', '人民邮电出版社', 0, 120, 'C++学习必买书籍'); 72 | INSERT INTO `book` 73 | VALUES (4, '人民日报', '人民日报社', '2021-12-01', '人民日报社', 0, 12.5, '官方报纸人民日报'); 74 | INSERT INTO `book` 75 | VALUES (5, '资治通鉴', '司马光', '2010-08-01', '中华书局', 0, 150, '史学古籍资治通鉴'); 76 | INSERT INTO `book` 77 | VALUES (6, '红楼梦', '曹雪芹', '1998-01-01', '中华书局', 0, 180, '经典巨著红楼梦'); 78 | 79 | INSERT INTO `administer` 80 | VALUES (1, 'admin', 'admin'); 81 | 82 | INSERT INTO `user` 83 | VALUES (1, '陈恒硕', 'sbchenhengshuo', '男', 0, '13604660566', 3, '吉林大学'); 84 | 85 | -------------------------------------------------------------------------------- /compile_ui.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | rem 这个自动编译ui文件的程序是chatgpt生成的,写法比较奇怪,我自己也没看懂。但是能用 4 | 5 | setlocal enabledelayedexpansion 6 | 7 | rem 一定要把python的Scripts目录加入环境变量,否则无法识别pyside6-uic.exe!!! 8 | 9 | rem 如果没有加环境变量,也可以将下面的pyside6-uic.exe改为完整的目录,比如D:/Python/Python311/Scripts/pyside6-uic.exe 10 | 11 | set PYUIC6_COMMAND=pyside6-uic.exe 12 | 13 | set WIDGETS_FOLDER=./widget/ 14 | 15 | echo Searching for .ui files in %WIDGETS_FOLDER%... 16 | 17 | for /r %WIDGETS_FOLDER% %%f in (*.ui) do ( 18 | set OUTPUT_FILE=%%~nf.ui 19 | set OUTPUT_FILE=ui_!OUTPUT_FILE! 20 | set OUTPUT_FILE=!OUTPUT_FILE:.ui=.py! 21 | 22 | echo Converting %%~nxf to !OUTPUT_FILE!... 23 | call "%PYUIC6_COMMAND%" "%%f" -> "%WIDGETS_FOLDER%!OUTPUT_FILE!" 24 | ) 25 | 26 | echo All .ui files have been converted to .py. -------------------------------------------------------------------------------- /database/connector.py: -------------------------------------------------------------------------------- 1 | import pymysql 2 | from PySide6.QtWidgets import QMessageBox 3 | from lib.share import SI 4 | 5 | 6 | class Connector: 7 | __connection = None 8 | __cursor = None 9 | 10 | def __init__(self): 11 | self.__userName = 'root' 12 | self.__password = 'root' 13 | self.__databaseName = 'bookdb' 14 | self.__port = 3306 15 | try: 16 | Connector.__connection = pymysql.connect(host='localhost', 17 | user=self.__userName, 18 | password=self.__password, 19 | database=self.__databaseName, 20 | port=self.__port) 21 | Connector.__cursor = Connector.__connection.cursor() 22 | except: 23 | QMessageBox.critical(SI.g_mainWindow, '错误', 24 | '数据库链接错误,请检查用户名、密码、端口号和数据库名是否已正确设置') 25 | 26 | @staticmethod 27 | def get_cursor(): 28 | if Connector.__connection is not None: 29 | Connector.__connection.commit() 30 | Connector.__cursor.close() 31 | Connector.__connection.close() 32 | Connector() 33 | return Connector.__cursor 34 | 35 | @staticmethod 36 | def get_connection(): 37 | if Connector.__connection is not None: 38 | Connector.__connection.commit() 39 | Connector.__cursor.close() 40 | Connector.__connection.close() 41 | Connector() 42 | return Connector.__connection 43 | 44 | @staticmethod 45 | def close_connection(): 46 | if Connector.__cursor is not None: 47 | Connector.__connection.close() 48 | Connector.__connection = None 49 | Connector.__cursor = None 50 | 51 | -------------------------------------------------------------------------------- /lib/share.py: -------------------------------------------------------------------------------- 1 | class SI: 2 | g_mainWindow = None 3 | g_bookInfoModel = None 4 | g_userInfoModel = None 5 | g_userId = None 6 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import QApplication 2 | from widget.mainwindow import MainWindow 3 | from lib.share import SI 4 | from database.connector import Connector 5 | 6 | if __name__ == '__main__': 7 | app = QApplication([]) 8 | widget = MainWindow(None) 9 | widget.show() 10 | app.exec() 11 | Connector.close_connection() 12 | -------------------------------------------------------------------------------- /model/bookinfomodel.py: -------------------------------------------------------------------------------- 1 | from typing import Any 2 | from PySide6.QtCore import QAbstractTableModel, QModelIndex, QPersistentModelIndex 3 | from PySide6.QtCore import Qt 4 | from database.connector import Connector 5 | from lib.share import SI 6 | 7 | 8 | class BookInfoModel(QAbstractTableModel): 9 | 10 | s_instance = None 11 | 12 | @staticmethod 13 | def getInstance(): 14 | if BookInfoModel.s_instance is None: 15 | BookInfoModel.s_instance = BookInfoModel() 16 | return BookInfoModel.s_instance 17 | 18 | def __init__(self, parent=None): 19 | super().__init__(parent) 20 | self.__bookInfoList = [] 21 | self.__headerList = ['标题', '作者', '出版日期', '出版社', '是否已借出', '借阅/归还'] 22 | SI.g_bookInfoModel = self 23 | self.update() 24 | 25 | def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> Any: 26 | if orientation == Qt.Horizontal and role == Qt.DisplayRole: 27 | if 0 <= section < len(self.__headerList): 28 | return self.__headerList[section] 29 | return super().headerData(section, orientation, role) 30 | 31 | def rowCount(self, parent: [QModelIndex, QPersistentModelIndex] = ...) -> int: 32 | return len(self.__bookInfoList) 33 | 34 | def columnCount(self, parent: [QModelIndex, QPersistentModelIndex] = ...) -> int: 35 | return len(self.__headerList) 36 | 37 | def data(self, index: [QModelIndex, QPersistentModelIndex], role: int = ...) -> Any: 38 | if not index.isValid(): 39 | return None 40 | if role != Qt.ItemDataRole.DisplayRole: 41 | return None 42 | if 0 <= index.column() < len(self.__headerList) and 0 <= index.row() < len(self.__bookInfoList): 43 | return self.__bookInfoList[index.row()][index.column()] 44 | return None 45 | 46 | def sort(self, column: int, order: Qt.SortOrder = ...) -> None: 47 | self.__bookInfoList.sort(key=lambda row: row[column], reverse=order == Qt.SortOrder.DescendingOrder) 48 | self.dataChanged.emit(self.index(0, 0), self.index(len(self.__bookInfoList) - 1, len(self.__headerList) - 1)) 49 | 50 | def update(self): 51 | self.beginResetModel() 52 | cursor = Connector.get_cursor() 53 | sql = 'SELECT b_name, author, publish_date, publish_name, borrowed, b_id FROM book' 54 | cursor.execute(sql) 55 | result = cursor.fetchall() 56 | self.__bookInfoList = [] 57 | for row in result: 58 | self.__bookInfoList.append([row[0], 59 | row[1], 60 | row[2].strftime('%Y-%m-%d'), 61 | row[3], 62 | '否' if row[4] == 0 else '是', 63 | row[5]]) 64 | self.endResetModel() 65 | -------------------------------------------------------------------------------- /model/userinfomodel.py: -------------------------------------------------------------------------------- 1 | from typing import Any 2 | from PySide6.QtCore import QAbstractTableModel, QModelIndex, QPersistentModelIndex 3 | from PySide6.QtCore import Qt 4 | 5 | import lib.share 6 | from database.connector import Connector 7 | from lib.share import SI 8 | 9 | 10 | class UserInfoModel(QAbstractTableModel): 11 | 12 | def __init__(self, parent=None): 13 | super().__init__(parent) 14 | self.__userInfo = [[0, 0, 0, 0, 0, 0, 0]] 15 | self.__headerList = ['帐号', '余额', '类别', '已借阅数量', '最大借阅数量', '最大借阅时长', '查看已借阅书籍'] 16 | lib.share.SI.g_userInfoModel = self 17 | 18 | def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> Any: 19 | if orientation == Qt.Horizontal and role == Qt.DisplayRole: 20 | if 0 <= section < len(self.__headerList): 21 | return self.__headerList[section] 22 | return super().headerData(section, orientation, role) 23 | 24 | def rowCount(self, parent: [QModelIndex, QPersistentModelIndex] = ...) -> int: 25 | return len(self.__userInfo) 26 | 27 | def columnCount(self, parent: [QModelIndex, QPersistentModelIndex] = ...) -> int: 28 | return len(self.__headerList) 29 | 30 | def data(self, index: [QModelIndex, QPersistentModelIndex], role: int = ...) -> Any: 31 | if not index.isValid(): 32 | return None 33 | if role != Qt.ItemDataRole.DisplayRole: 34 | return None 35 | if 0 <= index.column() < len(self.__headerList) and 0 <= index.row() < len(self.__userInfo): 36 | return self.__userInfo[index.row()][index.column()] 37 | return None 38 | 39 | def update(self): 40 | cursor = Connector.get_cursor() 41 | sql = """ 42 | SELECT u_name, balance, r_name, COUNT(b_id), max_number, max_day, u.u_id 43 | FROM user u 44 | JOIN role r on r.r_id = u.r_id 45 | LEFT JOIN borrow b on u.u_id = b.u_id 46 | WHERE u.u_id = %s; 47 | """ 48 | cursor.execute(sql, (SI.g_userId)) 49 | self.__userInfo = list(cursor.fetchall()) 50 | self.dataChanged.emit(self.index(0, 0), self.index(len(self.__userInfo) - 1, len(self.__headerList) - 1)) -------------------------------------------------------------------------------- /readme_src/修改UI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hwdqm88/SDU_sql_experiment_bookdb/2eff4a5b5bc26ea630ff5d8f1781ab161951d218/readme_src/修改UI.png -------------------------------------------------------------------------------- /readme_src/编译.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hwdqm88/SDU_sql_experiment_bookdb/2eff4a5b5bc26ea630ff5d8f1781ab161951d218/readme_src/编译.png -------------------------------------------------------------------------------- /readme_src/配置python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hwdqm88/SDU_sql_experiment_bookdb/2eff4a5b5bc26ea630ff5d8f1781ab161951d218/readme_src/配置python.png -------------------------------------------------------------------------------- /readme_src/配置python2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hwdqm88/SDU_sql_experiment_bookdb/2eff4a5b5bc26ea630ff5d8f1781ab161951d218/readme_src/配置python2.png -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | pyside6==6.5.1.1 2 | pymysql==1.1.0 -------------------------------------------------------------------------------- /view/bookinfoviewforadmin.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import QTableView, QPushButton, QMessageBox, QHeaderView 2 | 3 | from lib.share import SI 4 | from database.connector import Connector 5 | from model.bookinfomodel import BookInfoModel 6 | 7 | 8 | class BookInfoViewForAdmin(QTableView): 9 | 10 | def __init__(self, parent=None): 11 | super().__init__(parent) 12 | self.verticalHeader().setVisible(False) 13 | self.__model = BookInfoModel.getInstance() 14 | self.setModel(self.__model) 15 | self.__model.update() 16 | self.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents) 17 | # self.setSortingEnabled(True) 18 | for i in range(self.__model.rowCount()): 19 | borrow_button = QPushButton('删除') 20 | borrow_button.setStyleSheet('background-color: red') 21 | borrow_button.setWhatsThis(str(i)) 22 | borrow_button.clicked.connect(self.deleteBook) 23 | self.setIndexWidget(self.__model.index(i, self.__model.columnCount() - 1), borrow_button) 24 | 25 | def deleteBook(self): 26 | ret = QMessageBox.question(self, '确认删除', '确认删除这本书吗?') 27 | if ret != QMessageBox.StandardButton.Yes: 28 | return 29 | row_index = int(self.sender().whatsThis()) 30 | b_id = self.__model.index(row_index, 5).data() 31 | sql = 'DELETE FROM borrow WHERE b_id = %s' 32 | cursor = Connector.get_cursor() 33 | cursor.execute(sql, b_id) 34 | sql = 'DELETE FROM book WHERE b_id = %s' 35 | cursor.execute(sql, b_id) 36 | Connector.get_connection() 37 | QMessageBox.information(self, '删除成功', '删除成功') 38 | self.updateData() 39 | 40 | def updateData(self): 41 | self.__model.update() 42 | for i in range(self.__model.rowCount()): 43 | borrow_button = QPushButton('删除') 44 | borrow_button.setStyleSheet('background-color: red') 45 | borrow_button.setWhatsThis(str(i)) 46 | borrow_button.clicked.connect(self.deleteBook) 47 | self.setIndexWidget(self.__model.index(i, self.__model.columnCount() - 1), borrow_button) 48 | -------------------------------------------------------------------------------- /view/bookinfoviewforreader.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import QTableView, QPushButton, QMessageBox, QHeaderView 2 | 3 | from lib.share import SI 4 | from database.connector import Connector 5 | from model.bookinfomodel import BookInfoModel 6 | 7 | 8 | class BookInfoViewForReader(QTableView): 9 | 10 | def __init__(self, parent=None): 11 | super().__init__(parent) 12 | self.verticalHeader().setVisible(False) 13 | self.__model = BookInfoModel.getInstance() 14 | self.setModel(self.__model) 15 | self.__model.update() 16 | self.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents) 17 | # self.setSortingEnabled(True) 18 | for i in range(self.__model.rowCount()): 19 | borrow_button = QPushButton('借阅/归还') 20 | borrow_button.setWhatsThis(str(i)) 21 | borrow_button.clicked.connect(self.borrow) 22 | self.setIndexWidget(self.__model.index(i, self.__model.columnCount() - 1), borrow_button) 23 | 24 | def borrow(self): 25 | row_index = int(self.sender().whatsThis()) 26 | b_id = self.__model.index(row_index, 5).data() 27 | cursor = Connector.get_cursor() 28 | if self.__model.index(row_index, 4).data() == '否': 29 | if int(SI.g_userInfoModel.index(0, 3).data()) >= int(SI.g_userInfoModel.index(0, 4).data()): 30 | QMessageBox.information(self, '借阅失败', '已达到最大借阅数量') 31 | return 32 | sql = 'UPDATE book SET borrowed = 1 WHERE b_id = %s;' 33 | cursor.execute(sql, b_id) 34 | Connector.get_connection() 35 | sql = 'INSERT INTO borrow VALUES (%s, %s);' 36 | cursor = Connector.get_cursor() 37 | cursor.execute(sql, (b_id, SI.g_userId)) 38 | Connector.get_connection() 39 | QMessageBox.information(self, '借阅成功', '借阅成功') 40 | else: 41 | sql = 'SELECT * FROM borrow WHERE u_id = %s AND b_id = %s;' 42 | cursor.execute(sql, (SI.g_userId, b_id)) 43 | if cursor.fetchone() is None: 44 | QMessageBox.information(self, '归还失败', '这本书是别人借阅的') 45 | return 46 | sql = 'UPDATE `book` SET borrowed = 0 WHERE b_id = %s;' 47 | cursor.execute(sql, b_id) 48 | Connector.get_connection() 49 | cursor = Connector.get_cursor() 50 | sql = 'DELETE FROM `borrow` WHERE b_id = %s AND u_id = %s;' 51 | cursor.execute(sql, (b_id, SI.g_userId)) 52 | Connector.get_connection() 53 | QMessageBox.information(self, '归还成功', '归还成功') 54 | self.updateData() 55 | SI.g_userInfoModel.update() 56 | 57 | def updateData(self): 58 | self.__model.update() 59 | for i in range(self.__model.rowCount()): 60 | borrow_button = QPushButton('借阅/归还') 61 | borrow_button.setWhatsThis(str(i)) 62 | borrow_button.clicked.connect(self.borrow) 63 | self.setIndexWidget(self.__model.index(i, self.__model.columnCount() - 1), borrow_button) 64 | -------------------------------------------------------------------------------- /view/userinfoview.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import QTableView, QPushButton, QListWidget, QHeaderView 2 | from database.connector import Connector 3 | from model.userinfomodel import UserInfoModel 4 | from lib.share import SI 5 | 6 | 7 | class UserInfoView(QTableView): 8 | 9 | def __init__(self, parent=None): 10 | super().__init__(parent) 11 | self.__showBorrowWidget = None 12 | self.verticalHeader().setVisible(False) 13 | self.__model = UserInfoModel() 14 | self.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents) 15 | self.setModel(self.__model) 16 | show_button = QPushButton('查看已借阅书籍') 17 | self.setIndexWidget(self.__model.index(0, 6), show_button) 18 | show_button.setStyleSheet('min-width: 100px; max-width: 100px;') 19 | show_button.clicked.connect(self.showBorrow) 20 | 21 | def showBorrow(self): 22 | cursor = Connector.get_cursor() 23 | sql = """ 24 | SELECT b_name 25 | FROM borrow 26 | JOIN book on book.b_id = borrow.b_id 27 | JOIN user on user.u_id = borrow.u_id 28 | WHERE borrow.u_id = %s 29 | """ 30 | cursor.execute(sql, SI.g_userId) 31 | result = cursor.fetchall() 32 | self.__showBorrowWidget = QListWidget() 33 | self.__showBorrowWidget.setWindowTitle('借阅书籍目录') 34 | for item in result: 35 | self.__showBorrowWidget.addItem(item[0]) 36 | self.__showBorrowWidget.show() 37 | 38 | def updateData(self): 39 | self.__model.update() 40 | -------------------------------------------------------------------------------- /widget/addbookwidget.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import QWidget, QMessageBox 2 | from lib.share import SI 3 | from widget.ui_addbookwidget import Ui_AddBookWidget 4 | from database.connector import Connector 5 | 6 | 7 | class AddBookWidget(QWidget): 8 | def __init__(self, parent=None): 9 | super().__init__(parent) 10 | self.__ui = Ui_AddBookWidget() 11 | self.__ui.setupUi(self) 12 | self.__ui.m_returnButton.clicked.connect(lambda: SI.g_mainWindow.setCurrentIndex(5)) 13 | self.__ui.m_addButton.clicked.connect(self.addBook) 14 | 15 | def addBook(self): 16 | name = self.__ui.m_titleLineEdit.text() 17 | author = self.__ui.m_authorLineEdit.text() 18 | publish_date = self.__ui.m_publishDateEdit.date() 19 | publish_name = self.__ui.m_publishLineEdit.text() 20 | price = self.__ui.m_priceSpinBox.text() 21 | intro = self.__ui.m_introLineEdit.text() 22 | publish_date = '{}-{}-{}'.format(publish_date.year(), publish_date.month(), publish_date.day()) 23 | if name == '' or author == '' or publish_name == '' or intro == '': 24 | QMessageBox.information(self, '添加失败', '请填完全部信息再添加书籍') 25 | return 26 | cursor = Connector.get_cursor() 27 | sql = """ 28 | INSERT INTO book (b_name, author, publish_date, publish_name, price, intro) 29 | VALUES (%s, %s, %s, %s, %s, %s); 30 | """ 31 | cursor.execute(sql, (name, author, publish_date, publish_name, price, intro)) 32 | Connector.get_connection() 33 | QMessageBox.information(self, '添加成功', '添加书籍成功') 34 | SI.g_mainWindow.updateAdminWidget() -------------------------------------------------------------------------------- /widget/addbookwidget.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | AddBookWidget 4 | 5 | 6 | 7 | 0 8 | 0 9 | 675 10 | 389 11 | 12 | 13 | 14 | 添加新书 15 | 16 | 17 | 18 | 19 | 20 | Qt::Vertical 21 | 22 | 23 | 24 | 20 25 | 40 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | Qt::Horizontal 36 | 37 | 38 | QSizePolicy::Fixed 39 | 40 | 41 | 42 | 200 43 | 20 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 标题: 52 | 53 | 54 | 55 | 56 | 57 | 58 | Qt::Horizontal 59 | 60 | 61 | 62 | 40 63 | 20 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | Qt::Horizontal 75 | 76 | 77 | QSizePolicy::Fixed 78 | 79 | 80 | 81 | 200 82 | 20 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | Qt::Vertical 93 | 94 | 95 | 96 | 20 97 | 40 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | Qt::Horizontal 108 | 109 | 110 | QSizePolicy::Fixed 111 | 112 | 113 | 114 | 200 115 | 20 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 作者: 124 | 125 | 126 | 127 | 128 | 129 | 130 | Qt::Horizontal 131 | 132 | 133 | 134 | 40 135 | 20 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | Qt::Horizontal 147 | 148 | 149 | QSizePolicy::Fixed 150 | 151 | 152 | 153 | 200 154 | 20 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | Qt::Vertical 165 | 166 | 167 | 168 | 20 169 | 40 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | Qt::Horizontal 180 | 181 | 182 | QSizePolicy::Fixed 183 | 184 | 185 | 186 | 200 187 | 20 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 出版日期: 196 | 197 | 198 | 199 | 200 | 201 | 202 | Qt::Horizontal 203 | 204 | 205 | 206 | 40 207 | 20 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 0 217 | 0 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | Qt::Horizontal 226 | 227 | 228 | QSizePolicy::Fixed 229 | 230 | 231 | 232 | 200 233 | 20 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | Qt::Vertical 244 | 245 | 246 | 247 | 20 248 | 40 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | Qt::Horizontal 259 | 260 | 261 | QSizePolicy::Fixed 262 | 263 | 264 | 265 | 200 266 | 20 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 出版社: 275 | 276 | 277 | 278 | 279 | 280 | 281 | Qt::Horizontal 282 | 283 | 284 | 285 | 40 286 | 20 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | Qt::Horizontal 298 | 299 | 300 | QSizePolicy::Fixed 301 | 302 | 303 | 304 | 200 305 | 20 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | Qt::Vertical 316 | 317 | 318 | 319 | 20 320 | 40 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | Qt::Horizontal 331 | 332 | 333 | QSizePolicy::Fixed 334 | 335 | 336 | 337 | 200 338 | 20 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 价格: 347 | 348 | 349 | 350 | 351 | 352 | 353 | Qt::Horizontal 354 | 355 | 356 | 357 | 40 358 | 20 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 0 368 | 0 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | Qt::Horizontal 377 | 378 | 379 | QSizePolicy::Fixed 380 | 381 | 382 | 383 | 200 384 | 20 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | Qt::Vertical 395 | 396 | 397 | 398 | 20 399 | 40 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | Qt::Horizontal 410 | 411 | 412 | QSizePolicy::Fixed 413 | 414 | 415 | 416 | 200 417 | 20 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 简介: 426 | 427 | 428 | 429 | 430 | 431 | 432 | Qt::Horizontal 433 | 434 | 435 | 436 | 40 437 | 20 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | Qt::Horizontal 449 | 450 | 451 | QSizePolicy::Fixed 452 | 453 | 454 | 455 | 200 456 | 20 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | Qt::Vertical 467 | 468 | 469 | 470 | 20 471 | 40 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | Qt::Horizontal 482 | 483 | 484 | QSizePolicy::Fixed 485 | 486 | 487 | 488 | 200 489 | 20 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 确认添加 498 | 499 | 500 | 501 | 502 | 503 | 504 | Qt::Horizontal 505 | 506 | 507 | 508 | 40 509 | 20 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 返回 518 | 519 | 520 | 521 | 522 | 523 | 524 | Qt::Horizontal 525 | 526 | 527 | QSizePolicy::Fixed 528 | 529 | 530 | 531 | 200 532 | 20 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | Qt::Vertical 543 | 544 | 545 | 546 | 20 547 | 40 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | -------------------------------------------------------------------------------- /widget/administerloginwidget.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import QWidget, QMessageBox 2 | from widget.ui_administerloginwidget import Ui_AdministerLoginWidget 3 | from lib.share import SI 4 | from database.connector import Connector 5 | 6 | 7 | class AdministerLoginWidget(QWidget): 8 | 9 | def __init__(self, parent=None): 10 | super().__init__(parent) 11 | self.__ui = Ui_AdministerLoginWidget() 12 | self.__ui.setupUi(self) 13 | self.__ui.m_returnButton.clicked.connect(lambda: 14 | SI.g_mainWindow.setCurrentIndex(0)) 15 | self.__ui.m_loginButton.clicked.connect(self.login) 16 | 17 | def login(self): 18 | cursor = Connector.get_cursor() 19 | sql = 'SELECT * FROM administer WHERE a_name = %s AND password = %s;' 20 | cursor.execute(sql, (self.__ui.m_accountLineEdit.text(), self.__ui.m_passwordLineEdit.text())) 21 | if cursor.fetchone is None: 22 | QMessageBox.critical(self, '登陆失败', '管理员帐号或密码错误,请检查') 23 | return 24 | SI.g_mainWindow.setCurrentIndex(5) -------------------------------------------------------------------------------- /widget/administerloginwidget.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | AdministerLoginWidget 4 | 5 | 6 | 7 | 0 8 | 0 9 | 796 10 | 568 11 | 12 | 13 | 14 | Form 15 | 16 | 17 | 18 | 19 | 20 | Qt::Vertical 21 | 22 | 23 | 24 | 20 25 | 40 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 黑体 35 | 16 36 | 37 | 38 | 39 | 管理员登录 40 | 41 | 42 | Qt::AlignCenter 43 | 44 | 45 | 46 | 47 | 48 | 49 | Qt::Vertical 50 | 51 | 52 | 53 | 20 54 | 40 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | Qt::Horizontal 65 | 66 | 67 | 68 | 40 69 | 20 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 帐号: 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | Qt::Horizontal 92 | 93 | 94 | 95 | 40 96 | 20 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | Qt::Vertical 107 | 108 | 109 | 110 | 20 111 | 40 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | Qt::Horizontal 122 | 123 | 124 | 125 | 40 126 | 20 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 密码: 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | QLineEdit::Password 145 | 146 | 147 | 148 | 149 | 150 | 151 | Qt::Horizontal 152 | 153 | 154 | 155 | 40 156 | 20 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | Qt::Vertical 167 | 168 | 169 | 170 | 20 171 | 40 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | Qt::Horizontal 182 | 183 | 184 | 185 | 40 186 | 20 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 登录 195 | 196 | 197 | 198 | 199 | 200 | 201 | Qt::Horizontal 202 | 203 | 204 | QSizePolicy::Fixed 205 | 206 | 207 | 208 | 40 209 | 20 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 返回 218 | 219 | 220 | 221 | 222 | 223 | 224 | Qt::Horizontal 225 | 226 | 227 | 228 | 40 229 | 20 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | Qt::Vertical 240 | 241 | 242 | 243 | 20 244 | 40 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | -------------------------------------------------------------------------------- /widget/adminwidget.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import QWidget 2 | from lib.share import SI 3 | from widget.ui_adminwidget import Ui_AdminWidget 4 | 5 | 6 | class AdminWidget(QWidget): 7 | def __init__(self, parent=None): 8 | super().__init__(parent) 9 | self.__ui = Ui_AdminWidget() 10 | self.__ui.setupUi(self) 11 | self.__ui.m_addBookButton.clicked.connect(self.addBook) 12 | self.__ui.m_logoutButton.clicked.connect(lambda: SI.g_mainWindow.setCurrentIndex(0)) 13 | 14 | def addBook(self): 15 | SI.g_mainWindow.setCurrentIndex(6) 16 | 17 | def updateData(self): 18 | self.__ui.m_bookInfoView.updateData() 19 | -------------------------------------------------------------------------------- /widget/adminwidget.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | AdminWidget 4 | 5 | 6 | 7 | 0 8 | 0 9 | 631 10 | 464 11 | 12 | 13 | 14 | Form 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Qt::Horizontal 23 | 24 | 25 | 26 | 40 27 | 20 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 添加书籍 36 | 37 | 38 | 39 | 40 | 41 | 42 | background-color: red 43 | 44 | 45 | 退出登录 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | BookInfoViewForAdmin 59 | QTableView 60 |
view/bookinfoviewforadmin.h
61 |
62 |
63 | 64 | 65 |
66 | -------------------------------------------------------------------------------- /widget/borrowwidget.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import QWidget 2 | from lib.share import SI 3 | from widget.ui_borrowwidget import Ui_BorrowWidget 4 | 5 | 6 | class BorrowWidget(QWidget): 7 | def __init__(self, parent=None): 8 | super().__init__(parent) 9 | self.__ui = Ui_BorrowWidget() 10 | self.__ui.setupUi(self) 11 | self.__ui.m_logoutButton.clicked.connect(lambda: SI.g_mainWindow.setCurrentIndex(0)) 12 | 13 | def updateData(self): 14 | self.__ui.m_bookInfoView.updateData() 15 | self.__ui.m_userInfoView.updateData() 16 | -------------------------------------------------------------------------------- /widget/borrowwidget.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | BorrowWidget 4 | 5 | 6 | 7 | 0 8 | 0 9 | 631 10 | 464 11 | 12 | 13 | 14 | Form 15 | 16 | 17 | 18 | 19 | 20 | 21 | 0 22 | 0 23 | 24 | 25 | 26 | 27 | 0 28 | 100 29 | 30 | 31 | 32 | 33 | 16777215 34 | 100 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | Qt::Horizontal 45 | 46 | 47 | 48 | 40 49 | 20 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | background-color: red; color: white; 58 | 59 | 60 | 退出登录 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | UserInfoView 74 | QTableView 75 |
view/userinfoview.h
76 |
77 | 78 | BookInfoViewForReader 79 | QTableView 80 |
view/bookinfoviewforreader.h
81 |
82 |
83 | 84 | 85 |
86 | -------------------------------------------------------------------------------- /widget/mainwindow.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import QStackedWidget 2 | from lib.share import SI 3 | from widget.ui_mainwindow import Ui_MainWindow 4 | 5 | 6 | class MainWindow(QStackedWidget): 7 | def __init__(self, parent=None): 8 | super().__init__(parent) 9 | self.__ui = Ui_MainWindow() 10 | self.__ui.setupUi(self) 11 | SI.g_mainWindow = self 12 | self.__ui.m_readerLoginButton.clicked.connect(lambda: 13 | self.setCurrentWidget(self.__ui.m_readerLoginWidget)) 14 | self.__ui.m_administerLoginButton.clicked.connect(lambda: 15 | self.setCurrentWidget(self.__ui.m_administerLoginWidget)) 16 | 17 | def updateBorrowWidget(self): 18 | self.__ui.m_borrowWidget.updateData() 19 | 20 | def updateAdminWidget(self): 21 | self.__ui.m_adminWidget.updateData() 22 | -------------------------------------------------------------------------------- /widget/mainwindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 708 10 | 451 11 | 12 | 13 | 14 | 图书管理系统 15 | 16 | 17 | QPushButton { 18 | border-radius: 5px; 19 | background-color: rgb(64, 158, 255); 20 | color: white; 21 | min-height: 25px; 22 | max-height: 25px; 23 | min-width: 70px; 24 | max-width: 70px; 25 | } 26 | QPushButton:hover { 27 | background-color: rgb(102, 177, 255); 28 | } 29 | 30 | #m_welcomeWidget { 31 | background-color: white; 32 | } 33 | 34 | 35 | 36 | 37 | 38 | 39 | Qt::Vertical 40 | 41 | 42 | 43 | 20 44 | 40 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 黑体 54 | 16 55 | 56 | 57 | 58 | 欢迎使用图书管理系统 59 | 60 | 61 | Qt::AlignCenter 62 | 63 | 64 | 65 | 66 | 67 | 68 | Qt::Vertical 69 | 70 | 71 | 72 | 20 73 | 40 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | Qt::Horizontal 84 | 85 | 86 | 87 | 40 88 | 20 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 读者登录 97 | 98 | 99 | 100 | 101 | 102 | 103 | Qt::Horizontal 104 | 105 | 106 | 107 | 40 108 | 20 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 管理员登录 117 | 118 | 119 | 120 | 121 | 122 | 123 | Qt::Horizontal 124 | 125 | 126 | 127 | 40 128 | 20 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | Qt::Vertical 139 | 140 | 141 | 142 | 20 143 | 40 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | ReaderLoginWidget 160 | QWidget 161 |
widget/readerloginwidget.h
162 | 1 163 |
164 | 165 | AdministerLoginWidget 166 | QWidget 167 |
widget/administerloginwidget.h
168 | 1 169 |
170 | 171 | BorrowWidget 172 | QWidget 173 |
widget/borrowwidget.h
174 | 1 175 |
176 | 177 | RegisterWidget 178 | QWidget 179 |
widget/registerwidget.h
180 | 1 181 |
182 | 183 | AdminWidget 184 | QWidget 185 |
widget/adminwidget.h
186 | 1 187 |
188 | 189 | AddBookWidget 190 | QWidget 191 |
widget/addbookwidget.h
192 | 1 193 |
194 |
195 | 196 | 197 |
198 | -------------------------------------------------------------------------------- /widget/readerloginwidget.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import QWidget, QMessageBox 2 | from widget.ui_readerloginwidget import Ui_ReaderLoginWidget 3 | from lib.share import SI 4 | from database.connector import Connector 5 | 6 | 7 | class ReaderLoginWidget(QWidget): 8 | def __init__(self, parent=None): 9 | super().__init__(parent) 10 | self.__ui = Ui_ReaderLoginWidget() 11 | self.__ui.setupUi(self) 12 | self.__ui.m_returnButton.clicked.connect(lambda: 13 | SI.g_mainWindow.setCurrentIndex(0)) 14 | self.__ui.m_loginButton.clicked.connect(self.login) 15 | self.__ui.m_registerButton.clicked.connect(self.register) 16 | 17 | def login(self): 18 | cursor = Connector.get_cursor() 19 | sql = 'SELECT u_id FROM user WHERE u_name = %s AND password = %s' 20 | cursor.execute(sql, (self.__ui.m_accountLineEdit.text(), self.__ui.m_passwordLineEdit.text())) 21 | result = cursor.fetchone() 22 | if result is None: 23 | QMessageBox.critical(self, '登陆失败', '用户名或密码错误,请重试') 24 | return 25 | SI.g_userId = result[0] 26 | SI.g_mainWindow.setCurrentIndex(3) 27 | SI.g_mainWindow.updateBorrowWidget() 28 | 29 | def register(self): 30 | SI.g_mainWindow.setCurrentIndex(4) 31 | -------------------------------------------------------------------------------- /widget/readerloginwidget.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | ReaderLoginWidget 4 | 5 | 6 | 7 | 0 8 | 0 9 | 591 10 | 456 11 | 12 | 13 | 14 | Form 15 | 16 | 17 | 18 | 19 | 20 | Qt::Vertical 21 | 22 | 23 | 24 | 20 25 | 40 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 黑体 35 | 16 36 | 37 | 38 | 39 | 读者登录 40 | 41 | 42 | Qt::AlignCenter 43 | 44 | 45 | 46 | 47 | 48 | 49 | Qt::Vertical 50 | 51 | 52 | 53 | 20 54 | 40 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | Qt::Horizontal 65 | 66 | 67 | 68 | 40 69 | 20 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 姓名: 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | Qt::Horizontal 92 | 93 | 94 | 95 | 40 96 | 20 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | Qt::Vertical 107 | 108 | 109 | 110 | 20 111 | 40 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | Qt::Horizontal 122 | 123 | 124 | 125 | 40 126 | 20 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 密码: 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | QLineEdit::Password 145 | 146 | 147 | 148 | 149 | 150 | 151 | Qt::Horizontal 152 | 153 | 154 | 155 | 40 156 | 20 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | Qt::Vertical 167 | 168 | 169 | 170 | 20 171 | 40 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | Qt::Horizontal 182 | 183 | 184 | 185 | 40 186 | 20 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 登录 195 | 196 | 197 | 198 | 199 | 200 | 201 | Qt::Horizontal 202 | 203 | 204 | QSizePolicy::Fixed 205 | 206 | 207 | 208 | 40 209 | 20 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 注册 218 | 219 | 220 | 221 | 222 | 223 | 224 | Qt::Horizontal 225 | 226 | 227 | QSizePolicy::Fixed 228 | 229 | 230 | 231 | 40 232 | 20 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 返回 241 | 242 | 243 | 244 | 245 | 246 | 247 | Qt::Horizontal 248 | 249 | 250 | 251 | 40 252 | 20 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | Qt::Vertical 263 | 264 | 265 | 266 | 20 267 | 40 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | -------------------------------------------------------------------------------- /widget/registerwidget.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import QWidget, QMessageBox 2 | 3 | from lib.share import SI 4 | from widget.ui_registerwidget import Ui_RegisterWidget 5 | from database.connector import Connector 6 | 7 | 8 | class RegisterWidget(QWidget): 9 | def __init__(self, parent=None): 10 | super().__init__(parent) 11 | self.__ui = Ui_RegisterWidget() 12 | self.__ui.setupUi(self) 13 | self.__ui.m_returnButton.clicked.connect(lambda: SI.g_mainWindow.setCurrentIndex(1)) 14 | self.__ui.m_registerButton.clicked.connect(self.register) 15 | 16 | def register(self): 17 | name = self.__ui.m_nameLlineEdit.text() 18 | password = self.__ui.m_passwordLineEdit.text() 19 | password_confirm = self.__ui.m_passwordConfirmLineEdit.text() 20 | gender = self.__ui.m_genderComboBox.currentText() 21 | balance = 0 22 | mobile = self.__ui.m_mobileLineEdit.text() 23 | unit = self.__ui.m_unitLineEdit.text() 24 | role = self.__ui.m_roleComboBox.currentIndex() 25 | if name == '' or password == '' or mobile == '' or unit == '': 26 | QMessageBox.information(self, '注册失败', '请将信息填写完整再注册') 27 | return 28 | if password != password_confirm: 29 | QMessageBox.information(self, '注册失败', '密码和确认密码输入不一致') 30 | return 31 | cursor = Connector.get_cursor() 32 | sql = """ 33 | INSERT INTO user (u_name, password, sex, balance, phone_number, r_id, unit) 34 | VALUES (%s, %s, %s, %s, %s, %s, %s); 35 | """ 36 | cursor.execute(sql, (name, password, gender, balance, mobile, role, unit)) 37 | Connector.get_connection() 38 | QMessageBox.information(self, '注册成功', '注册成功') 39 | -------------------------------------------------------------------------------- /widget/registerwidget.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | RegisterWidget 4 | 5 | 6 | 7 | 0 8 | 0 9 | 708 10 | 429 11 | 12 | 13 | 14 | Form 15 | 16 | 17 | 18 | 19 | 20 | Qt::Vertical 21 | 22 | 23 | 24 | 20 25 | 40 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | Qt::Horizontal 36 | 37 | 38 | QSizePolicy::Fixed 39 | 40 | 41 | 42 | 200 43 | 20 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 姓名: 52 | 53 | 54 | 55 | 56 | 57 | 58 | Qt::Horizontal 59 | 60 | 61 | 62 | 40 63 | 20 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | Qt::Horizontal 75 | 76 | 77 | QSizePolicy::Fixed 78 | 79 | 80 | 81 | 200 82 | 20 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | Qt::Vertical 93 | 94 | 95 | 96 | 20 97 | 40 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | Qt::Horizontal 108 | 109 | 110 | QSizePolicy::Fixed 111 | 112 | 113 | 114 | 200 115 | 20 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 性别: 124 | 125 | 126 | 127 | 128 | 129 | 130 | Qt::Horizontal 131 | 132 | 133 | 134 | 40 135 | 20 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 0 145 | 0 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | Qt::Horizontal 164 | 165 | 166 | QSizePolicy::Fixed 167 | 168 | 169 | 170 | 200 171 | 20 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | Qt::Vertical 182 | 183 | 184 | 185 | 20 186 | 40 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | Qt::Horizontal 197 | 198 | 199 | QSizePolicy::Fixed 200 | 201 | 202 | 203 | 200 204 | 20 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 手机号: 213 | 214 | 215 | 216 | 217 | 218 | 219 | Qt::Horizontal 220 | 221 | 222 | 223 | 40 224 | 20 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | Qt::Horizontal 236 | 237 | 238 | QSizePolicy::Fixed 239 | 240 | 241 | 242 | 200 243 | 20 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | Qt::Vertical 254 | 255 | 256 | 257 | 20 258 | 40 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | Qt::Horizontal 269 | 270 | 271 | QSizePolicy::Fixed 272 | 273 | 274 | 275 | 200 276 | 20 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 单位: 285 | 286 | 287 | 288 | 289 | 290 | 291 | Qt::Horizontal 292 | 293 | 294 | 295 | 40 296 | 20 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | Qt::Horizontal 308 | 309 | 310 | QSizePolicy::Fixed 311 | 312 | 313 | 314 | 200 315 | 20 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | Qt::Vertical 326 | 327 | 328 | 329 | 20 330 | 40 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | Qt::Horizontal 341 | 342 | 343 | QSizePolicy::Fixed 344 | 345 | 346 | 347 | 200 348 | 20 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 类别: 357 | 358 | 359 | 360 | 361 | 362 | 363 | Qt::Horizontal 364 | 365 | 366 | 367 | 40 368 | 20 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 0 378 | 0 379 | 380 | 381 | 382 | 383 | 教师 384 | 385 | 386 | 387 | 388 | 研究生 389 | 390 | 391 | 392 | 393 | 本科生 394 | 395 | 396 | 397 | 398 | 其他 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | Qt::Horizontal 407 | 408 | 409 | QSizePolicy::Fixed 410 | 411 | 412 | 413 | 200 414 | 20 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | Qt::Vertical 425 | 426 | 427 | 428 | 20 429 | 40 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | Qt::Horizontal 440 | 441 | 442 | QSizePolicy::Fixed 443 | 444 | 445 | 446 | 200 447 | 20 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 密码: 456 | 457 | 458 | 459 | 460 | 461 | 462 | Qt::Horizontal 463 | 464 | 465 | 466 | 40 467 | 20 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | QLineEdit::Password 476 | 477 | 478 | 479 | 480 | 481 | 482 | Qt::Horizontal 483 | 484 | 485 | QSizePolicy::Fixed 486 | 487 | 488 | 489 | 200 490 | 20 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | Qt::Vertical 501 | 502 | 503 | 504 | 20 505 | 40 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | Qt::Horizontal 516 | 517 | 518 | QSizePolicy::Fixed 519 | 520 | 521 | 522 | 200 523 | 20 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 确认密码: 532 | 533 | 534 | 535 | 536 | 537 | 538 | Qt::Horizontal 539 | 540 | 541 | 542 | 40 543 | 20 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | QLineEdit::Password 552 | 553 | 554 | 555 | 556 | 557 | 558 | Qt::Horizontal 559 | 560 | 561 | QSizePolicy::Fixed 562 | 563 | 564 | 565 | 200 566 | 20 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | Qt::Vertical 577 | 578 | 579 | 580 | 20 581 | 40 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | Qt::Horizontal 592 | 593 | 594 | QSizePolicy::Fixed 595 | 596 | 597 | 598 | 200 599 | 20 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 注册 608 | 609 | 610 | 611 | 612 | 613 | 614 | Qt::Horizontal 615 | 616 | 617 | 618 | 40 619 | 20 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 返回 628 | 629 | 630 | 631 | 632 | 633 | 634 | Qt::Horizontal 635 | 636 | 637 | QSizePolicy::Fixed 638 | 639 | 640 | 641 | 200 642 | 20 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | Qt::Vertical 653 | 654 | 655 | 656 | 20 657 | 40 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | -------------------------------------------------------------------------------- /widget/ui_addbookwidget.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'addbookwidget.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.5.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QDateEdit, QDoubleSpinBox, QHBoxLayout, 19 | QLabel, QLineEdit, QPushButton, QSizePolicy, 20 | QSpacerItem, QVBoxLayout, QWidget) 21 | 22 | class Ui_AddBookWidget(object): 23 | def setupUi(self, AddBookWidget): 24 | if not AddBookWidget.objectName(): 25 | AddBookWidget.setObjectName(u"AddBookWidget") 26 | AddBookWidget.resize(675, 389) 27 | self.verticalLayout = QVBoxLayout(AddBookWidget) 28 | self.verticalLayout.setObjectName(u"verticalLayout") 29 | self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 30 | 31 | self.verticalLayout.addItem(self.verticalSpacer) 32 | 33 | self.horizontalLayout = QHBoxLayout() 34 | self.horizontalLayout.setObjectName(u"horizontalLayout") 35 | self.horizontalSpacer = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 36 | 37 | self.horizontalLayout.addItem(self.horizontalSpacer) 38 | 39 | self.label = QLabel(AddBookWidget) 40 | self.label.setObjectName(u"label") 41 | 42 | self.horizontalLayout.addWidget(self.label) 43 | 44 | self.horizontalSpacer_15 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 45 | 46 | self.horizontalLayout.addItem(self.horizontalSpacer_15) 47 | 48 | self.m_titleLineEdit = QLineEdit(AddBookWidget) 49 | self.m_titleLineEdit.setObjectName(u"m_titleLineEdit") 50 | 51 | self.horizontalLayout.addWidget(self.m_titleLineEdit) 52 | 53 | self.horizontalSpacer_7 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 54 | 55 | self.horizontalLayout.addItem(self.horizontalSpacer_7) 56 | 57 | 58 | self.verticalLayout.addLayout(self.horizontalLayout) 59 | 60 | self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 61 | 62 | self.verticalLayout.addItem(self.verticalSpacer_2) 63 | 64 | self.horizontalLayout_2 = QHBoxLayout() 65 | self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") 66 | self.horizontalSpacer_2 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 67 | 68 | self.horizontalLayout_2.addItem(self.horizontalSpacer_2) 69 | 70 | self.label_2 = QLabel(AddBookWidget) 71 | self.label_2.setObjectName(u"label_2") 72 | 73 | self.horizontalLayout_2.addWidget(self.label_2) 74 | 75 | self.horizontalSpacer_16 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 76 | 77 | self.horizontalLayout_2.addItem(self.horizontalSpacer_16) 78 | 79 | self.m_authorLineEdit = QLineEdit(AddBookWidget) 80 | self.m_authorLineEdit.setObjectName(u"m_authorLineEdit") 81 | 82 | self.horizontalLayout_2.addWidget(self.m_authorLineEdit) 83 | 84 | self.horizontalSpacer_8 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 85 | 86 | self.horizontalLayout_2.addItem(self.horizontalSpacer_8) 87 | 88 | 89 | self.verticalLayout.addLayout(self.horizontalLayout_2) 90 | 91 | self.verticalSpacer_3 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 92 | 93 | self.verticalLayout.addItem(self.verticalSpacer_3) 94 | 95 | self.horizontalLayout_3 = QHBoxLayout() 96 | self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") 97 | self.horizontalSpacer_3 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 98 | 99 | self.horizontalLayout_3.addItem(self.horizontalSpacer_3) 100 | 101 | self.label_3 = QLabel(AddBookWidget) 102 | self.label_3.setObjectName(u"label_3") 103 | 104 | self.horizontalLayout_3.addWidget(self.label_3) 105 | 106 | self.horizontalSpacer_17 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 107 | 108 | self.horizontalLayout_3.addItem(self.horizontalSpacer_17) 109 | 110 | self.m_publishDateEdit = QDateEdit(AddBookWidget) 111 | self.m_publishDateEdit.setObjectName(u"m_publishDateEdit") 112 | sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) 113 | sizePolicy.setHorizontalStretch(0) 114 | sizePolicy.setVerticalStretch(0) 115 | sizePolicy.setHeightForWidth(self.m_publishDateEdit.sizePolicy().hasHeightForWidth()) 116 | self.m_publishDateEdit.setSizePolicy(sizePolicy) 117 | 118 | self.horizontalLayout_3.addWidget(self.m_publishDateEdit) 119 | 120 | self.horizontalSpacer_9 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 121 | 122 | self.horizontalLayout_3.addItem(self.horizontalSpacer_9) 123 | 124 | 125 | self.verticalLayout.addLayout(self.horizontalLayout_3) 126 | 127 | self.verticalSpacer_4 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 128 | 129 | self.verticalLayout.addItem(self.verticalSpacer_4) 130 | 131 | self.horizontalLayout_4 = QHBoxLayout() 132 | self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") 133 | self.horizontalSpacer_4 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 134 | 135 | self.horizontalLayout_4.addItem(self.horizontalSpacer_4) 136 | 137 | self.label_4 = QLabel(AddBookWidget) 138 | self.label_4.setObjectName(u"label_4") 139 | 140 | self.horizontalLayout_4.addWidget(self.label_4) 141 | 142 | self.horizontalSpacer_18 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 143 | 144 | self.horizontalLayout_4.addItem(self.horizontalSpacer_18) 145 | 146 | self.m_publishLineEdit = QLineEdit(AddBookWidget) 147 | self.m_publishLineEdit.setObjectName(u"m_publishLineEdit") 148 | 149 | self.horizontalLayout_4.addWidget(self.m_publishLineEdit) 150 | 151 | self.horizontalSpacer_10 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 152 | 153 | self.horizontalLayout_4.addItem(self.horizontalSpacer_10) 154 | 155 | 156 | self.verticalLayout.addLayout(self.horizontalLayout_4) 157 | 158 | self.verticalSpacer_5 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 159 | 160 | self.verticalLayout.addItem(self.verticalSpacer_5) 161 | 162 | self.horizontalLayout_5 = QHBoxLayout() 163 | self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") 164 | self.horizontalSpacer_5 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 165 | 166 | self.horizontalLayout_5.addItem(self.horizontalSpacer_5) 167 | 168 | self.label_5 = QLabel(AddBookWidget) 169 | self.label_5.setObjectName(u"label_5") 170 | 171 | self.horizontalLayout_5.addWidget(self.label_5) 172 | 173 | self.horizontalSpacer_19 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 174 | 175 | self.horizontalLayout_5.addItem(self.horizontalSpacer_19) 176 | 177 | self.m_priceSpinBox = QDoubleSpinBox(AddBookWidget) 178 | self.m_priceSpinBox.setObjectName(u"m_priceSpinBox") 179 | sizePolicy.setHeightForWidth(self.m_priceSpinBox.sizePolicy().hasHeightForWidth()) 180 | self.m_priceSpinBox.setSizePolicy(sizePolicy) 181 | 182 | self.horizontalLayout_5.addWidget(self.m_priceSpinBox) 183 | 184 | self.horizontalSpacer_11 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 185 | 186 | self.horizontalLayout_5.addItem(self.horizontalSpacer_11) 187 | 188 | 189 | self.verticalLayout.addLayout(self.horizontalLayout_5) 190 | 191 | self.verticalSpacer_6 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 192 | 193 | self.verticalLayout.addItem(self.verticalSpacer_6) 194 | 195 | self.horizontalLayout_6 = QHBoxLayout() 196 | self.horizontalLayout_6.setObjectName(u"horizontalLayout_6") 197 | self.horizontalSpacer_6 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 198 | 199 | self.horizontalLayout_6.addItem(self.horizontalSpacer_6) 200 | 201 | self.label_6 = QLabel(AddBookWidget) 202 | self.label_6.setObjectName(u"label_6") 203 | 204 | self.horizontalLayout_6.addWidget(self.label_6) 205 | 206 | self.horizontalSpacer_20 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 207 | 208 | self.horizontalLayout_6.addItem(self.horizontalSpacer_20) 209 | 210 | self.m_introLineEdit = QLineEdit(AddBookWidget) 211 | self.m_introLineEdit.setObjectName(u"m_introLineEdit") 212 | 213 | self.horizontalLayout_6.addWidget(self.m_introLineEdit) 214 | 215 | self.horizontalSpacer_12 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 216 | 217 | self.horizontalLayout_6.addItem(self.horizontalSpacer_12) 218 | 219 | 220 | self.verticalLayout.addLayout(self.horizontalLayout_6) 221 | 222 | self.verticalSpacer_7 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 223 | 224 | self.verticalLayout.addItem(self.verticalSpacer_7) 225 | 226 | self.horizontalLayout_7 = QHBoxLayout() 227 | self.horizontalLayout_7.setObjectName(u"horizontalLayout_7") 228 | self.horizontalSpacer_13 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 229 | 230 | self.horizontalLayout_7.addItem(self.horizontalSpacer_13) 231 | 232 | self.m_addButton = QPushButton(AddBookWidget) 233 | self.m_addButton.setObjectName(u"m_addButton") 234 | 235 | self.horizontalLayout_7.addWidget(self.m_addButton) 236 | 237 | self.horizontalSpacer_21 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 238 | 239 | self.horizontalLayout_7.addItem(self.horizontalSpacer_21) 240 | 241 | self.m_returnButton = QPushButton(AddBookWidget) 242 | self.m_returnButton.setObjectName(u"m_returnButton") 243 | 244 | self.horizontalLayout_7.addWidget(self.m_returnButton) 245 | 246 | self.horizontalSpacer_14 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 247 | 248 | self.horizontalLayout_7.addItem(self.horizontalSpacer_14) 249 | 250 | 251 | self.verticalLayout.addLayout(self.horizontalLayout_7) 252 | 253 | self.verticalSpacer_8 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 254 | 255 | self.verticalLayout.addItem(self.verticalSpacer_8) 256 | 257 | 258 | self.retranslateUi(AddBookWidget) 259 | 260 | QMetaObject.connectSlotsByName(AddBookWidget) 261 | # setupUi 262 | 263 | def retranslateUi(self, AddBookWidget): 264 | AddBookWidget.setWindowTitle(QCoreApplication.translate("AddBookWidget", u"\u6dfb\u52a0\u65b0\u4e66", None)) 265 | self.label.setText(QCoreApplication.translate("AddBookWidget", u"\u6807\u9898\uff1a", None)) 266 | self.label_2.setText(QCoreApplication.translate("AddBookWidget", u"\u4f5c\u8005\uff1a", None)) 267 | self.label_3.setText(QCoreApplication.translate("AddBookWidget", u"\u51fa\u7248\u65e5\u671f\uff1a", None)) 268 | self.label_4.setText(QCoreApplication.translate("AddBookWidget", u"\u51fa\u7248\u793e\uff1a", None)) 269 | self.label_5.setText(QCoreApplication.translate("AddBookWidget", u"\u4ef7\u683c\uff1a", None)) 270 | self.label_6.setText(QCoreApplication.translate("AddBookWidget", u"\u7b80\u4ecb\uff1a", None)) 271 | self.m_addButton.setText(QCoreApplication.translate("AddBookWidget", u"\u786e\u8ba4\u6dfb\u52a0", None)) 272 | self.m_returnButton.setText(QCoreApplication.translate("AddBookWidget", u"\u8fd4\u56de", None)) 273 | # retranslateUi 274 | 275 | -------------------------------------------------------------------------------- /widget/ui_administerloginwidget.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'administerloginwidget.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.5.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QHBoxLayout, QLabel, QLineEdit, 19 | QPushButton, QSizePolicy, QSpacerItem, QVBoxLayout, 20 | QWidget) 21 | 22 | class Ui_AdministerLoginWidget(object): 23 | def setupUi(self, AdministerLoginWidget): 24 | if not AdministerLoginWidget.objectName(): 25 | AdministerLoginWidget.setObjectName(u"AdministerLoginWidget") 26 | AdministerLoginWidget.resize(796, 568) 27 | self.verticalLayout = QVBoxLayout(AdministerLoginWidget) 28 | self.verticalLayout.setObjectName(u"verticalLayout") 29 | self.verticalSpacer_4 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 30 | 31 | self.verticalLayout.addItem(self.verticalSpacer_4) 32 | 33 | self.label = QLabel(AdministerLoginWidget) 34 | self.label.setObjectName(u"label") 35 | font = QFont() 36 | font.setFamilies([u"\u9ed1\u4f53"]) 37 | font.setPointSize(16) 38 | self.label.setFont(font) 39 | self.label.setAlignment(Qt.AlignCenter) 40 | 41 | self.verticalLayout.addWidget(self.label) 42 | 43 | self.verticalSpacer_3 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 44 | 45 | self.verticalLayout.addItem(self.verticalSpacer_3) 46 | 47 | self.horizontalLayout = QHBoxLayout() 48 | self.horizontalLayout.setObjectName(u"horizontalLayout") 49 | self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 50 | 51 | self.horizontalLayout.addItem(self.horizontalSpacer) 52 | 53 | self.label_2 = QLabel(AdministerLoginWidget) 54 | self.label_2.setObjectName(u"label_2") 55 | 56 | self.horizontalLayout.addWidget(self.label_2) 57 | 58 | self.m_accountLineEdit = QLineEdit(AdministerLoginWidget) 59 | self.m_accountLineEdit.setObjectName(u"m_accountLineEdit") 60 | 61 | self.horizontalLayout.addWidget(self.m_accountLineEdit) 62 | 63 | self.horizontalSpacer_3 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 64 | 65 | self.horizontalLayout.addItem(self.horizontalSpacer_3) 66 | 67 | 68 | self.verticalLayout.addLayout(self.horizontalLayout) 69 | 70 | self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 71 | 72 | self.verticalLayout.addItem(self.verticalSpacer_2) 73 | 74 | self.horizontalLayout_2 = QHBoxLayout() 75 | self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") 76 | self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 77 | 78 | self.horizontalLayout_2.addItem(self.horizontalSpacer_2) 79 | 80 | self.label_3 = QLabel(AdministerLoginWidget) 81 | self.label_3.setObjectName(u"label_3") 82 | 83 | self.horizontalLayout_2.addWidget(self.label_3) 84 | 85 | self.m_passwordLineEdit = QLineEdit(AdministerLoginWidget) 86 | self.m_passwordLineEdit.setObjectName(u"m_passwordLineEdit") 87 | self.m_passwordLineEdit.setEchoMode(QLineEdit.Password) 88 | 89 | self.horizontalLayout_2.addWidget(self.m_passwordLineEdit) 90 | 91 | self.horizontalSpacer_4 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 92 | 93 | self.horizontalLayout_2.addItem(self.horizontalSpacer_4) 94 | 95 | 96 | self.verticalLayout.addLayout(self.horizontalLayout_2) 97 | 98 | self.verticalSpacer_5 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 99 | 100 | self.verticalLayout.addItem(self.verticalSpacer_5) 101 | 102 | self.horizontalLayout_3 = QHBoxLayout() 103 | self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") 104 | self.horizontalSpacer_5 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 105 | 106 | self.horizontalLayout_3.addItem(self.horizontalSpacer_5) 107 | 108 | self.m_loginButton = QPushButton(AdministerLoginWidget) 109 | self.m_loginButton.setObjectName(u"m_loginButton") 110 | 111 | self.horizontalLayout_3.addWidget(self.m_loginButton) 112 | 113 | self.horizontalSpacer_7 = QSpacerItem(40, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 114 | 115 | self.horizontalLayout_3.addItem(self.horizontalSpacer_7) 116 | 117 | self.m_returnButton = QPushButton(AdministerLoginWidget) 118 | self.m_returnButton.setObjectName(u"m_returnButton") 119 | 120 | self.horizontalLayout_3.addWidget(self.m_returnButton) 121 | 122 | self.horizontalSpacer_6 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 123 | 124 | self.horizontalLayout_3.addItem(self.horizontalSpacer_6) 125 | 126 | 127 | self.verticalLayout.addLayout(self.horizontalLayout_3) 128 | 129 | self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 130 | 131 | self.verticalLayout.addItem(self.verticalSpacer) 132 | 133 | 134 | self.retranslateUi(AdministerLoginWidget) 135 | 136 | QMetaObject.connectSlotsByName(AdministerLoginWidget) 137 | # setupUi 138 | 139 | def retranslateUi(self, AdministerLoginWidget): 140 | AdministerLoginWidget.setWindowTitle(QCoreApplication.translate("AdministerLoginWidget", u"Form", None)) 141 | self.label.setText(QCoreApplication.translate("AdministerLoginWidget", u"\u7ba1\u7406\u5458\u767b\u5f55", None)) 142 | self.label_2.setText(QCoreApplication.translate("AdministerLoginWidget", u"\u5e10\u53f7\uff1a", None)) 143 | self.m_accountLineEdit.setText("") 144 | self.label_3.setText(QCoreApplication.translate("AdministerLoginWidget", u"\u5bc6\u7801\uff1a", None)) 145 | self.m_passwordLineEdit.setText("") 146 | self.m_loginButton.setText(QCoreApplication.translate("AdministerLoginWidget", u"\u767b\u5f55", None)) 147 | self.m_returnButton.setText(QCoreApplication.translate("AdministerLoginWidget", u"\u8fd4\u56de", None)) 148 | # retranslateUi 149 | 150 | -------------------------------------------------------------------------------- /widget/ui_adminwidget.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'adminwidget.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.5.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QHBoxLayout, QHeaderView, QPushButton, 19 | QSizePolicy, QSpacerItem, QVBoxLayout, QWidget) 20 | 21 | from view.bookinfoviewforadmin import BookInfoViewForAdmin 22 | 23 | class Ui_AdminWidget(object): 24 | def setupUi(self, AdminWidget): 25 | if not AdminWidget.objectName(): 26 | AdminWidget.setObjectName(u"AdminWidget") 27 | AdminWidget.resize(631, 464) 28 | self.verticalLayout = QVBoxLayout(AdminWidget) 29 | self.verticalLayout.setObjectName(u"verticalLayout") 30 | self.horizontalLayout = QHBoxLayout() 31 | self.horizontalLayout.setObjectName(u"horizontalLayout") 32 | self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 33 | 34 | self.horizontalLayout.addItem(self.horizontalSpacer) 35 | 36 | self.m_addBookButton = QPushButton(AdminWidget) 37 | self.m_addBookButton.setObjectName(u"m_addBookButton") 38 | 39 | self.horizontalLayout.addWidget(self.m_addBookButton) 40 | 41 | self.m_logoutButton = QPushButton(AdminWidget) 42 | self.m_logoutButton.setObjectName(u"m_logoutButton") 43 | self.m_logoutButton.setStyleSheet(u"background-color: red") 44 | 45 | self.horizontalLayout.addWidget(self.m_logoutButton) 46 | 47 | 48 | self.verticalLayout.addLayout(self.horizontalLayout) 49 | 50 | self.m_bookInfoView = BookInfoViewForAdmin(AdminWidget) 51 | self.m_bookInfoView.setObjectName(u"m_bookInfoView") 52 | 53 | self.verticalLayout.addWidget(self.m_bookInfoView) 54 | 55 | 56 | self.retranslateUi(AdminWidget) 57 | 58 | QMetaObject.connectSlotsByName(AdminWidget) 59 | # setupUi 60 | 61 | def retranslateUi(self, AdminWidget): 62 | AdminWidget.setWindowTitle(QCoreApplication.translate("AdminWidget", u"Form", None)) 63 | self.m_addBookButton.setText(QCoreApplication.translate("AdminWidget", u"\u6dfb\u52a0\u4e66\u7c4d", None)) 64 | self.m_logoutButton.setText(QCoreApplication.translate("AdminWidget", u"\u9000\u51fa\u767b\u5f55", None)) 65 | # retranslateUi 66 | 67 | -------------------------------------------------------------------------------- /widget/ui_borrowwidget.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'borrowwidget.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.5.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QHBoxLayout, QHeaderView, QPushButton, 19 | QSizePolicy, QSpacerItem, QVBoxLayout, QWidget) 20 | 21 | from view.bookinfoviewforreader import BookInfoViewForReader 22 | from view.userinfoview import UserInfoView 23 | 24 | class Ui_BorrowWidget(object): 25 | def setupUi(self, BorrowWidget): 26 | if not BorrowWidget.objectName(): 27 | BorrowWidget.setObjectName(u"BorrowWidget") 28 | BorrowWidget.resize(631, 464) 29 | self.verticalLayout = QVBoxLayout(BorrowWidget) 30 | self.verticalLayout.setObjectName(u"verticalLayout") 31 | self.m_userInfoView = UserInfoView(BorrowWidget) 32 | self.m_userInfoView.setObjectName(u"m_userInfoView") 33 | sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) 34 | sizePolicy.setHorizontalStretch(0) 35 | sizePolicy.setVerticalStretch(0) 36 | sizePolicy.setHeightForWidth(self.m_userInfoView.sizePolicy().hasHeightForWidth()) 37 | self.m_userInfoView.setSizePolicy(sizePolicy) 38 | self.m_userInfoView.setMinimumSize(QSize(0, 100)) 39 | self.m_userInfoView.setMaximumSize(QSize(16777215, 100)) 40 | 41 | self.verticalLayout.addWidget(self.m_userInfoView) 42 | 43 | self.horizontalLayout = QHBoxLayout() 44 | self.horizontalLayout.setObjectName(u"horizontalLayout") 45 | self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 46 | 47 | self.horizontalLayout.addItem(self.horizontalSpacer) 48 | 49 | self.m_logoutButton = QPushButton(BorrowWidget) 50 | self.m_logoutButton.setObjectName(u"m_logoutButton") 51 | self.m_logoutButton.setStyleSheet(u"background-color: red; color: white;") 52 | 53 | self.horizontalLayout.addWidget(self.m_logoutButton) 54 | 55 | 56 | self.verticalLayout.addLayout(self.horizontalLayout) 57 | 58 | self.m_bookInfoView = BookInfoViewForReader(BorrowWidget) 59 | self.m_bookInfoView.setObjectName(u"m_bookInfoView") 60 | 61 | self.verticalLayout.addWidget(self.m_bookInfoView) 62 | 63 | 64 | self.retranslateUi(BorrowWidget) 65 | 66 | QMetaObject.connectSlotsByName(BorrowWidget) 67 | # setupUi 68 | 69 | def retranslateUi(self, BorrowWidget): 70 | BorrowWidget.setWindowTitle(QCoreApplication.translate("BorrowWidget", u"Form", None)) 71 | self.m_logoutButton.setText(QCoreApplication.translate("BorrowWidget", u"\u9000\u51fa\u767b\u5f55", None)) 72 | # retranslateUi 73 | 74 | -------------------------------------------------------------------------------- /widget/ui_mainwindow.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'mainwindow.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.5.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QHBoxLayout, QLabel, QPushButton, 19 | QSizePolicy, QSpacerItem, QStackedWidget, QVBoxLayout, 20 | QWidget) 21 | 22 | from widget.addbookwidget import AddBookWidget 23 | from widget.administerloginwidget import AdministerLoginWidget 24 | from widget.adminwidget import AdminWidget 25 | from widget.borrowwidget import BorrowWidget 26 | from widget.readerloginwidget import ReaderLoginWidget 27 | from widget.registerwidget import RegisterWidget 28 | 29 | class Ui_MainWindow(object): 30 | def setupUi(self, MainWindow): 31 | if not MainWindow.objectName(): 32 | MainWindow.setObjectName(u"MainWindow") 33 | MainWindow.resize(708, 451) 34 | MainWindow.setStyleSheet(u"QPushButton {\n" 35 | " border-radius: 5px;\n" 36 | " background-color: rgb(64, 158, 255);\n" 37 | " color: white;\n" 38 | " min-height: 25px;\n" 39 | " max-height: 25px;\n" 40 | " min-width: 70px;\n" 41 | " max-width: 70px;\n" 42 | "}\n" 43 | "QPushButton:hover {\n" 44 | " background-color: rgb(102, 177, 255);\n" 45 | "}\n" 46 | "\n" 47 | "#m_welcomeWidget {\n" 48 | " background-color: white;\n" 49 | "}") 50 | self.m_welcomeWidget = QWidget() 51 | self.m_welcomeWidget.setObjectName(u"m_welcomeWidget") 52 | self.verticalLayout = QVBoxLayout(self.m_welcomeWidget) 53 | self.verticalLayout.setObjectName(u"verticalLayout") 54 | self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 55 | 56 | self.verticalLayout.addItem(self.verticalSpacer) 57 | 58 | self.label = QLabel(self.m_welcomeWidget) 59 | self.label.setObjectName(u"label") 60 | font = QFont() 61 | font.setFamilies([u"\u9ed1\u4f53"]) 62 | font.setPointSize(16) 63 | self.label.setFont(font) 64 | self.label.setAlignment(Qt.AlignCenter) 65 | 66 | self.verticalLayout.addWidget(self.label) 67 | 68 | self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 69 | 70 | self.verticalLayout.addItem(self.verticalSpacer_2) 71 | 72 | self.horizontalLayout = QHBoxLayout() 73 | self.horizontalLayout.setObjectName(u"horizontalLayout") 74 | self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 75 | 76 | self.horizontalLayout.addItem(self.horizontalSpacer_2) 77 | 78 | self.m_readerLoginButton = QPushButton(self.m_welcomeWidget) 79 | self.m_readerLoginButton.setObjectName(u"m_readerLoginButton") 80 | 81 | self.horizontalLayout.addWidget(self.m_readerLoginButton) 82 | 83 | self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 84 | 85 | self.horizontalLayout.addItem(self.horizontalSpacer) 86 | 87 | self.m_administerLoginButton = QPushButton(self.m_welcomeWidget) 88 | self.m_administerLoginButton.setObjectName(u"m_administerLoginButton") 89 | 90 | self.horizontalLayout.addWidget(self.m_administerLoginButton) 91 | 92 | self.horizontalSpacer_3 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 93 | 94 | self.horizontalLayout.addItem(self.horizontalSpacer_3) 95 | 96 | 97 | self.verticalLayout.addLayout(self.horizontalLayout) 98 | 99 | self.verticalSpacer_3 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 100 | 101 | self.verticalLayout.addItem(self.verticalSpacer_3) 102 | 103 | MainWindow.addWidget(self.m_welcomeWidget) 104 | self.m_readerLoginWidget = ReaderLoginWidget() 105 | self.m_readerLoginWidget.setObjectName(u"m_readerLoginWidget") 106 | MainWindow.addWidget(self.m_readerLoginWidget) 107 | self.m_administerLoginWidget = AdministerLoginWidget() 108 | self.m_administerLoginWidget.setObjectName(u"m_administerLoginWidget") 109 | MainWindow.addWidget(self.m_administerLoginWidget) 110 | self.m_borrowWidget = BorrowWidget() 111 | self.m_borrowWidget.setObjectName(u"m_borrowWidget") 112 | MainWindow.addWidget(self.m_borrowWidget) 113 | self.m_registerWidget = RegisterWidget() 114 | self.m_registerWidget.setObjectName(u"m_registerWidget") 115 | MainWindow.addWidget(self.m_registerWidget) 116 | self.m_adminWidget = AdminWidget() 117 | self.m_adminWidget.setObjectName(u"m_adminWidget") 118 | MainWindow.addWidget(self.m_adminWidget) 119 | self.m_addBookWidget = AddBookWidget() 120 | self.m_addBookWidget.setObjectName(u"m_addBookWidget") 121 | MainWindow.addWidget(self.m_addBookWidget) 122 | 123 | self.retranslateUi(MainWindow) 124 | 125 | QMetaObject.connectSlotsByName(MainWindow) 126 | # setupUi 127 | 128 | def retranslateUi(self, MainWindow): 129 | MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"\u56fe\u4e66\u7ba1\u7406\u7cfb\u7edf", None)) 130 | self.label.setText(QCoreApplication.translate("MainWindow", u"\u6b22\u8fce\u4f7f\u7528\u56fe\u4e66\u7ba1\u7406\u7cfb\u7edf", None)) 131 | self.m_readerLoginButton.setText(QCoreApplication.translate("MainWindow", u"\u8bfb\u8005\u767b\u5f55", None)) 132 | self.m_administerLoginButton.setText(QCoreApplication.translate("MainWindow", u"\u7ba1\u7406\u5458\u767b\u5f55", None)) 133 | # retranslateUi 134 | 135 | -------------------------------------------------------------------------------- /widget/ui_readerloginwidget.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'readerloginwidget.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.5.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QHBoxLayout, QLabel, QLineEdit, 19 | QPushButton, QSizePolicy, QSpacerItem, QVBoxLayout, 20 | QWidget) 21 | 22 | class Ui_ReaderLoginWidget(object): 23 | def setupUi(self, ReaderLoginWidget): 24 | if not ReaderLoginWidget.objectName(): 25 | ReaderLoginWidget.setObjectName(u"ReaderLoginWidget") 26 | ReaderLoginWidget.resize(591, 456) 27 | self.verticalLayout = QVBoxLayout(ReaderLoginWidget) 28 | self.verticalLayout.setObjectName(u"verticalLayout") 29 | self.verticalSpacer_5 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 30 | 31 | self.verticalLayout.addItem(self.verticalSpacer_5) 32 | 33 | self.label_3 = QLabel(ReaderLoginWidget) 34 | self.label_3.setObjectName(u"label_3") 35 | font = QFont() 36 | font.setFamilies([u"\u9ed1\u4f53"]) 37 | font.setPointSize(16) 38 | self.label_3.setFont(font) 39 | self.label_3.setAlignment(Qt.AlignCenter) 40 | 41 | self.verticalLayout.addWidget(self.label_3) 42 | 43 | self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 44 | 45 | self.verticalLayout.addItem(self.verticalSpacer_2) 46 | 47 | self.horizontalLayout = QHBoxLayout() 48 | self.horizontalLayout.setObjectName(u"horizontalLayout") 49 | self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 50 | 51 | self.horizontalLayout.addItem(self.horizontalSpacer_2) 52 | 53 | self.label = QLabel(ReaderLoginWidget) 54 | self.label.setObjectName(u"label") 55 | 56 | self.horizontalLayout.addWidget(self.label) 57 | 58 | self.m_accountLineEdit = QLineEdit(ReaderLoginWidget) 59 | self.m_accountLineEdit.setObjectName(u"m_accountLineEdit") 60 | 61 | self.horizontalLayout.addWidget(self.m_accountLineEdit) 62 | 63 | self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 64 | 65 | self.horizontalLayout.addItem(self.horizontalSpacer) 66 | 67 | 68 | self.verticalLayout.addLayout(self.horizontalLayout) 69 | 70 | self.verticalSpacer_3 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 71 | 72 | self.verticalLayout.addItem(self.verticalSpacer_3) 73 | 74 | self.horizontalLayout_2 = QHBoxLayout() 75 | self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") 76 | self.horizontalSpacer_4 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 77 | 78 | self.horizontalLayout_2.addItem(self.horizontalSpacer_4) 79 | 80 | self.label_2 = QLabel(ReaderLoginWidget) 81 | self.label_2.setObjectName(u"label_2") 82 | 83 | self.horizontalLayout_2.addWidget(self.label_2) 84 | 85 | self.m_passwordLineEdit = QLineEdit(ReaderLoginWidget) 86 | self.m_passwordLineEdit.setObjectName(u"m_passwordLineEdit") 87 | self.m_passwordLineEdit.setEchoMode(QLineEdit.Password) 88 | 89 | self.horizontalLayout_2.addWidget(self.m_passwordLineEdit) 90 | 91 | self.horizontalSpacer_3 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 92 | 93 | self.horizontalLayout_2.addItem(self.horizontalSpacer_3) 94 | 95 | 96 | self.verticalLayout.addLayout(self.horizontalLayout_2) 97 | 98 | self.verticalSpacer_4 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 99 | 100 | self.verticalLayout.addItem(self.verticalSpacer_4) 101 | 102 | self.horizontalLayout_3 = QHBoxLayout() 103 | self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") 104 | self.horizontalSpacer_6 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 105 | 106 | self.horizontalLayout_3.addItem(self.horizontalSpacer_6) 107 | 108 | self.m_loginButton = QPushButton(ReaderLoginWidget) 109 | self.m_loginButton.setObjectName(u"m_loginButton") 110 | 111 | self.horizontalLayout_3.addWidget(self.m_loginButton) 112 | 113 | self.horizontalSpacer_7 = QSpacerItem(40, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 114 | 115 | self.horizontalLayout_3.addItem(self.horizontalSpacer_7) 116 | 117 | self.m_registerButton = QPushButton(ReaderLoginWidget) 118 | self.m_registerButton.setObjectName(u"m_registerButton") 119 | 120 | self.horizontalLayout_3.addWidget(self.m_registerButton) 121 | 122 | self.horizontalSpacer_8 = QSpacerItem(40, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 123 | 124 | self.horizontalLayout_3.addItem(self.horizontalSpacer_8) 125 | 126 | self.m_returnButton = QPushButton(ReaderLoginWidget) 127 | self.m_returnButton.setObjectName(u"m_returnButton") 128 | 129 | self.horizontalLayout_3.addWidget(self.m_returnButton) 130 | 131 | self.horizontalSpacer_5 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 132 | 133 | self.horizontalLayout_3.addItem(self.horizontalSpacer_5) 134 | 135 | 136 | self.verticalLayout.addLayout(self.horizontalLayout_3) 137 | 138 | self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 139 | 140 | self.verticalLayout.addItem(self.verticalSpacer) 141 | 142 | 143 | self.retranslateUi(ReaderLoginWidget) 144 | 145 | QMetaObject.connectSlotsByName(ReaderLoginWidget) 146 | # setupUi 147 | 148 | def retranslateUi(self, ReaderLoginWidget): 149 | ReaderLoginWidget.setWindowTitle(QCoreApplication.translate("ReaderLoginWidget", u"Form", None)) 150 | self.label_3.setText(QCoreApplication.translate("ReaderLoginWidget", u"\u8bfb\u8005\u767b\u5f55", None)) 151 | self.label.setText(QCoreApplication.translate("ReaderLoginWidget", u"\u59d3\u540d\uff1a", None)) 152 | self.m_accountLineEdit.setText("") 153 | self.label_2.setText(QCoreApplication.translate("ReaderLoginWidget", u"\u5bc6\u7801\uff1a", None)) 154 | self.m_passwordLineEdit.setText("") 155 | self.m_loginButton.setText(QCoreApplication.translate("ReaderLoginWidget", u"\u767b\u5f55", None)) 156 | self.m_registerButton.setText(QCoreApplication.translate("ReaderLoginWidget", u"\u6ce8\u518c", None)) 157 | self.m_returnButton.setText(QCoreApplication.translate("ReaderLoginWidget", u"\u8fd4\u56de", None)) 158 | # retranslateUi 159 | 160 | -------------------------------------------------------------------------------- /widget/ui_registerwidget.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'registerwidget.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.5.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QComboBox, QHBoxLayout, QLabel, 19 | QLineEdit, QPushButton, QSizePolicy, QSpacerItem, 20 | QVBoxLayout, QWidget) 21 | 22 | class Ui_RegisterWidget(object): 23 | def setupUi(self, RegisterWidget): 24 | if not RegisterWidget.objectName(): 25 | RegisterWidget.setObjectName(u"RegisterWidget") 26 | RegisterWidget.resize(708, 429) 27 | self.verticalLayout = QVBoxLayout(RegisterWidget) 28 | self.verticalLayout.setObjectName(u"verticalLayout") 29 | self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 30 | 31 | self.verticalLayout.addItem(self.verticalSpacer) 32 | 33 | self.horizontalLayout = QHBoxLayout() 34 | self.horizontalLayout.setObjectName(u"horizontalLayout") 35 | self.horizontalSpacer = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 36 | 37 | self.horizontalLayout.addItem(self.horizontalSpacer) 38 | 39 | self.label = QLabel(RegisterWidget) 40 | self.label.setObjectName(u"label") 41 | 42 | self.horizontalLayout.addWidget(self.label) 43 | 44 | self.horizontalSpacer_15 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 45 | 46 | self.horizontalLayout.addItem(self.horizontalSpacer_15) 47 | 48 | self.m_nameLlineEdit = QLineEdit(RegisterWidget) 49 | self.m_nameLlineEdit.setObjectName(u"m_nameLlineEdit") 50 | 51 | self.horizontalLayout.addWidget(self.m_nameLlineEdit) 52 | 53 | self.horizontalSpacer_14 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 54 | 55 | self.horizontalLayout.addItem(self.horizontalSpacer_14) 56 | 57 | 58 | self.verticalLayout.addLayout(self.horizontalLayout) 59 | 60 | self.verticalSpacer_3 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 61 | 62 | self.verticalLayout.addItem(self.verticalSpacer_3) 63 | 64 | self.horizontalLayout_2 = QHBoxLayout() 65 | self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") 66 | self.horizontalSpacer_2 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 67 | 68 | self.horizontalLayout_2.addItem(self.horizontalSpacer_2) 69 | 70 | self.label_2 = QLabel(RegisterWidget) 71 | self.label_2.setObjectName(u"label_2") 72 | 73 | self.horizontalLayout_2.addWidget(self.label_2) 74 | 75 | self.horizontalSpacer_16 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 76 | 77 | self.horizontalLayout_2.addItem(self.horizontalSpacer_16) 78 | 79 | self.m_genderComboBox = QComboBox(RegisterWidget) 80 | self.m_genderComboBox.addItem("") 81 | self.m_genderComboBox.addItem("") 82 | self.m_genderComboBox.setObjectName(u"m_genderComboBox") 83 | sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) 84 | sizePolicy.setHorizontalStretch(0) 85 | sizePolicy.setVerticalStretch(0) 86 | sizePolicy.setHeightForWidth(self.m_genderComboBox.sizePolicy().hasHeightForWidth()) 87 | self.m_genderComboBox.setSizePolicy(sizePolicy) 88 | 89 | self.horizontalLayout_2.addWidget(self.m_genderComboBox) 90 | 91 | self.horizontalSpacer_12 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 92 | 93 | self.horizontalLayout_2.addItem(self.horizontalSpacer_12) 94 | 95 | 96 | self.verticalLayout.addLayout(self.horizontalLayout_2) 97 | 98 | self.verticalSpacer_4 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 99 | 100 | self.verticalLayout.addItem(self.verticalSpacer_4) 101 | 102 | self.horizontalLayout_3 = QHBoxLayout() 103 | self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") 104 | self.horizontalSpacer_3 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 105 | 106 | self.horizontalLayout_3.addItem(self.horizontalSpacer_3) 107 | 108 | self.label_3 = QLabel(RegisterWidget) 109 | self.label_3.setObjectName(u"label_3") 110 | 111 | self.horizontalLayout_3.addWidget(self.label_3) 112 | 113 | self.horizontalSpacer_17 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 114 | 115 | self.horizontalLayout_3.addItem(self.horizontalSpacer_17) 116 | 117 | self.m_mobileLineEdit = QLineEdit(RegisterWidget) 118 | self.m_mobileLineEdit.setObjectName(u"m_mobileLineEdit") 119 | 120 | self.horizontalLayout_3.addWidget(self.m_mobileLineEdit) 121 | 122 | self.horizontalSpacer_10 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 123 | 124 | self.horizontalLayout_3.addItem(self.horizontalSpacer_10) 125 | 126 | 127 | self.verticalLayout.addLayout(self.horizontalLayout_3) 128 | 129 | self.verticalSpacer_5 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 130 | 131 | self.verticalLayout.addItem(self.verticalSpacer_5) 132 | 133 | self.horizontalLayout_4 = QHBoxLayout() 134 | self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") 135 | self.horizontalSpacer_4 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 136 | 137 | self.horizontalLayout_4.addItem(self.horizontalSpacer_4) 138 | 139 | self.label_4 = QLabel(RegisterWidget) 140 | self.label_4.setObjectName(u"label_4") 141 | 142 | self.horizontalLayout_4.addWidget(self.label_4) 143 | 144 | self.horizontalSpacer_18 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 145 | 146 | self.horizontalLayout_4.addItem(self.horizontalSpacer_18) 147 | 148 | self.m_unitLineEdit = QLineEdit(RegisterWidget) 149 | self.m_unitLineEdit.setObjectName(u"m_unitLineEdit") 150 | 151 | self.horizontalLayout_4.addWidget(self.m_unitLineEdit) 152 | 153 | self.horizontalSpacer_11 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 154 | 155 | self.horizontalLayout_4.addItem(self.horizontalSpacer_11) 156 | 157 | 158 | self.verticalLayout.addLayout(self.horizontalLayout_4) 159 | 160 | self.verticalSpacer_6 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 161 | 162 | self.verticalLayout.addItem(self.verticalSpacer_6) 163 | 164 | self.horizontalLayout_5 = QHBoxLayout() 165 | self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") 166 | self.horizontalSpacer_9 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 167 | 168 | self.horizontalLayout_5.addItem(self.horizontalSpacer_9) 169 | 170 | self.label_5 = QLabel(RegisterWidget) 171 | self.label_5.setObjectName(u"label_5") 172 | 173 | self.horizontalLayout_5.addWidget(self.label_5) 174 | 175 | self.horizontalSpacer_19 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 176 | 177 | self.horizontalLayout_5.addItem(self.horizontalSpacer_19) 178 | 179 | self.m_roleComboBox = QComboBox(RegisterWidget) 180 | self.m_roleComboBox.addItem("") 181 | self.m_roleComboBox.addItem("") 182 | self.m_roleComboBox.addItem("") 183 | self.m_roleComboBox.addItem("") 184 | self.m_roleComboBox.setObjectName(u"m_roleComboBox") 185 | sizePolicy.setHeightForWidth(self.m_roleComboBox.sizePolicy().hasHeightForWidth()) 186 | self.m_roleComboBox.setSizePolicy(sizePolicy) 187 | 188 | self.horizontalLayout_5.addWidget(self.m_roleComboBox) 189 | 190 | self.horizontalSpacer_5 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 191 | 192 | self.horizontalLayout_5.addItem(self.horizontalSpacer_5) 193 | 194 | 195 | self.verticalLayout.addLayout(self.horizontalLayout_5) 196 | 197 | self.verticalSpacer_7 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 198 | 199 | self.verticalLayout.addItem(self.verticalSpacer_7) 200 | 201 | self.horizontalLayout_6 = QHBoxLayout() 202 | self.horizontalLayout_6.setObjectName(u"horizontalLayout_6") 203 | self.horizontalSpacer_8 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 204 | 205 | self.horizontalLayout_6.addItem(self.horizontalSpacer_8) 206 | 207 | self.label_6 = QLabel(RegisterWidget) 208 | self.label_6.setObjectName(u"label_6") 209 | 210 | self.horizontalLayout_6.addWidget(self.label_6) 211 | 212 | self.horizontalSpacer_20 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 213 | 214 | self.horizontalLayout_6.addItem(self.horizontalSpacer_20) 215 | 216 | self.m_passwordLineEdit = QLineEdit(RegisterWidget) 217 | self.m_passwordLineEdit.setObjectName(u"m_passwordLineEdit") 218 | self.m_passwordLineEdit.setEchoMode(QLineEdit.Password) 219 | 220 | self.horizontalLayout_6.addWidget(self.m_passwordLineEdit) 221 | 222 | self.horizontalSpacer_6 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 223 | 224 | self.horizontalLayout_6.addItem(self.horizontalSpacer_6) 225 | 226 | 227 | self.verticalLayout.addLayout(self.horizontalLayout_6) 228 | 229 | self.verticalSpacer_8 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 230 | 231 | self.verticalLayout.addItem(self.verticalSpacer_8) 232 | 233 | self.horizontalLayout_7 = QHBoxLayout() 234 | self.horizontalLayout_7.setObjectName(u"horizontalLayout_7") 235 | self.horizontalSpacer_7 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 236 | 237 | self.horizontalLayout_7.addItem(self.horizontalSpacer_7) 238 | 239 | self.label_7 = QLabel(RegisterWidget) 240 | self.label_7.setObjectName(u"label_7") 241 | 242 | self.horizontalLayout_7.addWidget(self.label_7) 243 | 244 | self.horizontalSpacer_21 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 245 | 246 | self.horizontalLayout_7.addItem(self.horizontalSpacer_21) 247 | 248 | self.m_passwordConfirmLineEdit = QLineEdit(RegisterWidget) 249 | self.m_passwordConfirmLineEdit.setObjectName(u"m_passwordConfirmLineEdit") 250 | self.m_passwordConfirmLineEdit.setEchoMode(QLineEdit.Password) 251 | 252 | self.horizontalLayout_7.addWidget(self.m_passwordConfirmLineEdit) 253 | 254 | self.horizontalSpacer_13 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 255 | 256 | self.horizontalLayout_7.addItem(self.horizontalSpacer_13) 257 | 258 | 259 | self.verticalLayout.addLayout(self.horizontalLayout_7) 260 | 261 | self.verticalSpacer_9 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 262 | 263 | self.verticalLayout.addItem(self.verticalSpacer_9) 264 | 265 | self.horizontalLayout_8 = QHBoxLayout() 266 | self.horizontalLayout_8.setObjectName(u"horizontalLayout_8") 267 | self.horizontalSpacer_22 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 268 | 269 | self.horizontalLayout_8.addItem(self.horizontalSpacer_22) 270 | 271 | self.m_registerButton = QPushButton(RegisterWidget) 272 | self.m_registerButton.setObjectName(u"m_registerButton") 273 | 274 | self.horizontalLayout_8.addWidget(self.m_registerButton) 275 | 276 | self.horizontalSpacer_24 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 277 | 278 | self.horizontalLayout_8.addItem(self.horizontalSpacer_24) 279 | 280 | self.m_returnButton = QPushButton(RegisterWidget) 281 | self.m_returnButton.setObjectName(u"m_returnButton") 282 | 283 | self.horizontalLayout_8.addWidget(self.m_returnButton) 284 | 285 | self.horizontalSpacer_23 = QSpacerItem(200, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) 286 | 287 | self.horizontalLayout_8.addItem(self.horizontalSpacer_23) 288 | 289 | 290 | self.verticalLayout.addLayout(self.horizontalLayout_8) 291 | 292 | self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 293 | 294 | self.verticalLayout.addItem(self.verticalSpacer_2) 295 | 296 | 297 | self.retranslateUi(RegisterWidget) 298 | 299 | QMetaObject.connectSlotsByName(RegisterWidget) 300 | # setupUi 301 | 302 | def retranslateUi(self, RegisterWidget): 303 | RegisterWidget.setWindowTitle(QCoreApplication.translate("RegisterWidget", u"Form", None)) 304 | self.label.setText(QCoreApplication.translate("RegisterWidget", u"\u59d3\u540d\uff1a", None)) 305 | self.label_2.setText(QCoreApplication.translate("RegisterWidget", u"\u6027\u522b\uff1a", None)) 306 | self.m_genderComboBox.setItemText(0, QCoreApplication.translate("RegisterWidget", u"\u7537", None)) 307 | self.m_genderComboBox.setItemText(1, QCoreApplication.translate("RegisterWidget", u"\u5973", None)) 308 | 309 | self.label_3.setText(QCoreApplication.translate("RegisterWidget", u"\u624b\u673a\u53f7\uff1a", None)) 310 | self.label_4.setText(QCoreApplication.translate("RegisterWidget", u"\u5355\u4f4d\uff1a", None)) 311 | self.label_5.setText(QCoreApplication.translate("RegisterWidget", u"\u7c7b\u522b\uff1a", None)) 312 | self.m_roleComboBox.setItemText(0, QCoreApplication.translate("RegisterWidget", u"\u6559\u5e08", None)) 313 | self.m_roleComboBox.setItemText(1, QCoreApplication.translate("RegisterWidget", u"\u7814\u7a76\u751f", None)) 314 | self.m_roleComboBox.setItemText(2, QCoreApplication.translate("RegisterWidget", u"\u672c\u79d1\u751f", None)) 315 | self.m_roleComboBox.setItemText(3, QCoreApplication.translate("RegisterWidget", u"\u5176\u4ed6", None)) 316 | 317 | self.label_6.setText(QCoreApplication.translate("RegisterWidget", u"\u5bc6\u7801\uff1a", None)) 318 | self.label_7.setText(QCoreApplication.translate("RegisterWidget", u"\u786e\u8ba4\u5bc6\u7801\uff1a", None)) 319 | self.m_registerButton.setText(QCoreApplication.translate("RegisterWidget", u"\u6ce8\u518c", None)) 320 | self.m_returnButton.setText(QCoreApplication.translate("RegisterWidget", u"\u8fd4\u56de", None)) 321 | # retranslateUi 322 | 323 | -------------------------------------------------------------------------------- /数据库实验作业要求.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hwdqm88/SDU_sql_experiment_bookdb/2eff4a5b5bc26ea630ff5d8f1781ab161951d218/数据库实验作业要求.docx --------------------------------------------------------------------------------