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_NAMESPACE

class Login : public QWidget
{
    Q_OBJECT

public:
    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"); // 主机IP
    db.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_OBJECT

public:
    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"); // 主机IP
    db.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_OBJECT

public:
    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_OBJECT

public:
    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博客

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

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

相关文章

第三部分:进阶概念 7.数组与对象 --[JavaScript 新手村:开启编程之旅的第一步]

第三部分&#xff1a;进阶概念 7.数组与对象 --[JavaScript 新手村&#xff1a;开启编程之旅的第一步] 在 JavaScript 中&#xff0c;数组和对象是两种非常重要的数据结构&#xff0c;它们用于存储和组织数据。尽管它们都属于引用类型&#xff08;即它们存储的是对数据的引用而…

Redis设计与实现读书笔记

目录 Redis设计与实现[^1]第一部分&#xff1a;数据结构与对象简单动态字符串SDS的基础定义与C字符串的差别常数获取长度杜绝缓冲区溢出减少修改字符串时带来的内存重分配次数二进制安全函数兼容 链表链表和链表节点的实现 字典字典的实现哈希表定义哈希表节点定义字典定义 哈希…

笔记04--零基础创建个人本地大模型知识库ollama+Dify

ollma安装 官网下载直接下一步下一步即可&#xff0c;没有魔法的朋友可以留言&#xff0c;文章中所用到的文件也给打包了&#xff0c;大家可以直接下载使用通过云盘下载使用。 链接: https://pan.baidu.com/s/12zF9MpQtg1bnMDAQayaSyg 提取码: n9rm 官网地址&#xff1a;http…

基于Springboot的校园交友网站设计与实现

1.1 管理信息系统概述 管理信息系统是计算机在信息管理领域的一种实用技术。通过运用管理科学、数学和计算机应用的原理及方法&#xff0c;在符合软件工程规范的原则下&#xff0c;形成一套完整的理论和方法体系。是一个以人、计算机和其他外部设备组成的可以进行信息的收集、…

Vue智慧商城项目

创建项目 vue组件库 — vant-ui&#xff08;常用于移动端&#xff09; Vant 2 - 轻量、可靠的移动端组件库 安装vant npm i vantlatest-v2 -S 引入组件 按需导入和全部导入 全部导入 整个组件库的所有组件都导进来&#xff0c;缺点是增加了代码包体积 main.js import…

灵途科技亮相2024世界传感器大会 分享光纤光源技术突破

12月1日至2日&#xff0c;2024世界传感器大会&#xff08;WSS&#xff09;在郑州国际会展中心隆重举办&#xff0c;泛自动驾驶领域光电感知专家灵途科技受邀参加“光纤传感器与激光雷达”分论坛&#xff0c;并在大会上带来《激光雷达用一体化光纤光源》专题演讲&#xff0c;同与…

【kotlin 】内联类(value class / inline class)

官方文档&#xff1a;https://kotlinlang.org/docs/inline-classes.html 注&#xff1a;inline class 关键字已经被废弃&#xff0c;取而代之的是value class。现在使用内联类需要定义类为value class&#xff0c;并使用JvmInline注解进行标注。 一、使用场景 有时候&#xff…

基于LSTM的A股股票价格预测系统(torch) :从数据获取到模型训练的完整实现

1. 项目简介 本文介绍了一个使用LSTM&#xff08;长短期记忆网络&#xff09;进行股票价格预测的完整系统。该系统使用Python实现&#xff0c;集成了数据获取、预处理、模型训练和预测等功能。 这个代码使用的是 LSTM (Long Short-Term Memory) 模型&#xff0c;这是一种特殊的…

【python自动化五】接口自动化基础--requests的使用

python的接口请求可以用requests库&#xff0c;这个介绍就不多说了&#xff0c;网上说得很详细。 接下来直接记录下如何使用&#xff08;当然也不限于自动化的使用&#xff09; 1.安装requests requests也需要安装一下 pip install requests2.requests请求 1.常用的请求方法…

【NLP 5、深度学习的基本原理】

目录 一、梯度下降算法 1.引例 —— 找极小值问题 目标&#xff1a; 方法&#xff1a; 2.梯度 例&#xff1a; 3.求解目标 为什么损失函数越小越好 4.梯度下降法 代码实现 5.细节问题 6.梯度爆炸和梯度消失 梯度爆炸 梯度消失 7.过拟合和欠拟合 欠拟合&#xff08;Underfitting…

DAY168内网对抗-基石框架篇单域架构域内应用控制成员组成用户策略信息收集环境搭建

知识点&#xff1a; 1、基石框架篇-单域架构-权限控制-用户和网络 2、基石框架篇-单域架构-环境搭建-准备和加入 3、基石框架篇-单域架构-信息收集-手工和工具 1、工作组(局域网) 将不同的计算机按照功能分别列入不同的工作组。想要访问某个部门的资源&#xff0c;只要在“…

MATLAB 建筑顶面面积计算(95)

MATLAB 建筑顶面面积计算(95) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 根据给出的建筑顶面点云,计算建筑面积,具体的方法实现和结果如下: 二、算法实现 1.代码 代码如下(示例): % 从 PLY 文件读取点云数据 filename = D:\shuju\屋顶2.ply; % 替换为你的…

Mac M1 安装数据库

1. Docker下载 由于Sqlserver和达梦等数据库&#xff0c;不支持M系列的芯片&#xff0c;所以我们通过docker安装 下载并安装docker: https://www.docker.com/get-started/ 安装完成后&#xff0c;打开docker 2. SQL Server 安装 2.1 安装 打开终端&#xff0c;执行命令 doc…

二十(GIT3)、echarts(折线图、柱状图、饼图)、黑马就业数据平台(主页图表实现、闭包了解、学生信息渲染)

1. echarts 数据可视化&#xff1a;将数据转换为图形&#xff0c;数据特点更加突出 echarts&#xff1a;一个基于 JavaScript 的开源可视化图表库 echarts官网 1.1 echarts核心使用步骤 // 1. 基于准备好的dom&#xff0c;初始化echarts实例 const myChart echarts.init…

软考高级架构-9.4.4-双机热备技术 与 服务器集群技术

一、双机热备 1、特点&#xff1a; 软硬件结合&#xff1a;系统由两台服务器&#xff08;主机和备机&#xff09;、一个共享存储&#xff08;通常为磁盘阵列柜&#xff09;、以及双机热备软件&#xff08;提供心跳检测、故障转移和资源管理功能的核心软件&#xff09;组成。 …

【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤

&#x1f399;告诉你&#xff1a;Java是世界上最美好的语言 &#x1f48e;比较擅长的领域&#xff1a;前端开发 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持续下去的动力&#xff01; 目录 一. 作者有话说 …

Kubernetes Nginx-Ingress | 禁用HSTS/禁止重定向到https

目录 前言禁用HSTS禁止重定向到https关闭 HSTS 和设置 ssl-redirect 为 false 的区别 前言 客户请求经过ingress到服务后&#xff0c;默认加上了strict-transport-security&#xff0c;导致客户服务跨域请求失败&#xff0c;具体Response Headers信息如下&#xff1b; 分析 n…

小程序入门学习(八)之页面事件

一、下拉刷新新事件 1. 什么是下拉刷新 下拉刷新是移动端的专有名词&#xff0c;指的是通过手指在屏幕上的下拉滑动操作&#xff0c;从而重新加载页面数据的行为。 2. 启用下拉刷新 启用下拉刷新有两种方式&#xff1a; 全局开启下拉刷新&#xff1a;在 app.json 的 window…

C++(十二)

前言&#xff1a; 本文将进一步讲解C中&#xff0c;条件判断语句以及它是如何运行的以及内部逻辑。 一&#xff0c;if-else,if-else语句。 在if语句中&#xff0c;只能判断两个条件的变量&#xff0c;若想实现判断两个以上条件的变体&#xff0c;就需要使用if-else,if-else语…

[Linux]文件属性和权限

目录 一.Linux文件的属性二.Linux用户权限分类三.文件权限的查询与修改1.修改用户的权限1).一般法2).8进制法 2.修改所属组和所属者3.如何在创建文件时权限预分配 在学习linux的时候&#xff0c;我们用ll命令显示文件的详情信息&#xff0c;难免会发现文件名前面会有一大堆其它…