当前位置: 首页 > news >正文

10.11 QT数据库实现学生信息的增、删、改、查

.pro文件

QT       += core gui sql

.h文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QSqlDatabase>   //数据库管理类
#include <QSqlQuery>      //数据库查寻类
#include <QSqlRecord>     //记录类
#include <QMessageBox>    //消息对话框
#include <QDebug>
#include <QSqlError>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_add_Button_clicked();void on_look_Button_clicked();void on_delete_Button_clicked();void on_sort_Button_clicked();void on_change_Button_clicked();private:Ui::Widget *ui;QSqlDatabase db;    //实例化一个数据库对象
};
#endif // WIDGET_H

源文件

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//添加某个数据库if(!db.contains("stu.db"))  // 如果当前对象没有包含所需的数据库,则添加一个数据库{db=QSqlDatabase::addDatabase("QSQLITE");   //添加sqlite3的数据库db.setDatabaseName("stu.db");   //设置数据库名称}if(!db.open()){QMessageBox::information(this,"提示","数据库打开失败");return ;}//1 实例化一个sql语句执行者QSqlQuery querry;//2准备sql语句QString sql="create table if not exists STU(name char,id int,sex char,score double);";//3 执行sql语句if(!querry.exec(sql)){QMessageBox::information(this,"提示","数据库打开失败");return ;}
}Widget::~Widget()
{delete ui;
}void Widget::on_add_Button_clicked()
{//1 获取UI界面的相关信息QString ui_name=ui->name_Edit->text();    //获取姓名int ui_id=ui->id_Edit->text().toUInt();    //获取学号QString ui_sex=ui->sex_Edit->text();        //获取性别double ui_score=ui->score_Edit->text().toDouble();    //获取成绩//2 判断信息中是否有空的if(ui_name.isEmpty()||ui_id==0||ui_sex.isEmpty()||ui_score==0){QMessageBox::information(this,"提示","请将信息填充完整");return ;}// 3 准备sql语句QString sql=QString("insert into STU(name,id,sex,score) values('%1',%2,'%3',%4);").arg(ui_name).arg(ui_id).arg(ui_sex).arg(ui_score);//4 实例化sql语句执行者QSqlQuery querry;// 5执行sql语句if(!querry.exec(sql)){QMessageBox::information(this,"提示","添加信息失败");return ;}else{QMessageBox::information(this,"提示","添加成功");}on_look_Button_clicked(); //展示添加的信息
}
//展示信息按钮对应的槽函数
void Widget::on_look_Button_clicked()
{ui->msgTable->setRowCount(0); // 清空现有行ui->msgTable->setColumnCount(10); // 设置列数,确保与数据库字段数匹配//1 实例化一个SLQ语句执行者QSqlQuery querry;//2 准备sql语句QString sql=QString("select * from STU;");//3 执行sql语句if(!querry.exec(sql)){QMessageBox::information(this,"提示","展示失败");return ;}else{QMessageBox::information(this,"提示","展示成功");}int i=0;while(querry.next()){//获取当前记录QSqlRecord record=querry.record();ui->msgTable->insertRow(i);for(int j=0;j<record.count();j++){//将数据库中的字段,封装成ui界面上的一条信息QTableWidgetItem *item=new QTableWidgetItem(record.value(j).toString());ui->msgTable->setItem(i,j,item);    //将信息进行展示}i++;  //行数+1}}void Widget::on_delete_Button_clicked()
{//1 获取要删除的学生信息QString delete_name=ui->name_Edit->text();    //获取删除学生姓名//2 检查信息是否有效if(delete_name.isEmpty()){QMessageBox::information(this,"提示","请输入有效的学生信息");return ;}// 3 实例化一个sql语句执行者QSqlQuery querry;//4 准备sql语句QString sql= QString("DELETE FROM STU WHERE name='%1';").arg(delete_name);//5 执行sql语句if(!querry.exec(sql)){QMessageBox::information(this,"提示","删除失败");return ;}else{QMessageBox::information(this,"提示","删除成功");}on_look_Button_clicked();
}void Widget::on_sort_Button_clicked()
{//按成绩排序QString ui_sort="score";  //选择排序的列名QString choose="ASC";  //升序// QString choose="DESC";  //降序if (ui->msgTable->rowCount() == 0){QMessageBox::information(this, "提示", "没有可提供排序的列数");return;}// 1 清空列表ui->msgTable->setRowCount(0); // 清空现有行ui->msgTable->setColumnCount(10); // 设置列数,确保与数据库字段数匹配//2 实例化一个sql执行者QSqlQuery querry;//3  准备执行语句QString sql=QString("SELECT * FROM STU ORDER BY %1 %2;").arg(ui_sort,choose);//4 执行sql语句if(!querry.exec(sql)){QMessageBox::information(this,"提示","排序失败"+querry.lastError().text());return ;}else{QMessageBox::information(this,"提示","排序成功");}on_look_Button_clicked();  //展示信息}void Widget::on_change_Button_clicked()
{// 1. 获取用户输入QString ui_name = ui->name_Edit->text();  // 获取姓名int ui_id = ui->id_Edit->text().toUInt(); // 获取学号QString ui_sex = ui->sex_Edit->text();    // 获取性别double ui_score = ui->score_Edit->text().toDouble(); // 获取成绩// 2. 检查输入有效性if (ui_id == 0 || ui_name.isEmpty() || ui_sex.isEmpty() || ui_score == 0) {QMessageBox::information(this, "提示", "请将信息填写完整");return;}// 3. 实例化一个SQL语句执行者QSqlQuery query;// 4. 准备SQL更新语句QString sql = QString("UPDATE STU SET name='%1', sex='%2', score=%3 WHERE id=%4;").arg(ui_name).arg(ui_sex).arg(ui_score).arg(ui_id);// 5. 执行SQL语句if (!query.exec(sql)) {QMessageBox::information(this, "提示", "修改信息失败: " + query.lastError().text());return;} else {QMessageBox::information(this, "提示", "修改成功");}// 6. 更新显示on_look_Button_clicked(); // 重新加载数据以显示最新信息
}

效果

添加前

添加后

修改删除

排序 升序 人脸识别

.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
#include<opencv2/face.hpp>
#include <vector>
#include <map>
#include <QMessageBox>
#include <QDebug>
#include <QFile>
#include <QTextStream>
#include <QDateTime>
#include <QTimerEvent>
#include<QtSerialPort/QtSerialPort>
#include<QtSerialPort/QSerialPortInfo>
using namespace  cv;
using namespace cv::face;
using namespace std;QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;
};
#endif // WIDGET_H

源文件

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//1实例化一个视频对象VideoCapture Video;//2 打开视频文件if(!Video.open(0))// 0 为打开摄像头{QMessageBox::information(this," 提示","视频文件打开失败");return ;}// 3 从 视频流对象中不断读取 图像Mat src;Mat gray;Mat dest;//4给级联分类器分类对象CascadeClassifier c;vector<Rect>faces;//给级联分类器装载分类模型if(!c.load("D:\\opencv\\1234\\haarcascade_frontalface_alt.xml")){QMessageBox::information(this,"提示","级联分类器启动失败");return;}while (Video.read(src)){cv::flip(src,src,1);  //进行 镜像处理//灰度处理cv::cvtColor(src,gray,CV_BGR2GRAY);// 均衡化处cv::equalizeHist(gray,dest);//对图相像素进行处理//at//src.at
//        for(int i=0;i<src.rows;i++)  //外行
//        {
//            for(int j=0;j<src.cols;j++) //内行
//            {
//                //src.at <cv::Vec3b>(i,j)[k]:表示任意通道值
//                //src.at<cv::Vec3b>(i,j)[k]=255-src.
//            }
//        }//44使用级联类器获取人脸矩形区域c.detectMultiScale(dest,faces);//55 将得到的矩形框绘制在图像上for(int i=0;i<faces.size();i++){//调用CV提供的函数cv::rectangle(src,faces[i],Scalar(0,0,255),2);}//src中就是读取下来的一张图形//将图像进行展示imshow("src",src);imshow("gray",gray);imshow("dest",dest);if(waitKey(30)==27){break;}}
}Widget::~Widget()
{delete ui;
}


http://www.mrgr.cn/news/48173.html

相关文章:

  • 代理模式(JDK,CGLIB动态代理,AOP切面编程)
  • Linux-Profile工具
  • OpenHarmony-3.HDF Display子系统(6)
  • 单元测试-Unittest框架实践
  • 2023年厦门市第30届小学生C++信息学竞赛复赛上机操作题(三、2023C. 太空旅行(travel))
  • YOLO模型分布式训练:步骤与操作方式
  • Android blueprint/microfactory/microfactory.bash源码分析
  • ajax请求
  • 基于SpringBoot+Vue+MySQL的留守儿童爱心网站
  • 解锁机器人视觉与人工智能的潜力,从“盲人机器”改造成有视觉能力的机器人(下)
  • java医院后台管理系统设计与实现源码(springboot+vue+mysql)
  • 消息中间件介绍
  • 如何快速保存微信公众号文章中的图片
  • 【JVM】JMM
  • 介绍Java
  • 《浔川社团官方自即日起停止发文》
  • 大数据治理快速入门指南
  • kali(专业的渗透测试虚拟机)|kali下载链接地址 |kali安装 |kali部署指南
  • GitHub Universe Learn Live|共聚 2024 GitHub Universe 十周年
  • postgresql 安装
  • 10.11Python数学基础-多维随机变量及其分布
  • 物理学基础精解【71】
  • ELK:Elasticsearch、Logstash、Kibana Spring Cloud Sleuth和Spring Cloud Zipkin
  • 24-10-11-网络
  • 基于Web的停车场管理系统(论文+源码)_kaic
  • 编写Vue组件