使用python+pyqt5+mysql以及三层架构实现一个信息管理系统的代码编写,要求有实体类
时间: 2023-12-30 22:03:33 浏览: 48
好的,以下是一个使用 Python、PyQt5 和 MySQL 实现信息管理系统的代码示例,采用三层架构。
首先,我们需要安装 PyMySQL 库,它是 Python 与 MySQL 数据库通信的驱动库。可以使用以下命令进行安装:
```python
pip install PyMySQL
```
接下来,我们需要创建一个 MySQL 数据库和一个名为 "info" 的表,用于存储学生信息。表结构如下:
```mysql
CREATE TABLE `info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`age` int(11) NOT NULL,
`gender` varchar(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
然后,我们需要创建一个实体类 Student,用于存储学生信息:
```python
class Student:
def __init__(self, id, name, age, gender):
self.id = id
self.name = name
self.age = age
self.gender = gender
```
接下来,我们需要创建一个数据访问层 InfoDAO,用于与数据库进行交互:
```python
import pymysql
class InfoDAO:
def __init__(self):
self.conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='test')
self.cursor = self.conn.cursor()
def __del__(self):
self.cursor.close()
self.conn.close()
def add_student(self, student):
sql = "INSERT INTO info(name, age, gender) VALUES(%s, %s, %s)"
self.cursor.execute(sql, (student.name, student.age, student.gender))
self.conn.commit()
def delete_student(self, id):
sql = "DELETE FROM info WHERE id=%s"
self.cursor.execute(sql, id)
self.conn.commit()
def update_student(self, student):
sql = "UPDATE info SET name=%s, age=%s, gender=%s WHERE id=%s"
self.cursor.execute(sql, (student.name, student.age, student.gender, student.id))
self.conn.commit()
def get_student(self, id):
sql = "SELECT * FROM info WHERE id=%s"
self.cursor.execute(sql, id)
result = self.cursor.fetchone()
if result:
return Student(result[0], result[1], result[2], result[3])
else:
return None
def get_all_students(self):
sql = "SELECT * FROM info"
self.cursor.execute(sql)
results = self.cursor.fetchall()
students = []
for result in results:
students.append(Student(result[0], result[1], result[2], result[3]))
return students
```
最后,我们需要创建一个业务逻辑层 InfoService,用于处理业务逻辑:
```python
class InfoService:
def __init__(self):
self.dao = InfoDAO()
def add_student(self, name, age, gender):
student = Student(None, name, age, gender)
self.dao.add_student(student)
def delete_student(self, id):
self.dao.delete_student(id)
def update_student(self, id, name, age, gender):
student = self.dao.get_student(id)
if student:
student.name = name
student.age = age
student.gender = gender
self.dao.update_student(student)
def get_student(self, id):
return self.dao.get_student(id)
def get_all_students(self):
return self.dao.get_all_students()
```
现在,我们可以创建一个 GUI 界面,使用 PyQt5 实现信息管理系统的用户界面。下面是一个简单的示例:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QLabel, QLineEdit, QPushButton, QTableWidget, QTableWidgetItem, QVBoxLayout, QHBoxLayout
from InfoService import InfoService
class InfoWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('信息管理系统')
self.setGeometry(300, 300, 600, 400)
# 添加学生
self.name_label = QLabel('姓名', self)
self.name_label.move(50, 50)
self.name_edit = QLineEdit(self)
self.name_edit.move(120, 50)
self.age_label = QLabel('年龄', self)
self.age_label.move(50, 100)
self.age_edit = QLineEdit(self)
self.age_edit.move(120, 100)
self.gender_label = QLabel('性别', self)
self.gender_label.move(50, 150)
self.gender_edit = QLineEdit(self)
self.gender_edit.move(120, 150)
self.add_button = QPushButton('添加', self)
self.add_button.move(120, 200)
self.add_button.clicked.connect(self.add_student)
# 删除学生
self.id_label = QLabel('ID', self)
self.id_label.move(300, 50)
self.id_edit = QLineEdit(self)
self.id_edit.move(350, 50)
self.delete_button = QPushButton('删除', self)
self.delete_button.move(350, 100)
self.delete_button.clicked.connect(self.delete_student)
# 修改学生
self.update_label = QLabel('修改', self)
self.update_label.move(500, 50)
self.update_name_label = QLabel('姓名', self)
self.update_name_label.move(450, 100)
self.update_name_edit = QLineEdit(self)
self.update_name_edit.move(520, 100)
self.update_age_label = QLabel('年龄', self)
self.update_age_label.move(450, 150)
self.update_age_edit = QLineEdit(self)
self.update_age_edit.move(520, 150)
self.update_gender_label = QLabel('性别', self)
self.update_gender_label.move(450, 200)
self.update_gender_edit = QLineEdit(self)
self.update_gender_edit.move(520, 200)
self.update_button = QPushButton('修改', self)
self.update_button.move(520, 250)
self.update_button.clicked.connect(self.update_student)
# 显示学生
self.table = QTableWidget(self)
self.table.setGeometry(50, 250, 300, 100)
self.table.setColumnCount(4)
self.table.setHorizontalHeaderLabels(['ID', '姓名', '年龄', '性别'])
self.show_button = QPushButton('显示', self)
self.show_button.move(50, 370)
self.show_button.clicked.connect(self.show_students)
def add_student(self):
name = self.name_edit.text()
age = int(self.age_edit.text())
gender = self.gender_edit.text()
service = InfoService()
service.add_student(name, age, gender)
self.name_edit.setText('')
self.age_edit.setText('')
self.gender_edit.setText('')
def delete_student(self):
id = int(self.id_edit.text())
service = InfoService()
service.delete_student(id)
self.id_edit.setText('')
def update_student(self):
id = int(self.id_edit.text())
name = self.update_name_edit.text()
age = int(self.update_age_edit.text())
gender = self.update_gender_edit.text()
service = InfoService()
service.update_student(id, name, age, gender)
self.update_name_edit.setText('')
self.update_age_edit.setText('')
self.update_gender_edit.setText('')
def show_students(self):
service = InfoService()
students = service.get_all_students()
self.table.setRowCount(len(students))
for i in range(len(students)):
student = students[i]
id_item = QTableWidgetItem(str(student.id))
name_item = QTableWidgetItem(student.name)
age_item = QTableWidgetItem(str(student.age))
gender_item = QTableWidgetItem(student.gender)
self.table.setItem(i, 0, id_item)
self.table.setItem(i, 1, name_item)
self.table.setItem(i, 2, age_item)
self.table.setItem(i, 3, gender_item)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = InfoWindow()
window.show()
sys.exit(app.exec_())
```
现在,我们就完成了一个简单的信息管理系统。用户可以添加、删除、修改和显示学生信息。