Python生成学生管理系统,使用qt组件,MySQL 数据库,-1
创建一个基于 Python 的学生管理系统,使用 Qt 组件(通过 PyQt5 或 PySide2)和 MySQL 数据库,是一个综合性的项目。以下是一个详细的指南,包括环境设置、数据库设计、Python 代码示例以及如何使用 Qt 设计用户界面。
## 目录
1. [环境设置](#环境设置)
2. [数据库设计](#数据库设计)
3. [安装必要的 Python 库](#安装必要的-python-库)
4. [连接 MySQL 数据库](#连接-mysql-数据库)
5. [创建 Qt 用户界面](#创建-qt-用户界面)
6. [实现功能模块](#实现功能模块)
- [添加学生](#添加学生)
- [查看学生列表](#查看学生列表)
- [编辑学生信息](#编辑学生信息)
- [删除学生](#删除学生)
7. [完整代码示例](#完整代码示例)
8. [运行项目](#运行项目)
---
## 环境设置
确保你的开发环境中安装了以下软件:
1. **Python 3.x**: [下载链接](https://www.python.org/downloads/)
2. **MySQL**: [下载链接](https://dev.mysql.com/downloads/mysql/)
3. **Qt Designer**(可选,用于设计 UI):[下载链接](https://build-system.fman.io/qt-designer-download)
## 数据库设计
首先,设计一个简单的数据库来存储学生信息。假设我们有一个名为 `students` 的表,包含以下字段:
- `id` (INT, 主键, 自增)
- `name` (VARCHAR)
- `age` (INT)
- `gender` (VARCHAR)
- `email` (VARCHAR)
- `phone` (VARCHAR)
### 创建数据库和表
```sql
CREATE DATABASE student_management;
USE student_management;
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT,
gender VARCHAR(10),
email VARCHAR(100),
phone VARCHAR(20)
);
```
你可以使用 MySQL 命令行或 MySQL Workbench 来执行上述 SQL 语句。
## 安装必要的 Python 库
你需要安装以下 Python 库:
- `PyQt5` 或 `PySide2`: 用于创建用户界面
- `PyMySQL`: 用于连接 MySQL 数据库
使用 pip 安装:
```bash
pip install PyQt5 PyMySQL
```
或者,如果你更喜欢 `PySide2`:
```bash
pip install PySide2 PyMySQL
```
## 连接 MySQL 数据库
以下是如何使用 `PyMySQL` 连接 MySQL 数据库的示例代码:
```python
import sys
from PyQt5 import QtWidgets
import pymysql
# 数据库配置
db_config = {
'host': 'localhost',
'user': 'your_username',
'password': 'your_password',
'database': 'student_management',
'charset': 'utf8mb4'
}
def get_db_connection():
try:
connection = pymysql.connect(**db_config)
return connection
except pymysql.MySQLError as e:
print(f"数据库连接错误: {e}")
return None
```
确保将 `'your_username'` 和 `'your_password'` 替换为你的 MySQL 用户名和密码。
## 创建 Qt 用户界面
你可以使用 Qt Designer 设计和保存 `.ui` 文件,或者使用代码编写界面。以下示例将使用代码编写一个简单的界面。
### 示例界面
```python
from PyQt5 import QtWidgets, QtCore
class StudentManagementApp(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("学生管理系统")
self.setGeometry(100, 100, 800, 600)
self.central_widget = QtWidgets.QWidget()
self.setCentralWidget(self.central_widget)
self.layout = QtWidgets.QVBoxLayout()
self.central_widget.setLayout(self.layout)
# 创建表格视图
self.table = QtWidgets.QTableWidget()
self.table.setColumnCount(6)
self.table.setHorizontalHeaderLabels(['ID', '姓名', '年龄', '性别', '邮箱', '电话'])
self.layout.addWidget(self.table)
# 创建按钮
self.button_layout = QtWidgets.QHBoxLayout()
self.add_button = QtWidgets.QPushButton("添加学生")
self.edit_button = QtWidgets.QPushButton("编辑学生")
self.delete_button = QtWidgets.QPushButton("删除学生")
self.refresh_button = QtWidgets.QPushButton("刷新列表")
self.button_layout.addWidget(self.add_button)
self.button_layout.addWidget(self.edit_button)
self.button_layout.addWidget(self.delete_button)
self.button_layout.addWidget(self.refresh_button)
self.layout.addLayout(self.button_layout)
# 连接按钮信号
self.add_button.clicked.connect(self.add_student)
self.edit_button.clicked.connect(self.edit_student)
self.delete_button.clicked.connect(self.delete_student)
self.refresh_button.clicked.connect(self.refresh_student_list)
# 初始化学生列表
self.refresh_student_list()
def refresh_student_list(self):
connection = get_db_connection()
if connection:
try:
with connection.cursor() as cursor:
sql = "SELECT * FROM students"
cursor.execute(sql)
result = cursor.fetchall()
self.table.setRowCount(0)
for row_number, row_data in enumerate(result):
self.table.insertRow(row_number)
for column_number, data in enumerate(row_data):
self.table.setItem(row_number, column_number, QtWidgets.QTableWidgetItem(str(data)))
except pymysql.MySQLError as e:
print(f"查询错误: {e}")
finally:
connection.close()
```
## 实现功能模块
### 添加学生
```python
def add_student(self):
dialog = QtWidgets.QDialog(self)
dialog.setWindowTitle("添加学生")
dialog_layout = QtWidgets.QVBoxLayout()
form_layout = QtWidgets.QFormLayout()
name_input = QtWidgets.QLineEdit()
age_input = QtWidgets.QLineEdit()
gender_input = QtWidgets.QLineEdit()
email_input = QtWidgets.QLineEdit()
phone_input = QtWidgets.QLineEdit()
form_layout.addRow("姓名", name_input)
form_layout.addRow("年龄", age_input)
form_layout.addRow("性别", gender_input)
form_layout.addRow("邮箱", email_input)
form_layout.addRow("电话", phone_input)
dialog_layout.addLayout(form_layout)
button_layout = QtWidgets.QHBoxLayout()
ok_button = QtWidgets.QPushButton("确定")
cancel_button = QtWidgets.QPushButton("取消")
button_layout.addWidget(ok_button)
button_layout.addWidget(cancel_button)
dialog_layout.addLayout(button_layout)
dialog.setLayout(dialog_layout)
def on_ok():
name = name_input.text()
age = age_input.text()
gender = gender_input.text()
email = email_input.text()
phone = phone_input.text()
if not name:
QtWidgets.QMessageBox.warning(self, "输入错误", "姓名不能为空")
return
try:
age = int(age)
except ValueError:
QtWidgets.QMessageBox.warning(self, "输入错误", "年龄必须是数字")
return
connection = get_db_connection()
if connection:
try:
with connection.cursor() as cursor:
sql = "INSERT INTO students (name, age, gender, email, phone) VALUES (%s, %s, %s, %s, %s)"
cursor.execute(sql, (name, age, gender, email, phone))
connection.commit()
except pymysql.MySQLError as e:
print(f"插入错误: {e}")
finally:
connection.close()
self.refresh_student_list()
dialog.close()
def on_cancel():
dialog.close()
ok_button.clicked.connect(on_ok)
cancel_button.clicked.connect(on_cancel)
dialog.exec_()
```
### 查看学生列表
在上面的 `refresh_student_list` 方法中已经实现了查看学生列表的功能。
### 编辑学生信息
```python
def edit_student(self):
selected_items = self.table.selectedItems()
if not selected_items:
QtWidgets.QMessageBox.warning(self, "选择错误", "请选择要编辑的学生")
return
row = selected_items[0].row()
student_id = self.table.item(row, 0).text()
connection = get_db_connection()
if connection:
try:
with connection.cursor() as cursor:
sql = "SELECT * FROM students WHERE id = %s"
cursor.execute(sql, (student_id,))
result = cursor.fetchone()
connection.close()
except pymysql.MySQLError as e:
print(f"查询错误: {e}")
connection.close()
return
dialog = QtWidgets.QDialog(self)
dialog.setWindowTitle("编辑学生")
dialog_layout = QtWidgets.QVBoxLayout()
form_layout = QtWidgets.QFormLayout()
name_input = QtWidgets.QLineEdit(result[1])
age_input = QtWidgets.QLineEdit(str(result[2]))
gender_input = QtWidgets.QLineEdit(result[3])
email_input = QtWidgets.QLineEdit(result[4])
phone_input = QtWidgets.QLineEdit(result[5])
form_layout.addRow("姓名", name_input)
form_layout.addRow("年龄", age_input)
form_layout.addRow("性别", gender_input)
form_layout.addRow("邮箱", email_input)
form_layout.addRow("电话", phone_input)
dialog_layout.addLayout(form_layout)
button_layout = QtWidgets.QHBoxLayout()
ok_button = QtWidgets.QPushButton("确定")
cancel_button = QtWidgets.QPushButton("取消")
button_layout.addWidget(ok_button)
button_layout.addWidget(cancel_button)
dialog_layout.addLayout(button_layout)
dialog.setLayout(dialog_layout)
def on_ok():
name = name_input.text()
age = age_input.text()
gender = gender_input.text()
email = email_input.text()
phone = phone_input.text()
if not name:
QtWidgets.QMessageBox.warning(self, "输入错误", "姓名不能为空")
return
try:
age = int(age)
except ValueError:
QtWidgets.QMessageBox.warning(self, "输入错误", "年龄必须是数字")
return
connection = get_db_connection()
if connection:
try:
with connection.cursor() as cursor:
sql = "UPDATE students SET name = %s, age = %s, gender = %s, email = %s, phone = %s WHERE id = %s"
cursor.execute(sql, (name, age, gender, email, phone, student_id))
connection.commit()
except pymysql.MySQLError as e:
print(f"更新错误: {e}")
finally:
connection.close()
self.refresh_student_list()
dialog.close()
def on_cancel():
dialog.close()
ok_button.clicked.connect(on_ok)
cancel_button.clicked.connect(on_cancel)
dialog.exec_()
```
### 删除学生
```python
def delete_student(self):
selected_items = self.table.selectedItems()
if not selected_items:
QtWidgets.QMessageBox.warning(self, "选择错误", "请选择要删除的学生")
return
row = selected_items[0].row()
student_id = self.table.item(row, 0).text()
reply = QtWidgets.QMessageBox.question(self, "确认删除", f"确定要删除学生 ID {student_id} 吗?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
if reply == QtWidgets.QMessageBox.Yes:
connection = get_db_connection()
if connection:
try:
with connection.cursor() as cursor:
sql = "DELETE FROM students WHERE id = %s"
cursor.execute(sql, (student_id,))
connection.commit()
except pymysql.MySQLError as e:
print(f"删除错误: {e}")
finally:
connection.close()
self.refresh_student_list()
```
## 完整代码示例
以下是完整的 Python 代码示例,整合了上述所有部分:
```python
import sys
from PyQt5 import QtWidgets, QtCore
import pymysql
# 数据库配置
db_config = {
'host': 'localhost',
'user': 'your_username',
'password': 'your_password',
'database': 'student_management',
'charset': 'utf8mb4'
}
def get_db_connection():
try:
connection = pymysql.connect(**db_config)
return connection
except pymysql.MySQLError as e:
print(f"数据库连接错误: {e}")
return None
class StudentManagementApp(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("学生管理系统")
self.setGeometry(100, 100, 800, 600)
self.central_widget = QtWidgets.QWidget()
self.setCentralWidget(self.central_widget)
self.layout = QtWidgets.QVBoxLayout()
self.central_widget.setLayout(self.layout)
# 创建表格视图
self.table = QtWidgets.QTableWidget()
self.table.setColumnCount(6)
self.table.setHorizontalHeaderLabels(['ID', '姓名', '年龄', '性别', '邮箱', '电话'])
self.layout.addWidget(self.table)
# 创建按钮
self.button_layout = QtWidgets.QHBoxLayout()
self.add_button = QtWidgets.QPushButton("添加学生")
self.edit_button = QtWidgets.QPushButton("编辑学生")
self.delete_button = QtWidgets.QPushButton("删除学生")
self.refresh_button = QtWidgets.QPushButton("刷新列表")
self.button_layout.addWidget(self.add_button)
self.button_layout.addWidget(self.edit_button)
self.button_layout.addWidget(self.delete_button)
self.button_layout.addWidget(self.refresh_button)
self.layout.addLayout(self.button_layout)
# 连接按钮信号
self.add_button.clicked.connect(self.add_student)
self.edit_button.clicked.connect(self.edit_student)
self.delete_button.clicked.connect(self.delete_student)
self.refresh_button.clicked.connect(self.refresh_student_list)
# 初始化学生列表
self.refresh_student_list()
def refresh_student_list(self):
connection = get_db_connection()
if connection:
try:
with connection.cursor() as cursor:
sql = "SELECT * FROM students"
cursor.execute(sql)
result = cursor.fetchall()
self.table.setRowCount(0)
for row_number, row_data in enumerate(result):
self.table.insertRow(row_number)
for column_number, data in enumerate(row_data):
self.table.setItem(row_number, column_number, QtWidgets.QTableWidgetItem(str(data)))
except pymysql.MySQLError as e:
print(f"查询错误: {e}")
finally:
connection.close()
def add_student(self):
dialog = QtWidgets.QDialog(self)
dialog.setWindowTitle("添加学生")
dialog_layout = QtWidgets.QVBoxLayout()
form_layout = QtWidgets.QFormLayout()
name_input = QtWidgets.QLineEdit()
age_input = QtWidgets.QLineEdit()
gender_input = QtWidgets.QLineEdit()
email_input = QtWidgets.QLineEdit()
phone_input = QtWidgets.QLineEdit()
form_layout.addRow("姓名", name_input)
form_layout.addRow("年龄", age_input)
form_layout.addRow("性别", gender_input)
form_layout.addRow("邮箱", email_input)
form_layout.addRow("电话", phone_input)
dialog_layout.addLayout(form_layout)
button_layout = QtWidgets.QHBoxLayout()
ok_button = QtWidgets.QPushButton("确定")
cancel_button = QtWidgets.QPushButton("取消")
button_layout.addWidget(ok_button)
button_layout.addWidget(cancel_button)
dialog_layout.addLayout(button_layout)
dialog.setLayout(dialog_layout)
def on_ok():
name = name_input.text()
age = age_input.text()
gender = gender_input.text()
email = email_input.text()
phone = phone_input.text()
if not name:
QtWidgets.QMessageBox.warning(self, "输入错误", "姓名不能为空")
return
try:
age = int(age)
except ValueError:
QtWidgets.QMessageBox.warning(self, "输入错误", "年龄必须是数字")
return
connection = get_db_connection()
if connection:
try:
with connection.cursor() as cursor:
sql = "INSERT INTO students (name, age, gender, email, phone) VALUES (%s, %s, %s, %s, %s)"
cursor.execute(sql, (name, age, gender, email, phone))
connection.commit()
except pymysql.MySQLError as e:
print(f"插入错误: {e}")
finally:
connection.close()
self.refresh_student_list()
dialog.close()
def on_cancel():
dialog.close()
ok_button.clicked.connect(on_ok)
cancel_button.clicked.connect(on_cancel)
dialog.exec_()
def edit_student(self):
selected_items = self.table.selectedItems()
if not selected_items:
QtWidgets.QMessageBox.warning(self, "选择错误", "请选择要编辑的学生")
return
row = selected_items[0].row()
student_id = self.table.item(row, 0).text()
connection = get_db_connection()
if connection:
try:
with connection.cursor() as cursor:
sql = "SELECT * FROM students WHERE id = %s"
cursor.execute(sql, (student_id,))
result = cursor.fetchone()
connection.close()
except pymysql.MySQLError as e:
print(f"查询错误: {e}")
connection.close()
return
dialog = QtWidgets.QDialog(self)
dialog.setWindowTitle("编辑学生")
dialog_layout = QtWidgets.QVBoxLayout()
form_layout = QtWidgets.QFormLayout()
name_input = QtWidgets.QLineEdit(result[1])
age_input = QtWidgets.QLineEdit(str(result[2]))
gender_input = QtWidgets.QLineEdit(result[3])
email_input = QtWidgets.QLineEdit(result[4])
phone_input = QtWidgets.QLineEdit(result[5])
form_layout.addRow("姓名", name_input)
form_layout.addRow("年龄", age_input)
form_layout.addRow("性别", gender_input)
form_layout.addRow("邮箱", email_input)
form_layout.addRow("电话", phone_input)
dialog_layout.addLayout(form_layout)
button_layout = QtWidgets.QHBoxLayout()
ok_button = QtWidgets.QPushButton("确定")
cancel_button = QtWidgets.QPushButton("取消")
button_layout.addWidget(ok_button)
button_layout.addWidget(cancel_button)
dialog_layout.addLayout(button_layout)
dialog.setLayout(dialog_layout)
def on_ok():
name = name_input.text()
age = age_input.text()
gender = gender_input.text()
email = email_input.text()
phone = phone_input.text()
if not name:
QtWidgets.QMessageBox.warning(self, "输入错误", "姓名不能为空")
return
try:
age = int(age)
except ValueError:
QtWidgets.QMessageBox.warning(self, "输入错误", "年龄必须是数字")
return
connection = get_db_connection()
if connection:
try:
with connection.cursor() as cursor:
sql = "UPDATE students SET name = %s, age = %s, gender = %s, email = %s, phone = %s WHERE id = %s"
cursor.execute(sql, (name, age, gender, email, phone, student_id))
connection.commit()
except pymysql.MySQLError as e:
print(f"更新错误: {e}")
finally:
connection.close()
self.refresh_student_list()
dialog.close()
def on_cancel():
dialog.close()
ok_button.clicked.connect(on_ok)
cancel_button.clicked.connect(on_cancel)
dialog.exec_()
def delete_student(self):
selected_items = self.table.selectedItems()
if not selected_items:
QtWidgets.QMessageBox.warning(self, "选择错误", "请选择要删除的学生")
return
row = selected_items[0].row()
student_id = self.table.item(row, 0).text()
reply = QtWidgets.QMessageBox.question(self, "确认删除", f"确定要删除学生 ID {student_id} 吗?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
if reply == QtWidgets.QMessageBox.Yes:
connection = get_db_connection()
if connection:
try:
with connection.cursor() as cursor:
sql = "DELETE FROM students WHERE id = %s"
cursor.execute(sql, (student_id,))
connection.commit()
except pymysql.MySQLError as e:
print(f"删除错误: {e}")
finally:
connection.close()
self.refresh_student_list()
def main():
app = QtWidgets.QApplication(sys.argv)
window = StudentManagementApp()
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
```
## 运行项目
1. **配置数据库**: 确保 MySQL 数据库已启动,并且 `student_management` 数据库和 `students` 表已创建。
2. **配置数据库连接**: 在代码中,将 `db_config` 的 `user` 和 `password` 替换为你的 MySQL 用户名和密码。
3. **运行脚本**: 保存上述代码为 `student_management.py`,然后在命令行中运行:
```bash
python student_management.py
```
4. **使用应用**: 使用界面上的按钮来添加、编辑、删除和刷新学生列表。
## 注意事项
- **安全性**: 在实际应用中,请确保对用户输入进行适当的验证和消毒,以防止 SQL 注入等安全问题。
- **错误处理**: 增强错误处理机制,例如在数据库操作失败时提供更详细的错误信息。
- **用户体验**: 可以进一步优化用户界面,例如添加搜索功能、分页显示等。
- **数据持久性**: 确保数据库连接在应用运行期间保持打开,并在适当的时候关闭连接以释放资源。
---
通过以上步骤,你应该能够创建一个基本的学生管理系统。根据需要,你可以扩展功能,例如添加搜索功能、导入导出数据、用户权限管理等。
相关文章:
Python生成学生管理系统,使用qt组件,MySQL 数据库,-1
创建一个基于 Python 的学生管理系统,使用 Qt 组件(通过 PyQt5 或 PySide2)和 MySQL 数据库,是一个综合性的项目。以下是一个详细的指南,包括环境设置、数据库设计、Python 代码示例以及如何使用 Qt 设计用户界面。 #…...
接口测试Day03-postman断言关联
postman常用断言 注意:不需要手敲,点击自动生成 断言响应状态码 Status code:Code is 200 //断言响应状态码为 200 pm.test("Status code is 200", function () {pm.response.to.have.status(200); });pm: postman的实例 test() …...
微服务分布式(二、注册中心Consul)
首先我们需要安装consul,到官网下载Consul Install | Consul | HashiCorp Developer 在解压的consul目录下 执行启动命令 consul agent -dev 启动服务 -dev表示开发模式 -server表示服务模式 启动后在浏览器访问8500端口http://localhost:8500/可以看到服务管理界面 项目…...
sh cmake-linux.sh -- --skip-license --prefix = $MY_INSTALL_DIR
本文来自天工AI --------- 命令用于安装CMake的脚本,其中--skip-license参数表示跳过许可协议的显示,--prefix参数指定了CMake的安装目录。$MYINSTALLDIR是一个环境变量,应该在运行命令之前设置为您想要安装CMake的目录。 -------- sh xx…...
信创技术栈发展现状与展望:机遇与挑战并存
一、引言 在信息技术应用创新(信创)战略稳步推进的大背景下,我国信创技术栈已然在诸多关键层面收获了亮眼成果,不过也无可避免地遭遇了一系列亟待攻克的挑战。信创产业作为我国达成信息技术自主可控这一目标的关键一招,…...
文本图像多模态基础-clip的细节解读
目录 一、我写的目的 二、原文出处 三、方法和benchmark 3.1 方法原理 3.2 值得注意的代码细节 实际的损失函数计算: evaluation的计算: backbone的类型: 3.3 benchamrk 推理时的细节-benchmark比较: 经典benchmark对…...
c4d动画怎么导出mp4视频,c4d动画视频格式设置
宝子们,今天来给大家讲讲 C4D 咋导出mp4视频的方法。通过用图文教程的形式给大家展示得明明白白的,让你能轻松理解和掌握,不管是理论基础,还是实际操作和技能技巧,都能学到,快速入门然后提升自己哦。 c4d动…...
Mysql复习(二)
一、 DBMS:是管理数据库的软件的集合,是用户访问数据库的接口。主要功能:数据定义、数据操纵、数据库运行管理、数据库建立与维护等 二、 关系模式的完整性规则包括(实体完整性、参照完整性和用户自定义完整性) 实体…...
【芯片设计- RTL 数字逻辑设计入门 番外篇 13 -- FAB厂中PE工程师和PIE工程师的区别】
文章目录 Overview岗位职责的核心区别PE工程师:岗位要求的差异PE工程师接触面和协作关系后期职业发展方量产与研发的区别转自: 老虎说芯 老虎说芯 2024年12月20日 12:30 广东 Overview 在导体制造行业中,PE工程师(Process Engineer,工艺工程师)和PIE工程师(Process Int…...
java中的输入输出
目录 1.基本概念1.标准输入流(System.in):2.标准输出流(System.out):3.Scanner 类:4.File 类:6.BufferedReader 和 BufferedWriter:7.PrintWriter:…...
java抽奖系统(八)
9. 抽奖模块 9.1 抽奖设计 抽奖过程是抽奖系统中最重要的核⼼环节,它需要确保公平、透明且⾼效。以下是详细的抽奖过程设计: 对于前端来说,负责控制抽奖的流程,确定中奖的人员 对于后端来说: 接口1:查询完…...
在技术文档中多使用各种图
有些事情在文档中掰扯十几页,不如一幅图讲的明白!举个例子下面这幅图就是一个EDI 835电子报文(就是医保了,美国加州的)的业务流程。如果纯靠文字来描述,写很多文字不一定能说清楚。所以俺画了这幅图&#x…...
GB28181学习总结
GB28181学习总结 前言 我认为,学习一个新东西可以分成两步: 作用是什么? 原理是什么? 所以本文将从两个问题出发,对GB28181进行总结: GB28181是什么? GB28181原理是什么? GB…...
矩阵论:Vector-Valued Linear and Affine Functions介绍:中英双语
最近在翻看 这本书,对其中的一些英文概念做一些记录。 Link:https://web.stanford.edu/~boyd/books.html 中文版 向量值线性函数和仿射函数的详解 在机器学习、数据科学和工程应用中,向量值线性函数和仿射函数是非常重要的数学工具。本…...
网络七层杀伤链
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&…...
某狐畅游24校招-C++开发岗笔试(单选题)
某狐畅游24校招-C开发岗笔试 目录 某狐畅游24校招-C开发岗笔试一、单选题二、单选题解析 本文题目源来自:[PTA程序设计类实验辅助教学平台](PTA | 程序设计类实验辅助教学平台) 一、单选题 1-1 若有说明 int a[2][3]; 则对 a 数组元素的正确引用是 A. a[0][11]B. …...
spring mvc | servlet :serviceImpl无法自动装配 UserMapper
纯注解SSM整合 解决办法: 在MybatisConfig添加 Configuration MapperScan("mapper")...
在 CentOS 上安装 MySQL 8
在 CentOS 上安装 MySQL 8 您可以按照以下步骤操作: 1. 更新系统 首先,更新系统软件包以确保安装的最新版本。 sudo yum update -y 2. 安装 MySQL 8 安装 MySQL 存储库 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.r…...
EMC VMAX/DMX 健康检查方法
近期连续遇到2个由于对VMAX存储系统没有做及时的健康检查,出现SPS电池故障没有及时处理,然后同一pair就是同一对的另外一个SPS电池再次出现故障,然后存储系统保护性宕机vault,然后业务系统挂掉的案例。 开始之前,先纠…...
深入理解Kafka:核心设计与实践原理读书笔记
目录 初识Kafka基本概念安装与配置ZooKeeper安装与配置Kafka的安装与配置 生产与消费服务端参数配置 生产者客户端开发消息对象 ProducerRecord必要的参数配置发送消息序列化分区器生产者拦截器 原理分析整体架构元数据的更新 重要的生产者参数acksmax.request.sizeretries和re…...
Ubuntu命令行网络配置
临时连接 为什么需要临时连接,你最好测试你的网络适配器驱动能够连接到网络,然后再进行进一步的配置自动连接,否则也许会一直处在“折腾”中。 查看网络状态 ip addr show激活网络接口: sudo ip link set <适配器名称> up使…...
Wireshark软件下载安装及基础
前言 本次学习的是在b站up主泷羽sec课程有感而发,如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 !!…...
16asm - 宏汇编语法
文章目录 前言宏汇编表达式算术表达式逻辑运算关系运算符 标号匿名标号调整偏移量指令ORG当前地址指令$ 结构体宏equ语句语句macro语句 多文件编译源文件头文件函数使用全局变量编译 选择结构循环结构 总结 前言 各位师傅大家好,我是qmx_07,今天讲解 宏汇编的相关内…...
5.C语言内存分区-堆-栈
目录 内存分区 运行之前 代码区 全局初始化数据区 、静态数据区 (data) 未初始化数据区(bss(Block Started by Symbol)区) 总结 运行之后 代码区 (text segment) 未初始化数据区(bss) 全局初始化数据区,静态…...
【模拟】饮料促销
题目描述 暑期到了,各大商场都开始举办饮料促销优惠活动,卡卡维他命水凭3个瓶盖可以再换一瓶并且可以一直循环下去(但不允许暂借或赊账)。请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么对于他初始买入的 n 瓶…...
RFdiffusion get_torsions函数解读
函数功能 get_torsions 函数根据输入的原子坐标(xyz_in)和氨基酸序列(seq),计算一组主链和侧链的扭转角(torsions)。同时生成备用扭转角(torsions_alt),用于表示可以镜像翻转的几何结构,并返回掩码(tors_mask)和是否平面化(tors_planar)的信息。 输入参数 xyz…...
重拾设计模式--组合模式
文章目录 1 、组合模式(Composite Pattern)概述2. 组合模式的结构3. C 代码示例4. C示例代码25 .应用场景 1 、组合模式(Composite Pattern)概述 定义:组合模式是一种结构型设计模式,它允许你将对象组合成…...
IntelliJ IDEA Docker集成
一、概述 Docker是一种用于在隔离和可复制环境中部署和运行可执行文件的工具。这可能很有用,例如,在与生产相同的环境中测试代码。 IntelliJ IDEA集成了Docker功能,并为创建Docker映像、运行Docker容器、管理Docker Compose应用程序、使用公…...
【Blender】【源码详解】BLI_mesh_boolean 实现详解
1. 背景: 最近因为项目需要,需要阅读 Blender 中关于 mesh boolean 的源码;因此,对 blender 中的 mesh boolean 源码进行解读; Github 上源码下载很慢,一般使用 Gitee: gitee Blender 源码 2. Mesh Boole…...
36. Three.js案例-创建带光照和阴影的球体与平面
36. Three.js案例-创建带光照和阴影的球体与平面 实现效果 知识点 Three.js基础 WebGLRenderer WebGLRenderer 是Three.js中最常用的渲染器,用于将场景渲染到网页上。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobject可选参数&#…...
C语言 函数嵌套
#include <stdio.h> void new_line() {printf("hehe\n"); } void three_line() {int i 0;for (i 0; i < 3; i){new_line;} } int main() {three_line();return 0; } 函数可以嵌套调用,但不能嵌套定义 链式访问 main有三个参数 //main函数的…...
Android adb查看某个进程的总线程数
Android adb查看某个进程的总线程数 adb shell 进入控制台,然后: top -m 20 列出当前系统的进程,找到目标进程的id, ps -T 进程id | wc -l Android adb shell ps进程查找以及kill-CSDN博客文章浏览阅读777次,点赞3次&a…...
安装milvus以及向量库增删改操作
首先电脑已经安装了docker windows电脑可下载yml文件 https://github.com/milvus-io/milvus/releases/download/v2.4.6/milvus-standalone-docker-compose.yml 创建milvus文件夹,并在这个目录下创建五个文件夹:conf、db、logs、pic、volumes、wal 然后…...
基于深度学习多图像融合的屏幕缺陷检测方案
公司项目,已申请专利。 深度学习作为新兴技术在图像领域蓬勃发展,因其自主学习图像数据特征的性能避免了人工设计算法的繁琐,精准的检测性能、高效的检测效率以及对各种不同类型的图像任务都有比较好的泛化性能,使得深度学习技术在…...
OAuth 2.0
简介 OAuth 是一种开放标准的授权协议或框架,它提供了一种安全的方式,使第三方应用程序能够访问用户在其他服务上的受保护资源,而无需共享用户的凭证(如用户名和密码)。OAuth 的核心思想是通过“授权令牌”来代替直接…...
2024年11月 蓝桥杯青少组 STEMA考试 Scratch真题
2024年11月 蓝桥杯青少组 STEMA考试 Scratch真题(选择题) 题目总数:5 总分数:50 选择题 第 1 题 单选题 Scratch运行以下程宇后,小兔子会( )。 A. 变小 B. 变大 C. 变色 D. …...
pat乙级1072 开学寄语
下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面、理发、整衣&am…...
【Linux系统编程】:信号(2)——信号的产生
1.前言 我们会讲解五种信号产生的方式: 通过终端按键产生信号,比如键盘上的CtrlC。kill命令。本质上是调用kill()调用函数接口产生信号硬件异常产生信号软件条件产生信号 前两种在前一篇文章中做了介绍,本文介绍下面三种. 2. 调用函数产生信号 2.1 k…...
Qwen2.5-7B 微调rz吧数据集
Qwen2.5-7B 微调弱智吧数据集 模型微调简介 模型微调是一种在已有预训练模型的基础上,通过使用特定任务的数据集进行进一步训练的技术。这种方法允许模型在保持其在大规模数据集上学到的通用知识的同时,适应特定任务的细微差别。使用微调模型ÿ…...
未来将要被淘汰的编程语言
COBOL - 这是一种非常古老的语言,主要用于大型企业系统和政府机构。随着老一代IT工作人员的退休,COBOL程序员变得越来越少。Fortran - 最初用于科学和工程计算,Fortran在特定领域仍然有其应用,但随着更现代的语言(如Py…...
翻转(蓝桥杯2023大学C组试题E)
【问题描述】:小蓝用黑白棋的n个棋子排成了一行,他在脑海里想象出了一个长度为n的01串T,他发现如果把黑棋当作1、白棋当做0,这一行棋子是一个长度为n的01串S。 小蓝如果在S中发现一颗棋子和它两边的棋子都不一样,可以将…...
期权VIX指数构建与择时应用
芝加哥期权交易 所CBOE的波动率指数VIX 是反映 S&P 500 指数未来 30 天预测期波动率的指标,由于预期波动率多用于表征市场情绪,因此 VIX 也被称为“ 恐慌指数”。 VIX指数计算 VIX 反映了市场情绪和投资者的风险偏好, 对于欧美市场而言…...
Nginx界的天花板-Oracle 中间件OHS 11g服务器环境搭建
环境信息 服务器基本信息 如下表,本次安装总共使用2台服务器,具体信息如下: 服务器IP DNS F5配置 OHS1 172.xx.xx.xx ohs01.xxxxxx.com ohs.xxxxxx.com OHS2 172.xx.xx.xx ohs02.xxxxxx.com 服务器用户角色信息均为:…...
torch.unsqueeze:灵活调整张量维度的利器
在深度学习框架PyTorch中,张量(Tensor)是最基本的数据结构,它类似于NumPy中的数组,但可以在GPU上运行。在日常的深度学习编程中,我们经常需要调整张量的维度以适应不同的操作和层。torch.unsqueeze函数就是…...
为什么使用环形队列
1.看以下两种情况。第一种不会出现问题,当主流程读取次数比较慢时,数据会被覆盖。 2.扩大空间。不可取。 3.什么是队列...
Qt之QML应用程序开发:给应用程序添加图标文件
开发环境: 1、Qt Creator 14.0.1 2、windows10 先看下面的步骤,不明白再返回来看下面官方指导链接。 先看下面的步骤,不明白再返回来看下面官方指导链接。 先看下面的步骤,不明白再返回来看下面官方指导链接。 --------------------------------------------------------…...
基于xiaothink对Wanyv-50M模型进行c-eval评估
使用pypi安装xiaothink: pip install xiaothink1.0.2下载模型: 万语-50M 开始评估(修改模型路径后即可直接开始运行,结果保存在output文件夹里): import os import json import pandas as pd import re from tqdm import tqdm i…...
大模型项目如何成功落地?
随着人工智能的快速发展,大模型已经成为企业转型和提升效率的关键工具。要让大模型成功落地,需要几个关键要素,以及明白如何组建一个高效的团队。 首先,成功的关键在于业务人员的积极参与,这是项目成功的起点。 其次…...
重构(二)
继续"提高代码质量" 接着上文提高代码质量, 需要从这几个特点入手 1、代码重用性。2、可读性。3、可扩展性。4、可靠性。5、高内聚,低耦合。 仅仅就"可读性"去分析一下吧, 毕竟例子实在是太多了 递归的"可读性"不如while循环 递归…...
Sapro编程软件
Sapro软件是由西门子建筑科技公司开发的一款编程软件,主要用于Climatix控制器的编程、调试及相关功能实现.以下是其具体介绍: • 功能强大:可进行HVAC控制编程,实现设备控制、HMI用户访问和设备集成等功能,满足复杂的…...