车辆售卖管理系统

    技术2026-01-15  4

    车辆售卖管理系统:

    工程如图:

    在.pro中加入:

    mainwindow.h:

    #include <QMainWindow> #include<QSqlDatabase> #include<QSqlError> #include<QMessageBox> #include<QDebug> #include<QSqlQuery> #include<QSqlQueryModel> #include<QDateTime> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); void connectDB(); //连接数据库 void initData(); QString DateNow=" "; private slots: void on_actionCAR_triggered(); void on_actionCALS_triggered(); void on_comboBoxFactor_currentTextChanged(const QString &arg1); void on_comboBoxBrand_currentIndexChanged(const QString &arg1); void on_spinBox_valueChanged(int arg1); void on_pushButtonCancel_clicked(); void on_pushButtonSure_clicked(); void on_comboBoxcfactory2_currentTextChanged(const QString &arg1); void on_comboBoxbrand2_currentIndexChanged(const QString &arg1); void on_pushButtonSure2_clicked(); void on_pushButton_Cancel2_clicked(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H

    domxml.h:`

    #ifndef DOMXML_H #define DOMXML_H #include<QFile> #include<QDomDocument> #include<QDomProcessingInstruction> #include<QDomElement> #include<QString> #include<QStringList> class domxml { public: domxml(); static void createXML(QString filePath); static void appendXML(QString FilePath,QStringList list); static void appendXML1(QString FilePath,QStringList list); static void writeXML(QDomDocument &doc,QDomElement &root,QStringList &list); static void readXML(QString filePath, QStringList &fList, QStringList &bList, QStringList &pList, QStringList &nList, QStringList &tList); static void writeXML1(QDomDocument &doc,QDomElement &root,QStringList &list); static void readXML1(QString filePath, QStringList &fList, QStringList &bList, QStringList &nList); }; #endif // DOMXML_H

    mainwindow.cpp:

    #include "mainwindow.h" #include "ui_mainwindow.h" #include<QString> #include<QTimer> #include<QMessageBox> #include"domxml.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); on_actionCAR_triggered(); connectDB(); initData(); domxml::createXML("../demo.xml"); // QStringList list; // list<<"沃尔沃"<<"xc90"<<"50"<<"1"<<"50"; // domxml::appendXML("../demo.xml",list); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_actionCAR_triggered() { ui->stackedWidget->setCurrentWidget(ui->Car); ui->label->setText("车辆管理"); } void MainWindow::on_actionCALS_triggered() { ui->stackedWidget->setCurrentWidget(ui->Calc); ui->label->setText("销售统计"); } void MainWindow::connectDB() { QSqlDatabase db=QSqlDatabase::addDatabase("QODBC"); db.setDatabaseName(QString("DRIVER={SQL SERVER};" "SERVER=%1;" //服务器名称 "DATABASE=%2;"//数据库名 "UID=%3;" //登录名 "PWD=%4;" //密码 ) .arg("DESKTOP-52HBKHH") //输入服务器名称 .arg("test") //输入数据库名称 .arg("sa") //输入登录名 .arg("tianlei0730")//输入登录密码 ); if (!db.open()) //打开错误条件下 { QMessageBox::critical(0, qApp->tr("Cannot open database"), db.lastError().databaseText(), QMessageBox::Cancel); } else //如果打开成功输出success { qDebug()<<"success"; } } void MainWindow::initData() { QSqlQueryModel *queryModel=new QSqlQueryModel(this); queryModel->setQuery("select factory from factory"); ui->comboBoxFactor->setModel(queryModel); ui->lineEditLast->setText("0"); //初始化剩余数量 ui->lineEditTotal->setEnabled(false);//金额 //新车入库 ui->comboBoxcfactory2->setModel(queryModel); ui->lineEditSellPrice->setEnabled(false); //售价不可选 ui->pushButtonSure2->setEnabled(false); ui->spinBox_2->setEnabled(false); } void MainWindow::on_comboBoxFactor_currentTextChanged(const QString &arg1) { if(arg1=="请选择厂家") { ui->comboBoxBrand->clear();//品牌 ui->lineEditPrice->clear();//报价 ui->lineEditLast->setText("0");//剩余数量 ui->lineEditTotal->clear();//金额 ui->spinBox->setValue(0);//数量选择框 ui->spinBox->setEnabled(false); ui->pushButtonSure->setEnabled(false); } else { ui->comboBoxBrand->clear(); QSqlQuery query; QString sql=QString("select name from brand where factory='%1'").arg(arg1); query.exec(sql); while(query.next()) { QString name=query.value(0).toString(); ui->comboBoxBrand->addItem(name); } ui->spinBox->setEnabled(true); } } void MainWindow::on_comboBoxBrand_currentIndexChanged(const QString &arg1) { QSqlQuery query; QString sql=QString("select price,last from brand where factory='%1'and name='%2'")//价格 剩余数量 .arg(ui->comboBoxFactor->currentText()) .arg(arg1); query.exec(sql); while(query.next()) { int price=query.value("price").toInt(); int last=query.value("last").toInt(); ui->lineEditPrice->setText(QString::number(price)); ui->lineEditLast->setText(QString::number(last)); } } //数量选择框 void MainWindow::on_spinBox_valueChanged(int arg1) { QString factorystr=ui->comboBoxFactor->currentText(); QString brandstr=ui->comboBoxBrand->currentText(); if(0==arg1) { ui->pushButtonSure->setEnabled(false); } else { ui->pushButtonSure->setEnabled(true); } QSqlQuery query; QString sql=QString("select last from brand where factory='%1'and name='%2'") .arg(factorystr) .arg(brandstr); //执行数据库 query.exec(sql); int last; while(query.next()) { last=query.value("last").toInt(); } //更新剩余数量 if(arg1>last)//如果选择数量大于剩余,中断程序 { ui->spinBox->setValue(last); return; } int tempNum=last-arg1;//剩余框中数量=剩余数量-选择数量 ui->lineEditLast->setText(QString::number(tempNum)); int price=ui->lineEditPrice->text().toInt(); int sum=price*arg1; ui->lineEditTotal->setText(QString::number(sum)); } void MainWindow::on_pushButtonCancel_clicked() { //on_comboBoxFactor_currentTextChanged("请选择厂家"); ui->comboBoxFactor->setCurrentIndex(0); ui->lineEditLast->setText("0"); } void MainWindow::on_pushButtonSure_clicked() { int num=ui->spinBox->value(); int last=ui->lineEditLast->text().toInt(); QSqlQuery query; QString sql=QString("select sell from brand where factory='%1'and name='%2'") .arg(ui->comboBoxFactor->currentText()) .arg(ui->comboBoxBrand->currentText()); query.exec(sql); int sell; while(query.next()) { sell=query.value("sell").toInt(); } sell+=num; sql=QString("update brand set sell=%1, last=%2 where factory='%3'and name='%4'") .arg(sell) .arg(last) .arg(ui->comboBoxFactor->currentText()) .arg(ui->comboBoxBrand->currentText()); query.exec(sql); //ui->textEdit->clear(); //把确认后的数据更新到xml QStringList list; list<<ui->comboBoxFactor->currentText() <<ui->comboBoxBrand->currentText() <<ui->lineEditPrice->text() <<QString::number(num) <<ui->lineEditTotal->text(); QDateTime date = QDateTime::currentDateTime(); QString dateStr=date.toString("yyyy-MM-dd"); if(DateNow!=dateStr) { ui->textEdit->append(dateStr); DateNow=dateStr; } domxml::appendXML("../demo.xml",list); QStringList fList; QStringList bList; QStringList pList; QStringList nList; QStringList tList; QDateTime time = QDateTime::currentDateTime(); QString timeStr=time.toString("hh-mm-ss"); domxml::readXML("../demo.xml",fList,bList,pList,nList,tList); //for(int i=0;i<fList.size();i++) //{ int i=fList.length()-1; QString str=QString("%2:%3:单价:%4万 卖出:%5辆 金额:%6万 时间:%7") //.arg(timeStr) .arg(fList.at(i)) .arg(bList.at(i)) .arg(pList.at(i)) .arg(nList.at(i)) .arg(tList.at(i)) .arg(timeStr); ui->textEdit->append(str); //} ui->pushButtonSure->setEnabled(false); on_pushButtonCancel_clicked(); } //新车入库 void MainWindow::on_comboBoxcfactory2_currentTextChanged(const QString &arg1) { if(arg1=="请选择厂家") { ui->comboBoxbrand2->clear();//品牌 ui->lineEditSellPrice->clear();//金额 ui->spinBox_2->clear();//数量 } else { ui->comboBoxbrand2->clear(); QSqlQuery query; QString sql=QString("select name from brand where factory='%1'").arg(arg1); query.exec(sql); while(query.next()) { QString name=query.value(0).toString(); ui->comboBoxbrand2->addItem(name); } ui->spinBox_2->setEnabled(true); ui->pushButtonSure2->setEnabled(true); } } void MainWindow::on_comboBoxbrand2_currentIndexChanged(const QString &arg1) { QSqlQuery query; QString sql=QString("select price from brand where factory='%1'and name='%2'")//价格 剩余数量 .arg(ui->comboBoxcfactory2->currentText()) .arg(arg1); query.exec(sql); while(query.next()) { int price=query.value("price").toInt(); ui->lineEditSellPrice->setText(QString::number(price)); //显示售价 } } void MainWindow::on_pushButtonSure2_clicked() //确定入库 { QString factorystr=ui->comboBoxcfactory2->currentText(); QString brandstr=ui->comboBoxbrand2->currentText(); int num=ui->spinBox_2->value(); QSqlQuery query; QString sql=QString("select last from brand where factory='%1'and name='%2'") .arg(factorystr) .arg(brandstr); //执行数据库 query.exec(sql); int last; while(query.next()) { last=query.value("last").toInt(); } last+=num; sql=QString("update brand set last='%1' where factory='%2'and name='%3'") .arg(last) .arg(factorystr) .arg(brandstr); query.exec(sql);//!!!!!!!!!!!!!!!!!! //ui->textEdit->clear(); //把确认后的数据更新到xml QStringList list; list<<ui->comboBoxcfactory2->currentText() <<ui->comboBoxbrand2->currentText() <<ui->spinBox_2->text(); domxml::appendXML1("../demo.xml",list); QDateTime date = QDateTime::currentDateTime(); QString dateStr=date.toString("yyyy-MM-dd"); if(DateNow!=dateStr) { ui->textEdit->append(dateStr); DateNow=dateStr; } QStringList fList; QStringList bList; QStringList nList; QDateTime time = QDateTime::currentDateTime(); QString timeStr=time.toString("hh-mm-ss"); domxml::readXML1("../demo.xml",fList,bList,nList); //for(int i=0;i<fList.size();i++) //{ int i=fList.length()-1; QString str=QString("%1:%2:添加数量为:%3 库存数量:%4 时间:%5") //.arg(timeStr) .arg(fList.at(i)) .arg(bList.at(i)) .arg(nList.at(i)) .arg(last) .arg(timeStr); ui->textEdit->append(str); //} ui->pushButtonSure2->setEnabled(false); on_pushButton_Cancel2_clicked(); } void MainWindow::on_pushButton_Cancel2_clicked() { ui->comboBoxcfactory2->setCurrentIndex(0); }

    domxml.cpp:

    #include "domxml.h" #include<QFile> #include<QDomDocument>//文件 #include<QDomProcessingInstruction>//格式头部 #include<QDomElement>//元素 #include<QDebug> #include<QTextStream>//文本流 #include<QDateTime> domxml::domxml() { } void domxml::createXML(QString filePath) { QFile file(filePath); if(true==file.exists())//如果存在不创建 { qDebug()<<"文件已经存在"; return; } else { bool isok = file.open(QIODevice::WriteOnly); if(true==isok) { //创建xml文档 QDomDocument doc; //创建xml头部格式<?xml version='1.0' endcoding='utf-8'?> QDomProcessingInstruction ins; ins=doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"utf-8\"");//encoding!!!不是endcoding //追加元素 doc.appendChild(ins); //根节点元素 QDomElement root=doc.createElement("日销售清单"); doc.appendChild(root); //保存 QTextStream stream(&file); //文本流关联文件 doc.save(stream,4); //4代表缩进字符 file.close(); } else { qDebug()<<"writeonly error"; return; } } } void domxml::appendXML(QString FilePath, QStringList list) { QFile file(FilePath); bool isok=file.open(QIODevice::ReadOnly); if(true==isok) { //file 和 xml文档对象 关联 QDomDocument doc; isok=doc.setContent(&file); if(isok) { file.close(); //获取根节点元素 QDomElement root=doc.documentElement(); QDateTime date = QDateTime::currentDateTime(); QString dateStr=date.toString("yyyy-MM-dd"); //判断根节点下有没有子节点 if(root.hasChildNodes())//如果有子节点 { QDomElement lastEmt=root.lastChildElement(); if(lastEmt.attribute("date")==dateStr) //有没有当天日期 { //写有效数据 writeXML(doc,lastEmt,list); } else //没有 { //创建日期子节点元素 QDomElement dateEmt=doc.createElement("日期"); //创建date属性 QDomAttr dateAttr=doc.createAttribute("date"); //设属性的值 dateAttr.setNodeValue(dateStr); //节点和属性关联 dateEmt.setAttributeNode(dateAttr); //把日期节点追加到根节点 root.appendChild(dateEmt); //写有效数据 writeXML(doc,dateEmt,list); } } else { //创建日期子节点元素 QDomElement dateEmt=doc.createElement("日期"); //创建date属性 QDomAttr dateAttr=doc.createAttribute("date"); //设属性的值 dateAttr.setNodeValue(dateStr); //节点和属性关联 dateEmt.setAttributeNode(dateAttr); //把日期节点追加到根节点 root.appendChild(dateEmt); //写有效数据 writeXML(doc,dateEmt,list); } //保存文件 isok=file.open(QIODevice::WriteOnly); if(isok) { QTextStream stream(&file); doc.save(stream,4); file.close(); } } else { qDebug()<<" setContent error"; return; } } else { qDebug()<<"readonly error"; } } void domxml::appendXML1(QString FilePath, QStringList list) { QFile file(FilePath); bool isok=file.open(QIODevice::ReadOnly); if(true==isok) { //file 和 xml文档对象 关联 QDomDocument doc; isok=doc.setContent(&file); if(isok) { file.close(); //获取根节点元素 QDomElement root=doc.documentElement(); QDateTime date = QDateTime::currentDateTime(); QString dateStr=date.toString("yyyy-MM-dd"); //判断根节点下有没有子节点 if(root.hasChildNodes())//如果有子节点 { QDomElement lastEmt=root.lastChildElement(); if(lastEmt.attribute("date")==dateStr) //有没有当天日期 { //写有效数据 writeXML1(doc,lastEmt,list); } else //没有 { //创建日期子节点元素 QDomElement dateEmt=doc.createElement("日期"); //创建date属性 QDomAttr dateAttr=doc.createAttribute("date"); //设属性的值 dateAttr.setNodeValue(dateStr); //节点和属性关联 dateEmt.setAttributeNode(dateAttr); //把日期节点追加到根节点 root.appendChild(dateEmt); //写有效数据 writeXML1(doc,dateEmt,list); } } else { //创建日期子节点元素 QDomElement dateEmt=doc.createElement("日期"); //创建date属性 QDomAttr dateAttr=doc.createAttribute("date"); //设属性的值 dateAttr.setNodeValue(dateStr); //节点和属性关联 dateEmt.setAttributeNode(dateAttr); //把日期节点追加到根节点 root.appendChild(dateEmt); //写有效数据 writeXML1(doc,dateEmt,list); } //保存文件 isok=file.open(QIODevice::WriteOnly); if(isok) { QTextStream stream(&file); doc.save(stream,4); file.close(); } } else { qDebug()<<" setContent error"; return; } } else { qDebug()<<"readonly error"; } } void domxml::writeXML(QDomDocument &doc, QDomElement &root, QStringList &list) { //当前时间获取 QDateTime time = QDateTime::currentDateTime(); QString timeStr=time.toString("hh-mm-ss"); //创建时间节点元素 QDomElement timeEmt=doc.createElement("时间"); //创建属性 QDomAttr timeAttr=doc.createAttribute("time"); //给属性设置值 timeAttr.setNodeValue(timeStr); //时间节点元素与属性关联 timeEmt.setAttributeNode(timeAttr); //把时间节点追加到日期后 root.appendChild(timeEmt); QDomElement factory=doc.createElement("厂家"); QDomElement brand=doc.createElement("品牌"); QDomElement price=doc.createElement("报价"); QDomElement num=doc.createElement("数量"); QDomElement total=doc.createElement("金额"); QDomText text=doc.createTextNode(list.at(0)); factory.appendChild(text); text=doc.createTextNode(list.at(1)); brand.appendChild(text); text=doc.createTextNode(list.at(2)); price.appendChild(text); text=doc.createTextNode(list.at(3)); num.appendChild(text); text=doc.createTextNode(list.at(4)); total.appendChild(text); timeEmt.appendChild(factory); timeEmt.appendChild(brand); timeEmt.appendChild(price); timeEmt.appendChild(num); timeEmt.appendChild(total); } void domxml::readXML(QString filePath, QStringList &fList, QStringList &bList, QStringList &pList, QStringList &nList, QStringList &tList) { QFile file(filePath); bool isok=file.open(QIODevice::ReadOnly); if(true==isok) { //file 和 xml文档对象 关联 QDomDocument doc; isok=doc.setContent(&file); if(isok) { //获取根节点 QDomElement root=doc.documentElement(); file.close(); QDateTime date=QDateTime::currentDateTime(); QString dateStr=date.toString("yyyy-MM-dd"); if(root.hasChildNodes())//如果有子节点 { //找最后一个节点 QDomElement lastEmt=root.lastChildElement(); //判断有没有当天日期 if(lastEmt.attribute("date")==dateStr) { //找出当前日期下所有时间子节点 QDomNodeList list = lastEmt.childNodes(); for(int i=0;i<list.size();i++) { //转换为元素,找到时间节点下的所有子节点 QDomNodeList subList=list.at(i).toElement().childNodes(); //厂家 QString factory = subList.at(0).toElement().text(); fList.append(factory); QString brand = subList.at(1).toElement().text(); bList.append(brand); QString price = subList.at(2).toElement().text(); pList.append(price); QString num = subList.at(3).toElement().text(); nList.append(num); QString total = subList.at(4).toElement().text(); tList.append(total); } } else { qDebug()<<"没有当天日期"; return; } } else { qDebug()<<"没有子节点"; return; } } else { qDebug()<<"setcontent error"; return; } } else { qDebug()<<"readonly error"; return; } } void domxml::writeXML1(QDomDocument &doc, QDomElement &root, QStringList &list) { //当前时间获取 QDateTime time = QDateTime::currentDateTime(); QString timeStr=time.toString("hh-mm-ss"); //创建时间节点元素 QDomElement timeEmt=doc.createElement("时间"); //创建属性 QDomAttr timeAttr=doc.createAttribute("time"); //给属性设置值 timeAttr.setNodeValue(timeStr); //时间节点元素与属性关联 timeEmt.setAttributeNode(timeAttr); //把时间节点追加到日期后 root.appendChild(timeEmt); QDomElement factory=doc.createElement("厂家"); QDomElement brand=doc.createElement("品牌"); QDomElement num=doc.createElement("数量"); QDomText text=doc.createTextNode(list.at(0)); factory.appendChild(text); text=doc.createTextNode(list.at(1)); brand.appendChild(text); text=doc.createTextNode(list.at(2)); num.appendChild(text); timeEmt.appendChild(factory); timeEmt.appendChild(brand); timeEmt.appendChild(num); } void domxml::readXML1(QString filePath, QStringList &fList, QStringList &bList, QStringList &nList) { QFile file(filePath); bool isok=file.open(QIODevice::ReadOnly); if(true==isok) { //file 和 xml文档对象 关联 QDomDocument doc; isok=doc.setContent(&file); if(isok) { //获取根节点 QDomElement root=doc.documentElement(); file.close(); QDateTime date=QDateTime::currentDateTime(); QString dateStr=date.toString("yyyy-MM-dd"); if(root.hasChildNodes())//如果有子节点 { //找最后一个节点 QDomElement lastEmt=root.lastChildElement(); //判断有没有当天日期 if(lastEmt.attribute("date")==dateStr) { //找出当前日期下所有时间子节点 QDomNodeList list = lastEmt.childNodes(); for(int i=0;i<list.size();i++) { //转换为元素,找到时间节点下的所有子节点 QDomNodeList subList=list.at(i).toElement().childNodes(); //厂家 QString factory = subList.at(0).toElement().text(); fList.append(factory); QString brand = subList.at(1).toElement().text(); bList.append(brand); QString num = subList.at(2).toElement().text(); nList.append(num); } } else { qDebug()<<"没有当天日期"; return; } } else { qDebug()<<"没有子节点"; return; } } else { qDebug()<<"setcontent error"; return; } } else { qDebug()<<"readonly error"; return; } }

    相关控件:

    数据库表内容:

    运行结果:

    数据库对应自动更新:

    Processed: 0.041, SQL: 9