实现步骤:
先创建一个图书管理系统工程(默认一直点)
在工程目录中添加sql,qt才能加载数据库对应的类
将准备好的软件盘导入你的工程
导入软键盘(可以先把程序跑成功再导入)
要放到对应的文件夹中
ui设计界面主要控件:
软件键盘主要控件
子窗口提升才可以加载软键盘
准备工作结束,进入代码。
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
//数据库相关类头文件
#include <QSqlDatabase>
#include <QSqlQuery>
//消息盒子
#include <QMessageBox>
//列表格相关类头文件
#include <QTableWidgetItem>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_clicked();//插入
void on_pushButton_2_clicked();//删除
void on_pushButton_3_clicked();//修改
void on_pushButton_4_clicked();//查看
private:
Ui::MainWindow *ui;
QSqlDatabase mydb;//数据库对象
};
#endif // MAINWINDOW_H
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//下载安装数据库的驱动
mydb=QSqlDatabase::addDatabase("QSQLITE");
mydb.setDatabaseName("./first.db");
bool ok=mydb.open();
if(!ok)
{
QMessageBox::warning(this,"警告","数据库打开失败",QMessageBox::Ok);
return ;
}
QSqlQuery sqdb(mydb);
bool ko1=sqdb.exec("create table if not exists booktable(name text,auther text,number text)");
//bool ko1 = sqdb.exec("CREATE TABLE IF NOT EXISTS booktable(name TEXT, author TEXT, number TEXT)");
if(!ko1)
{
QMessageBox::warning(this,"警告","创建数据表失败",QMessageBox::Ok);
return ;
}
//设置表的列数
ui->tableWidget->setRowCount(100);
//设置表格的列数
ui->tableWidget->setColumnCount(3);
//设置列名
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"书名"<<"作者名"<<"书编号");
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
//插入书籍
QSqlQuery sqdb(mydb);
QString name=ui->le1->text();
QString auther=ui->le2->text();
QString number=ui->le3->text();
QString cmd=QString("insert into booktable values('%1','%2','%3')").arg(name).arg(auther).arg(number);
bool ok=sqdb.exec(cmd);
if(!ok)
{
QMessageBox::warning(this,"警告","添加书籍失败",QMessageBox::Ok);
}
}
void MainWindow::on_pushButton_2_clicked()
{
//删除书籍
QSqlQuery sqdb(mydb);
QString name=ui->le4->text();
QString cmd=QString("delete from booktable where name='%1'").arg(name);
bool ok=sqdb.exec(cmd);
if(!ok)
{
QMessageBox::warning(this,"警告","删除数据失败",QMessageBox::Ok);
}
if(sqdb.numRowsAffected()==0)
{
QMessageBox::warning(this, "警告", "删除数据失败未找到要删除的数据", QMessageBox::Ok);
}
}
void MainWindow::on_pushButton_3_clicked()
{
//修改书籍信息
QSqlQuery sqdb(mydb);
QString name=ui->le5->text();
QString newname=ui->le6->text();
QString newauther=ui->le7->text();
QString newnumber=ui->lineEdit_5->text();
if(!newname.isEmpty())//判断编辑框中是否为空
{
QString cmd=QString("update booktable set name='%1' where name='%2'").arg(newname).arg(name);
bool ok=sqdb.exec(cmd);
if(!ok)
{
QMessageBox::warning(this,"警告","修改数据失败",QMessageBox::Ok);
}
}
if(!newauther.isEmpty())
{
QString cmd=QString("update booktable set auther='%1' where name='%2'").arg(newauther).arg(name);
bool ok=sqdb.exec(cmd);
if(!ok)
{
QMessageBox::warning(this,"警告","修改数据失败",QMessageBox::Ok);
}
}
if(!newnumber.isEmpty())
{
QString cmd=QString("update booktable set number='%1' where name='%2'").arg(newnumber).arg(name);
bool ok=sqdb.exec(cmd);
if(!ok)
{
QMessageBox::warning(this,"警告","修改数据失败",QMessageBox::Ok);
}
}
if(sqdb.numRowsAffected()==0)//没有找到
{
QMessageBox::warning(this, "警告", "修改数据失败未找到要修改的数据", QMessageBox::Ok);
}
}
void MainWindow::on_pushButton_4_clicked()
{
int i=0;
ui->tableWidget->clear();
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"书名"<<"作者名"<<"书编号");
//查看书籍列表
QSqlQuery sqdb(mydb);
QString cmd=QString("select * from booktable");
bool ok=sqdb.exec(cmd);
if(!ok)
{
QMessageBox::warning(this,"警告","查询失败",QMessageBox::Ok);
}
while (sqdb.next())
{
QTableWidgetItem *item1=new QTableWidgetItem(sqdb.value(0).toString());
ui->tableWidget->setItem(i,0,item1);
QTableWidgetItem *item2=new QTableWidgetItem(sqdb.value(1).toString());
ui->tableWidget->setItem(i,1,item2);
QTableWidgetItem *item3=new QTableWidgetItem(sqdb.value(2).toString());
ui->tableWidget->setItem(i,2,item3);
i++;
}
}