0% ont trouvé ce document utile (0 vote)
5 vues7 pages

Gestion de clients avec Qt et SQL

Le document présente le code source d'une application Qt pour gérer des clients, avec des fonctionnalités pour ajouter, modifier, supprimer et afficher des clients dans une base de données. Il inclut des vérifications de saisie pour garantir la validité des données entrées par l'utilisateur et utilise des requêtes SQL pour interagir avec la base de données. Des messages d'alerte sont affichés pour informer l'utilisateur des succès ou des échecs des opérations.

Transféré par

yousfitasnym0
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues7 pages

Gestion de clients avec Qt et SQL

Le document présente le code source d'une application Qt pour gérer des clients, avec des fonctionnalités pour ajouter, modifier, supprimer et afficher des clients dans une base de données. Il inclut des vérifications de saisie pour garantir la validité des données entrées par l'utilisateur et utilise des requêtes SQL pour interagir avec la base de données. Des messages d'alerte sont affichés pour informer l'utilisateur des succès ou des échecs des opérations.

Transféré par

yousfitasnym0
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

manwidow.

pp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include"client.h"
#include<QMessageBox>
#include<QIntValidator>
#include <QtCharts/QChartView>
#include <QtCharts/QPieSeries>
#include <QGraphicsScene>
#include <QSqlQuery>
#include <QFileDialog>
#include <QRegularExpression>
#include <QDate>
#include <QtDebug>
#include <QSqlError>
#include <QSqlQuery>
#include <QtCharts/QValueAxis>
#include <QtCharts/QBarCategoryAxis>
#include <QtCharts/QBarSet>
#include <QtCharts/QBarSeries>
#include <QtCharts/QChart>
#include <QtCharts/QChartView>
//m4
#include <QDebug>
#include <QCheckBox>
#include <QRadioButton>
#include <QString>
#include <QToolButton>
#include <QStandardItemModel>

#include <QDate>
#include <QTime>
#include <QDateTime>
#include <QDateEdit>

#include <QMainWindow>
#include <QSqlQueryModel>
#include <QModelIndexList>
#include <QTableView>
#include <QApplication>

#include <QPieSeries>
#include <QChartView>
#include <QGraphicsScene>

#include <QSqlQuery>
#include <QMap>
#include <QVector>

#include <QTableWidgetItem>

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow), clientManager(), clientModel(new
QSqlQueryModel()), selectedClient(nullptr) {
ui->setupUi(this);
ui->tableView->setModel([Link]());

MainWindow::~MainWindow() {
delete ui;
delete clientModel;

void MainWindow::on_valider_clicked() {
if (ui->id_client->text().isEmpty() || ui->nom->text().isEmpty() ||
ui->prenom->text().isEmpty() || ui->telephone->text().isEmpty() ||
ui->email->text().isEmpty() || ui->adresse->text().isEmpty()) {
QMessageBox::warning(this, QObject::tr("Champs vides"),
QObject::tr("Veuillez remplir tous les champs."));
return;
}

bool ok;
int id_client = ui->id_client->text().toInt(&ok);
if (!ok || id_client <= 0) {
QMessageBox::warning(this, QObject::tr("Erreur d'ID"), QObject::tr("L'ID
doit être un nombre entier positif."));
return;
}

QString nom = ui->nom->text().trimmed();


QString prenom = ui->prenom->text().trimmed();

QString telephoneStr = ui->telephone->text();


if ([Link]() != 8 || ![Link](&ok) || !ok) {
QMessageBox::warning(this, QObject::tr("Erreur de téléphone"),
QObject::tr("Le téléphone doit être composé de 8 chiffres."));
return;
}
int telephone = [Link]();

QString email = ui->email->text();


QRegularExpression emailRegex("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.com$");
if (![Link](email).hasMatch()) {
QMessageBox::warning(this, QObject::tr("Erreur d'email"),
QObject::tr("L'email doit être au format [Link]@[Link]."));
return;
}

QString adresse = ui->adresse->text();


// Vérifications supplémentaires pour l'adresse peuvent être ajoutées ici.

Client newClient(id_client, nom, prenom, telephone, email, adresse);


if ([Link]()) {
QMessageBox::information(this, QObject::tr("Ajout Réussi"),
QObject::tr("L'ajout du client a été effectué avec succès."));
} else {
QMessageBox::critical(this, QObject::tr("Ajout Échoué"),
QObject::tr("L'ajout du client a échoué."));
}
updateTable();
}
void MainWindow::on_annuler_clicked()
{
ui->id_client->clear();
ui->nom->clear();
ui->prenom->clear();
ui->telephone->clear();
ui->email->clear();
ui->adresse->clear();
}

void MainWindow::on_supprimer_clicked() {
QModelIndexList selectedIndexes = ui->tableView->selectionModel()-
>selectedRows();
if ([Link]()) {
QMessageBox::warning(this, QObject::tr("Aucune sélection"),
QObject::tr("Veuillez sélectionner un client dans la table."));
return;
}

int row = [Link]().row();


int id_client = clientModel->data(clientModel->index(row, 0)).toInt();

qDebug() << "ID du client à supprimer:" << id_client; // Ajouté pour débogage

if (QMessageBox::question(this, QObject::tr("Confirmer la suppression"),


QObject::tr("Êtes-vous sûr de vouloir supprimer ce
client ?"),
QMessageBox::Yes | QMessageBox::No) ==
QMessageBox::No) {
return; // Si l'utilisateur annule, sortir de la fonction
}

if ([Link](id_client)) {
QMessageBox::information(this, QObject::tr("Suppression Réussie"),
QObject::tr("La suppression du client a été effectuée avec succès."));
} else {
QMessageBox::critical(this, QObject::tr("Suppression Échouée"),
QObject::tr("La suppression du client a échoué. Vérifiez que l'ID est correct."));
qDebug() << "Erreur de suppression. Vérifiez la méthode 'supprimer'."; //
Ajouté pour débogage
}

updateTable();
}

void MainWindow::on_afficher_clicked() {
updateTable();
}

void MainWindow::updateTable() {
delete clientModel;
clientModel = [Link]();
if (clientModel) {
ui->tableView->setModel(clientModel);
}
}

Client* MainWindow::getSelectedClient() {
QModelIndexList selectedIndexes = ui->tableView->selectionModel()-
>selectedRows();
if (![Link]()) {
int row = [Link]().row();
int id_client = clientModel->data(clientModel->index(row, 0)).toInt();
QString nom = clientModel->data(clientModel->index(row, 1)).toString();
QString prenom = clientModel->data(clientModel->index(row, 2)).toString();
QString adresse = clientModel->data(clientModel->index(row, 5)).toString();
QString email = clientModel->data(clientModel->index(row, 4)).toString();
int telephone = clientModel->data(clientModel->index(row, 3)).toInt();

return new Client(id_client, nom, prenom, telephone, email, adresse);


}
return nullptr;
}

void MainWindow::updateClient(Client* client) {


if (!client) {
QMessageBox::warning(this, QObject::tr("Erreur"), QObject::tr("Client
invalide. Aucune mise à jour effectuée."));
return;
}

// Récupérer les nouvelles informations à partir des champs de saisie


QString nom = ui->nom->text();
QString prenom = ui->prenom->text();
int telephone = ui->telephone->text().toInt();
QString email = ui->email->text();
QString adresse = ui->adresse->text();

// Mettre à jour le client existant


QSqlQuery updateQuery;
[Link]("UPDATE client SET nom = :nom, prenom = :prenom, telephone
= :telephone, email = :email, adresse = :adresse WHERE id_client = :id_client");
[Link](":nom", nom);
[Link](":prenom", prenom);
[Link](":telephone", telephone);
[Link](":email", email);
[Link](":adresse", adresse);
[Link](":id_client", client->getIdClient());

if (![Link]()) {
qDebug() << "Erreur lors de la mise à jour du client:" <<
[Link]().text();
QMessageBox::critical(this, QObject::tr("Erreur de mise à jour"),
QObject::tr("La mise à jour du client a échoué."));
return; // Sortir si la mise à jour échoue
}

void MainWindow::on_modifier_clicked()
{
selectedClient = getSelectedClient();
if (!selectedClient) {
QMessageBox::warning(this, QObject::tr("Aucun client sélectionné"),
QObject::tr("Veuillez sélectionner un client dans la table."));
return;
}

displayClientDetails(selectedClient);

updateClient(selectedClient);

int idClientToDelete = selectedClient->getIdClient();


QSqlQuery deleteQuery;
[Link]("DELETE FROM client WHERE id_client = :id_client");
[Link](":id_client", idClientToDelete);

if (![Link]()) {
qDebug() << "Erreur lors de la suppression du client:" <<
[Link]().text();
QMessageBox::critical(this, QObject::tr("Erreur de suppression"),
QObject::tr("La suppression du client a échoué."));
}

updateTable();
}

void MainWindow::displayClientDetails(Client *client) {


if (client) {
ui->id_client->setText(QString::number(client->getIdClient()));
ui->nom->setText(client->getNom());
ui->prenom->setText(client->getPrenom());
ui->adresse->setText(client->getAdresse()); // Adresse ici
ui->email->setText(client->getEmail()); // Email ici
ui->telephone->setText(QString::number(client->getTelephone())); //
Téléphone ici
}
}

//
m5/////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////

void MainWindow::checkClientsInDatabase() {
if (!QSqlDatabase::database().isOpen()) {
qDebug() << "Erreur : La connexion à la base de données est fermée.";
return;
} else {
qDebug() << "Connexion à la base de données est active.";
}
QSqlQuery query("SELECT id_client, nom FROM client");

if (![Link]()) {
qDebug() << "Erreur lors de l'exécution de la requête : " <<
[Link]();
qDebug() << "Erreur SQL : " << [Link]().text();
return;
}

QStandardItemModel *model = new QStandardItemModel(this);


model->setHorizontalHeaderLabels({"ID Client", "Nom"});

while ([Link]()) {
int id_client = [Link](0).toInt();
QString nom = [Link](1).toString();

QList<QStandardItem *> rowItems;


[Link](new QStandardItem(QString::number(id_client)));
[Link](new QStandardItem(nom));

model->appendRow(rowItems);
}

ui->tableView4->setModel(model);

if (model->rowCount() > 0) {
qDebug() << "Données des clients affichées avec succès.";
} else {
qDebug() << "Aucune donnée à afficher dans checkClientsInDatabase.";
}
}

void MainWindow::afficherFideliteClients() {
// Créer le modèle pour afficher les données
QStandardItemModel *model = new QStandardItemModel(this);
model->setHorizontalHeaderLabels({"ID Client", "Nom", "Total Commandes",
"Nombre Commandes", "Points de Fidélité"});

// Requête pour récupérer les clients et leurs commandes


QSqlQuery query("SELECT c.id_client, [Link], "
"COALESCE(SUM(co.prix_commande), 0) AS total_commandes, "
"COALESCE(COUNT(co.id_commande), 0) AS nombre_commandes "
"FROM client c "
"LEFT JOIN commandes co ON c.id_client = co.id_client "
"GROUP BY c.id_client, [Link]");

while ([Link]()) {
int id_client = [Link](0).toInt();
QString nom = [Link](1).toString();
double total_commandes = [Link](2).toDouble();
int nombre_commandes = [Link](3).toInt();

// Calculer les points de fidélité


const int points_par_euro = 1;
const int bonus_par_commande = 5;
int points_commande = static_cast<int>(total_commandes * points_par_euro);
int bonus_fidelite = (nombre_commandes - 1) * bonus_par_commande;
int points_fidelite = points_commande + bonus_fidelite;

// Ajouter les données au modèle


QList<QStandardItem *> rowItems;
[Link](new QStandardItem(QString::number(id_client)));
[Link](new QStandardItem(nom));
[Link](new QStandardItem(QString::number(total_commandes, 'f',
2)));
[Link](new QStandardItem(QString::number(nombre_commandes)));
[Link](new QStandardItem(QString::number(points_fidelite)));

model->appendRow(rowItems);
}

// Vérifier si le modèle contient des données


if (model->rowCount() > 0) {
ui->tableView4->setModel(model);
} else {
// Si aucune donnée n'est renvoyée, afficher tous les clients
checkClientsInDatabase();
}
}

void MainWindow::on_fideliter_clicked() {
afficherFideliteClients();
}

Vous aimerez peut-être aussi