目录
需求分析
首先对需求进行分析,图形化产品管理系统, 服务端方面:需要能对远端主机上的MySQL数据库进行连接,并传输客户端的网络请求;而客户端方面:需要进行图形化界面设计,需要发送增删查改功能,使用户对MySQL进行操纵,并且需要简化操纵指令,让不会使用MySQL指令的用户也能使用。
设计思路
对需求分析完,我们开始着手设计,服务端方面:使用远端主机Linux系统上的MySQL数据库网络服务,客户端方面:使用本地主机window系统上的Navicat链接远端进行测试,使用OBDC网络服务进行远端链接,qt框架设计图形化界面,使用qt的信号与槽技术进行增删查改指令发送。
功能展示
首先启动远端主机上的MySQL网络服务,并创建产品信息管理数据库。
启动图形化产品管理系统,开启后会自动链接远端,左下角显示远端链接是否成功,失败则返回失败警告,并自动将远端数据库信息显示到屏幕上。
接下来对产品信息管理系统的功能进行详细展示
屏幕内产品信息可直接进行修改,点击提交修改,则对远端数据库进行实质修改;
点击撤销修改,则可以撤回上一次修改操纵 但注意这里的修改是指在未点击提交修改的屏幕修改,此时未向数据库提出修改操纵请求,可回溯到上一次操纵,一旦提交修改并显示修改成功后,则无法通过普通操纵进行回溯!
点击添加记录按钮,则可以提供初始输入框,以供用户进行操纵。
先点击需要删除的数据信息,再点击删除选中行按钮,则可以删除。系统会提供确认,对数据库进行删除需要十分重视!
确认后则删除
本系统还支持按照id进行升降序排序
本系统还支持查询功能,通过产品名称,序号,类型可查找到需要的数据
以上就是本系统的所有功能展示
代码展示
#include "mainwindow.h"
#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>
bool isMysqlDriverAvailable() {
return QSqlDatabase::isDriverAvailable("QMYSQL");
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
//打印编译器的数据库驱动
// qDebug() << "数据库驱动:" << QSqlDatabase::drivers();
// w.openDataBase();
if(isMysqlDriverAvailable())
{
qDebug() << "好使" ;
}
else
{
qDebug() << "不好使" ;
}
w.show();
return a.exec();
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QSqlDatabase>
#include<QSqlError>
#include<QSqlQueryModel>
#include<QSqlQuery>
#include<QSqlTableModel>
#include<QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
public:
void openDataBase();
void linkDatabase();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_check_clicked();
void on_pushButton_7_clicked();
void on_pushButton_6_clicked();
void on_pushButton_8_clicked();
void on_pushButton_4_clicked();
void on_pushButton_3_clicked();
void on_pushButton_check_2_clicked();
void on_pushButton_check_3_clicked();
private:
Ui::MainWindow *ui;
QSqlTableModel * model;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "./ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
linkDatabase();
//isMysqlDriverAvailable();
//界面设计
this->setWindowTitle(QStringLiteral("产品信息管理系统"));
//通过qsqltablemodel类 操作数据库
model = new QSqlTableModel(this);
model->setTable("info");
model->select();
ui->tableView->setModel(model);
}
MainWindow::~MainWindow()
{
delete ui;
}
//连接数据库
void MainWindow::linkDatabase()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("43.143.233.81");//127.0.0.1
db.setPort(3306);
db.setDatabaseName("goods_info");
db.setUserName("zhw");
db.setPassword("12345678");
bool ok = db.open();
if (ok){
ui->statusbar->showMessage("连接MySQL成功: ");
}
else {
ui->statusbar->showMessage("连接MySQL失败: ");
qDebug()<<"error open database because"<<db.lastError().text();
}
//查询数据库中所有表的名称
QStringList tables = db.tables();
foreach(QString table, tables)
qDebug()<<table;
//ODBC查询数据
QSqlQuery result = db.exec(" select * from users");
while(result.next()){
qDebug()<<"user_id:"<<result.value("user_id").toInt();
qDebug()<<"name:"<<result.value("name").toString();
qDebug()<<"password:"<<result.value("password").toString();
qDebug()<<"score:"<<result.value("score").toInt();
}
}
void MainWindow::on_pushButton_clicked()
{
//开启事务
model->database().transaction();
qDebug()<<"start";
if(model->submitAll())
{
//提交事务
model->database().commit();
//QMessageBox::warning(this,tr("修改成功"));
QMessageBox::warning(this,tr("TableView"),tr("修改成功"));
qDebug()<<"success";
}
else
{
//回滚事务
model->database().rollback();
QMessageBox::warning(this,tr("TableView"),tr("数据库错误:%1").arg(model->lastError().text()));
qDebug()<<"fail";
}
}
void MainWindow::on_pushButton_2_clicked()
{
model->revertAll();
}
void MainWindow::on_pushButton_check_clicked()
{
QString good_name = ui->lineEdit->text();
// qDebug() << "测试查询功能:" << name;
//根据姓名进行筛选
model->setFilter(QString("产品名称 = '%1'").arg(good_name));//%1记得单引号 ‘’
//显示结果
model->select();
// qDebug() << "测试查询功能结束" ;
}
void MainWindow::on_pushButton_7_clicked()
{
model->setTable("info");//设置要查询的表
//执行查询操作
model->select();
}
void MainWindow::on_pushButton_6_clicked()
{
model->setSort(0,Qt::AscendingOrder);
model->select();
}
void MainWindow::on_pushButton_8_clicked()
{
model->setSort(0,Qt::DescendingOrder);
model->select();
}
void MainWindow::on_pushButton_4_clicked()
{
//删除选中行
//获取选中行
int curRow = ui->tableView->currentIndex().row();
int ret = QMessageBox::warning(this,tr("删除当前行"),tr("你确定要删除该行吗?"),QMessageBox::Yes | QMessageBox::No);
if(ret == QMessageBox::Yes)
{
//删除选中行
model->removeRow(curRow);
//删除该行 提交数据库
model->submitAll();
}
else
{
//不删除 撤销操作
model->revertAll();
}
}
void MainWindow::on_pushButton_3_clicked()
{
//获取表的行数
int row = model->rowCount();
int id = row+1;
//添加一行
model->insertRow(row);
model->setData(model->index(row,0),id);
model->setData(model->index(row,1),tr("产品名称"));
model->setData(model->index(row,2),tr("产品类型"));
}
void MainWindow::on_pushButton_check_2_clicked()
{
QString good_id = ui->lineEdit_2->text();
// qDebug() << "测试查询功能:" << name;
//根据姓名进行筛选
model->setFilter(QString("产品序号 = '%1'").arg(good_id));//%1记得单引号 ‘’
//显示结果
model->select();
// qDebug() << "测试查询功能结束" ;
}
void MainWindow::on_pushButton_check_3_clicked()
{
QString good_type = ui->lineEdit_3->text();
// qDebug() << "测试查询功能:" << name;
//根据姓名进行筛选
model->setFilter(QString("产品类型 = '%1'").arg(good_type));//%1记得单引号 ‘’
//显示结果
model->select();
// qDebug() << "测试查询功能结束" ;
}