Qt制作学生管理系统软件


众所周知,B站才是正经学习网站,感谢B站上的教学视频,如果想学习Qt的朋友,送上链接:
https://www.bilibili.com/video/BV1XW411x7NU?p=74

构建思路

制作简单的学生管理软件,需要用到一个登录界面和连接数据库的相关知识,正好作为学习Qt的一个练习小题目。一些很基础的操作我就不再细说了

布局界面

界面1:
学生登录界面,需要用到的有label,用来显示文本信息“用户名”和“密码”以及图标。
在这里插入图片描述
1、用户名和密码的显示是靠拖拽控件label到界面上,并双击直接进行文字编写来实现的
2、输入用户名和密码的控件是lineEdit
3、登录按键是靠拖拽控件pushbutton到界面上,并双击直接进行文字编写来实现的
在这里插入图片描述
实现登录功能:

void Widget::on_buttonLogin_clicked()
{
    
    
    //发送用户名和密码到服务器,然后在槽函数中去跳转
        //在这里直接跳转
    if(ui->lineEdit->text().trimmed() == tr("211")
                &&ui->lineEdit_2->text() == tr("211"))
      {
    
    
        connect_mysql();
        Dialog *dia = new Dialog(this);
        dia->show();//展示第二个界面
        this->hide();//隐藏第一个界面r
      } else {
    
    
          QMessageBox::warning(this, tr("警告!"),tr("用户名或密码错误!"),
                QMessageBox::Yes);
          // 清空内容并定位光标
          ui->lineEdit->clear();
          ui->lineEdit_2->clear();
          ui->lineEdit->setFocus();
      }
}

4、图标显示是label控件添加资源显示的。
在这里插入图片描述
界面2:
展示及操作界面,需要tableView控件来展示数据表,并需要按键时间增删改查功能。

在这里插入图片描述
在这里插入图片描述
新建dialog类去单独实现界面2所需的所有功能

链接数据库(sqlite)

void Widget::connect_mysql()
{
    
    
    //打印Qt支持的数据库驱动
    qDebug() << QSqlDatabase::drivers();
    //添加数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    //设置数据库
    db.setDatabaseName("../info.db");//info.db是数据库名称

    //打开数据库
    if(!db.open())
    {
    
    
      qDebug()<<"不能连接"<<"connect to mysql error"<<db.lastError().text();
      return ;
    }
    else
    {
    
    
     qDebug()<<"连接成功"<<"connect to mysql OK";
    }


}

把这个函数放在登录按键下调用,可以实现登录成功的同时连接好数据库

在tableView上对数据表内容做显示

注意dialog.h文件中需要添加的头文件和内容

#ifndef DIALOG_H
#define DIALOG_H

#include <QWidget>
#include<QDialog>
#include<QSqlTableModel>

namespace Ui {
    
    
class Dialog;
}
class Dialog : public QDialog
{
    
    
    Q_OBJECT
public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
    void setmodel();
private slots:
    void on_buttonAdd_clicked();

    void on_buttonDel_clicked();

    void on_buttonSure_clicked();

    void on_buttonBack_clicked();

    void on_buttonFind_clicked();

private:
    Ui::Dialog *ui;
    QSqlTableModel *model;
};

#endif // DIALOG_H

构建模型去控件中显示数据表,记得调用!

void Dialog::setmodel()
{
    
    
    model = new QSqlTableModel(this);
    model->setTable("student");
    //把model放在view里
    ui->tableView->setModel(model);
    //显示model的数据
    model->select();
    //model->setHeaderData(0,Qt::Horizontal,"序号");
    model->setHeaderData(0,Qt::Horizontal,"姓名");
    model->setHeaderData(1,Qt::Horizontal,"学号");
    model->setHeaderData(2,Qt::Horizontal,"导师");
    model->setHeaderData(3,Qt::Horizontal,"专业");
    model->setHeaderData(4,Qt::Horizontal,"入学时间");
    //设置model的编辑模式,手动提交修改
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    //设置数据库的内容不许修改
    //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}

相关头文件:

#include "dialog.h"
#include "ui_dialog.h"
#include "QMessageBox"
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QtDebug>
#include <QApplication>
#include<QVariantList>
#include<QSqlQueryModel>
#include<QSqlTableModel>
#include<QSqlRecord>
#pragma execution_character_set("utf-8")//设置中文= =

上面的最后一行设置中文,是如果你的中文出现乱码的时候才去添加的,如果没有乱码也可以不用

可视化数据库操作(增删改查)

1、直接操作增加一行内容

void Dialog::on_buttonAdd_clicked()
{
    
    
    //添加空记录
    QSqlRecord record = model->record();//获取空记录
    //获取行号
    int row = model->rowCount();
    model->insertRecord(row,record);

}

2、删除一行或多行内容

void Dialog::on_buttonDel_clicked()
{
    
    
    //获取选中的模型
   QItemSelectionModel *select = ui->tableView->selectionModel();
   //取出选择的索引
   QModelIndexList list = select->selectedRows();
   //删除所有选择的行
   for(int i=0;i<list.size();i++)
   {
    
    
       model->removeRow(list.at(i).row());
   }
}

3、进行完增加或者删除操作之后,要点确定来保存操作

void Dialog::on_buttonSure_clicked()
{
    
    
    model->submitAll();//提交
}

4、依照姓名去实现查询功能

void Dialog::on_buttonFind_clicked()
{
    
    
    QString name = ui->lineEdit->text();
    QString str = QString("name='%1'").arg(name);
    model->setFilter(str);
    model->select();
}

最后界面2的展示图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/guo_xyx/article/details/106480690