1. Interface utiilsateur
L'interface utilisateur est composée de contrôles pour afficher la liste des utilisateurs, ainsi que des champs de saisie et des boutons pour ajouter, modifier et supprimer des comptes. Elle utilise un DataGridView pour présenter les données et des éléments tels que des TextBox et des RadioButton pour la manipulation.
2. Classe d'entité utilisateur
/// <summary>
/// Classe entité représentant un utilisateur, alignée avec la table de la base de données.
/// </summary>
public class UtilisateurSysteme
{
public int IdUtilisateur { get; set; }
public string NomConnexion { get; set; }
public string MotDePasse { get; set; }
public int NiveauAcces { get; set; }
}
3. Service de données pour les utilisateurs
using System.Collections.Generic;
using System.Linq;
namespace CoucheDonnees
{
/// <summary>
/// Service pour gérer les opérations CRUD des utilisateurs via SqlSugar.
/// </summary>
public class ServiceGestionUtilisateurs
{
/// <summary>
/// Récupère tous les utilisateurs sauf l'administrateur par défaut.
/// </summary>
/// <returns>Liste des entités utilisateur.</returns>
public static List<UtilisateurSysteme> RecupererTousLesUtilisateurs()
{
return SqlSugarHelper.InstanceClient.Queryable<UtilisateurSysteme>()
.Where(u => !u.NomConnexion.Equals("admin", System.StringComparison.OrdinalIgnoreCase))
.ToList();
}
/// <summary>
/// Valide les identifiants de connexion contre la base de données.
/// </summary>
/// <param name="identifiants">Objet contenant le nom et le mot de passe.</param>
/// <returns>L'entité utilisateur si valide, sinon null.</returns>
public static UtilisateurSysteme AuthentifierUtilisateur(UtilisateurSysteme identifiants)
{
var resultat = SqlSugarHelper.InstanceClient.Queryable<UtilisateurSysteme>()
.Where(u => u.NomConnexion == identifiants.NomConnexion && u.MotDePasse == identifiants.MotDePasse)
.SingleOrDefault();
return resultat;
}
/// <summary>
/// Ajoute un nouvel utilisateur à la base de données.
/// </summary>
/// <param name="utilisateur">Données de l'utilisateur à ajouter.</param>
/// <returns>Vrai si l'insertion a réussi.</returns>
public static bool AjouterNouvelUtilisateur(UtilisateurSysteme utilisateur)
{
var lignesAffectees = SqlSugarHelper.InstanceClient.Insertable(utilisateur).ExecuteCommand();
return lignesAffectees == 1;
}
/// <summary>
/// Vérifie si un nom d'utilisateur existe déjà dans la base.
/// </summary>
/// <param name="nom">Le nom d'utilisateur à vérifier.</param>
/// <returns>Vrai si le nom est déjà pris.</returns>
public static bool NomUtilisateurExiste(string nom)
{
return SqlSugarHelper.InstanceClient.Queryable<UtilisateurSysteme>()
.Any(u => u.NomConnexion == nom);
}
/// <summary>
/// Met à jour les informations d'un utilisateur existant.
/// </summary>
/// <param name="utilisateur">Objet utilisateur avec les nouvelles données.</param>
/// <returns>Vrai si la mise à jour a été effectuée.</returns>
public static bool ModifierUtilisateur(UtilisateurSysteme utilisateur)
{
var lignesModifiees = SqlSugarHelper.InstanceClient.Updateable(utilisateur)
.WhereColumns(u => u.NomConnexion)
.ExecuteCommand();
return lignesModifiees == 1;
}
/// <summary>
/// Supprime un utilisateur en fonction de son nom de connexion.
/// </summary>
/// <param name="nom">Le nom de l'utilisateur à supprimer.</param>
/// <returns>Vrai si la suppression a réussi.</returns>
public static bool SupprimerUtilisateur(string nom)
{
var lignesSupprimees = SqlSugarHelper.InstanceClient.Deleteable<UtilisateurSysteme>()
.Where(u => u.NomConnexion == nom)
.ExecuteCommand();
return lignesSupprimees == 1;
}
/// <summary>
/// Recherche un utilisateur par son nom de connexion.
/// </summary>
/// <param name="nom">Le nom de connexion à rechercher.</param>
/// <returns>L'entité utilisateur ou null si non trouvée.</returns>
public static UtilisateurSysteme ObtenirUtilisateurParNom(string nom)
{
return SqlSugarHelper.InstanceClient.Queryable<UtilisateurSysteme>()
.Where(u => u.NomConnexion == nom)
.FirstOrDefault();
}
}
}
4. Logique de l'interface pour les opérations CRUD
using System;
using System.Windows.Forms;
using CoucheDonnees;
using ModelesDonnees;
namespace ApplicationGestionComptes
{
/// <summary>
/// Énumération des niveaux de rôle disponibles.
/// </summary>
public enum RoleUtilisateur
{
Operateur,
Technicien,
Responsable
}
public partial class FormulairePrincipal : Form
{
public FormulairePrincipal()
{
InitializeComponent();
grilleUtilisateurs.AutoGenerateColumns = false;
grilleUtilisateurs.ReadOnly = true;
RafraichirDonnees();
}
private void RafraichirDonnees()
{
grilleUtilisateurs.DataSource = null;
grilleUtilisateurs.DataSource = ServiceGestionUtilisateurs.RecupererTousLesUtilisateurs();
}
private void grilleUtilisateurs_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
// Logique pour afficher les numéros de ligne.
}
private void grilleUtilisateurs_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex == 3 && e.Value != null)
{
var roleIndex = Convert.ToInt32(e.Value);
e.Value = ((RoleUtilisateur)roleIndex).ToString();
}
}
private void grilleUtilisateurs_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex < 0) return;
var nomSelectionne = grilleUtilisateurs.Rows[e.RowIndex].Cells["NomConnexion"].Value.ToString();
var utilisateur = ServiceGestionUtilisateurs.ObtenirUtilisateurParNom(nomSelectionne);
if (utilisateur != null)
{
champNom.Text = utilisateur.NomConnexion;
champMotDePasse.Text = utilisateur.MotDePasse;
optionOperateur.Checked = utilisateur.NiveauAcces == 0;
optionTechnicien.Checked = utilisateur.NiveauAcces == 1;
optionResponsable.Checked = utilisateur.NiveauAcces == 2;
}
}
private void boutonAjouter_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(champNom.Text.Trim()))
{
MessageBox.Show("Veuillez saisir un nom d'utilisateur.", "Erreur");
return;
}
if (string.IsNullOrEmpty(champMotDePasse.Text.Trim()))
{
MessageBox.Show("Veuillez saisir un mot de passe.", "Erreur");
return;
}
if (ServiceGestionUtilisateurs.NomUtilisateurExiste(champNom.Text.Trim()))
{
MessageBox.Show("Ce nom d'utilisateur est déjà utilisé.", "Conflit");
return;
}
var nouvelUtilisateur = new UtilisateurSysteme
{
NomConnexion = champNom.Text.Trim(),
MotDePasse = champMotDePasse.Text.Trim(),
NiveauAcces = optionOperateur.Checked ? 0 : optionTechnicien.Checked ? 1 : 2
};
var succes = ServiceGestionUtilisateurs.AjouterNouvelUtilisateur(nouvelUtilisateur);
MessageBox.Show(succes ? "Utilisateur ajouté." : "Échec de l'ajout.", "Résultat");
if (succes) RafraichirDonnees();
}
private void boutonModifier_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(champNom.Text.Trim()))
{
MessageBox.Show("Le nom d'utilisateur est requis pour la modification.", "Erreur");
return;
}
var utilisateurExist = ServiceGestionUtilisateurs.ObtenirUtilisateurParNom(champNom.Text.Trim());
if (utilisateurExist == null)
{
MessageBox.Show("Aucun utilisateur trouvé avec ce nom.", "Erreur");
return;
}
var donneesModifiees = new UtilisateurSysteme
{
NomConnexion = champNom.Text.Trim(),
MotDePasse = champMotDePasse.Text.Trim(),
NiveauAcces = optionOperateur.Checked ? 0 : optionTechnicien.Checked ? 1 : 2
};
var succes = ServiceGestionUtilisateurs.ModifierUtilisateur(donneesModifiees);
MessageBox.Show(succes ? "Modification réussie." : "Échec de la modification.", "Résultat");
if (succes) RafraichirDonnees();
}
private void boutonSupprimer_Click(object sender, EventArgs e)
{
if (grilleUtilisateurs.SelectedRows.Count == 0)
{
MessageBox.Show("Sélectionnez un utilisateur à supprimer.", "Information");
return;
}
var nomASupprimer = grilleUtilisateurs.SelectedRows[0].Cells["NomConnexion"].Value.ToString();
var confirmation = MessageBox.Show($"Supprimer l'utilisateur '{nomASupprimer}' ?", "Confirmation", MessageBoxButtons.YesNo);
if (confirmation == DialogResult.Yes)
{
var succes = ServiceGestionUtilisateurs.SupprimerUtilisateur(nomASupprimer);
MessageBox.Show(succes ? "Suppression effectuée." : "Échec de la suppression.", "Résultat");
if (succes) RafraichirDonnees();
}
}
private void boutonEffacer_Click(object sender, EventArgs e)
{
champNom.Clear();
champMotDePasse.Clear();
optionOperateur.Checked = true;
}
}
}