From bb2ed34db27e65052621dc6bc6e568717b23f6fc Mon Sep 17 00:00:00 2001 From: xtu202105570126 <1347849769@qq.com> Date: Fri, 26 May 2023 18:36:41 +0800 Subject: [PATCH] =?UTF-8?q?Delete=20'=E5=AD=A6=E7=94=9F=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F.py'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 学生管理系统.py | 586 ------------------------------------------ 1 file changed, 586 deletions(-) delete mode 100644 学生管理系统.py diff --git a/学生管理系统.py b/学生管理系统.py deleted file mode 100644 index 16f55f6..0000000 --- a/学生管理系统.py +++ /dev/null @@ -1,586 +0,0 @@ -import sys -import sqlite3 -from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QLabel, QLineEdit, QPushButton, \ - QMessageBox -from PySide6.QtSql import QSqlDatabase, QSqlQuery -from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QLabel, QLineEdit, QPushButton, \ - QMessageBox, QPlainTextEdit -from PySide6.QtWidgets import QDialog -# 创建数据库连接 -conn = sqlite3.connect('students.db') - -# 创建学生表 -conn.execute('''CREATE TABLE IF NOT EXISTS students - (name TEXT NOT NULL, - student_number INTEGER NOT NULL, - score INTEGER NOT NULL)''') -# 创建用户表 -conn.execute('''CREATE TABLE IF NOT EXISTS users - (id INTEGER PRIMARY KEY AUTOINCREMENT, - username TEXT NOT NULL, - password TEXT NOT NULL)''') -# 创建图书列表表 -conn.execute('''CREATE TABLE IF NOT EXISTS books - (book_id INTEGER PRIMARY KEY, - book_name TEXT NOT NULL, - book_status TEXT NOT NULL)''') - - - -class LoginWindow(QWidget): - def __init__(self): - super().__init__() - - self.db = QSqlDatabase.addDatabase('QSQLITE') - self.db.setDatabaseName('students.db') - self.db.open() - - self.createTable() - - self.username = QLineEdit() - self.password = QLineEdit() - self.password.setEchoMode(QLineEdit.Password) - - login_button = QPushButton('登录') - login_button.clicked.connect(self.login) - - register_button = QPushButton('注册') - register_button.clicked.connect(self.register) - - layout = QVBoxLayout() - layout.addWidget(QLabel("账号:")) - layout.addWidget(self.username) - layout.addWidget(QLabel("密码:")) - layout.addWidget(self.password) - layout.addWidget(login_button) - layout.addWidget(register_button) - self.setLayout(layout) - - def login(self): - username = self.username.text() - password = self.password.text() - - if not username or not password: - QMessageBox.warning(self, '错误', '账号密码不能为空') - return - - query = QSqlQuery(self.db) - query.exec("SELECT * FROM users WHERE username='%s' AND password='%s'" % (username, password)) - if query.next(): - self.hide() - is_admin = username == 'van' # 检查是否为管理员 - self.window = StudentApp(username, is_admin) # 传递用户名和管理员参数 - self.window.show() - else: - QMessageBox.warning(self, '错误', '账号或密码错误') - self.password.clear() - - def register(self): - username = self.username.text() - password = self.password.text() - - if not username or not password: - QMessageBox.warning(self, '错误', '账号和密码不能为空') - return - - query = QSqlQuery(self.db) - query.exec(f"SELECT * FROM users WHERE username='{username}'") - if query.next(): - QMessageBox.warning(self, '错误', '该账户已经存在') - return - - query.prepare("INSERT INTO users (username, password) VALUES (?, ?)") - query.bindValue(0, username) - query.bindValue(1, password) - if query.exec(): - QMessageBox.information(self, '成功', '你已成功注册') - else: - QMessageBox.warning(self, '错误', '注册失败') - - def createTable(self): - query = QSqlQuery(self.db) - query.exec("CREATE TABLE IF NOT EXISTS users (username varchar(20), password varchar(20))") - - # 添加管理员账号 - query.exec("SELECT * FROM users WHERE username='van'") - if not query.next(): - query.prepare("INSERT INTO users (username, password) VALUES (?, ?)") - query.bindValue(0, 'van') - query.bindValue(1, '123456') - query.exec() - - -class StudentApp(QMainWindow): - def __init__(self, username, is_admin): # 接收用户名和管理员参数 - super().__init__() - self.username = username # 保存用户名 - self.is_admin = is_admin # 保存管理员状态 - self.setWindowTitle(f'学生信息管理 - {username}') # 设置窗口标题为用户名 - - central_widget = QWidget() - self.setCentralWidget(central_widget) - - layout = QVBoxLayout() - welcome_label = QLabel(f'你好,{username}') # 显示欢迎消息 - layout.addWidget(welcome_label) - - self.name_label = QLabel("姓名:") - self.name_edit = QLineEdit() - layout.addWidget(self.name_label) - layout.addWidget(self.name_edit) - - self.student_number_label = QLabel("学号:") - self.student_number_edit = QLineEdit() - layout.addWidget(self.student_number_label) - layout.addWidget(self.student_number_edit) - - self.score_label = QLabel("成绩:") - self.score_edit = QLineEdit() - layout.addWidget(self.score_label) - layout.addWidget(self.score_edit) - - self.add_student_btn = QPushButton('添加学生信息') - self.add_student_btn.clicked.connect(self.add_student) - layout.addWidget(self.add_student_btn) - - self.find_student_btn = QPushButton('查找学生信息') - self.find_student_btn.clicked.connect(self.find_student) - layout.addWidget(self.find_student_btn) - - self.delete_student_btn = QPushButton('删除学生信息') - self.delete_student_btn.clicked.connect(self.delete_student) - layout.addWidget(self.delete_student_btn) - - self.clear_table_btn = QPushButton('清空表数据') - self.clear_table_btn.clicked.connect(self.clear_table) - layout.addWidget(self.clear_table_btn) - - self.sort_by_score_btn = QPushButton('按成绩排序') - self.sort_by_score_btn.clicked.connect(self.sort_by_score) - layout.addWidget(self.sort_by_score_btn) - - self.sort_by_student_number_btn = QPushButton('按学号排序') - self.sort_by_student_number_btn.clicked.connect(self.sort_by_student_number) - layout.addWidget(self.sort_by_student_number_btn) - self.library_system_btn = QPushButton('图书管理系统') - self.library_system_btn.clicked.connect(self.open_library_system) - layout.addWidget(self.library_system_btn) - - self.output_label = QLabel("操作结果:") - self.output_text = QPlainTextEdit() - self.output_text.setFixedSize(400, 300) - self.output_text.setReadOnly(True) - layout.addWidget(self.output_label) - layout.addWidget(self.output_text) - - self.manage_users_btn = QPushButton('管理登录用户') - self.manage_users_btn.clicked.connect(self.manage_users) - layout.addWidget(self.manage_users_btn) - - self.change_password_btn = QPushButton('修改密码') - self.change_password_btn.clicked.connect(self.change_password) - layout.addWidget(self.change_password_btn) - - self.logout_btn = QPushButton('退出') - self.logout_btn.clicked.connect(self.logout) - layout.addWidget(self.logout_btn) - - central_widget.setLayout(layout) - if not is_admin: - self.add_student_btn.setEnabled(False) - self.delete_student_btn.setEnabled(False) - self.clear_table_btn.setEnabled(False) - - self.show() - - def manage_users(self): - if self.is_admin: - self.manage_users_window = ManageUsersWindow() - self.manage_users_window.show() - else: - QMessageBox.warning(self, '权限错误', '您无权访问') - - def change_password(self): - self.change_password_window = ChangePasswordWindow(self.username, self) - self.change_password_window.show() - - def open_library_system(self): - self.library_system = LibrarySystemWindow(self.username,self.is_admin) # 传递当前登录用户的用户名 - self.library_system.show() - - def add_student(self): - name = self.name_edit.text() - student_number = self.student_number_edit.text() - score = self.score_edit.text() - - if not name or not student_number or not score: - QMessageBox.warning(self, '输入错误', '姓名、学号和成绩不能为空') - return - - cursor = conn.execute("SELECT * FROM students WHERE student_number=?", (student_number,)) - existing_student = cursor.fetchone() - if existing_student: - self.output_text.setPlainText("已存在该学号的学生信息!") - return - - conn.execute("INSERT INTO students (name, student_number, score) VALUES (?, ?, ?)", - (name, student_number, score)) - conn.commit() - self.output_text.setPlainText("学生信息已添加成功!") - self.clear_inputs() - - def find_student(self): - student_number = self.student_number_edit.text() - cursor = conn.execute("SELECT name, student_number, score FROM students WHERE student_number=?", - (student_number,)) - student = cursor.fetchone() - if student: - self.output_text.setPlainText("学生信息:\n") - self.output_text.appendPlainText("姓名: " + student[0]) - self.output_text.appendPlainText("学号: " + str(student[1])) - self.output_text.appendPlainText("成绩: " + str(student[2])) - else: - self.output_text.setPlainText("未找到学生信息!") - - self.student_number_edit.clear() - - def delete_student(self): - student_number = self.student_number_edit.text() - cursor = conn.execute("SELECT * FROM students WHERE student_number=?", (student_number,)) - student = cursor.fetchone() - if student: - conn.execute("DELETE FROM students WHERE student_number=?", (student_number,)) - conn.commit() - self.output_text.setPlainText("学生信息已删除!") - self.clear_inputs() - else: - self.output_text.setPlainText("未找到学生信息!") - - def clear_table(self): - conn.execute("DELETE FROM students") - conn.commit() - self.output_text.setPlainText("表数据已清空!") - self.clear_inputs() - - def sort_by_score(self): - cursor = conn.execute("SELECT name, student_number, score FROM students ORDER BY score DESC") - students = cursor.fetchall() - self.display_students(students) - - def sort_by_student_number(self): - cursor = conn.execute("SELECT name, student_number, score FROM students ORDER BY student_number ASC") - students = cursor.fetchall() - self.display_students(students) - - def display_students(self, students): - if students: - self.output_text.setPlainText("学生信息:\n") - count = 1 - for student in students: - self.output_text.appendPlainText(f"编号: {count}") - self.output_text.appendPlainText("姓名: " + student[0]) - self.output_text.appendPlainText("学号: " + str(student[1])) - self.output_text.appendPlainText("成绩: " + str(student[2])) - self.output_text.appendPlainText("------------------") - count += 1 - else: - self.output_text.setPlainText("数据库中没有学生信息!") - def clear_inputs(self): - self.name_edit.clear() - self.student_number_edit.clear() - self.score_edit.clear() - def logout(self): - self.close() - login_window.show() - -class ChangePasswordWindow(QDialog): - def __init__(self, username, parent=None): - super().__init__(parent) - self.setWindowTitle("修改密码") - self.username = username - - self.old_password_edit = QLineEdit() - self.old_password_edit.setEchoMode(QLineEdit.Password) - self.new_password_edit = QLineEdit() - self.new_password_edit.setEchoMode(QLineEdit.Password) - - save_button = QPushButton("保存") - save_button.clicked.connect(self.change_password) - - layout = QVBoxLayout() - layout.addWidget(QLabel("旧密码:")) - layout.addWidget(self.old_password_edit) - layout.addWidget(QLabel("新密码:")) - layout.addWidget(self.new_password_edit) - layout.addWidget(save_button) - self.setLayout(layout) - - def change_password(self): - old_password = self.old_password_edit.text() - new_password = self.new_password_edit.text() - - query = QSqlQuery() - query.exec(f"SELECT * FROM users WHERE username='{self.username}' AND password='{old_password}'") - if query.next(): - query.prepare("UPDATE users SET password=? WHERE username=?") - query.bindValue(0, new_password) - query.bindValue(1, self.username) - if query.exec(): - QMessageBox.information(self, "成功", "密码修改成功") - self.close() - else: - QMessageBox.warning(self, "失败", "密码修改失败") - else: - QMessageBox.warning(self, "失败", "旧密码错误") - -class ManageUsersWindow(QDialog): - def __init__(self): - super().__init__() - - self.setWindowTitle('管理登录用户') - self.setMinimumWidth(400) - - self.search_username_edit = QLineEdit() - self.search_username_edit.setPlaceholderText('输入用户名') - self.search_username_button = QPushButton('搜索') - self.search_username_button.clicked.connect(self.search_username) - self.delete_user_button = QPushButton('删除该账户') - self.delete_user_button.clicked.connect(self.delete_user) - self.show_all_users_button = QPushButton('显示所有的用户') - self.show_all_users_button.clicked.connect(self.show_all_users) - - - - self.output_text = QPlainTextEdit() - self.output_text.setReadOnly(True) - - layout = QVBoxLayout() - layout.addWidget(QLabel('搜索账号:')) - layout.addWidget(self.search_username_edit) - layout.addWidget(self.search_username_button) - layout.addWidget(self.show_all_users_button) - layout.addWidget(self.delete_user_button) - layout.addWidget(QLabel('用户列表:')) - layout.addWidget(self.output_text) - - - self.setLayout(layout) - - def search_username(self): - username = self.search_username_edit.text() - if not username: - QMessageBox.warning(self, '错误', '请输入用户名') - return - - query = QSqlQuery() - query.exec(f"SELECT * FROM users WHERE username='{username}'") - if query.next(): - password = query.value(2) - self.output_text.setPlainText(f'用户名: {username}\n密码: {password}') - else: - self.output_text.setPlainText('未找到该用户') - - def show_all_users(self): - query = QSqlQuery() - query.exec('SELECT * FROM users') - - users = [] - while query.next(): - username = query.value(1) - password = query.value(2) - users.append(f'用户名: {username}\n密码: {password}\n') - users.append('------------------\n') - - if users: - self.output_text.setPlainText(''.join(users)) - else: - self.output_text.setPlainText('用户表为空') - - def delete_user(self): - username = self.search_username_edit.text() - if not username: - QMessageBox.warning(self, '错误', '请输入用户名') - return - - query = QSqlQuery() - query.exec(f"SELECT * FROM users WHERE username='{username}'") - if query.next(): - query.exec(f"DELETE FROM users WHERE username='{username}'") - self.output_text.setPlainText(f'已删除账户: {username}') - self.search_username_edit.clear() - else: - self.output_text.setPlainText('未找到该用户') - - -class LibrarySystemWindow(QMainWindow): - def __init__(self, username,is_admin): - super().__init__() - self.setWindowTitle('图书管理系统') - self.username = username # 保存用户名 - self.is_admin=is_admin - - - central_widget = QWidget() - self.setCentralWidget(central_widget) - - layout = QVBoxLayout() - - self.book_id_label = QLabel("图书编号:") - self.book_id_edit = QLineEdit() - layout.addWidget(self.book_id_label) - layout.addWidget(self.book_id_edit) - - self.book_name_label = QLabel("图书名称:") - self.book_name_edit = QLineEdit() - layout.addWidget(self.book_name_label) - layout.addWidget(self.book_name_edit) - - self.borrow_btn = QPushButton('借出') - self.borrow_btn.clicked.connect(self.borrow_book) - layout.addWidget(self.borrow_btn) - - self.return_btn = QPushButton('还书') - self.return_btn.clicked.connect(self.return_book) - layout.addWidget(self.return_btn) - - self.add_book_btn = QPushButton('添加图书') - self.add_book_btn.clicked.connect(self.add_book) - layout.addWidget(self.add_book_btn) - - self.find_book_btn = QPushButton('查找图书') - self.find_book_btn.clicked.connect(self.find_book) - layout.addWidget(self.find_book_btn) - - self.delete_book_btn = QPushButton('删除图书') - self.delete_book_btn.clicked.connect(self.delete_book) - layout.addWidget(self.delete_book_btn) - - self.show_all_books_btn = QPushButton('显示所有图书') - self.show_all_books_btn.clicked.connect(self.show_all_books) - layout.addWidget(self.show_all_books_btn) - - self.output_label = QLabel("操作结果:") - self.output_text = QPlainTextEdit() - self.output_text.setFixedSize(400, 300) - self.output_text.setReadOnly(True) - layout.addWidget(self.output_label) - layout.addWidget(self.output_text) - - central_widget.setLayout(layout) - - def open_library_system(self): - self.library_system = LibrarySystemWindow(self.username) - self.library_system.show() - - def add_book(self): - if not self.is_admin: - self.output_text.setPlainText("您无权限执行该操作!") - return - book_id = self.book_id_edit.text() - book_name = self.book_name_edit.text() - - cursor = conn.execute("SELECT * FROM books WHERE book_id=?", (book_id,)) - existing_book = cursor.fetchone() - if existing_book: - self.output_text.setPlainText("已存在该图书编号的图书!") - return - - conn.execute("INSERT INTO books (book_id, book_name, book_status) VALUES (?, ?, '未借出')", - (book_id, book_name)) - conn.commit() - self.output_text.setPlainText("图书已成功添加!") - self.clear_inputs() - - def borrow_book(self): - book_id = self.book_id_edit.text() - cursor = conn.execute("SELECT * FROM books WHERE book_id=?", (book_id,)) - book = cursor.fetchone() - if book: - book_status = book[2] - if "未借出" in book_status: - borrower = self.username # 使用登录界面的账号作为借书人 - updated_status = "已借出 by " + borrower - conn.execute("UPDATE books SET book_status=? WHERE book_id=?", (updated_status, book_id)) - conn.commit() - self.output_text.setPlainText("图书已成功借出!") - else: - self.output_text.setPlainText("图书已借出,无法再次借阅!") - else: - self.output_text.setPlainText("未找到图书信息!") - self.clear_inputs() - - def return_book(self): - book_id = self.book_id_edit.text() - cursor = conn.execute("SELECT * FROM books WHERE book_id=?", (book_id,)) - book = cursor.fetchone() - if book: - book_status = book[2] - if "已借出" in book_status: - borrower = self.username # 使用登录界面的账号作为借书人 - updated_status = "未借出" # 设置为未借出状态 - conn.execute("UPDATE books SET book_status=? WHERE book_id=?", (updated_status, book_id)) - conn.commit() - self.output_text.setPlainText("图书已成功归还!") - else: - self.output_text.setPlainText("图书未借出,无需归还!") - else: - self.output_text.setPlainText("未找到图书信息!") - self.clear_inputs() - - def find_book(self): - book_id = self.book_id_edit.text() - cursor = conn.execute("SELECT book_id, book_name, book_status FROM books WHERE book_id=?", - (book_id,)) - book = cursor.fetchone() - if book: - self.output_text.setPlainText("图书信息:\n") - self.output_text.appendPlainText("图书编号: " + str(book[0])) - self.output_text.appendPlainText("图书名称: " + book[1]) - self.output_text.appendPlainText("图书借出情况: " + book[2]) - else: - self.output_text.setPlainText("未找到图书信息!") - self.book_id_edit.clear() - - def delete_book(self): - if not self.is_admin: - self.output_text.setPlainText("您无权限执行该操作!") - return - book_id = self.book_id_edit.text() - cursor = conn.execute("SELECT * FROM books WHERE book_id=?", (book_id,)) - book = cursor.fetchone() - if book: - conn.execute("DELETE FROM books WHERE book_id=?", (book_id,)) - conn.commit() - self.output_text.setPlainText("图书已成功删除!") - self.clear_inputs() - else: - self.output_text.setPlainText("未找到图书信息!") - - def show_all_books(self): - cursor = conn.execute("SELECT * FROM books") - books = cursor.fetchall() - if books: - self.output_text.setPlainText("所有图书信息:\n") - for book in books: - self.output_text.appendPlainText("图书编号: " + str(book[0])) - self.output_text.appendPlainText("图书名称: " + book[1]) - self.output_text.appendPlainText("图书借出情况: " + book[2]) - self.output_text.appendPlainText("-----------------------------") - else: - self.output_text.setPlainText("图书列表为空!") - - def return_to_student_app(self): - self.parent().show() - self.close() - - def clear_inputs(self): - self.book_id_edit.clear() - self.book_name_edit.clear() - self.book_status_edit.clear() - - -if __name__ == '__main__': - app = QApplication(sys.argv) - login_window = LoginWindow() - login_window.show() - sys.exit(app.exec()) \ No newline at end of file