Qt下的综合练习—汽车信息管理系统(三)车辆出售功能的实现

article/2025/6/23 2:07:32

项目介绍

    这次练习的项目是汽车信息管理系统,项目参考Qt5开发及实例(第3版)中的汽车销售管理系统,写到博客上的目的是为了梳理自己的思路,所以代码很大程度上是参照书上的实例。

    项目实现了车辆与销售的的管理,运行程序出现登录界面,输入正确的密码才能登录,进入主界面后有两个菜单,【销售管理】和【修改密码】,【销售管理】菜单下有三个子菜单,【车辆管理】、【销售统计】、【退出】。其中车辆信息使用数据库进行存储,销售记录使用XML文档存储。

功能实现

因为要使用QtSql,并且在后续的功能中要使用QtXml,所以在项目文件.Pro中添加下面代码:

QT       += sql xml

1.创建数据库

向项目中添加头文件“connection.h”过程和代码如下:

   

#ifndef CONNECTION
#define CONNECTION
#include<QtSql>
#include<QDebug>
#include"qdom.h"static bool createConnection(){QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");//设置数据库主机名db.setHostName("win7Test-sql");//设置数据库名db.setDatabaseName("testDB.db");//设置数据库用户名db.setUserName("MackTang");//设置数据库密码db.setPassword("123456");if(!db.open()){//如果打开数据库失败,返回falsereturn false;}QSqlQuery query;//创建厂家表并插入数据query.exec("create table factory (id varchar primary key,name varchar)");query.exec(QString::fromLocal8Bit("insert into factory values('0','请选择厂家')"));query.exec(QString::fromLocal8Bit("insert into factory values('01','一汽大众')"));query.exec(QString::fromLocal8Bit("insert into factory values('02','二汽神龙')"));query.exec(QString::fromLocal8Bit("insert into factory values('03','上海大众')"));//创建品牌表并插入数据query.exec("create table brand(id varchar primary key,name varchar,factory varchar,price int,sum int,sell int,last int)");query.exec(QString::fromLocal8Bit("insert into brand values('01','奥迪A6','一汽大众',36,50,10,40)"));query.exec(QString::fromLocal8Bit("insert into brand values('02','捷达','一汽大众',34,20,5,15)"));query.exec(QString::fromLocal8Bit("insert into brand values('03','宝来','一汽大众',41,80,20,60)"));query.exec(QString::fromLocal8Bit("insert into brand values('04','奔驰','一汽大众',83,40,15,25)"));query.exec(QString::fromLocal8Bit("insert into brand values('05','毕加索','二汽神龙',39,50,15,35)"));query.exec(QString::fromLocal8Bit("insert into brand values('06','富康','二汽神龙',28,60,10,50)"));query.exec(QString::fromLocal8Bit("insert into brand values('07','标致307','二汽神龙',27,70,20,50)"));query.exec(QString::fromLocal8Bit("insert into brand values('08','桑塔纳','上海大众',25,75,25,50)"));query.exec(QString::fromLocal8Bit("insert into brand values('09','帕萨特','上海大众',27,65,20,45)"));return true;
}#endif // CONNECTION

2.加载厂家

先进入main.cpp,带入上面我们写的数据库的头文件(connection.h),并添加一行代码:

    if(!createConnection())return 0;

下面进入widget.cpp,添加相关的头文件,并在构造函数中添加下面代码:

    ui->stackedWidget->setCurrentIndex(0);//为控件设置模型(模型来自查询语句在数据库表中查询的结果)QSqlQueryModel *factoryModel = new QSqlQueryModel(this);factoryModel->setQuery("select name from factory");ui->sellFactoryComboBox->setModel(factoryModel);//重新设置画面布局QSplitter *splitter = new QSplitter(ui->managePage);splitter->resize(700,360);splitter->move(0,50);splitter->addWidget(ui->toolBox);splitter->addWidget(ui->dailyList);splitter->setStretchFactor(0,1);splitter->setStretchFactor(1,1);on_sellCancelBtn_clicked();

3.加载厂家对应的车辆型号

为了实现选择厂家组合框中任意一家,则在下面的车辆型号组合框中显示相应厂家的汽车型号,需要从设计模式中进入sellFactoryComboBox部件的currentIndexChanged(QString)信号对应的槽函数,并添加下面的代码:

    //判断如果sellFactoryComboBox的值是“请选择厂家”就设置页面初始化(和取消按钮按下相同)if(arg1=="请选择厂家"){on_sellCancelBtn_clicked();}else {//根据厂家(factory)查询相应的型号ui->sellBrandComboBox->setEnabled(true);QSqlQueryModel *model = new QSqlQueryModel(this);model->setQuery(QString::fromLocal8Bit("select name from brand where factory = '%1'").arg(arg1));ui->sellBrandComboBox->setModel(model);ui->sellCancelBtn->setEnabled(true);}

4.显示购车总价

实现更改购买数量后会自动显示金额,从设计模式中进入sellNumSpinBox部件的valueChanged(int)信号对应的槽函数:

    if(arg1==0){//如果数量为0,则清空相关控件的值,锁定相应的功能ui->sellSumLineEdit->clear();ui->sellSumLineEdit->setEnabled(false);ui->sellOkBtn->setEnabled(false);}else {//如果数量不是0,解锁相应功能,并将数据显示到显影控件上ui->sellSumLineEdit->setEnabled(true);ui->sellSumLineEdit->setReadOnly(true);qreal sum = arg1*ui->sellPriceLineEdit->text().toInt();ui->sellSumLineEdit->setText(QString::number(sum));ui->sellOkBtn->setEnabled(true);}

5.实现购车

从设计模式中进入取消按钮的单击信号所对应的槽函数,代码如下:

    //恢复页面初始化状态ui->sellFactoryComboBox->setCurrentIndex(0);ui->sellBrandComboBox->clear();ui->sellPriceLineEdit->clear();

从设计模式中进入确定按钮的单击信号所对应的槽函数,代码如下:

    //获取页面上的厂家和型号QString factory = ui->sellFactoryComboBox->currentText();QString name = ui->sellBrandComboBox->currentText();//获取数量并计算购买后的剩余数量int value = ui->sellNumSpinBox->value();int last = ui->sellNumSpinBox->maximum()-value;//查询该型号的销售量QSqlQuery query;query.exec(QString::fromLocal8Bit("select sell from brand where name='%1' and factory='%2'").arg(name).arg(factory));query.next();//销售量加上购买数量就是最新的销售量int sell = query.value(0).toInt()+value;//连接数据库,并更新销售量和剩余数量QSqlDatabase::database().transaction();bool rtn = query.exec(QString::fromLocal8Bit("update brand set sell=%1,last=%2 where name='%3'and factory='%4'").arg(sell).arg(last).arg(name).arg(factory));//判断是否更新数据成功if(rtn){//成功则弹出提示信息QSqlDatabase::database().commit();QMessageBox::information(this,tr("Tip"),tr("Successful car purchase"),QMessageBox::Ok);//并将页面恢复到初始状态on_sellCancelBtn_clicked();}else {//如果失败则进行数据回滚,在sql语句执行失败时,使用了此语句,可以将数据回滚到sql语句执行前的状态。QSqlDatabase::database().rollback();}

来看一下效果:

目前来说已经完成大半了,继续努力~!


http://chatgpt.dhexx.cn/article/HYmbmKI0.shtml

相关文章

Java课程设计——汽车信息租赁信息管理系统

一&#xff0e;功能需求 需求分析是发现需求&#xff0c;分析求精&#xff0c;逻辑建模&#xff0c;需求规约的过程&#xff0c;其的目的是为了全面获取软件需求&#xff0c;准确理解业务逻辑。车辆租赁系统具有以下基本功能。 用户管理&#xff1a; 包括用户的注册,登陆等&a…

Java GUI+SQL Server开发车辆管理系统

Java GUISQL Server开发车辆管理系统 一、程序功能设计 本项目为“车辆管理系统”&#xff0c;需包含一下功能&#xff1a; 1)车辆管理模块&#xff0c;增删查改车辆信息 2)租车管理模块&#xff0c;增删查改租车记录 3)换车管理模块&#xff0c;增删查改换车记录 4)修车…

Java+MySQL汽车租赁管理系统课程设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;汽车租赁系统 获取完整源码源文件视频演示文档资料等 一、 课程设计目的 1、综合运用Java程序设计课程和其他相关课程的理论和知识&#xff0c;掌握面向对象程序设计的一般方法、常用技术及技巧&#xff0c;树立良好的软件…

QT+SQL Server实现车辆管理系统 -简介

QTSQL Server 实现车辆管理系统 -简介 1.摘要2.界面展示及其功能介绍2.1 登录界面2.2 申请账户界面2.3 管理员界面2.3.1 添加车辆功能界面2.3.2 查询、删除、修改车辆信息功能界面2.3.3 添加司机功能界面2.3.4 查询、删除司机功能界面 2.4 普通用户界面2.4.1 查询车辆信息功能窗…

基于SpringBoot的汽车租赁管理系统

文末获取源码 一、项目技术栈 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SpringBoot 前端&#xff1a;采用HTML和Vue相结合开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA …

asp.net汽车出租信息管理系统VS开发sqlserver数据库web结构c#编程计算机网页项目

一、源码特点 ASP.NET 汽车出租信息管理系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c# 语言开发 asp.net汽车出租信息管理系统…

数据库--汽车销售管理系统【课程设计】

目录 1.设计任务 1.1系统开发的背景 1.2系统开发的意义 1.3系统所应用的模块 2.需求分析 2.1功能分析 2.2数据流图 2.3数据字典 3.概念结构设计 4.逻辑结构设计 5.物理结构设计 5.1基本表 5.2视图 6.数据库实施 6.1 建立数据库表 6.2建立视图 7.数据库操作 目录 1.1系统开发的…

汽车租赁管理系统/汽车租赁网站/汽车管理系统

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

C#windows车库信息管理系统

中文摘要 为了提高车辆信息的管理效率&#xff0c;本课题使用C#语言和SQL Server数据库系统开发了一个WinForm类型的车库管理系统对车辆信息进行高效管理&#xff0c;以提升管理质量。本系统包含管理员登录注册、管理员信息修改模块、添加车辆信息模块、删除车辆信息模块、查找…

asp.net 汽车信息管理系统VS编程sqlserver数据库c#开发

一、源码特点 asp.net 汽车信息管理系统 是一套完善的WEB设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 下载地址&#xff1a;下载 https://download.csdn.net/download/qq_41221322/21516579 视频播放&#xff1a; …

基于Java+SQL的汽车销售管理系统

文章目录 1.前言系统概要附1: 建表语句附2: 项目整体结构附3: view包结构附4: utils包结构 2.基本功能介绍&#xff1a;2.1 登陆与注册2.2 主界面2.3 修改密码2.4 相应的操作数据界面2.5 增、删、查、改示例2.5.1 添加数据2.5.2 删除数据2.5.3 修改数据2.5.4 查询数据 3.食用该…

python判断闰年(leap year)

python判断闰年(leap year) 闰年的计算方法是“四年一闰,百年不闰,四百年再闰”,这就造成了在一些特殊年份,会出现八年一闰的现象。例如1896年为闰年,四年之后的1900年并不是闰年,直到再过四年之后的1904年才是闰年。也就是一般情况下年份能被4整除即为闰年,而整百年的…

python判断闰年程序_python实现闰年

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 30个常用python实现:1、冒泡排序 ? 2、计算x的n次方的方法? 3、计算a*a + b*b + c*c + ...? 4、计算阶乘 n! ?5、列出当前目录下的所有文件和目录名? 6、…

python实现判断闰年

先来看条件&#xff1a; 如果我们要判断的年份是整百年&#xff0c;我们不能去除以4&#xff0c;而应该除以400。如1900年&#xff0c;因为这个年份是整百年&#xff0c;所以要除以400&#xff0c;1900/4004……300&#xff0c;不是400的倍数&#xff0c;所以1900年不是闰年&a…

python判断闰年

4.1 python 判断闰年 代码 yearint(input("请输入年份&#xff1a;")) if(year%40 and year%100 !0):print("是闰年&#xff01;") elif(year%4000):print("是闰年&#xff01;") else:print("不是闰年&#xff01;")运行结果截图&…

chatgpt赋能python:Python闰年的判断方法

Python闰年的判断方法 在Python编程中&#xff0c;经常需要判断某个年份是否是闰年。闰年是指能被4整除但不能被100整除的年份&#xff0c;或者能被400整除的年份。 闰年的判断方法在编程中非常常见&#xff0c;也非常简单。下面将介绍Python中三种实现闰年判断的方法。 方法…

Lingo 11安装教程

Lingo 11&#xff08;32/64&#xff09;位下载地址&#xff1a; 链接&#xff1a;http://pan.baidu.com/s/1pLFk5xL 密码&#xff1a;bt95 软件介绍&#xff1a; LINGO是Linear Interactive and General Optimizer的缩写&#xff0c;即“交互式的线性和通用优化求解器”&…

LINGO 11.0安装教程

文章目录 1. 安装步骤2. 下载地址 1. 安装步骤 解压压缩包&#xff0c;然后双击Lingo11.exe以运行它 单击No以禁用自动更新 开始使用 2. 下载地址 参考&#xff1a;Lingo多版本下载地址和安装教程

最优化问题求解及Lingo教程

介绍 Lingo是一款求解最优化问题的软件&#xff0c;可以用于求解非线性规划&#xff0c;也可以用于一些线性和非线性方程组的求解等&#xff0c;功能十分强大&#xff0c;是求解优化模型的最佳选择。 最优化问题 首先介绍一下什么是最优化问题。 最优化问题&#xff0c;即在…

lingo入门教程之三 --- 文件数据处理

有时候我们想输入的数据是在一个Excel表格或者其他什么形式中&#xff0c;或者说这里数据是实时变化的并不利于直接在程序中输入&#xff0c;耳而应该在程序之外将数据存储&#xff0c;实现数据与程序的分离存储&#xff0c;这个时候就涉及到程序与数据之间的传递 下面简要介绍…