Qt实战项目学习2———学生管理系统(1)

注:参照编程小鱼酱教程

特别感谢博主教学

一.登陆界面设计及主界面设计

1.登录按钮实现

登陆界面自定义信号  并发射信号

signals:
    //成功登录发送信号
    void sendLoginSuccess();
emit sendLoginSuccess();

主界面.h中创建登录界面  并在cpp中进行连接 (main.cpp中将主.show屏蔽)

  Login login;
  //登录按钮
    connect(&login,&Login::sendLoginSuccess,[=](){
        login.hide();
        this->show();
    });

2.主界面中的treeWidget 构建

效果如图

 设置treewidget列数   

  ui->treeWidget->setColumnCount(1);

设置根节点

 addTopLevelItem(QTreeWidgetItem *item)   //注意参数类型

在父节点之后创建新节点   参数(父节点指针,节点内容)(注:为QStringList)

QTreeWidgetItem(QTreeWidget *parent,  const QStringList &strings, int type = Type)

    QStringList l;
    l<<"学生管理系统";
    QTreeWidgetItem * pf = new QTreeWidgetItem(ui->treeWidget,l);
    ui->treeWidget->addTopLevelItem(pf);
    clear();

    l<<"学生管理";
    QTreeWidgetItem* p1 = new QTreeWidgetItem(pf,l);
    ui->treeWidget->addTopLevelItem(p1);
    l.clear();

    l<<"管理员管理";
    QTreeWidgetItem* p2 = new QTreeWidgetItem(pf,l);
    ui->treeWidget->addTopLevelItem(p2);

将创建的子节点添加到父节点中   设置为默认全部打开状态

pf->addChild(p1);
pf->addChild(p2);

ui->treeWidget->expandAll();

二.数据库设计

1.新建学生数据库文件:studentSql.h与studentSql.cpp

新建用户类与学生类,并将在头文件中添加属性

struct stuInfo
{
    int id;
    QString name;
    quint8 age;
    quint16 grade;
    quint16 uiclass;
    quint32 studentid;
    QString phone;
    QString wechat;
};
struct userInfo
{
    QString username;
    QString password;
    QString aut;  //权限
};

其中数据类型对应

quint8char8位无符号整型
quint16short int16位无符号整型
quint 32int32位无符号整型

8位即8个二进制数字,转换为十进制范围为0-255 ;以此类推

将各功能接口写入

2.数据库初始化

(此部分未学习。有待更正)

void studentSql::init()
{
    //判断是否有驱动
    if (QSqlDatabase::drivers().isEmpty())
        QMessageBox::information(0,"about","为空");

     //连接数据库 参数1 驱动名称 参数2 数据文件路径
     m_db = QSqlDatabase::addDatabase("QSQLITE");
     
    //设置数据库路径
    m_db.setDatabaseName("E:/data.db");

    //判断是否成功打开
    if (!m_db.open())
    {
        QMessageBox::warning(0, "warning","打开失败");
    }
}

而后在各功能接口中执行sql语句

sql语句https://blog.csdn.net/hiwoshixiaoyu/article/details/122275684?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167590430416800182116818%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167590430416800182116818&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-3-122275684-null-null.blog_rank_default&utm_term=%E7%AE%A1%E7%90%86&spm=1018.2226.3001.4450语句参照:编程小鱼酱

//声明数据库
 QSqlQuery sql(m_db);
//exec中输入对应sql语句
 sql.exec();
}

3.模拟生成数据

使用QRandomGenerator随机生成年龄,班级,年级

//声明随机生成器
 QRandomGenerator g;
//随机种子
 g.seed(0);
//生成随机数,左闭右开
 g.bounded(7,10);

在生成按钮的点击槽函数中实现,完整代码如下

void MainWindow::on_btn_simultion_clicked()
{
     //制作10001条学生数据
    QRandomGenerator g,c;
    g.seed(0);
    c.seed(0);

    for(int i=0;i<100;i++)
    {
        auto grade= g.bounded(7,10);//在7-10 左闭右开中随机生成
        auto uiclass=g.bounded(1,8);
        stuInfo info;
        if(i%3)
        {
            info.name=QString("张%1").arg(i);
            info.age=16;
        }
        if(i%7)
        {
            info.name=QString("李%1").arg(i);
            info.age=17;
        }
        if(i%2)
        {
            info.name=QString("王%1").arg(i);
            info.age=18;
        }
        info.grade =grade;
        info.uiclass=uiclass;
        info.studentid=i;
        info.phone="12345678";
        info.wechat="12345678";
        m_ptrStuSql->addStu(info);
    }
}

三.数据库内容显示到界面

将显示数据库内容封装到刷新函数中,实现每个功能时调用,刷新界面信息

//封装更新函数
void MainWindow::upTable();

1.表格部分

1.首先对表格进行设置  首先清空表格内容,使用代码实现表头可避免被清空

 ui->tableWidget->clear();
    //设置Tablewidget表头
    ui->tableWidget->setColumnCount(9);
    QStringList l;
    l<<"序号"<<"id"<<"姓名"<<"年龄"<<"年级"<<"班级"<<"学号"<<"电话"<<"微信";
    ui->tableWidget->setHorizontalHeaderLabels(l);   //设置水平表头

    //设置表格不可编辑
    ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

   //设置单行选中
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);

2.通过学生数据库指针,调用获取当前页学生信息接口(返回值为学生列表)

通过ui->tableWidget->setItem()将内容显示到表格中

语法  :setItem(int row, int column, QTableWidgetItem item)

参数三为指针类型

for(int i=0;i<lStudent.size();i++)
    {
        ui->tableWidget->setItem(i,0,new QTableWidgetItem(QString::number(i)));//序号
        ui->tableWidget->setItem(i,1,new QTableWidgetItem(QString::number(lStudent[i].id)));//序号
        ui->tableWidget->setItem(i,2,new QTableWidgetItem(lStudent[i].name)); //姓名
        ui->tableWidget->setItem(i,3,new QTableWidgetItem(QString::number(lStudent[i].age))); //年龄
        ui->tableWidget->setItem(i,4,new QTableWidgetItem(QString::number(lStudent[i].grade))); //年级
        ui->tableWidget->setItem(i,5,new QTableWidgetItem(QString::number(lStudent[i].uiclass))); //班级
        ui->tableWidget->setItem(i,6,new QTableWidgetItem(QString::number(lStudent[i].studentid))); //学号
        ui->tableWidget->setItem(i,7,new QTableWidgetItem(lStudent[i].phone));
        ui->tableWidget->setItem(i,8,new QTableWidgetItem(lStudent[i].wechat));
    }

2.制作标签 显示当前学生个数

通过指针调用获取学生数量接口,通过settext显示标签上

 //获取学生数量
    auto cnt=m_ptrStuSql->getStudentCont();
    ui->lb_cnt->setText(QString("数量:%1").arg(cnt));

 效果如图

 

  • 3
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值