You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
233 lines
9.8 KiB
233 lines
9.8 KiB
import sqlite3
|
|
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QLineEdit, QTableWidget, QTableWidgetItem,QMessageBox
|
|
class DatabaseManager(QWidget):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.setWindowTitle("公司人员数据管理系统")
|
|
|
|
# 创建数据库
|
|
self.connection = sqlite3.connect('companys.db')
|
|
self.cursor = self.connection.cursor()
|
|
|
|
# 建表
|
|
self.cursor.execute('''CREATE TABLE IF NOT EXISTS employees (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
age INTEGER NOT NULL,
|
|
gender TEXT NOT NULL,
|
|
department TEXT NOT NULL,
|
|
position TEXT NOT NULL,
|
|
salary INTEGER NOT NULL
|
|
)''')
|
|
self.connection.commit()
|
|
|
|
# 创建界面
|
|
self.create_widgets()
|
|
|
|
def create_widgets(self):
|
|
# 姓名输入框
|
|
self.name_line_edit = QLineEdit()
|
|
name_layout = QHBoxLayout()
|
|
name_label = QLabel("姓名:")
|
|
name_layout.addWidget(name_label)
|
|
name_layout.addWidget(self.name_line_edit)
|
|
|
|
# 年龄输入框
|
|
self.age_line_edit = QLineEdit()
|
|
age_layout = QHBoxLayout()
|
|
age_label = QLabel("年龄:")
|
|
age_layout.addWidget(age_label)
|
|
age_layout.addWidget(self.age_line_edit)
|
|
|
|
# 性别输入框
|
|
self.gender_line_edit = QLineEdit()
|
|
gender_layout = QHBoxLayout()
|
|
gender_label = QLabel("性别:")
|
|
gender_layout.addWidget(gender_label)
|
|
gender_layout.addWidget(self.gender_line_edit)
|
|
|
|
# 部门输入框
|
|
self.department_line_edit = QLineEdit()
|
|
department_layout = QHBoxLayout()
|
|
department_label = QLabel("部门:")
|
|
department_layout.addWidget(department_label)
|
|
department_layout.addWidget(self.department_line_edit)
|
|
|
|
# 职位输入框
|
|
self.position_line_edit = QLineEdit()
|
|
position_layout = QHBoxLayout()
|
|
position_label = QLabel("职位:")
|
|
position_layout.addWidget(position_label)
|
|
position_layout.addWidget(self.position_line_edit)
|
|
|
|
# 薪资输入框
|
|
self.salary_line_edit = QLineEdit()
|
|
salary_layout = QHBoxLayout()
|
|
salary_label = QLabel("薪资:")
|
|
salary_layout.addWidget(salary_label)
|
|
salary_layout.addWidget(self.salary_line_edit)
|
|
|
|
# 操作按钮
|
|
self.add_button = QPushButton("添加")
|
|
self.add_button.clicked.connect(self.add_employee)
|
|
|
|
self.delete_button = QPushButton("删除")
|
|
self.delete_button.clicked.connect(self.delete_employee)
|
|
|
|
self.update_button = QPushButton("修改")
|
|
self.update_button.clicked.connect(self.update_employee)
|
|
|
|
# 搜索框和按钮
|
|
self.search_line_edit = QLineEdit()
|
|
search_layout = QHBoxLayout()
|
|
search_label = QLabel("搜索:")
|
|
search_layout.addWidget(search_label)
|
|
search_layout.addWidget(self.search_line_edit)
|
|
|
|
self.search_button = QPushButton("搜索")
|
|
self.search_button.clicked.connect(self.search_employee)
|
|
|
|
# 表格
|
|
self.table = QTableWidget()
|
|
self.table.setColumnCount(7)
|
|
self.table.setHorizontalHeaderLabels(["ID", "姓名", "年龄", "性别", "部门", "职位", "薪资"])
|
|
|
|
# 布局
|
|
input_layout = QVBoxLayout()
|
|
input_layout.addLayout(name_layout)
|
|
input_layout.addLayout(age_layout)
|
|
input_layout.addLayout(gender_layout)
|
|
input_layout.addLayout(department_layout)
|
|
input_layout.addLayout(position_layout)
|
|
input_layout.addLayout(salary_layout)
|
|
|
|
button_layout = QHBoxLayout()
|
|
button_layout.addWidget(self.add_button)
|
|
button_layout.addWidget(self.delete_button)
|
|
button_layout.addWidget(self.update_button)
|
|
|
|
search_layout.addWidget(self.search_button)
|
|
input_layout.addLayout(search_layout)
|
|
|
|
main_layout = QVBoxLayout()
|
|
main_layout.addLayout(input_layout)
|
|
main_layout.addLayout(button_layout)
|
|
main_layout.addWidget(self.table)
|
|
|
|
self.setLayout(main_layout)
|
|
|
|
# 显示数据
|
|
self.show_all_data()
|
|
#增加员工数据
|
|
def add_employee(self):
|
|
name = self.name_line_edit.text()
|
|
age = self.age_line_edit.text()
|
|
gender = self.gender_line_edit.text()
|
|
department = self.department_line_edit.text()
|
|
position = self.position_line_edit.text()
|
|
salary = self.salary_line_edit.text()
|
|
if name == '' or age == '' or department == '' or position == '' or salary == '':
|
|
QMessageBox.warning(self, '警告', '请完整填写信息!')
|
|
else:
|
|
try:
|
|
self.cursor.execute("INSERT INTO employees (name, age, gender, department, position, salary) VALUES (?, ?, ?, ?, ?, ?)", (name, age, gender, department, position, salary))
|
|
self.connection.commit()
|
|
self.name_line_edit.clear()
|
|
self.age_line_edit.clear()
|
|
self.gender_line_edit.clear()
|
|
self.department_line_edit.clear()
|
|
self.position_line_edit.clear()
|
|
self.salary_line_edit.clear()
|
|
self.show_all_data()
|
|
QMessageBox.information(self, '提示', '添加成功!')
|
|
except:
|
|
QMessageBox.warning(self, '警告', '添加失败!')
|
|
#删除员工数据
|
|
def delete_employee(self):
|
|
row = self.table.currentRow()
|
|
if row == -1:
|
|
QMessageBox.warning(self, '警告', '请选择员工!')
|
|
else:
|
|
try:
|
|
selected_row_indexes = [selected.row() for selected in self.table.selectedIndexes()]
|
|
for row in selected_row_indexes:
|
|
employee_id = self.table.item(row, 0).text()
|
|
self.cursor.execute("DELETE FROM employees WHERE id = ?", (employee_id,))
|
|
self.connection.commit()
|
|
self.show_all_data()
|
|
QMessageBox.information(self, '提示', '删除成功!')
|
|
except:
|
|
QMessageBox.warning(self, '警告', '删除失败!')
|
|
#更新员工数据
|
|
def update_employee(self):
|
|
row = self.table.currentRow()
|
|
if row == -1:
|
|
QMessageBox.warning(self, '警告', '请选择员工!')
|
|
else:
|
|
selected_row_indexes = [selected.row() for selected in self.table.selectedIndexes()]
|
|
|
|
if len(selected_row_indexes) == 1:
|
|
row = selected_row_indexes[0]
|
|
|
|
employee_id = self.table.item(row, 0).text()
|
|
|
|
new_name = self.name_line_edit.text()
|
|
new_age = self.age_line_edit.text()
|
|
new_gender = self.gender_line_edit.text()
|
|
new_department = self.department_line_edit.text()
|
|
new_position = self.position_line_edit.text()
|
|
new_salary = self.salary_line_edit.text()
|
|
if new_name=='' or new_age=='' or new_department=='' or new_position=='' or new_salary=='':
|
|
QMessageBox.warning(self, '警告', '请填写完整信息!')
|
|
else:
|
|
try:
|
|
self.cursor.execute("UPDATE employees SET name = ?, age = ?, gender = ?, department = ?, position = ?, salary = ? WHERE id = ?", (new_name, new_age, new_gender, new_department, new_position, new_salary, employee_id))
|
|
self.connection.commit()
|
|
self.name_line_edit.clear()
|
|
self.age_line_edit.clear()
|
|
self.gender_line_edit.clear()
|
|
self.department_line_edit.clear()
|
|
self.position_line_edit.clear()
|
|
self.salary_line_edit.clear()
|
|
self.show_all_data()
|
|
QMessageBox.information(self, '提示', '更新成功!')
|
|
except:
|
|
QMessageBox.warning(self, '警告', '更新失败!')
|
|
|
|
|
|
def show_all_data(self):
|
|
self.table.setRowCount(0)
|
|
|
|
self.cursor.execute("SELECT * FROM employees")
|
|
results = self.cursor.fetchall()
|
|
|
|
for row_number, row_data in enumerate(results):
|
|
self.table.insertRow(row_number)
|
|
|
|
for column_number, data in enumerate(row_data):
|
|
self.table.setItem(row_number, column_number, QTableWidgetItem(str(data)))
|
|
#以姓名搜索员工
|
|
def search_employee(self):
|
|
try:
|
|
search_term = self.search_line_edit.text()
|
|
self.table.setRowCount(0)
|
|
self.cursor.execute(f"SELECT * FROM employees WHERE name LIKE '%{search_term}%'")
|
|
results=self.cursor.fetchall()
|
|
if len(results)==0:
|
|
QMessageBox.warning(self, '警告', '查无此人!')
|
|
else:
|
|
for row_number, row_data in enumerate(results):
|
|
self.table.insertRow(row_number)
|
|
|
|
for column_number, data in enumerate(row_data):
|
|
self.table.setItem(row_number, column_number, QTableWidgetItem(str(data)))
|
|
QMessageBox.information(self, '提示', '查找成功!')
|
|
except:
|
|
QMessageBox.warning(self, '警告', '查找失败!')
|
|
|
|
if __name__ == "__main__":
|
|
app = QApplication([])
|
|
manager = DatabaseManager()
|
|
manager.show()
|
|
app.exec()
|