QT day6

目录

思维导图

学生管理系统


思维导图

学生管理系统

ui界面

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QSqlDatabase> //数据库管理类
#include <QSqlQuery> //执行sql语句类
#include <QSqlRecord> //数据库记录类
#include <QSqlError> //数据库错误类
#include <QMessageBox> //消息对话框类


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_addbtn_clicked();

    void on_showBtn_clicked();

    void on_updateBtn_clicked();

    void on_deleteBtn_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("stuInfo.db"))
    {
        //说明数据库不存在,需要创建数据库
        db = QSqlDatabase::addDatabase("QSQLITE"); //驱动为sqlite3
        //给刚才创建的数据库设置数据库名
        db.setDatabaseName("stuInfo");
    }

    //打开数据库
    if(!db.open())
    {
        QMessageBox::information(this,"","打开数据库失败!");
        return;
    }

    //创建数据库表

    //实例化一个执行sql语句的对象
    QSqlQuery query;
    //准备sql语句
    QString sql = "create table if not exists stu_info_table("
                  "id integer primary key autoincrement,"
                  "numb integer,"
                  "name varchar(20),"
                  "sex varchar(4),"
                  "score integer)";
    //执行sql语句
    if(query.exec(sql))
    {
        QMessageBox::information(this,"","创建数据库表成功!");
    }
    else
    {
        QMessageBox::information(this,"","创建数据库表失败!");
    }
}

Widget::~Widget()
{
    delete ui;
}

//添加按钮对应的槽函数处理
void Widget::on_addbtn_clicked()
{
    //获取ui界面上的学生信息
    int numb = ui->numberEdit->text().toUInt();
    QString name = ui->nameEdit->text();
    QString sex = ui->sexEdit->text();
    int score = ui->scoreEdit->text().toUInt();

    //判断用户是否填写完整信息
    if(numb==0 || name.isEmpty() || sex.isEmpty() || score==0)
    {
        QMessageBox::information(this,"","请将信息填写完整!");
        return;
    }

    //实例化一个执行sql语句的对象
    QSqlQuery query;
    //准备sql语句
    QString sql = QString("insert into stu_info_table(numb,name,sex,score)"
                          "values(%1,'%2','%3',%4)").arg(numb).arg(name).arg(sex).arg(score);

    //执行sql语句
    //执行sql语句
    if(query.exec(sql))
    {
        QMessageBox::information(this,"","添加成功!");
    }
    else
    {
        QMessageBox::information(this,"","添加失败!");
    }


}

//显示按钮对应的槽函数处理
void Widget::on_showBtn_clicked()
{
    ui->tableWidget->clear();

    //实例化一个执行sql语句的对象
    QSqlQuery query;
    //准备sql语句
    QString sql = "select * from Stu_info_table";
    //执行sql语句
    if(!query.exec(sql))
    {
        QMessageBox::information(this,"","查询失败!");
        return;
    }
    //所查询的信息就已经存放到query对象中
    int i=0; //记录行号
    while (query.next())
    {
        for(int j=0;j<query.record().count();j++)
        {
            //将数据放到ui界面上
            ui->tableWidget->setItem(i,j,new QTableWidgetItem(query.value(j+1).toString()));
        }
        i++; //行数递增
    }
}

//修改按钮对应的槽函数处理
void Widget::on_updateBtn_clicked()
{
    //实例化一个执行sql语句的对象
    QSqlQuery query;

    int numb = ui->numberEdit->text().toUInt();
    QString name = ui->nameEdit->text();
    QString sex = ui->sexEdit->text();
    int score = ui->scoreEdit->text().toUInt();

    if(numb!=0)
    {
        if(!name.isEmpty())
        {
            //准备sql语句
            QString sql = QString("update Stu_info_table set name='%1' where numb=%2").arg(name).arg(numb);
            //执行sql语句
            if(query.exec(sql))
            {
                QMessageBox::information(this,"","姓名修改成功!");
            }
            else
            {
                QMessageBox::information(this,"","姓名修改失败!");
                return;
            }
        }
        if(!sex.isEmpty())
        {
            //准备sql语句
            QString sql = QString("update Stu_info_table set sex='%1' where numb=%2").arg(sex).arg(numb);
            //执行sql语句
            if(query.exec(sql))
            {
                QMessageBox::information(this,"","性别修改成功!");
            }
            else
            {
                QMessageBox::information(this,"","性别修改失败!");
                return;
            }
        }
        if(score!=0)
        {
            //准备sql语句
            QString sql = QString("update Stu_info_table set score=%1 where numb=%2").arg(score).arg(numb);
            //执行sql语句
            if(query.exec(sql))
            {
                QMessageBox::information(this,"","分数修改成功!");
            }
            else
            {
                QMessageBox::information(this,"","分数修改失败!");
                return;
            }
        }
        if(name.isEmpty() && sex.isEmpty() && score==0)
        {
            QMessageBox::information(this,"","请输入要修改的内容!");
            return;
        }
    }else
    {
        QMessageBox::information(this,"","请输入要修改的学生学号!");
    }
}


//删除按钮对应的槽函数处理
void Widget::on_deleteBtn_clicked()
{
    //实例化一个执行sql语句的对象
    QSqlQuery query;
    int numb = ui->numberEdit->text().toUInt();

    //准备sql语句
    QString sql = QString("delete from Stu_info_table where numb=%1").arg(numb);

    //执行sql语句
    if(query.exec(sql))
    {
        QMessageBox::information(this,"","删除成功!");
    }
    else
    {
        QMessageBox::information(this,"","删除失败!");
        return;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/323469.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【大模型 + 网络安全 】炒作内卷 or 革新升级?

一年前&#xff0c;ChatGPT问世&#xff0c;以强大的信息整合推理和语言对话能力惊艳全球&#xff0c;随后&#xff0c;以大语言模型LLM&#xff08;以下简称“大模型”&#xff09;为代表的AI技术应用全面席卷&#xff0c;赋能千行百业&#xff0c;重构业务流程&#xff0c;加…

Qt点击按钮在其附近弹出一个窗口

效果 FS_PopupWidget.h #ifndef FS_POPUPWIDGET_H #define FS_POPUPWIDGET_H#pragma once#include <QToolButton> #include <QWidgetAction> #include <QPointer>class QMenu;class FS_PopupWidget : public QToolButton {Q_OBJECTpublic:FS_PopupWidget(QW…

Android的setContentView流程

一.Activity里面的mWindow是啥 在ActivityThread的performLaunchActivity方法里面&#xff1a; private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {ActivityInfo aInfo r.activityInfo;if (r.packageInfo null) {r.packageInfo getP…

2024年甘肃省职业院校技能大赛信息安全管理与评估 样题一 模块二

竞赛需要完成三个阶段的任务&#xff0c;分别完成三个模块&#xff0c;总分共计 1000分。三个模块内容和分值分别是&#xff1a; 1.第一阶段&#xff1a;模块一 网络平台搭建与设备安全防护&#xff08;180 分钟&#xff0c;300 分&#xff09;。 2.第二阶段&#xff1a;模块二…

如何分析测试任务及需求(附分析流程)

测试分析 确认测试范围 根据测试项目的不同需求&#xff0c;有大致几类测试项目类型&#xff1a;商户/平台功能测试、支付方式接入测试、架构调整类测试、后台优化测试、性能测试、基本功能自动化测试。 测试项目需要按照文档要求进行测试需求分析&#xff0c;并给出对应的输出…

数据结构学习 jz66 构建乘积数组

关键词&#xff1a;数学 双指针 方法一&#xff1a;这个题目我一开始做不知道不能用除法。我做的&#xff1a;[ 用时: 12 m 12 s ] 用了除法 分类讨论 方法二&#xff1a;后来看了提示&#xff0c;双指针&#xff0c;两边各开始乘。 方法三&#xff1a;然后又看了答案可以节…

几款提高开发效率的Idea 插件

1、ignore 开发代码过程中经常会有一些需要提交到代码仓库的文件&#xff0c;比如java文件生成的.class、.jar 等&#xff0c;如果将编译后的文件都提交到代码库那么代码库会很大&#xff0c;关键是没有必要。 这款插件就可以很方便的解决某类文件或者某个文件夹不需要提交到…

OS进程管理

进程 文章目录 进程概念组成特征状态与转换组织方式链接方式索引方式 进程控制实现进程控制如何实现原语的“原子性” 进程通信(IPC)共享存储基于存储区共享基于数据结构的共享 消息传递直接通信方式间接通信方式 管道通信 线程实现方式用户级线程内核级线程 多线程模式状态与转…

文件销毁的方法与安全操作守则, 淼一护航文件安全最后一公里

文件销毁的目前大概分为三种&#xff0c;分别是&#xff1a; 一、做成纸浆填埋。把需要销毁处理的过期涉密文件放到工业浸泡池里面浸泡&#xff0c;放入自来水和一定比例的化学药物&#xff0c;文件经过5-8个小时的浸泡后变成了纸浆&#xff0c;上面记录的信息也随之被销毁。最…

智慧公厕:城市公共厕所环境卫生管理的智慧引擎

公共厕所是城市重要的环卫基础设施&#xff0c;也是城市建设不可或缺的组成部分。其整洁度、方便性和管理精细化&#xff0c;直接体现了城市管理水平和文明程度。为了满足越来越高的城市管理要求&#xff0c;智慧公厕应运而生。借助物联网技术、传感感知技术、云计算和大数据等…

2023年全球软件开发大会(QCon北京站2023)9月:核心内容与学习收获(附大会核心PPT下载)

随着科技的飞速发展&#xff0c;全球软件开发大会&#xff08;QCon&#xff09;作为行业领先的技术盛会&#xff0c;为世界各地的专业人士提供了交流与学习的平台。本次大会汇集了全球的软件开发者、架构师、项目经理等&#xff0c;共同探讨软件开发的最新趋势、技术与实践。本…

图书管理系统:从数据库设计到前端展示的实战经验分享

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

汽车线束的汽配企业MES管理系统解决方案

随着科技的飞速发展和环保需求的日益提升&#xff0c;新能源汽车在全球范围内崭露头角&#xff0c;成为未来出行的主导力量。在这股浪潮中&#xff0c;中国凭借其强大的研发实力和市场敏锐度&#xff0c;迅速崛起为新能源汽车领域的佼佼者。而作为汽车数字化控制与智能化应用的…

[LitCTF 2023] Web类题目分享

[LitCTF 2023] Web类题目做法及思路解析&#xff08;个人分享&#xff09; 题目平台地址&#xff1a;NSSCTF | 在线CTF平台 一、[LitCTF 2023]我Flag呢&#xff1f; 奇怪&#xff0c;放哪里了&#xff0c;怎么看不见呢&#xff1f;&#xff08;初级难度&#xff09; 1.访问…

软件测试|Python中如何提取列表中索引为奇数的元素

简介 在Python中&#xff0c;我们经常需要从列表中提取特定位置的元素。如果我们想要提取列表中索引为奇数的元素&#xff0c;可以使用一些简单的方法来实现这一目标。本文将介绍如何在Python中提取列表中索引为奇数的元素&#xff0c;并提供示例代码来帮助大家更好地理解这个…

写点东西《使用 Docker 构建本地开发环境:运行带有 PostgreSQL 和 Minio S3 的 Next.js 全栈应用程序》

写点东西《使用 Docker 构建本地开发环境&#xff1a;运行带有 PostgreSQL 和 Minio S3 的 Next.js 全栈应用程序》 [TOC](写点东西《使用 Docker 构建本地开发环境&#xff1a;运行带有 PostgreSQL 和 Minio S3 的 Next.js 全栈应用程序》) [](#introduction) 简介 先决条件 构…

HCIP-3

重发布、重分布、重分发&#xff1a; ASBR同时工作于不同的路由协议中&#xff0c;然后通过各种的方式学习的条目&#xff0c;再进行共享&#xff1b; 必须存在ASBR----自治系统边界路由器--协议边界路由器需要考虑种子度量 规则&#xff1a; 将A协议发布到B协议&#xff0c…

SpringBoot教程(九) | SpringBoot统一异常处理

SpringBoot教程(九) | SpringBoot统一异常处理 异常大家应该都很清楚&#xff0c;我们的项目总是不可避免的出现异常&#xff0c;那么应该如何优雅的进行异常处理使我们需要关注的一个问题&#xff0c;合理的异常封装既可以方便前端的处理&#xff0c;也能够简化后端的开发。 …

uniap vue3 组件使用uni.createSelectorQuery() 获取dom报错

由于vue3中没有this&#xff0c;所以使用uni.createSelectorQuery().in(this)时&#xff0c;会报错 使用 getCurrentInstance 获取组件实例 使用 uni.createSelectorQuery() 批量查询时&#xff0c;结果是按照查询的顺序返回的 使用示例 import { getCurrentInstance } from…

MySQl导入与导出远程备份

文章目录 一. navicat导入导出 二. mysqldump命令导入导出导入导出 三. load data infile命令导入导出导入导出 四. 远程备份导入导出思维导图 一. navicat 导入 右键——>运行SQL文件 导出 选中要导出的表➡右键➡转储SQL文件➡数据和结构 二. mysqldump命令导入导出…