qt项目-利用MySQL与XML实现车辆管理系统

效果展示

在这里插入图片描述

数据库数据

在这里插入图片描述

利用XML文档记录销售记录

在这里插入图片描述
qt项目源码下载

代码展示
carmanager.cpp 文件

#include  "carmanager.h"
#include  "ui_carmanager.h"
#include  <QMessageBox>
#include  <QSqlError>
#include  <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlTableModel>
#include <QFile>
#include <QTextStream>
#include <QDateTime>
#include <QSqlRecord>
#include <QDebug>

CarManager::CarManager(QWidget *parent) :QMainWindow(parent),ui(new Ui::CarManager)
{
   
    ui->setupUi(this);
    this->setMinimumSize(900, 550);
    ui->toolBox->setCurrentIndex(0);
    
    // 创建空xml
    createXML();
    
    // 连接数据库
    bool bl = connectDB();
    if(!bl)
    {
   
        return;
    }
    
    // 销售车辆
    initSaleCar();
    
    // 统计
    initTongji();
    
    // 新车
    initNewCar();
    ui->title->setText("<center><h1>车辆管理</h1></center>");
    ui->stackedWidget->setCurrentIndex(0);
    
    // 车辆管理
    connect(ui->actionCar, &QAction::triggered, [=]()
    {
   
        // 车辆管理
       ui->stackedWidget->setCurrentIndex(0);
       ui->title->setText("<center><h1>车辆管理</h1></center>");
    });
    
    // 销售统计
    connect(ui->actionSale, &QAction::triggered, [=]()
    {
   
        ui->stackedWidget->setCurrentWidget(ui->tongji);
        ui->title->setText("<center><h1>销售统计</h1></center>");
    });
}	

CarManager::~CarManager()
{
   
    delete ui;
}

// 连接数据库
bool CarManager::connectDB()
{
   
    // 添加连接
    m_db = QSqlDatabase::addDatabase("QMYSQL" );
    
    // 连接设置
    m_db.setHostName("localhost");
    m_db.setDatabaseName("car");
    m_db.setUserName("root");
    m_db.setPassword("123456");
    
    // 打开数据库
    if(!m_db.open())
    {
   
        QMessageBox::critical(this, "Error", m_db.lastError().text());
        return false;
    }
    return true;
}

void CarManager::initSaleCar()
{
   
    QSqlQueryModel* model = new QSqlQueryModel(this);
    model->setQuery("select name from factory");
    
    // 厂家
    ui->factory->setModel(model);
    ui->changjia->setModel(model);
    factoryChanged("请选择厂家");
    void (QComboBox::* sigItemChanged)(const QString &) = &QComboBox::currentIndexChanged;
    connect(ui->factory, sigItemChanged, this, &CarManager::factoryChanged);    // 厂家
    connect(ui->brand, sigItemChanged, this, &CarManager::brandChanged);    // 品牌
    void (QSpinBox::* sigValueChanged)(int) = &QSpinBox::valueChanged;
    connect(ui->number, sigValueChanged, [=](int value)
    {
   
	if(value == 0)
        {
   
            ui->ok->setEnabled(false);
            ui->sum->clear();
            ui->sum->setEnabled(false);
        }
        else
        {
   
            ui->ok->setEnabled(true);
            int sum = ui->price->text().toInt() * value;
            ui->sum->setText(QString::number(sum));
        }
    });
   
    // 确定
    connect(ui->ok, &QPushButton::clicked, [=]()
    {
   
    	// 准备数据
	QString factory = ui->factory->currentText();
        QString brand = ui->brand->currentText();
        int number = ui->number->value();   // 销售数量
        int last = ui->last_num->text().toInt() - number;   // 卖完之后剩余的数量
        QSqlQuery query;
        QString sql = QString("select sell from brand where factory='%1' and name ='%2'").arg(factory).arg(brand);
        query.exec(sql);
        if(query.next())
        {
   
        int sell = query.value(0).toInt() + number;
            // 更新数据库
            QSqlDatabase::database().transaction(); // 记录更新前的状态
            sql = QString("update brand set sell=%1, last=%2 where factory='%3' and name='%4'")
                    .arg(sell).arg(last).arg(factory).arg(brand);
            bool bl = query.exec(sql);
            if(bl)
            {
   
            	QSqlDatabase::database().commit();  // 提交
                // 销售数据写入到文件 xml
                writeXMLData();
                // 显示销售数据
                showDailyList();
            }
            else
            {
   
                // 状态回滚
                QSqlDatabase::database().rollback();
            }
        }
        // 初始化界面
        ui->factory->setCurrentText("请选择厂家");
    });
    // 取消
    connect(ui->cancle, &QPushButton::clicked, [=]()
    {
   
        ui->factory->setCurrentText("请选择厂家");
    });
}

void CarManager::factoryChanged(const QString &name)
{
   
    // 初始化
    ui->brand->clear();
    if(name == "请选择厂家")
    {
   
        ui->price->clear();
        ui->number->setValue(0);
        ui->last_num->clear()
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 是一款广受欢迎的开源关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现隶属于美国甲骨文公司(Oracle)。自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 开源与跨平台 MySQL遵循GPL开源协议,这意味着任何人都可以免费下载、使用和修改其源代码。这种开放性促进了广泛的社区支持和第三方插件、工具的发展。此外,MySQL支持多种操作系统,包括Windows、Linux、macOS、Solaris等,确保了其在不同环境下的兼容性和部署灵活性。 关系型模型与SQL支持 MySQL基于关系型数据库模型,数据以表格形式组织,并通过预定义的键(如主键、外键)在表之间建立关联。它完全支持结构化查询语言(SQL),允许用户进行数据查询、插入、更新、删除、创建和管理数据库结构等操作。SQL标准的广泛支持使得MySQL易于学习,且与其他关系型数据库系统有良好的互操作性。 存储引擎 MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY等,每种引擎都有特定的优势和适用场景。例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度定制化的存储解决方案。 性能与可扩展性 MySQL通过高效的缓存机制、查询优化器以及对硬件资源的有效利用,保证了在高负载情况下的稳定性和快速响应。它支持水平扩展(如通过分片、复制等技术)和垂直扩展(如增加硬件资源),以应对大规模数据存储和高并发访问的需求。 安全性与管理工具 MySQL提供了一系列安全措施,如用户账户管理、访问权限控制、SSL/TLS加密连接、审计日志等功能,确保数据的安全性和合规性。同时,MySQL附带了一系列管理工具,如MySQL Server、MySQL Workbench、MySQL Shell等,便于用户进行数据库配置、监控、备份、恢复、迁移等工作。 社区与生态系统 MySQL拥有庞大的开发者社区和丰富的第三方插件、库、中间件支持,提供了丰富的文档、教程、论坛以及专业服务,极大地简化了开发、运维和故障排查过程。 关键组件与日志 系统数据库 MySQL内部包含几个特殊的系统数据库,如: information_schema:提供关于所有数据库、表、列、索引等元数据信息,是查询数据库结构的标准接口。 mysql:存储MySQL自身的系统信息,如用户权限、服务器配置、事件调度等。 performance_schema:自MySQL 5.5版本引入,用于收集服务器性能数据,帮助诊断和优化系统性能。 test(非必要):默认提供的测试数据库,通常用于学习和实验,生产环境中可考虑删除。 sys(自MySQL 5.7版本):提供更易用的视图来访问performance_schema中的信息,简化性能分析工作。 日志文件 MySQL通过日志记录来保证数据一致性、支持故障恢复和审计需求,主要包括: 错误日志(Error Log):记录MySQL服务器运行期间的严重错误、警告和其他重要事件。 二进制日志(Binary Log,binlog):记录对数据库进行数据更改(如INSERT、UPDATE、DELETE)的操作序列,用于数据复制和恢复。 查询日志(query log):可选地记录所有发送到MySQL服务器的SQL查询,用于调试和审计。 慢查询日志(slow query log):记录执行时间超过指定阈值的查询,帮助识别和优化性能瓶颈。 应用场景 MySQL广泛应用于各种规模和类型的项目,包括但不限于: Web应用程序:作为众多网站和Web服务(如电子商务、社交媒体、内容管理系统等)的后台数据库。 数据分析与报表:与数据仓库技术结合,支持OLAP(在线分析处理)和数据可视化。 移动应用与物联网(IoT):作为数据存储层,支撑大量设备的数据采集、存储和查询需求。 嵌入式系统:在资源有限的环境中,作为轻量级数据库解决方案。 总之,MySQL凭借其开源、跨平台、高性能、灵活扩展、丰富功能集和庞大社区支持等特点,成为现代数据管理领域中不可或缺的一部分,适用于各种行业和业务场景的数据库需求。
### 回答1: 学生成绩管理系统是一个旨在帮助学校、教师和学生管理学生成绩、课程计划、成绩分析、学生反馈和其他相关信息的软件系统。为了实现这个目标,我们使用了Qt框架来设计和实现学生成绩管理系统。 在系统的设计和实现中,我们采用了模块化的结构来保证系统的高效、灵活和可扩展性。系统由多个模块组成,包括课程模块、学生模块、教师模块、成绩管理模块、反馈模块等。每个模块都负责一个特定的功能,通过合理的模块划分,实现了系统功能的高度解耦和可复用性。 在界面设计方面,我们充分利用Qt框架提供的窗口部件和界面设计工具来快速、简单地创建美观而高效的用户界面。通过使用Qt的图形视图框架,我们能够实现灵活的图形界面,并采用了一些现代化的GUI设计技巧,如XML、CSS等来提高用户交互体验。 此外,我们还开发了一些高级特性,如搜索和过滤功能、导出和导入数据功能、报告生成功能等。这些特性可以帮助用户更好地管理、分析和处理成绩数据,提高了系统的实用性和易用性。 总之,基于Qt的学生成绩管理系统通过模块化的设计、可扩展的结构和美观的用户界面,提供了一种现代化、高效、易用的学生成绩管理解决方案,该系统在教学和管理领域得到了广泛应用和赞誉。 ### 回答2: 基于QT的学生成绩管理系统主要包括以下几个模块:学生信息管理模块、课程管理模块、成绩录入与查询模块、数据统计分析模块。 首先,学生信息管理模块主要包括学生信息的增删改查、学生选修课程的情况、学生的班级和专业等信息。通过QTQTableWiget控件实现学生信息表格的插入和修改操作。同时,可以通过控件的筛选功能对学生信息进行查询。 其次,课程管理模块主要包括课程的增删改查、课程的属性、课程的教师、上课时间和上课地点等信息。通过QT的QComboBox控件加载课程属性和教师信息,通过QDateTimeEdit控件实现上课时间的选择。 成绩录入与查询模块主要包括对学生成绩的录入和查询。这里可以通过QT的QLineEdit控件输入学生成绩,并通过QMessageBox控件实现成绩录入成功的提示。同时,成绩查询功能可以通过QTQTreeWidget控件显示学生的科目成绩和总分汇总。 最后,数据统计分析模块可以对学生成绩进行多方位分析。这里可以通过QT的QChart控件生成各科目的成绩和总分条形图和折线图。同时,在数据分析方面,可以通过QT的QSqlDatabase和QSqlQuery控件对学生的成绩数据进行分析和筛选,支持多种统计和图表显示方式。 总之,基于QT的学生成绩管理系统设计和实现需要多方面的控件和技术支持。通过系统的数据统计和分析,可以全面了解学生成绩的情况,为教师和学生的教学和学习提供参考和帮助。 ### 回答3: 学生成绩管理系统是一个非常重要的系统,对于学校、老师和学生来说,都十分关键。为了更好地管理学生成绩,我们基于Qt进行了系统的设计和实现。 首先,我们需要确定系统的功能和界面。在这个系统中,我们要实现学生信息的录入、课程信息的录入、成绩的录入、查询和统计功能,同时还需要设计一个图形界面,使得用户操作更加方便。 其次,我们需要利用Qt提供的数据库工具,将学生信息、课程信息和成绩信息进行存储和管理。我们采用了MySQL数据库,在Qt平台下进行连接和操作。同时,我们还采用了Qt的模型视图框架,对数据库进行了封装,更加方便了用户的操作。 最后,我们还利用Qt的数据可视化功能,为学生成绩进行了可视化展示,并设计了一些图表和报表,方便使用者进行数据分析和统计。 在实际的使用过程中,我们发现这个基于Qt的学生成绩管理系统非常稳定和易用,可以方便地对学生成绩进行管理和查询,也可以帮助老师更好地了解学生的学习情况,从而更具针对性地制定教学计划。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值