Qt 小項目 學生管理信息系統

主要是對數據庫的增刪查改的操作

登錄/注冊界面:

主頁面:?

添加信息:

刪除信息:

刪除第一行(支持多行刪除)?

需求分析:

用QT實現一個學生管理信息系統,數據庫為MySQL
要求:
- 1、要求有完整界面,如登錄界面、信息操作界面
- 2、要求有數據庫
- 3、可以錄入學生信息
- 4、可以查詢學生信息,支持模糊查詢
- 5、可以修改學生信息,支持單個和批量修改
- 6、可以刪除學生信息,支持單個和批量刪除
- 7、學生信息包括:班級、學號、姓名、性別、出生年月、專業、所屬學院

2024.11.30 bug和所需添加記錄:
- 注冊賬號時空值也會新建(已解決)
- 數據庫sql語句寫在qt上,方便運行(已解決)
- 用戶名規則,開頭字母

2024.12.6 bug記錄
- 相同賬號和不同密碼,彈出信息框錯誤(已解決)
- 代碼耦合:qt數據庫常量抽取出來(已解決)
- 添加信息后沒有刷新信息

登錄界面:

Login.h

#ifndef LOGIN_H
#define LOGIN_H#include <QWidget>
#include <QSqlDatabase> //數據庫驅動
#include <QSqlQuery> //數據庫執行語句
#include <QSqlError> //數據庫報錯
#include <QMessageBox> //消息對話框
#include <QDebug>QT_BEGIN_NAMESPACE
namespace Ui {
class Login;
}
QT_END_NAMESPACEclass Login : public QWidget
{Q_OBJECTpublic:Login(QWidget *parent = nullptr);~Login();void createDataBase();private slots:void on_loginbutton_clicked();void on_registerbtn_clicked();private:Ui::Login *ui;
};
#endif // LOGIN_H

Login.cpp

#include "login.h"
#include "ui_login.h"
#include "homepage.h"
#define databaseName "qt"Login::Login(QWidget *parent): QWidget(parent), ui(new Ui::Login)
{ui->setupUi(this);//加載驅動QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");db.setHostName("127.0.0.1"); // 主機IPdb.setUserName("root"); // 用戶名db.setPassword(""); // 密碼if (!db.open()) {qDebug() << "WARNING: " << db.lastError().text();return; // 如果連接失敗,退出函數}// qDebug() << databaseName;// 檢查數據庫 qt 是否存在QSqlQuery query;if (!query.exec("CREATE DATABASE IF NOT EXISTS " databaseName)) {qDebug() << "創建數據庫" << databaseName << "失敗:" << query.lastError().text();return; // 數據庫創建失敗,退出函數}else{qDebug() << "數據庫" << databaseName << "已存在!";}db.setDatabaseName(databaseName); // 現在切換到 qt 數據庫if (!db.open()) {qDebug() << "WARNING: 無法打開 " << databaseName << "數據庫:" << db.lastError().text();return; // 如果無法連接到 qt,退出函數}// 數據庫連接成功,繼續后續操作qDebug() << "成功創建數據庫!" << databaseName ;createDataBase();
}//sql語句創建數據庫
void Login::createDataBase() {// 創建user表的SQL語句QString createUserTable = "CREATE TABLE IF NOT EXISTS `user` (""`account` VARCHAR(20) NOT NULL, ""`pwd` VARCHAR(20) NOT NULL, ""PRIMARY KEY (`account`))";// 創建student表的SQL語句QString createStudentTable = "CREATE TABLE IF NOT EXISTS `student` (""`id` INT(5) NOT NULL, ""`name` VARCHAR(20) NOT NULL, ""`gender` VARCHAR(2) NOT NULL, ""`birthdate` VARCHAR(10) NOT NULL, ""`major` VARCHAR(20) NOT NULL, ""`class` VARCHAR(20) NOT NULL, ""`college` VARCHAR(20) NOT NULL, ""PRIMARY KEY (`id`))";// 執行創建表的SQL語句QSqlQuery query;if (query.exec(createUserTable) && query.exec(createStudentTable)) {qDebug() << "數據庫創建成功";} else {qDebug() << "數據庫創建失敗" << query.lastError().text();}}void Login::on_loginbutton_clicked() //登錄功能
{QString account = ui->account->text();QString password = ui->pwd->text();QString sql = QString("select * from user where account='%1' and pwd='%2'").arg(account).arg(password);QSqlQuery query(sql);if(query.next()){QMessageBox::information(this, "登錄認證", "登錄成功");//登錄成功后可以跳轉到主頁面HomePage *window = new HomePage();window->show();this->close(); //關閉登錄窗口}else{QMessageBox::information(this, "登錄認證", "登錄失敗,賬戶或者密碼錯誤");}// HomePage *window = new HomePage(); //測試專用// window->show();// this->close(); //關閉登錄窗口
}void Login::on_registerbtn_clicked() //注冊按鈕
{QString account = ui->account->text().trimmed();QString password = ui->pwd->text().trimmed();//判斷賬號和密碼是否為空if(account.isEmpty() || password.isEmpty()){QMessageBox::warning(this,"注冊認證","賬號或密碼不能為空!");return; //退出函數}//相同賬號,不同密碼的情況:QString sql = QString("select * from user where account='%1'").arg(account);QSqlQuery query(sql);if(query.next()){QMessageBox::warning(this,"注冊認證","賬號已存在!");return; //退出函數}//注冊賬號sql = QString("insert into user(account,pwd) values('%1','%2');").arg(account).arg(password);if(query.exec(sql)){ //表中存在該賬號和密碼QMessageBox::information(this,"注冊認證","注冊失敗!");}else{QMessageBox::information(this,"注冊認證","注冊成功!");}
}Login::~Login()
{delete ui;
}

Login.ui

學生管理信息系統界面:

HomePage.h

#ifndef HOMEPAGE_H
#define HOMEPAGE_H#include <QWidget>
#include <QSqlDatabase> //數據庫驅動
#include <QSqlQuery> //數據庫執行語句
#include <QSqlError> //數據庫報錯
#include <QMessageBox> //消息對話框
#include <QDebug>namespace Ui {
class HomePage;
}class HomePage : public QWidget
{Q_OBJECTpublic:explicit HomePage(QWidget *parent = nullptr);~HomePage();void initDatabase(); //加載數據庫驅動函數void refreshTable(QString inquiresql); //刷新表格,查詢數據庫全部內容private slots:void on_refresh_btn_clicked();void on_delete_btn_clicked();void on_inquire_btn_clicked();void on_add_btn_clicked();void on_modify_btn_clicked();private:Ui::HomePage *ui;
};#endif // HOMEPAGE_H

HomePage.cpp

#include "homepage.h"
#include "ui_homepage.h"
#include "add.h"
#include "modify.h"
#define databaseName "qt"HomePage::HomePage(QWidget *parent): QWidget(parent), ui(new Ui::HomePage)
{ui->setupUi(this);initDatabase(); //加載數據庫驅動//設置表頭QStringList headerList; //定義headerList變量headerList << "選擇欄" << "學號" << "姓名" << "性別" << "出生年月" << "專業" << "班級" << "學院"; //添加內容QFont font; //設置字號font.setPointSize(17);ui->tableWidget->setFont(font);ui->tableWidget->setColumnCount(headerList.size()); //設置列數=表頭列數ui->tableWidget->setHorizontalHeaderLabels(headerList); //添加headerList到表頭ui->tableWidget->setRowCount(3); //設置行數,不設置顯示不出文本// 設置列表自動填充滿窗口ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);// 設置輸入框提示信息為占位符文本,一旦用戶開始輸入,提示信息會消失。ui->inquire_lineEdit->setPlaceholderText("支持模糊查詢,輸入姓名或者學號關鍵詞");refreshTable(NULL);
}void HomePage::initDatabase(){ //加載數據庫驅動函數QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");db.setHostName("127.0.0.1"); // 主機IPdb.setUserName("root"); // 用戶名db.setPassword(""); // 密碼db.setDatabaseName(databaseName); // 要連接哪個數據庫,它的名字// 打開數據庫,如果打不開就彈出報錯對話框if(db.open() == false){qDebug() << "WARNING:" <<  db.lastError().text() << "\n";}// 打開成功qDebug() << "數據庫成功打開" << "\n";
}void HomePage::refreshTable(QString inquiresql){//先【從最后往前】刪除表格所有行for(int row = ui->tableWidget->rowCount()-1; row >= 0; row--){ui->tableWidget->removeRow(row);}QSqlQuery query;if(inquiresql.isEmpty()){QString sql = "select * from student";query.exec(sql);}else{query.exec(inquiresql);}//數據庫查詢并添加int row = 0;while(query.next()){int Old_RowCount = ui->tableWidget->rowCount(); //獲取當前表格行數ui->tableWidget->setRowCount(Old_RowCount+1); //添加一行//第一列添加復選框QTableWidgetItem *checkbox = new QTableWidgetItem();checkbox->setCheckState(Qt::Unchecked); //設置非選中狀態ui->tableWidget->setItem(row, 0, checkbox);//添加數據,未設置只讀狀態ui->tableWidget->setItem(row, 1, new QTableWidgetItem(query.value(0).toString())); // 學號ui->tableWidget->setItem(row, 2, new QTableWidgetItem(query.value(1).toString())); // 姓名ui->tableWidget->setItem(row, 3, new QTableWidgetItem(query.value(2).toString())); // 性別ui->tableWidget->setItem(row, 4, new QTableWidgetItem(query.value(3).toString())); // 出生年月ui->tableWidget->setItem(row, 5, new QTableWidgetItem(query.value(4).toString())); // 專業ui->tableWidget->setItem(row, 6, new QTableWidgetItem(query.value(5).toString())); // 班級ui->tableWidget->setItem(row, 7, new QTableWidgetItem(query.value(6).toString())); // 學院row++; //下一行}
}void HomePage::on_refresh_btn_clicked() //刷新學生信息
{QString nullString = NULL;refreshTable(nullString); //刷新表格
}void HomePage::on_delete_btn_clicked() //刪除學生信息
{QList<QString> StudentId; //存儲需要刪除的學生id//遍歷表格每一行for(int row = ui->tableWidget->rowCount()-1; row >= 0; row--){QTableWidgetItem *checkBoxItem = ui->tableWidget->item(row, 0); //讀取勾選框的列表項if(checkBoxItem->checkState() == Qt::Checked){QTableWidgetItem *idItem = ui->tableWidget->item(row, 1); //讀取id的列表項if (idItem) {StudentId.append(idItem->text());}}}//沒勾選就不刪了,退出函數if(StudentId.empty()){QMessageBox::information(this, "提示", "請先勾選需要刪除的行");return;}//構建批量刪除的SQL語句,參數化查詢防止SQL注入QString sql = "DELETE FROM student WHERE id IN (";for (int i = 0; i < StudentId.size(); i++) {sql += "?";if (i < StudentId.size() - 1)sql += ",";}sql += ")";QSqlQuery query;query.prepare(sql);for (int i = 0; i < StudentId.size(); i++) {query.addBindValue(StudentId[i]);}if(query.exec()) {QString nullString = NULL;refreshTable(nullString); //刪除成功后立即刷新表格QMessageBox::information(this, "成功", "刪除成功!");} else {QMessageBox::information(this, "失敗", "刪除失敗:" + query.lastError().text());}
}void HomePage::on_inquire_btn_clicked() //查詢信息
{QString inquireString = ui->inquire_lineEdit->text().trimmed();QString sql = QString("select id, name, gender, birthdate, major, class, college from student where id like \"%1%2\" or name like \"%3%4\"").arg(inquireString, "%", inquireString, "%");refreshTable(sql);
}void HomePage::on_add_btn_clicked() //添加信息
{int Old_RowCount = ui->tableWidget->rowCount(); //獲取當前表格行數ui->tableWidget->setRowCount(Old_RowCount+1); //添加一行add *window = new add();window->show();
}void HomePage::on_modify_btn_clicked() //根據學號修改信息
{Modify *window = new Modify();window->show();
}HomePage::~HomePage()
{delete ui;
}

HomePage.ui

添加信息界面:

add.h

#ifndef ADD_H
#define ADD_H#include <QWidget>
#include <QMessageBox> //消息對話框
#include <QDebug>
#include <QSqlDatabase> //數據庫驅動
#include <QSqlQuery> //數據庫執行語句
#include <QSqlError> //數據庫報錯namespace Ui {
class add;
}class add : public QWidget
{Q_OBJECTpublic:explicit add(QWidget *parent = nullptr);~add();private slots:void on_add_btn_clicked();private:Ui::add *ui;
};#endif // ADD_H

add.cpp

#include "add.h"
#include "ui_add.h"
#include "homepage.h"add::add(QWidget *parent): QWidget(parent), ui(new Ui::add)
{ui->setupUi(this);
}void add::on_add_btn_clicked()
{QString id = ui->id_linedit->text().trimmed();QString name = ui->name_lineEdit->text().trimmed();QString gender = ui->gender_lineEdit->text().trimmed();QString birthdate = ui->birth_lineEdit->text().trimmed();QString major = ui->major_lineEdit->text().trimmed();QString Class = ui->class_lineEdit->text().trimmed();QString college = ui->college_lineEdit->text().trimmed();//結束條件if(id.isEmpty() || name.isEmpty() || gender.isEmpty()|| birthdate.isEmpty() || major.isEmpty() || Class.isEmpty() || college.isEmpty()){QMessageBox::warning(this, "警告", "信息請填寫完整!");return;}//判斷學號是否存在,存在則結束QString sql = "select * from student where id = ?";QSqlQuery query;query.prepare(sql);query.bindValue("?", id);query.exec();if(query.next()){QMessageBox::warning(this, "警告", "學號已存在!");return;}//添加學生sql = QString("insert into student (id, name, gender, birthdate, major, class, college) values (\"%1\", \"%2\", \"%3\", \"%4\", \"%5\", \"%6\", \"%7\")").arg(id, name, gender, birthdate, major, Class, college);if(query.exec(sql)) {QMessageBox::information(this, "成功", "插入成功!");close(); //關閉窗口HomePage *homepage = new HomePage();homepage->refreshTable(NULL); //刷新表格}else {QMessageBox::information(this, "失敗", "插入失敗:" + query.lastError().text());}
}add::~add()
{delete ui;
}

add.ui

修改信息界面:

Modify.h

#ifndef MODIFY_H
#define MODIFY_H#include <QWidget>
#include <QMessageBox> //消息對話框
#include <QDebug>
#include <QSqlDatabase> //數據庫驅動
#include <QSqlQuery> //數據庫執行語句
#include <QSqlError> //數據庫報錯namespace Ui {
class Modify;
}class Modify : public QWidget
{Q_OBJECTpublic:explicit Modify(QWidget *parent = nullptr);~Modify();private slots:void on_modify_btn_clicked();private:Ui::Modify *ui;
};#endif // MODIFY_H

Modify.cpp

#include "modify.h"
#include "ui_modify.h"
#include "homepage.h"Modify::Modify(QWidget *parent): QWidget(parent), ui(new Ui::Modify)
{ui->setupUi(this);
}void Modify::on_modify_btn_clicked()
{QString id = ui->id_linedit->text().trimmed();QString name = ui->name_lineEdit->text().trimmed();QString gender = ui->gender_lineEdit->text().trimmed();QString birthdate = ui->birth_lineEdit->text().trimmed();QString major = ui->major_lineEdit->text().trimmed();QString Class = ui->class_lineEdit->text().trimmed();QString college = ui->college_lineEdit->text().trimmed();if(id.isEmpty() || name.isEmpty() || gender.isEmpty()|| birthdate.isEmpty() || major.isEmpty() || Class.isEmpty() || college.isEmpty()){QMessageBox::warning(this, "警告", "信息請填寫完整!");return;}QSqlQuery query;QString sql = QString("update student set name = \"%1\"," "gender =\"%2\", birthdate =\"%3\", major = \"%4\", ""Class = \"%5\", college = \"%6\" where id =%7").arg(name, gender, birthdate, major, Class, college, id);if(query.exec(sql)){QMessageBox::information(this, "成功", "修改成功!");HomePage *homepage = new HomePage();QString nullString = NULL;homepage->refreshTable(nullString); //刷新表格close(); //關閉窗口}else{QMessageBox::information(this, "失敗", "修改失敗!");}
}Modify::~Modify()
{delete ui;
}

Modify.ui

參考資料:

【C++】C++ QT實現 學生信息管理系統(QT源碼)【獨一無二】_qt學生管理系統-CSDN博客

如何用qt實現學生信息管理系統_用qtcreater做一個學生信息管理系統-CSDN博客

Qt 學習第十一天:QTableWidget 的使用_qt tablewidget resize-CSDN博客

Qt 學習第十一天:QTableWidget 的使用_qt tablewidget resize-CSDN博客

Qt設計精美的登錄注冊界面(包含SQLite數據庫應用)_qt登錄界面設計-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62256.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62256.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62256.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

14.數據容器-set集合

特點 無序的&#xff0c;元素不重復&#xff0c;自帶去重功能。 可以容納不同類型的元素數據。 # 定義一個空set my_set {} your_set set() my_set {aa, bb, bb, aa} # {aa, bb} print(my_set) 因為set集合是無序的&#xff0c;所以集合不支持下標索引訪問。所以set集合…

“量子躍遷與數據織網:深入探索K最近鄰算法在高維空間中的優化路徑、神經網絡融合技術及未來機器學習生態系統的構建“

&#x1f3bc;個人主頁&#xff1a;【Y小夜】 &#x1f60e;作者簡介&#xff1a;一位雙非學校的大二學生&#xff0c;編程愛好者&#xff0c; 專注于基礎和實戰分享&#xff0c;歡迎私信咨詢&#xff01; &#x1f386;入門專欄&#xff1a;&#x1f387;【MySQL&#xff0…

硬件選型規則

光源選型: 先用型號中帶H的&#xff0c;沒有的選標準的. 光源和光源控制器的搭配需要確保接口一致。 根據型號表中的最佳工作距離和相機的尺寸。 光源控制器選型&#xff1a; 首先選擇海康風格系列光源控制器考慮與光源的接口匹配。功率應該滿足接近光源功率。檢查是否退市…

【QNX+Android虛擬化方案】135 - QNX側如何Dump 88Q5152 MIBS報文計數

【QNX+Android虛擬化方案】135 - QNX側如何Dump 88Q5152 MIBS報文計數 一、讀取 88Q5152 MIBS 計數二、讀取 88Q5152 WDT 相關寄存器基于原生純凈代碼,自學總結 純技術分享,不會也不敢涉項目、不泄密、不傳播代碼文檔!!! 本文禁止轉載分享 !!! 匯總鏈接:《【QNX+Andro…

C#核心(15)繼承中的構造函數

前言 我們之前學過構造函數是什么東西&#xff0c;今天的內容也和構造函數緊密相關&#xff0c;一個繼承了父親的子類里面構造函數的規則是什么樣的&#xff0c;今天內容很簡單&#xff0c;請聽我慢慢講來。 基本概念 特點&#xff1a;當申明一個子類時&#xff0c;先執行父…

TVbox源貢獻指南

歡迎各路大佬踴躍提PR&#xff0c;分享爬蟲代碼。 源碼倉庫地址 https://github.com/lushunming/AndroidCatVodSpider 快速開始 本工程是一個完整的AndroidStudio工程&#xff0c;請你用AS打開編輯。 工程調試完畢后要需要導出生成jar文件配合軟件使用&#xff0c;執行根目…

FastAPI快速入門

文章目錄 了解FastAPI程序結構第一步&#xff0c;導入FastAPI第二步&#xff0c;創建一個app實例第三步&#xff0c;編寫一個 路徑操作裝飾器第五步、運行開發服務器uvicorn main:app --reload即可訪問api鏈接。符案例 聲明路徑參數聲明路徑參數的類型get請求查詢參數請求體如何…

云計算.運維.面試題

1、計算機能直接識別的語言( C )。 A、匯編語言 B、自然語言 C、機器語言 D、高級語言 2、應用軟件是指( D )。 A、所有能夠使用的軟件 B、能被各應用單位共同使用的某種軟件 C、所有計算機上都應使用的基本軟件D、專門為某一應用目的而編制的軟件 3、計算機的顯示器是一…

如何優雅地實現單例模式?內部靜態類還是雙重檢查鎖定?

在最近的一個項目中&#xff0c;我需要為一個核心配置類實現單例模式。在設計過程中&#xff0c;我發現要同時滿足延遲加載和線程安全這兩個要求&#xff0c;常見的實現方式有兩種&#xff1a;內部靜態類和雙重檢查鎖定&#xff08;Double-Checked Locking, DCL&#xff09;。 …

【計算機網絡】 —— 數據鏈路層(壹)

文章目錄 前言 一、概述 1. 基本概念 2. 數據鏈路層的三個主要問題 二、封裝成幀 1. 概念 2. 幀頭、幀尾的作用 3. 透明傳輸 4. 提高效率 三、差錯檢測 1. 概念 2. 奇偶校驗 3. 循環冗余校驗CRC 1. 步驟 2. 生成多項式 3. 例題 4. 總結 四、可靠傳輸 1. 基本…

golang實現簡單的redis服務

golang 手搓redis服務器倉庫地址:實現思路: golang 手搓redis服務器 倉庫地址: 倉庫: https://github.com/dengjiayue/my-redis.git 實現思路: ● 協議: tcp通信 ● 數據包: 長度(4byte)方法(1byte)數據json ● 數據處理: 單線程map讀寫 ○ 依次處理待處理隊列的請求(chan)…

智慧銀行反欺詐大數據管控平臺方案(八)

智慧銀行反欺詐大數據管控平臺的核心理念&#xff0c;在于通過整合先進的大數據技術、算法模型和人工智能技術&#xff0c;構建一個全面、智能、動態的反欺詐管理框架&#xff0c;以實現對金融交易的全方位監控、欺詐行為的精準識別和高效處理。這一理念強調數據驅動決策&#…

3D 生成重建019-LERF用文本在Nerf中開啟上帝之眼

3D 生成重建019-LERF用文本在Nerf中開啟上帝之眼 文章目錄 0 論文工作1 論文方法2 實驗結果 0 論文工作 人類利用自然語言描述物理世界&#xff0c;根據各種特性&#xff08;視覺外觀、語義、抽象關聯&#xff09;尋找具體的3D位置。在這項工作中&#xff0c;作者提出了語言嵌…

如何選擇合適的期刊投稿?從課題組經驗到在線工具的使用全解析

~~~本文是作者個人的經驗分享&#xff0c;建立在導師讓自己選刊的情況下~~~ 投稿選刊是科研過程中至關重要的一步&#xff0c;選刊過程可能讓許多初投稿的研究者感到迷茫和困惑&#xff1a;期刊那么多&#xff0c;如何找到最合適的&#xff1f; 本文將從多個角度介紹如何選擇投…

024、Docker與SSH在分布式系統中的實踐指南

1. Docker SSH配置最佳實踐 Docker容器通常不需要SSH服務來運行&#xff0c;因為它們設計為輕量級、無狀態的&#xff0c;并且通常通過Docker命令行界面與宿主機進行交互。但是&#xff0c;在某些情況下&#xff0c;您可能需要通過SSH訪問Docker容器進行調試、維護或其他操作。…

【kafka】消息隊列的認識,Kafka與RabbitMQ的簡單對比

什么是消息隊列&#xff1f; 消息隊列&#xff08;Message Queue&#xff0c;簡稱 MQ&#xff09;是一個在不同應用程序、系統或服務之間傳遞數據的機制。 它允許系統間異步地交換信息&#xff0c;而無需直接交互&#xff0c;確保消息的可靠傳輸。 想象一下&#xff0c;你正在…

.NET MAUI與.NET for Android/IOS的關系

2024年11月13日微軟發布了.Net9.0,我打算體驗一下。安裝好.Net9.0 SDK后發現Visual Studio識別不到9.0&#xff0c;但是通過命令行dotnet --info查看是正常的&#xff0c;后面看到了VS有版本可以升級&#xff0c;把VS升級到17.12.0就可以了。更新完打開以后看到如下界面 這里…

SqlDataAdapter

SqlDataAdapter 是 .NET Framework 和 .NET Core 中提供的一個數據適配器類&#xff0c;屬于 System.Data.SqlClient 命名空間&#xff08;或在 .NET 6 中屬于 Microsoft.Data.SqlClient 命名空間&#xff09;。它的作用是充當數據源&#xff08;如 SQL Server 數據庫&#xff…

【vivado】時序報告--best時序和worst時序

利用vivado進行開發時&#xff0c;生成best時序報告和worst時序報告。 best時序報告 slow選擇min_max&#xff0c;fast選擇none。 worst時序報告 fast選擇min_max&#xff0c;slow選擇none。

FastAPI 響應狀態碼:管理和自定義 HTTP Status Code

FastAPI 響應狀態碼&#xff1a;管理和自定義 HTTP Status Code 本文介紹了如何在 FastAPI 中聲明、使用和修改 HTTP 狀態碼&#xff0c;涵蓋了常見的 HTTP 狀態碼分類&#xff0c;如信息響應&#xff08;1xx&#xff09;、成功狀態&#xff08;2xx&#xff09;、客戶端錯誤&a…