基于qt的图书管理系统----05其他优化

参考b站:视频连接

源码github:github

目录

  • [1 优化借阅记录显示](#1 优化借阅记录显示)
  • [2 时间显示为年月日](#2 时间显示为年月日)
  • [3 注册接口](#3 注册接口)

1 优化借阅记录显示

现在只能显示部分信息,把接的书名和人的信息全部显示

在sql语句里替换为这一句即可实现查询相关联的所有信息

QString strSql = QString("select * from record join user using(userid) join book using(bookid)").arg(strCondition);

然后在intipage里吧对应的标签给修改了

2 时间显示为年月日

如上图所示时间显示的是秒数,直接调用的QDateTime::currentDateTime()生成的时间

使用toString("yyyy-MM-dd")即可转换为年月日

cpp 复制代码
//添加记录
    QDateTime dt = QDateTime::currentDateTime();
    QString strBorrowDateYmd = dt.toString("yyyy-MM-dd");
    QString strSql2 = QString("INSERT into record VALUES(NULL,'%1','%2','%3','%4','')")
                            .arg(strBookID)
                            .arg(strUserID)
                            .arg(strBorrowDateYmd)
                            .arg(dt.addDays(10).toString("yyyy-MM-dd"));

3 注册接口

实现功能,完成用户的注册,若是用户名和密码不在数据库里,就新建用户存入,注册登陆界面的切换

首先编写SQL语句,就拿到一些列字符串存入就行

cpp 复制代码
//注册用户
bool sqlmange::RegisterUser(QString nickname, QString grade, QString department, QString strUsername, QString strPassword)
{
    // 创建 SQL 查询对象
    QSqlQuery q(m_db);
    // 构建 SQL 查询语句
    // 使用占位符防止 SQL 注入攻击
    QString strSql = QString("insert into usertb VALUES(NULL,'%1','%2','%3','%4','%5','%6')").arg(nickname).arg(grade).arg(department).arg("").arg(strUsername).arg(strPassword);
    // 执行 SQL 查询
    bool ret = q.exec(strSql);
    if(!ret)
    {
        qDebug()<<q.lastError().text();
    }
}

搭设一下界面

将之前登陆界面的退出按钮改为注册,当他点击是打开注册窗口

cpp 复制代码
void Dialog_login::on_btn_register_clicked()
{
    //打开登陆接口
    dlg_register ui_register;
    ui_register.exec();
}

编写注册程序,首先判断用户名和密码是否在数据库里,有的话就注册失败

cpp 复制代码
void dlg_register::on_btn_register_clicked()
{
    str_nickname = ui->le_nickname->text();
    str_grade = ui->le_grade->text();
    str_Username = ui->le_username->text();
    str_Password = ui->le_password->text();
    str_department = ui->le_department->text();

    int userid = 0;
    //先查询用户名密码是否存在,若若是存在则无法注册
    bool ret = sqlmange::getInstance()->login(str_Username,str_Password,userid);
    if(ret)
    {
        QMessageBox::information(nullptr,"信息","用户已经存在!");
        return ;
    }
    else
    {
        //注册新用户
        sqlmange::getInstance()->RegisterUser(str_nickname,str_grade,str_department,str_Username,str_Password);

        QMessageBox::information(nullptr,"信息","注册成功!");
        return ;
    }
}


void dlg_register::on_btn_login_clicked()
{
    this->hide();
}
相关推荐
wjs20246 分钟前
Memcached flush_all 命令详解
开发语言
zbhbbedp282793cl29 分钟前
unique_ptr和shared_ptr有何区别?
java·开发语言·jvm
.NET修仙日记36 分钟前
第四章:C# 面向对象编程详解:从类与对象到完整项目实践
开发语言·c#·.net·源码·教程·.net core
m0_738120721 小时前
内网横向靶场——记录一次横向渗透(三)
开发语言·网络·安全·web安全·网络安全·php
songroom1 小时前
Rust: 量化策略回测与简易线程池构建、子线程执行观测
开发语言·后端·rust
jz_ddk1 小时前
[数学基础] 瑞利分布:数学原理、物理意义及Python实验
开发语言·python·数学·概率论·信号分析
大G的笔记本1 小时前
Java JVM 篇常见面试题
java·开发语言·jvm
ZHE|张恒1 小时前
深入理解 Java 双亲委派机制:JVM 类加载体系全解析
java·开发语言·jvm
范德萨_1 小时前
JavaScript 实用技巧(总结)
开发语言·前端·javascript