pyqt5+pymysql写的一个简易医务室管理系统

概述

数据库大作业,写了一个简易校医室管理系统。共三个界面,第一个是登录界面,分两个身份:管理员和学生;第二个界面是管理员界面,实现管理员身份权限下的一些操作;第三个界面是学生界面,实现学生身份权限下的操作。

系统功能设计

系统功能设计图如下图所示,其中管理员界面将献血信息增删改查的功能与学生报名信息查询功能放至同一个界面实现,学生界面专家信息和药品信息的查询功能放至同一个界面实现,献血相关的功能在另一个界面:
在这里插入图片描述

系统界面

登录界面

  • 登录界面外观:设置窗体无边框,窗口半透明(后面是我的桌面嘿嘿),重新添加关闭和最小化按钮,重写关闭、最小化、鼠标点击、拖动窗口函数,采用我们学校的代表颜色红色为主色调,所有按钮悬停时为黄色。
    在这里插入图片描述

  • 登录界面功能:检查账号密码和身份是否有漏填漏选,如果没有,在数据库账户表匹配账号密码和身份,如果正确则成功登录。
    在这里插入图片描述
    在这里插入图片描述

登录为管理员

  • 管理员界面外观:布局为导航栏+页面,左侧导航栏可以选择想要进行的操作,同时右侧页面会根据左侧导航切换;三个页面中,四种操作的排列均为,查询在上方、修改和新增在下方。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
界面1功能:专家信息管理
  • 页面最初,显示所有专家信息,当超出显示范围,表格右侧自动生成滚动条可以拖动查看信息且表格双击不可修改。
  • 查询功能:输入专家姓名进行查询,点击查询按钮后,如果没有该医生信息,会提示用户“请检查输入是否正确或SUFE没有该专家坐诊信息”,如果有该医生信息,则表格显示该医生信息。点击返回按钮后,又会回到最初,显示所有医生信息,查询输入框清空。
  • 删除功能:删除字样在表格中每行的最后,点击即可删除该行,并同步在数据库删除。
  • 修改功能:点击修改专家信息按钮,提示“现在可以双击单元格修改”后,此时双击单元格可以直接在表格修改,数据库也进行了同步,点击确认后,提示“操作成功”,单元格重新锁定,不允许双击修改。
    查询失败查询成功在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
界面2功能:献血信息管理
  • 管理员只能对献血信息进行增删改查操作,而对于学生的报名信息,只能进行查找(新增是由学生自己登陆报名)。查询献血日期时,不仅献血信息表格会显示该日期的记录,下面学生报名表格也会同步显示报名当天日期的学生信息,便于比对,然后可以在当天日期报名的学生中查询学生学号,表格显示该学生。点击学生查询返回按钮,返回报名当天日期的学生信息,点击献血查询返回按钮,献血表格和学生表格均返回至初始状态,查询输入框清空。而新增和修改操作以及提示框和界面1是基本相同的,请参考之前的图示。

在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述

界面3功能:药品管理
  • 药品管理同界面1专家信息管理的功能和操作提示是基本相同的,请参考之前的图示。

登录为学生

  • 学生界面外观:布局与管理员界面基本相同,无新增和修改按钮,献血预约报名界面添加了报名表和报名按钮
    在这里插入图片描述
    在这里插入图片描述
信息查询:门诊和药品界面
  • 由于是学生操作,所以不开放新增和修改专家、药品信息的功能,只能进行查询,表格是不允许修改的。与管理员查询操作不同的是:管理员查询必须通过主键(医生姓名和药品编号)查询,对于管理来说可以精准找到信息;而学生查询时,是根据科室和药品名称查询,因为学生看病是根据病症看有没有对应的专家门诊,且对于药品信息的查询,学生不可能记得药品的编号,更一般的情况是查询药品名称来了解该药品的使用说明等信息。查询失败的提示也与管理员操作不同(不放图了,大概就是语气更活泼了一点)。查询成功和返回功能与管理员操作基本相同,请参考之前的图示。
界面2功能:献血信息查询和预约报名
  • 献血信息查询功能和前面已展示的大致相同,请参考之前的图示;查询失败提示“Sorry,您的输入格式不正确或该日期没有献血活动!”
    在这里插入图片描述
    献血预约报名有如下几种情况:
    如果报过名则系统提示“已经报名XX日期的献血活动,请勿重复报名”:
    在这里插入图片描述如果信息有漏填或者报名的日期并没有献血活动,则系统提示“报名失败!请检查报名日期或是否有漏填项!”:
    在这里插入图片描述
    如果报名的日期已经没有名额,则系统提示“对不起!报名人数已达上限”:
    在这里插入图片描述
    以上情况均无,则点击确认报名按钮后,系统提示报名成功(如图27),报名信息被同步到数据库学生报名表中,刷新后看到12月10日名额由200变为199:
    在这里插入图片描述

点击清空按钮则清空各输入框(LineEdit)

其他说明

  • 侧边栏用的QListWidget,连接右侧QStackWidget页面,输入框都是QLineEdit。
  • 代码有很多重复的函数(只是里面的变量名不一样所以复制粘贴改了一下函数名),因为快要交作业了,就没有优化,py文件比较少,代码长度不平均,但是注释都写了。
  • 大家需要源码的话不用留邮箱了,我传资源了。链接:https://download.csdn.net/download/Linnebula/16065093
  • 2022/11/25更新:貌似在csdn下载开始收积分了,我传在网盘大家自取,希望大家留个赞再走喔:
    -网盘链接:https://pan.baidu.com/s/1y3xAlUvih3qmqekHg8jNsw
    提取码:k3ay
  • 19
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 74
    评论
### 回答1: 以下是一个简单的 PyQt5 MySQL PyMySQL 模块实现增删改查的示例代码: ```python import pymysql from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout, QMessageBox, QTableWidget, QTableWidgetItem class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('PyQt5 MySQL PyMySQL') self.setGeometry(300, 300, 500, 500) # 连接 MySQL 数据库 self.conn = pymysql.connect(host='localhost', user='root', password='password', database='test', charset='utf8') self.cursor = self.conn.cursor() # 创建控件 self.label1 = QLabel('姓名') self.label2 = QLabel('年龄') self.label3 = QLabel('性别') self.nameEdit = QLineEdit() self.ageEdit = QLineEdit() self.genderEdit = QLineEdit() self.addButton = QPushButton('添加') self.deleteButton = QPushButton('删除') self.updateButton = QPushButton('更新') self.queryButton = QPushButton('查询') self.tableWidget = QTableWidget() # 布局 hbox1 = QHBoxLayout() hbox1.addWidget(self.label1) hbox1.addWidget(self.nameEdit) hbox1.addWidget(self.label2) hbox1.addWidget(self.ageEdit) hbox1.addWidget(self.label3) hbox1.addWidget(self.genderEdit) hbox2 = QHBoxLayout() hbox2.addWidget(self.addButton) hbox2.addWidget(self.deleteButton) hbox2.addWidget(self.updateButton) hbox2.addWidget(self.queryButton) vbox = QVBoxLayout() vbox.addLayout(hbox1) vbox.addLayout(hbox2) vbox.addWidget(self.tableWidget) self.setLayout(vbox) # 信号槽连接 self.addButton.clicked.connect(self.addRecord) self.deleteButton.clicked.connect(self.deleteRecord) self.updateButton.clicked.connect(self.updateRecord) self.queryButton.clicked.connect(self.queryRecord) # 显示窗口 self.show() def addRecord(self): name = self.nameEdit.text() age = self.ageEdit.text() gender = self.genderEdit.text() if name and age and gender: sql = "INSERT INTO students (name, age, gender) VALUES ('{}', {}, '{}')".format(name, age, gender) try: self.cursor.execute(sql) self.conn.commit() QMessageBox.information(self, '添加成功', '添加记录成功!') except Exception as e: self.conn.rollback() QMessageBox.warning(self, '添加失败', '添加记录失败:{}'.format(str(e))) else: QMessageBox.warning(self, '添加失败', '请填完整信息!') def deleteRecord(self): row = self.tableWidget.currentRow() if row >= : id = self.tableWidget.item(row, ).text() sql = "DELETE FROM students WHERE id = {}".format(id) try: self.cursor.execute(sql) self.conn.commit() self.tableWidget.removeRow(row) QMessageBox.information(self, '删除成功', '删除记录成功!') except Exception as e: self.conn.rollback() QMessageBox.warning(self, '删除失败', '删除记录失败:{}'.format(str(e))) else: QMessageBox.warning(self, '删除失败', '请选择要删除的记录!') def updateRecord(self): row = self.tableWidget.currentRow() if row >= : id = self.tableWidget.item(row, ).text() name = self.nameEdit.text() age = self.ageEdit.text() gender = self.genderEdit.text() if name and age and gender: sql = "UPDATE students SET name = '{}', age = {}, gender = '{}' WHERE id = {}".format(name, age, gender, id) try: self.cursor.execute(sql) self.conn.commit() self.tableWidget.setItem(row, 1, QTableWidgetItem(name)) self.tableWidget.setItem(row, 2, QTableWidgetItem(age)) self.tableWidget.setItem(row, 3, QTableWidgetItem(gender)) QMessageBox.information(self, '更新成功', '更新记录成功!') except Exception as e: self.conn.rollback() QMessageBox.warning(self, '更新失败', '更新记录失败:{}'.format(str(e))) else: QMessageBox.warning(self, '更新失败', '请填完整信息!') else: QMessageBox.warning(self, '更新失败', '请选择要更新的记录!') def queryRecord(self): self.tableWidget.clear() self.tableWidget.setColumnCount(4) self.tableWidget.setHorizontalHeaderLabels(['ID', '姓名', '年龄', '性别']) sql = "SELECT * FROM students" try: self.cursor.execute(sql) results = self.cursor.fetchall() self.tableWidget.setRowCount(len(results)) for i, row in enumerate(results): for j, col in enumerate(row): self.tableWidget.setItem(i, j, QTableWidgetItem(str(col))) except Exception as e: QMessageBox.warning(self, '查询失败', '查询记录失败:{}'.format(str(e))) def closeEvent(self, event): self.cursor.close() self.conn.close() if __name__ == '__main__': app = QApplication([]) ex = Example() app.exec_() ``` 注意:这只是一个简单的示例代码,实际应用中需要根据具体情况进行修改和优化。 ### 回答2: 使用PyQt5和PyMySQL模块实现一个简单的增删改查操作,以下是代码示例: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox, QTableWidgetItem, QTableWidget import pymysql class MainWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() self.db = pymysql.connect("localhost", "username", "password", "database_name") self.cursor = self.db.cursor() def initUI(self): self.setWindowTitle("简单的增删改查") self.setGeometry(300, 300, 500, 350) self.centralWidget = QWidget(self) self.setCentralWidget(self.centralWidget) self.layout = QVBoxLayout() self.centralWidget.setLayout(self.layout) self.inputLayout = QHBoxLayout() self.layout.addLayout(self.inputLayout) self.nameLabel = QLabel("姓名:") self.inputLayout.addWidget(self.nameLabel) self.nameInput = QLineEdit() self.inputLayout.addWidget(self.nameInput) self.addButton = QPushButton("添加") self.addButton.clicked.connect(self.addRecord) self.layout.addWidget(self.addButton) self.tableWidget = QTableWidget() self.layout.addWidget(self.tableWidget) self.loadTable() def loadTable(self): self.cursor.execute("SELECT * FROM students") results = self.cursor.fetchall() self.tableWidget.setRowCount(len(results)) self.tableWidget.setColumnCount(2) self.tableWidget.setHorizontalHeaderLabels(["ID", "姓名"]) for i, row in enumerate(results): for j, value in enumerate(row): self.tableWidget.setItem(i, j, QTableWidgetItem(str(value))) def addRecord(self): name = self.nameInput.text() if name: sql = "INSERT INTO students (name) VALUES ('%s')" % name try: self.cursor.execute(sql) self.db.commit() self.nameInput.clear() self.loadTable() except: self.db.rollback() QMessageBox.warning(self, "Error", "添加记录失败") else: QMessageBox.warning(self, "Error", "姓名不能为空") def closeEvent(self, event): self.cursor.close() self.db.close() if __name__ == "__main__": app = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.show() sys.exit(app.exec_()) ``` 上述代码实现了一个简单的GUI界面,包含一个用于输入姓名的文本框和一个用于添加记录的按钮。数据存储在MySQL数据库的`students`表中,其中包含`id`和`name`两个字段。点击添加按钮后将会将姓名插入到数据库中,并更新显示在表格中。表格使用QTableWidget来显示。通过`PyMySQL`模块连接和操作数据库。 ### 回答3: 以下是使用PyQt5和PyMySQL模块实现简单的增删改查的代码示例: ```python import pymysql from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QPushButton, QVBoxLayout, QWidget class DatabaseWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("数据库操作") self.setGeometry(100, 100, 400, 300) self.table_widget = QTableWidget() self.setCentralWidget(self.table_widget) self.btn_refresh = QPushButton("刷新") self.btn_refresh.clicked.connect(self.refresh_data) self.btn_add = QPushButton("添加") self.btn_add.clicked.connect(self.add_data) self.btn_delete = QPushButton("删除") self.btn_delete.clicked.connect(self.delete_data) self.btn_update = QPushButton("更新") self.btn_update.clicked.connect(self.update_data) layout = QVBoxLayout() layout.addWidget(self.btn_refresh) layout.addWidget(self.btn_add) layout.addWidget(self.btn_delete) layout.addWidget(self.btn_update) widget = QWidget() widget.setLayout(layout) self.setCentralWidget(widget) self.db = pymysql.connect(host='localhost', user='root', password='password', db='testdb') self.cursor = self.db.cursor() self.refresh_data() def refresh_data(self): self.table_widget.clear() self.cursor.execute("SELECT * FROM users") data = self.cursor.fetchall() self.table_widget.setRowCount(len(data)) self.table_widget.setColumnCount(len(data[0])) for i, row in enumerate(data): for j, value in enumerate(row): item = QTableWidgetItem(str(value)) self.table_widget.setItem(i, j, item) def add_data(self): self.cursor.execute("INSERT INTO users (name, age) VALUES ('John', 30)") self.db.commit() self.refresh_data() def delete_data(self): selected_row = self.table_widget.currentRow() id = self.table_widget.item(selected_row, 0).text() self.cursor.execute(f"DELETE FROM users WHERE id={id}") self.db.commit() self.refresh_data() def update_data(self): selected_row = self.table_widget.currentRow() id = self.table_widget.item(selected_row, 0).text() self.cursor.execute(f"UPDATE users SET name='Mike', age=25 WHERE id={id}") self.db.commit() self.refresh_data() if __name__ == '__main__': app = QApplication([]) window = DatabaseWindow() window.show() app.exec_() ``` 此示例展示了一个使用PyQt5和PyMySQL模块实现的简单的数据库操作窗口。窗口中包含一个表格用于显示数据库中的数据。通过点击不同按钮,可以刷新数据,添加数据,删除数据和更新数据。代码中的数据库连接参数需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 74
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值