QT+SQL Server实现车辆管理系统 -代码具体实现

article/2025/8/8 9:50:58

QT+SQL Server 实现车辆管理系统 -代码具体实现

  • 1.摘要
  • 2.整体框架
  • 3.具体代码实现
    • 3.1 连接数据库
    • 3.2 登录操作
    • 3.3 申请账户
    • 3.4 添加车辆信息
    • 3.5 查询车辆信息
    • 3.6删除车辆信息
    • 3.7修改车辆信息
    • 3.8 添加司机信息
  • 4.总结
  • 5.资源下载链接

1.摘要

前面一篇文章简要介绍了车辆管理系统的界面和功能,这一篇博客只要介绍功能实现所涉及的代码,如果有人想要打包文件,我会在文章结尾附上链接供大家下载。
该系统使用了数据库存储信息,使用数据库即安全又简化了许多操作步骤,例如查询、添加、删除直接可以SQL语句,省去了很多麻烦。

2.整体框架

我使用了MindMaster画了思维导图来简要介绍

在这里插入图片描述

3.具体代码实现

3.1 连接数据库

//************连接数据库************
bool login_Management::Open_Database()
{this->ui->lineEdit->setFocus();QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); //数据库驱动类型为SQL Serverdb.setHostName("127.0.0.1");        //选择本地主机,127.0.0.1db.setDatabaseName("Vehicle_Management");db.setUserName("Vehicle_Management");            //登录用户db.setPassword("123");                    //密码if(!db.open())                                  //打开数据库{qDebug()<<db.lastError().text();QMessageBox::critical(0, QObject::tr("Database error"), db.lastError().text());return false ;                 //打开失败}return true;
}

3.2 登录操作

//登录操作
void login_Management::Login()
{QSqlQuery mysql;QString name=this->ui->lineEdit->text(); //读取账号QString passwd=this->ui->lineEdit_2->text();//读取密码QString str=QString("select * from Account where a_Id='%1' and a_Password='%2'").arg(name).arg(passwd);mysql.exec(str); //执行SQL语句if(name==""||passwd=="") //判断账号密码是否为空,为空则弹出提示窗{ QMessageBox::critical(this,"登录情况","请输入账号或密码");return ;}if(mysql.first()) //判断查询结果是否为空,为空则不能登录{QMessageBox::information(this,"登录情况","登录成功");this->hide(); //登录成功后隐藏登录窗口if(name.at(0)=='9') //判断是否为管理员账户{w.setWindowTitle("车辆管理系统_管理员版");w.show();  //进入管理员界面}else{w_2.setWindowTitle("车辆管理系统");w_2.show();  //进入普通用户界面}}elseQMessageBox::critical(this,"登录情况","密码不正确!");
}

3.3 申请账户

//确认操作
void Apply_Account::clicked_Ok()//点击确认按钮后执行以下操作
{QSqlQuery sql;QString s;QString Id=this->ui->lineEdit->text(); //读取申请账号QString passwd=this->ui->lineEdit_2->text(); //读取申请密码QString passwd2=this->ui->lineEdit_3->text(); //读取确认密码s=QString("insert into Account values('%1','%2')").arg(Id).arg(passwd); //将创建的账户插入数据库中if(Id.length()<3||passwd.length()<=3)//判断密码、账号是否小于3位{ QMessageBox::critical(this,"注册情况","登录账号不小于3位,密码不能小于3位!"); return;}if(passwd!=passwd2){ QMessageBox::critical(this,"提示","两次密码不同");return ;}if(sql.exec(s)){QMessageBox::information(this,"注册情况","注册成功");this->close();}elseQMessageBox::critical(this,"注册情况","注册失败");}

3.4 添加车辆信息

//判断输入的内容是否符合要求if(id.length()<1||no.length()<1){QMessageBox::critical(this ,"警告","请重新输入'\n'编号和牌号都不能为空");}else{QString content="车辆编号: "+id+'\n'+"车号: "+no+'\n'+"制造方: "+company +'\n'+"购买时间: "+buy_Time+'\n'+"型号: "+type+'\n'+"总公里数: "+total_Km+'\n'+"耗油/公里: "+oil_Consume_Km+'\n'+"过费: "+road_Toll+'\n'+"载重: "+load_Capacity+'\n';int ret =QMessageBox::information(this,"您将要添加的信息",content,QMessageBox::Ok|QMessageBox::Cancel ); //将添加的信息以QMessageBox形式显示出来if(ret==QMessageBox::Ok)//如果正确则执行Add_Truck_Insert_Table函数将新消息插入数据库{if( Add_Truck_Insert_Table(id,no,company,buy_Time,type,total_Km,oil_Consume_Km,road_Toll,load_Capacity)){Add_Truck_Clear_Message();//清除输入框内容Add_Truck_Manage_Print(id,no,company,buy_Time,type,total_Km,oil_Consume_Km,road_Toll,load_Capacity);//在表格内显示出刚插入的这条信息}else {//如果插入失败提示信息QMessageBox::critical(this ,"警告","添加失败,请重新输入");}}}

3.5 查询车辆信息

//此处我用的texyChanged(Qstring) 也就是说输入栏状态一改变就触发一次查询connect(this->ui->line_Select_Message_2,SIGNAL(textChanged(QString)),this,SLOT(Select_Car_Input()));//此处用SQL语句中的like实现了按输入匹配查询,简单化了许多
//查询结果输出
void Select_Truck::Select_Truck_Select_Print(QString Line_Message)
{this->model->clear();//每次查询都要清除查询信息(重点)Select_Truck_New_Table();//表格初始化line=0;//初始化行数int index=this->ui->combo_Box_Select->currentIndex(); //得到选择的序号,共0、1、2、3QString temp;//用来暂存SQL语句if(index==0)//判断选择的序号,在选择Select的内容{temp=QString("select * from Truck where t_Id like '%1%'").arg(Line_Message);}else if(index==1){temp=QString("select * from Truck where t_No like '%1%'").arg(Line_Message);}else if(index==2){temp=QString("select * from Truck where t_Company like '%1%'").arg(Line_Message);}else {temp=QString("select * from Truck where t_Buy_Time like '%1%'").arg(Line_Message);}QSqlQuery my_Query; //查询if(my_Query.exec(temp)){//输出查询结果,从line=0开始输出while(my_Query.next()) //一直到结尾才推出循环{QString id=my_Query.value(0).toString();QString no=my_Query.value(1).toString();QString company=my_Query.value(2).toString();QString buy_Time=my_Query.value(3).toString();QString type=my_Query.value(4).toString();QString total_Km=my_Query.value(5).toString();QString oil_Consume_Km=my_Query.value(6).toString();QString basic_Maintenance_Fee=my_Query.value(7).toString();QString road_Toll=my_Query.value(8).toString();QString total_Cost=my_Query.value(9).toString();QString load_Capacity=my_Query.value(10).toString();//每次将一行结果输出到表格中Select_Truck_Message_Print(id, no,company, buy_Time,type,total_Km, oil_Consume_Km,basic_Maintenance_Fee,road_Toll,total_Cost,load_Capacity);}}else{Select_Truck_New_Table();//表格初始化}
}

3.6删除车辆信息

//确认按钮后删除信息
void Select_Truck::Delete_Truck_Message_Ok()
{QString message=this->ui->line_Delete_Message->text();//读取文本栏的信息int index=this->ui->combo_Box_Delete->currentIndex();//得到选择的序号QString SQL;QString SQL_Select;if(index==0){SQL=QString("delete from Truck where t_Id='%1'").arg(message);SQL_Select=QString("select * from Truck where t_Id='%1'").arg(message);}else if(index==1){SQL=QString("delete from Truck where t_No='%1'").arg(message);SQL_Select=QString("select * from Truck where t_No='%1'").arg(message);}else if(index==2){SQL=QString("delete from Truck where t_Company='%1'").arg(message);SQL_Select=QString("select * from Truck where t_Company='%1'").arg(message);}else {SQL=QString("delete from Truck where t_Buy_Time='%1'").arg(message);SQL_Select=QString("select * from Truck where t_Buy_Time='%1'").arg(message);}QSqlQuery my_Delete; //定义执行SQL语句变量QSqlQuery my_Select; //查询是否存在所要删除信息my_Select.exec(SQL_Select);if(my_Select.first())   //********有些问题,提示不完全*********{int ret =QMessageBox::information(this,"是否删除","请谨慎考虑",QMessageBox::Ok|QMessageBox::Cancel );if(ret==QMessageBox::Ok){my_Delete.exec(SQL);//执行SQL删除语句QMessageBox::information(this ,"提示","删除成功");QString Line_Message=ui->line_Select_Message->text();//读取文本框内信息Select_Truck_Select_Print(Line_Message);//执行一次查询线束删除后信息}else return ;}else{QMessageBox::critical(this ,"提示","删除信息失败");}
}

3.7修改车辆信息

//***********更新学生信息************//确认按钮后进行更新
void Select_Truck::Update_Truck_Message_Ok()
{QString message=this->ui->line_Update_Message->text();int index=this->ui->combo_Box_Update->currentIndex();QString select_Message; //存入被修改人的信息QString SQL;if(index==0)//选择按什么搜索被更新人信息{select_Message="t_Id";}else if(index==1){select_Message="t_No";}else if(index==2){select_Message="t_Company";}else {select_Message="t_Buy_Time";}if(message!=""){Update_Truck_Message_Judge(select_Message,message);}else {QMessageBox::critical(this ,"警告","修改失败,请重新输入");}
}//判断需要改变什么
void Select_Truck::Update_Truck_Message_Judge(QString select_Message,QString message)
{QString SQL_Update;  //赋值SQL执行语句QString SQL;QSqlQuery my_Update; //定义SQL执行变量SQL=QString("select * from Truck where %1='%2'").arg(select_Message).arg(message);my_Update.exec(SQL);if(!my_Update.first()){QMessageBox::critical(this ,"警告","修改失败,请重新输入");return ;}int ret =QMessageBox::information(this,"是否更新","请谨慎考虑",QMessageBox::Ok|QMessageBox::Cancel );if(ret!=QMessageBox::Ok){return ;}//获得需要改变的状态bool index_No=this->ui->check_No_1->isChecked();bool index_Company=this->ui->check_Company_1->isChecked();bool index_Buy_Time=this->ui->check_Buy_Time_1->isChecked();bool index_Type=this->ui->check_Type_1->isChecked();bool index_Total_Km=this->ui->check_Total_Km_1->isChecked();bool index_Consum_Km=this->ui->check_Oil_Consum_Km_1->isChecked();bool index_Basic_Maintenance_Fee=this->ui->check_Basic_Maintenance_Fee_1->isChecked();bool index_Road_Toll=this->ui->check_Road_Toll_1->isChecked();bool index_Load_Capacity=this->ui->check_Load_Capacity_1->isChecked();//获得文本框信息QString line_No=this->ui->line_No_1->text();QString line_Company=this->ui->line_Company_1->text();QString line_Buy_Time=this->ui->line_Buy_Time_1->text();QString line_Type=this->ui->line_Type_1->text();QString line_Total_Km=this->ui->line_Total_Km_1->text();QString line_Consume_Km=this->ui->line_Oil_Consume_Km_1->text();QString line_Basic_Maintenance_Fee=this->ui->check_Basic_Maintenance_Fee_1->text();QString line_Road_Toll=this->ui->line_Road_Toll_1->text();QString line_Load_Capacity=this->ui->line_Load_Capacity_1->text();//判断并进行SQL语句QString line_Id=this->ui->line_Update_Message->text();if(index_No==1){if(line_No.length()<1){QMessageBox::critical(this ,"警告","修改失败,车号不能为空");return;}SQL_Update=QString("update Truck set t_No='%1' where %2='%3'").arg(line_No).arg(select_Message).arg(message);my_Update.exec(SQL_Update);}if(index_Company==1){SQL_Update=QString("update Truck set t_Company='%1' where %2='%3'").arg(line_Company).arg(select_Message).arg(message);my_Update.exec(SQL_Update);}if(index_Road_Toll==1){SQL_Update=QString("update Truck set t_Road_Toll='%1' where %2='%3'").arg(line_Road_Toll).arg(select_Message).arg(message);my_Update.exec(SQL_Update);}if(index_Buy_Time==1){SQL_Update=QString("update Truck set t_Buy_Time='%1' where %2='%3'").arg(line_Buy_Time).arg(select_Message).arg(message);my_Update.exec(SQL_Update);}if(index_Type==1){SQL_Update=QString("update Truck set t_Type='%1' where %2='%3'").arg(line_Type).arg(select_Message).arg(message);my_Update.exec(SQL_Update);}if(index_Total_Km==1){SQL_Update=QString("update Truck set t_Total_Km='%1' where %2='%3'").arg(line_Total_Km).arg(select_Message).arg(message);my_Update.exec(SQL_Update);}if(index_Consum_Km==1){SQL_Update=QString("update Truck set t_Consum_Km='%1' where %2='%3'").arg(line_Consume_Km).arg(select_Message).arg(message);my_Update.exec(SQL_Update);}if(index_Basic_Maintenance_Fee==1){SQL_Update=QString("update Truck set t_Basic_Maintenance_Fee='%1' where %2='%3'").arg(line_Basic_Maintenance_Fee).arg(select_Message).arg(message);my_Update.exec(SQL_Update);}if(index_Load_Capacity==1){SQL_Update=QString("update Truck set t_Load_Capacity='%1' where %2='%3'").arg(line_Load_Capacity).arg(select_Message).arg(message);my_Update.exec(SQL_Update);}QString Line_Message=ui->line_Select_Message->text();//读取文本框内信息//Select_Truck_Select_Print(Line_Message);Select_Truck_Select_Update(); //更新后显示结果QMessageBox::information(this ,"提示","修改成功");Select_Truck_Clear_Message();//清除修改输入框内容
}

3.8 添加司机信息

//这是实现的槽函数,点击触发和两窗口间信息传送
connect(this->ui->table_Message, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(Click_On_Table_Message(const QModelIndex &)));//表格点击触发
connect(this,SIGNAL(Send_Message(QString ,QString,QString)),add,SLOT(Receive_Message(QString ,QString,QString )));//发送接受信息
//通过双击获得表格信息,如果不存在司机则弹出添加窗口供管理员添加司机信息
void Select_Truck::Click_On_Table_Message(const QModelIndex &index)
{QString cellText = index.data().toString();int row=index.row();//选中的行号if (index.isValid()){QModelIndex dex=model->index(row,0);//获取车辆编号QString vehicle_Id=model->data(dex).toString();//qDebug()<<vehicle_Id;QString select=QString("select * from Driver where d_Id ='%1'").arg(vehicle_Id);QSqlQuery my_Query; //查询my_Query.exec(select);if(my_Query.first()){QString name=my_Query.value(3).toString();QString gender=my_Query.value(4).toString();QString fee_Km=my_Query.value(5).toString();QString salary=my_Query.value(8).toString();//每次将一行结果输出到表格中QString content="姓名: "+name+'\n'+"性别: "+gender+'\n'+"费用/公里: "+fee_Km+'\n'+"工资: "+salary+'\n';int ret =QMessageBox::information(this,"司机信息",content,QMessageBox::Ok);//   qDebug()<<"测试"<<" ";}else{//获取一行信息的代码,此处只需要获取编号QModelIndex dex0=model->index(row,0);          //model 是事先与tableView绑定好的QString id=model->data(dex0).toString();QModelIndex dex1=model->index(row,1);          //model 是事先与tableView绑定好的QString no=model->data(dex1).toString();QModelIndex dex2=model->index(row,4);          //model 是事先与tableView绑定好的QString type=model->data(dex2).toString();// qDebug()<<id<<no<<type<<"Click_On_Table_Message";emit Send_Message(id,no,type);//向Add_Driver发送信息add->exec();}}

4.总结

总体上就这么多功能,其他没列出的都和这些相似,如果觉得我的样式表比较好看可以去我的下一篇博客,我会把具体实现的QT样式表一一列举出来

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

下一篇 QT+SQL Server实现车辆管理系统 -QT样式表

5.资源下载链接

车辆管理系统源代码下载链接,O(∩_∩)O~


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

相关文章

如何使用低代码进行车队管理?

处理任何业务都具有挑战性&#xff0c;但车队管理无疑是所有业务中的佼佼者。无论是司机短缺、环境问题、国际法规还是行业不稳定&#xff0c;车队经理都必须面对这一切。除此之外&#xff0c;还有数字化和路线优化的概念。数字化转型车队管理业务意味着消除挑战&#xff0c;拥…

车辆自然驾驶轨迹数据集/交通流数据介绍

文章目录 NGSIMNGSIM 概览快速路车道选择算法Interstate 80 Freeway 数据集Lankershim Boulevard 数据集US highway101数据集动态交通分配DTACORSIM Argoverse Motion Forecasting DatasetAIMSUNHighDITS DataHub 美国智能交通数据库Data.govPeMSPortland Oregon Region data英…

3D车辆检测AP评价指标代码的理解

课题研究的是单目3D车辆的识别&#xff0c;采用的目标检测网络是SMOKE&#xff0c;为了可以更好的定量评测训练模型的性能&#xff0c;需要使用到合理的评测指标&#xff0c;目前比较流行的评测指标是得到多组precision和recall值画出PR曲线&#xff0c;然后计算PR曲线下的面积…

根据车辆型号自动生成车辆编号

开发工具与关键技术&#xff1a;Visual Studio 2015 linq 正则 作者&#xff1a;孙水兵 撰写时间&#xff1a;2019年6月26一、 功能 根据不同的类型的车辆型号&#xff0c;生成以车辆型号开头的车辆编号。 二、 达到的效果 用户选择了车辆型号之后&#xff0c;将对应的车辆编…

【路径规划】基于遗传算法求解多车多类型车辆的车辆路径优化问题附matlab代码

1 内容介绍 多车辆多路线的交通路线优化涉及到排序问题,是一个N-P难题,高效精确的算法存在的可能性不大.提出了基于遗传算法的求解方法,给出了实例来证明如何利用遗传算法解决多车辆多路线的优化问题.结果证明,一般情况下利用遗传算法对于多车辆多路线的行车路线优化能得到一组…

机动车登记信息代码

原链接&#xff1a;机动车登记信息代 搜索结果本栏目用于收集和整理行业相关标准&#xff0c;如机械行业&#xff0c;化工行业等。http://www.gb99.cn/e/search/result/?searchid76243针对其中第七项车辆信息牌照代码如下&#xff1a;

利用低代码平台进行车辆管理,为交通行业添砖加瓦

概要&#xff1a;本文介绍了交通行业车辆管理的重要性&#xff0c;并详细阐述了基于低代码平台设计的车辆管理系统的优势。通过快速开发、易于维护、增加灵活性、提高数据可靠性、降低成本以及实时监控等多个方面&#xff0c;这种车辆管理系统可以帮助企业提高效率和降低成本&a…

(c++课程设计)简单车辆管理系统(有五种类型的车辆)代码+报告

关于这个课程设计 &#xff0c;差点没把我头发愁没。 好了其实本质还是东拼西凑&#xff0c;编程能力没怎么长进&#xff0c;花里胡哨的东西却学了不少&#xff08;不是&#xff09; 万恶的学院&#xff0c;虽然要求三人一组&#xff0c;但是却分一二三类&#xff0c;三个人代…

什么是车辆识别代码(VIN)

车辆识别代码(VIN),VIN是英文Vehicle Identification Number(车辆识别码)的缩写。因为ASE标准规定:VIN码由17位字符组成,所以俗称十七位码。正确解读VIN码,对于我们正确地识别车型,以致进行正确地诊断和维修都是十分重要的。车辆识别代码根据国家车辆管理标准确定,包…

Eigen学习笔记1:在VS2015下Eigen(矩阵变换)的配置

一、Eigen简介 Eigen是一个高层次的C 库&#xff0c;有效支持线性代数&#xff0c;矩阵和矢量运算&#xff0c;数值分析及其相关的算法。 Eigen适用范围广&#xff0c;支持包括固定大小、任意大小的所有矩阵操作&#xff0c;甚至是稀疏矩阵&#xff1b;支持所有标准的数值类型&…

鲁鹏老师三维重建课程之单视图重建

配置Json环境 使用Jsoncpp包中的.cpp和 .h文件 解压上面下载的 Jsoncpp 文件&#xff0c;把 jsoncpp-src-0.5.0文件拷贝到工程目录下&#xff0c; 将 jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\include\json 和 jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\src\lib_json 目录里的文…

常用 Linux 软件汇总!很全,但不敢说最全

点击下方公众号「关注」和「星标」 回复“1024”获取独家整理的学习资料&#xff01; 音频 Airtime - Airtime 是一款用于调度和远程站点管理的开放广播软件 Ardour - 在 Linux 上录音&#xff0c;编辑&#xff0c;和混音 Audacious - 开源音频播放器&#xff0c;按你想要的方式…

RoadMap:面向自动驾驶视觉定位的轻量级语义地图(ICRA2021)

点击上方“3D视觉工坊”&#xff0c;选择“星标” 干货第一时间送达 标题&#xff1a;RoadMap: A Light-Weight Semantic Map for Visual Localization towards Autonomous Driving 作者&#xff1a;Tong Qin, Yuxin Zheng, Tongqing Chen, Yilun Chen, and Qing Su 来源&#…

计算机图形学作业( 三):使用openGL画一个立方体,并实现平移、旋转和放缩变换

计算机图形学作业( 三):使用openGL画一个立方体,并实现平移、旋转和放缩变换 题目引入GLM库画立方体模型、观察和投影修改着色器立方体的顶点深度测试立方体变换平移旋转放缩渲染管线的理解代码题目 引入GLM库 利用 openGL 进行 3D 绘图需要用到大量的数学矩阵运算,而 Op…

一文掌握基于深度学习的自动驾驶小车开发(Pytorch实现,含完整数据和源码,树莓派+神经计算棒)

目录 一 . 基本介绍 二、模拟平台安装和基本使用 三、基于OpenCV的自动驾驶控制 3.1基于HSV空间的特定颜色区域提取 3.2基于canny算子的边缘轮廓提取 3.3感兴趣区域定位 3.4基于霍夫变换的线段检测 3.5动作控制&#xff1a;转向角 四、基于深度学习的自动驾驶控制 4.…

OpenGL坐标变换及其数学原理,两种摄像机交互模型(附源程序)

&#xfeff;&#xfeff; 实验平台&#xff1a;win7&#xff0c;VS2010 先上结果截图&#xff08;文章最后下载程序&#xff0c;解压后直接运行BIN文件夹下的EXE程序&#xff09;&#xff1a; a.鼠标拖拽旋转物体&#xff0c;类似于OGRE中的“OgreBites::CameraStyle::CS_ORB…

Python-WingIde各种调试方法

一、 本地从IDE启动文件调试 主要步骤:设置断点,F5开始调试 二、 本地从IDE外启动文件调试 1.) 从WingIDE的安装目录(默认C:\Program Files (x86)\Wing IDE 6.0)复制wingdbstub.py到被调试代码所在目录 2.) 代码中添加importwingdbstub 3.) IDE左下角设置如图 4.) 在…

图形处理单元(GPU)的演进

CPU 和 GPU 好久没有更新了&#xff0c;最近在阅读 CUDA 相关的一些论文&#xff0c;因为都是碎片化阅读&#xff0c;容易导致读过后&#xff0c;可能过一段时间又忘记掉&#xff0c;所以决定抽时间翻译翻译阅读的论文&#xff0c;一方面增强自己记忆&#xff0c;一方面与大家共…

图形学 光栅化 matlab 源代码

实验二&#xff1a;直线的光栅化算法 DDA Bresenham 实验三&#xff1a;圆的光栅化算法 编程实现两种中点画圆算法&#xff0c;第2种算法利用二阶差分方法&#xff1b; 实验四&#xff1a;多边形扫描转换算法 4.1对多边形扫描线填充算法进行简要描述&#xff0c;并给出多边形扫…

图形学入门合集1

Games101作业0 1虚拟机的使用 1.1虚拟机的安装 这里我们使用 Oracle VM VirtualBox 虚拟机。如果你使用 Windows 系统&#xff0c;你可以直接下载[链接](https://download.virtualbo%20%09%09x.org/virtualbox/6.1.4/VirtualBox-6.1.4-136177-Win.exe)&#xff0c;下载完成后…