QT学生信息管理系统(带源码)

源码下载:

基于QT的学生信息管理系统-QT文档类资源-CSDN文库icon-default.png?t=M85Bhttps://download.csdn.net/download/qq_63626307/86744322?spm=1001.2014.3001.5503

QT学生信息管理系统

        一、项目描述

        二、效果图

                           登陆界面

                           学生信息管理主界面

                           增加学生信息界面

                           修改学生信息界面

        三、数据库表

                        学生信息数据表

一、项目描述

使用QT5.14和SQLite3
本项目分为登录界面,主界面,增加,修改等界面。使用QStackedLayout实现页面布局及切换,pushbutton、line edit、label、tablewidget等控件完成窗口的相应布置。将用户信息和学生信息存入到数据库中,通过tablewidget展示信息,管理员界面可以对用户信息和学生信息增删改查。用户界面可以对自身信息进行修改,对学生信息查询。

二、效果图

1、登陆界面

                                

判断用户名等于密码方可进入学生信息管理主界面

2、学生信息管理主界面

学生信息管理主界面,对学生信息进行增、删、改、查等操作。
1.添加学生信息:点击添加用户按钮,跳转到增加学生信息界面后,再对话框中添加用户信息;
2.删除学生信息:先点击选择栏打√,再点击删除按钮可直接删除;
3.修改学生信息:先点击选择栏打√,进入修改学生信息界面后编辑表格单元格内容实现修改;
4.查询学生信息:输入学生姓名或者学号查询内容,点击查询按钮后,显示查询信息。

 

 3、增加学生信息界面

                                

 4、修改学生信息界面(先打√选择栏再进行修改,如果不打勾则提示

                               

三、数据库表

        学生信息数据表        

                                           

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    //w.show();

    return a.exec();
}

____________________________________________________________________________

登录界面

page_login.h

#ifndef PAGE_LOGIN_H
#define PAGE_LOGIN_H

#include <QWidget>

namespace Ui {
class Page_Login;
}

class Page_Login : public QWidget
{
    Q_OBJECT

public:
    explicit Page_Login(QWidget *parent = 0);
    ~Page_Login();

private slots:
    void on_btn_login_clicked();   //登录
    void on_btn_exit_clicked();     //退出
signals:

    void sendLoginSuccess();

private:
    Ui::Page_Login *ui;
};

#endif // PAGE_LOGIN_H

page_login.cpp

#include "page_login.h"
#include "ui_page_login.h"
#include <QMessageBox>
Page_Login::Page_Login(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Page_Login)
{
    ui->setupUi(this);
}

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

void Page_Login::on_btn_login_clicked()                     //登录按钮
{
    if(ui->le_user->text()==ui->le_password->text())//数据库查找用户名和密码
    {
        emit sendLoginSuccess();     //成功就进入主界面
        close();
    }
    else                              //失败就提示
        QMessageBox::warning(this,"提示","账号或密码错误",QMessageBox::Ok);
}

void Page_Login::on_btn_exit_clicked()   //登录界面退出
{
    exit(0);
}

____________________________________________________________________________

学生信息管理主界面

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QString>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QtWidgets>
#include <QTimer>
#include "insertdialog.h"
#include "updatedialog.h"
#include"page_login.h"
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    // 刷新表格
    void tableReflash(QString selectSql = QString());
    ~MainWindow();
    Page_Login m_dlgLogin;    //登陆界面

private slots:
    //-----------------------------------界面转到槽函数----------------
    void on_add_pushButton_clicked();

    void on_change_pushButton_clicked();

    void on_delete_pushButton_clicked();

    void on_refer_pushButton_clicked();

    //-----------------------------------自定义槽函数----------------

private:
    Ui::MainWindow *ui;
    QSqlDatabase db;

    // 单元格设置
    void cellSetting(int row, int column, QString text);
    // 删除学生信息
    void deleteStudent();
    // 查询学生信息
    void selectStudent();
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    m_dlgLogin.show();       //显示登录界面
    auto f=[&]()
    {
        this->show();
    };
    connect(&m_dlgLogin,&Page_Login::sendLoginSuccess,this,f);


    setWindowTitle("学生信息管理系统");

    // 设置输入框提示信息
    ui->select_param_edit->setToolTip("查询支持模糊查询,输入姓名或者学号关键词即可");

    // 设置列表第一列宽度100
    ui->information_tableWidget->setColumnWidth(0,100);
    // 设置列表自动填充满窗口
    ui->information_tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    // 设置列表列头
    ui->information_tableWidget->setColumnCount(7);
    ui->information_tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("*选择栏"));
    ui->information_tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("序号 "));
    ui->information_tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("姓名"));
    ui->information_tableWidget->setHorizontalHeaderItem(3, new QTableWidgetItem("学号"));
    ui->information_tableWidget->setHorizontalHeaderItem(4, new QTableWidgetItem("学院"));
    ui->information_tableWidget->setHorizontalHeaderItem(5, new QTableWidgetItem("年龄"));
    ui->information_tableWidget->setHorizontalHeaderItem(6, new QTableWidgetItem("性别"));

    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("my.db");
    if(db.open())
    {
        qDebug()<<"打开成功";
    }
    QString createSql = "create table student(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,studentName VARCHAR(30),studentNumber VARCHAR(30),"
                        "studentCollege VARCHAR(30),studentAge VARCHAR(30),studentSex VARCHAR(30))";
    qDebug()<<createSql;
    QSqlQuery query;
    if(query.exec(createSql))
    {
        qDebug()<<"创建成功";
    } else {
        qDebug()<<"创建失败,表或已存在";
    }


    // 刷新表格数据
    tableReflash();

    // 隐藏工具栏和状态栏
    this->statusBar()->hide();
    ui->mainToolBar->setVisible (false);
}

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

// 添加按钮点击事件
void MainWindow::on_add_pushButton_clicked()
{
    insertDialog* student_insert = new insertDialog(this);
    student_insert->setAttribute(Qt::WA_DeleteOnClose); // 关闭时销毁对象
    student_insert->setModal(true); // 设置为模态窗口,即窗口打开后只能该修改界面操作,不能在其他窗口进行操作,保证操作时的唯一性
    student_insert->show();
}

// 修改按钮点击事件
void MainWindow::on_change_pushButton_clicked()
{
    int rowCount = ui->information_tableWidget->rowCount();
    QList<int> ids;
    for(int row = 0;row<rowCount;row++) {
        QTableWidgetItem * item = ui->information_tableWidget->item(row,0);
        Qt::CheckState status = item->checkState();
        if(status == Qt::CheckState::Checked) {
            QLineEdit* idItem = (QLineEdit*) ui->information_tableWidget->cellWidget(row, 1);
            ids.append(idItem->text().toInt());
        }
    }
    if(ids.isEmpty()) {
        QMessageBox::information(this,"提示","请先勾选要修改的行");
        return;
    }
    if(ids.size() > 1) {
        QMessageBox::information(this,"提示","修改时只能勾选单行数据");
        return;
    }
    updateDialog* student_update = new updateDialog(this);
    student_update->setAttribute(Qt::WA_DeleteOnClose); // 关闭时销毁对象
    student_update->setModal(true); // 设置为模态窗口,即窗口打开后只能该修改界面操作,不能在其他窗口进行操作,保证操作时的唯一性
    student_update->load(ids.at(0));
    student_update->show();
}

// 删除按钮点击事件
void MainWindow::on_delete_pushButton_clicked()
{
    deleteStudent();
}

// 查询按钮点击事件
void MainWindow::on_refer_pushButton_clicked()
{
    selectStudent();
}

// 设置单元格信息
void MainWindow::cellSetting(int row, int column, QString text)
{
    QLineEdit* lineEdit = new QLineEdit(text);
    lineEdit->setStyleSheet("border: 0px;color:black"); // 设置该输入框无边框,黑色字体
    // 设置只读
    lineEdit->setReadOnly(true);
    ui->information_tableWidget->setCellWidget(row, column, lineEdit);
}

// 删除学生信息
void MainWindow::deleteStudent()
{
    int rowCount = ui->information_tableWidget->rowCount();
    QList<int> ids;
    for(int row = 0;row<rowCount;row++) {
        QTableWidgetItem * item = ui->information_tableWidget->item(row,0);
        Qt::CheckState status = item->checkState();
        if(status == Qt::CheckState::Checked) {
            QLineEdit* idItem = (QLineEdit*) ui->information_tableWidget->cellWidget(row, 1);
            ids.append(idItem->text().toInt());
        }
    }
    if(ids.isEmpty()) {
        QMessageBox::information(this,"提示","请先勾选要删除的行");
        return;
    }
    qDebug()<<"删除数据ids: "<<ids;
    QString idsStr = "";
    for(int i = 0;i< ids.size();i++) {
        if(i == 0) {
            idsStr = idsStr + QString::number(ids.at(i));
        } else {
            idsStr = idsStr + ","+QString::number(ids.at(i));
        }
    }
    QString sql = "delete from student where id in(" + idsStr + ")";
    qDebug()<<sql;
    QSqlQuery query;
    if(query.exec(sql)) {
        // 刷新表格
        tableReflash();
        QMessageBox::information(this,"成功","删除成功");
    } else {
        QMessageBox::information(this,"失败","删除失败");
    }
}

// 查询学生信息
void MainWindow::selectStudent()
{
    QString searchParam = ui->select_param_edit->text().trimmed();
    if(searchParam.isEmpty()) {
        tableReflash();
        return;
    }
    tableReflash(QString("select id,studentName,studentNumber,studentCollege,studentAge,studentSex from student where studentName like \"%1%2\" or studentNumber like \"%3%4\"")
                 .arg(searchParam,"%",searchParam,"%"));
}

// 刷新表格数据
void MainWindow::tableReflash(QString selectSql)
{
    // 先移除表格所有行
    for(int row = ui->information_tableWidget->rowCount() - 1;row >= 0; row--)
    {
        ui->information_tableWidget->removeRow(row);
    }
    // 查询数据添加到表格
    QSqlQuery query;
    if(selectSql.isEmpty()) {
        QString sql = "select id,studentName,studentNumber,studentCollege,studentAge,studentSex from student order by id desc";
        qDebug()<<sql;
        query.exec(sql);
    } else {
        qDebug()<<selectSql;
        query.exec(selectSql);
    }
    int row =0;
    while(query.next())
    {
        int index_row =ui->information_tableWidget->rowCount();
        ui->information_tableWidget->setRowCount(index_row+1);
        // 第一列插入复选框
        QTableWidgetItem *check = new QTableWidgetItem();
        check->setCheckState(Qt::Unchecked);
        check->setFlags(check->flags() ^ Qt::ItemIsEditable);
        ui->information_tableWidget->setItem(row,0,check); //插入复选框
        cellSetting(row,1, query.value(0).toString());
        cellSetting(row,2, query.value(1).toString());
        cellSetting(row,3, query.value(2).toString());
        cellSetting(row,4, query.value(3).toString());
        cellSetting(row,5, query.value(4).toString());
        cellSetting(row,6, query.value(5).toString());
        qDebug()<<query.value(0).toString()<<","<<query.value(1).toString()<<","<<query.value(2).toString()<<
                  ","<<query.value(3).toString()<<","<<query.value(4).toString()<<","<<query.value(5).toString();
        row++;
    }
}

_____________________________________________________________________________

添加学生信息界面

insertdialog.h

#ifndef INSERTDIALOG_H
#define INSERTDIALOG_H

#include <QMainWindow>
#include <QDialog>

namespace Ui {
class insertDialog;
}

class insertDialog : public QDialog
{
    Q_OBJECT

public:
    explicit insertDialog(QWidget *parent = 0);
    ~insertDialog();

private slots:
    void on_insert_pushButton_clicked();

private:
    Ui::insertDialog *ui;
};

#endif // INSERTDIALOG_H

insertdialog.cpp

#include "insertdialog.h"
#include "ui_insertdialog.h"
#include "ui_mainwindow.h"
#include "mainwindow.h"
#include <QSqlQuery>

insertDialog::insertDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::insertDialog)
{
    ui->setupUi(this);
    setWindowTitle("新增学生信息");
}

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

void insertDialog::on_insert_pushButton_clicked()
{
    QString student_name = ui->studentname_lineEdit->text().trimmed();
    QString student_number = ui->studentnumber_ineEdit->text().trimmed();
    QString student_college = ui->studentcollege_lineEdit->text().trimmed();
    QString student_age =ui->studentage_lineEdit->text().trimmed();
    QString student_sex =ui->studentsex_lineEdit->text().trimmed();
    if(student_name.isEmpty() || student_number.isEmpty() ||
            student_college.isEmpty() || student_age.isEmpty() ||
            student_sex.isEmpty())
    {
        QMessageBox::information(this,"提示","请输入完整");
        return;
    }

    QSqlQuery query;
    QString sql = QString("select count(1) from student where studentNumber = \"%1\"").arg(student_number);
    qDebug()<<sql;
    query.exec(sql);
    while(query.next())
    {
        int count = query.value(0).toInt();
        if(count > 0) {
            QMessageBox::information(this,"提示","学号已存在");
            return;
        }
    }

    QString insertSql = QString("insert into student (studentName,studentNumber,studentCollege,studentAge,studentSex) values (\"%1\",\"%2\",\"%3\",\"%4\",\"%5\")").arg(
                student_name,student_number,student_college,student_age,student_sex);
    qDebug()<<insertSql;
    if(query.exec(insertSql))
    {
        // 关闭窗口
        close();
        // 刷新列表
        MainWindow* mainWidget = (MainWindow*) parentWidget();
        mainWidget->tableReflash();
        QMessageBox::information(this,"成功","插入成功");

    }
    else
        QMessageBox::information(this,"失败","插入失败");

}

_____________________________________________________________________________修改学生信息界面

updatedialog.h

#ifndef UPDATEDIALOG_H
#define UPDATEDIALOG_H

#include <QDialog>

namespace Ui {
class updateDialog;
}

class updateDialog : public QDialog
{
    Q_OBJECT

public:
    explicit updateDialog(QWidget *parent = 0);
    // 通过学生表id字段值加载数据到修改界面
    void load(int id);
    ~updateDialog();

private slots:
    void on_update_pushButton_clicked();

private:
    Ui::updateDialog *ui;
    // id,学生信息的id字段值
    int id;
};

#endif // UPDATEDIALOG_H

updatedialog.cpp

#include "updatedialog.h"
#include "ui_updatedialog.h"
#include "mainwindow.h"
#include <QSqlQuery>
updateDialog::updateDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::updateDialog)
{
    ui->setupUi(this);
    setWindowTitle("修改学生信息");
}

void updateDialog::load(int id)
{
    this->id = id;
    QSqlQuery query;
    query.exec(QString("select studentName,studentNumber,studentCollege,studentAge,studentSex from student where id = %1").arg(QString::number(id)));
    QString studentName;
    QString studentNumber;
    QString studentCollege;
    QString studentAge;
    QString studentSex;
    while(query.next())
    {
        studentName = query.value(0).toString();
        studentNumber = query.value(1).toString();
        studentCollege = query.value(2).toString();
        studentAge = query.value(3).toString();
        studentSex = query.value(4).toString();
    }
    ui->number_lineEdit->setText(studentNumber);
    ui->number_lineEdit->setReadOnly(true);
    ui->namechange_lineEdit->setText(studentName);
    ui->numberchange_lineEdit->setText(studentNumber);
    ui->collegechange_lineEdit->setText(studentCollege);
    ui->agechange_lineEdit->setText(studentAge);
    ui->sexchange_lineEdit->setText(studentSex);
}

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

void updateDialog::on_update_pushButton_clicked()
{
    QString number = ui->number_lineEdit->text().trimmed();
    QString namechange =ui->namechange_lineEdit->text().trimmed();
    QString numberchange = ui->numberchange_lineEdit->text().trimmed();
    QString collegechange = ui->collegechange_lineEdit->text().trimmed();
    QString agechange =ui->agechange_lineEdit->text().trimmed();
    QString sexchange =ui->sexchange_lineEdit->text().trimmed();
    if(number.isEmpty() || namechange.isEmpty() ||
            collegechange.isEmpty() || numberchange.isEmpty() ||
            agechange.isEmpty() || sexchange.isEmpty())
    {
        QMessageBox::information(this,"提示","请输入完整内容");
        return;
    }

    QString  countSql = QString("select count(1) from student where studentNumber = \"%1\" and id != %2").arg(numberchange, QString::number(id));
    qDebug()<<countSql;
    QSqlQuery query;
    query.exec(countSql);
    while(query.next())
    {
        int count = query.value(0).toInt();
        if(count > 0) {
            QMessageBox::information(this,"提示","已经存在相同的学号");
            return;
        }
    }

    QString sql = QString("update student set studentName=\"%1\" ,studentNumber = \"%2\","
                                     "studentCollege =\"%3\" ,studentAge =\"%4\",studentSex  =\"%5\" where id =%6")
            .arg(namechange,numberchange,collegechange,agechange,sexchange,QString::number(id));
    qDebug()<<sql;
    if(query.exec(sql))
    {
        // 关闭窗口
        close();

        // 刷新表格数据
        MainWindow* mainWindow = (MainWindow*) parentWidget();
        mainWindow->tableReflash();
        QMessageBox::information(this,"成功","修改成功");
    }
    else
        QMessageBox::information(this,"失败","修改失败");
}

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

এ᭄星辰

混口饭吃。。。。。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值