Jan.01

TP19 : Gestion de parking en utilisant la technologie LINQ.

Objectif

LINQ (Requête intégrée au langage) est un composant du Framework .NET de Microsoft qui ajoute des capacités d’interrogation sur des données aux langages .NET en utilisant une syntaxe proche de celle de SQL.

Dans ce TP, vous allez développer une application de gestion de parkings en utilisant la technologie LINQ.

Problème

On veut développer une application de gestion des parkings qui se trouvent dans les différentes villes. Un parking est caractérisé par son nom, son adresse, sa capacité (le nombre de places) et le nombre de places qui sont libres à une instante donnée. Le paiement d’un parking se fait selon le type d’abonnement choisi par le client ; exemple de type : « Mensuel », « Trimestre », « Semestre », « Annuel ». L’application utilise la base de données suivante :

NB : Les champs marqués en gras et soulignés représentent les clés primaires des tables, les champs marqués par # représentent les clés étrangères.

Client (idClt, nomClt, prenClt, adresseClt)

Parking (idPark, nomPark, adPark, ville, nbPlace, nbPlaceLibre)

TypeAbonnement (idTypeAb, nomTypeAb, prix)

Abonnement (idAb, dateAb, #idPark, #idTypeAb,#idClt)

Entree (idEntre, dateEntree, #idAb)

Questions

Partie serveur :

  1. Créer la Base Park.
  2. Dans la base Park, crée les tables : Client, Parking, TypeAbonnement, Abonnement et Entree.
  3. Remplir les tables.

Partie client :

  1. Crée un menu qui facilite l’utilisation de l’application.
  2. Créer un formulaire de gestion de la table Abonnement avec :
    1. Des boutons pour l’ajout, la modification et la suppression
    2. L’identifiant du parking, du type d’abonnement et du client sont choisis dans listes déroulante
    3. Inclure des boutons de navigation : premier, suivant, précédent et dernier.
  3. Réaliser un formulaire qui affiche dans une grille, la liste des abonnements concernant un type d’abonnement sélectionné à partir d’un Combobox et une ville saisie dans une zone de texte. La liste affiche le nom du parking, le nom du client, et la date de l’abonnement.
  4. Réaliser un formulaire qui affiche dans une grille, la liste des parkings (nom et adresse) qui ont reçu plus que 10 entrées pendant une date donnée.

Correction

La classe Menu

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TP20_GestionPark_LINQ
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void abonnementToolStripMenuItem_Click(object sender, EventArgs e)
        {
            GestionAb a = new GestionAb();
            a.Show();
        }

        private void listeDabonnementsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            listeAbonnements la = new listeAbonnements();
            la.Show();
        }

        private void listeDeParkingsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            listeParkings lp = new listeParkings();
            lp.Show();
        }
    }
}

La classe Gestion Abonnement

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TP20_GestionPark_LINQ
{
    public partial class GestionAb : Form
    {
        DataParkDataContext dp = new DataParkDataContext();
        BindingSource bs = new BindingSource();
        public GestionAb()
        {
            InitializeComponent();
        }

        private void GestionAb_Load(object sender, EventArgs e)
        {
            
            remplirDataGrid();
            remplirComboClient();
            remplirComboParking();
            remplirComboTypeAb();
            //remplirChamps();
        }

        public void remplirChamps()
        {
            bs.DataSource = dp.Abonnements;
            GestionAbonnement a = (GestionAbonnement)bs.Current;
            txtId.Text = a.idAb.ToString();
            datePickAb.Text = a.dateAb.Date.ToString();
            comboPk.SelectedValue = a.idPark;
            comboTypeAb.SelectedValue = a.idTypeAb;
            comboClt.SelectedValue = a.idClt;
        }

        public void remplirDataGrid()
        {
            var listeAb = (from ab in dp.Abonnements
                           join clt in dp.Clients on ab.idClt equals clt.idClt
                           join typeAb in dp.TypeAbonnements on ab.idTypeAb equals typeAb.idTypeAb
                           join pk in dp.Parkings on ab.idPark equals pk.idPark
                           select new
                           {
                               ab.idAb,
                               ab.dateAb,
                               pk.nomPark,
                               typeAb.nomTypeAb,
                               nomClient = clt.nomClt + " " + clt.prenClt
                           });

            dv.DataSource = listeAb;
        }

        public void remplirComboClient()
        {
            var listeClt = (from clt in dp.Clients
                            select new
                            {
                                clt.idClt,
                                nomClient = clt.nomClt + " " + clt.prenClt
                            }).ToList();

            comboClt.DataSource = listeClt;
            comboClt.DisplayMember = "nomClient";
            comboClt.ValueMember = "idClt";
            comboClt.SelectedIndex = -1;
        }

        public void remplirComboParking()
        {
            var listePk = (from pk in dp.Parkings
                           select new
                           {
                               pk.idPark,
                               pk.nomPark
                           }).ToList();

            comboPk.DataSource = listePk;
            comboPk.DisplayMember = "nomPark";
            comboPk.ValueMember = "idPark";
            comboPk.SelectedIndex = -1;
        }

        public void remplirComboTypeAb()
        {
            var listeTypeAb = (from typeAb in dp.TypeAbonnements
                               select new
                               {
                                   typeAb.idTypeAb,
                                   typeAb.nomTypeAb,
                               }).ToList();

            comboTypeAb.DataSource = listeTypeAb;
            comboTypeAb.DisplayMember = "nomTypeAb";
            comboTypeAb.ValueMember = "idTypeAb";
            comboTypeAb.SelectedIndex = -1;
        }

        private void add_Click(object sender, EventArgs e)
        {
            GestionAbonnement ab = new GestionAbonnement();
            ab.idAb = int.Parse(txtId.Text);
            ab.dateAb = datePickAb.Value;
            ab.idPark = (int) comboPk.SelectedValue;
            ab.idTypeAb = (int) comboTypeAb.SelectedValue;
            ab.idClt = (int)comboClt.SelectedValue;
            dp.Abonnements.InsertOnSubmit(ab);
            dp.SubmitChanges();
            remplirDataGrid();
            viderChamps();
        }
        public void viderChamps()
        {
            txtId.Text = "";
            datePickAb.Text = DateTime.Now.Date.ToString();
            comboClt.SelectedIndex = -1;
            comboPk.SelectedIndex = -1;
            comboTypeAb.SelectedIndex = -1;
        }

        private void edit_Click(object sender, EventArgs e)
        {
            var abonne = (from ab in dp.Abonnements
                              where ab.idAb == int.Parse(txtId.Text)
                              select ab).SingleOrDefault();

            abonne.dateAb = datePickAb.Value;
            abonne.idPark = (int)comboPk.SelectedValue;
            abonne.idTypeAb = (int)comboTypeAb.SelectedValue;
            abonne.idClt = (int)comboClt.SelectedValue;
            dp.SubmitChanges();
            remplirDataGrid();
            viderChamps();
        }

        private void First_Click(object sender, EventArgs e)
        {
            bs.MoveFirst();
            remplirChamps();
        }

        private void Previous_Click(object sender, EventArgs e)
        {
            bs.MovePrevious();
            remplirChamps();
        }

        private void Next_Click(object sender, EventArgs e)
        {
            bs.MoveNext();
            remplirChamps();
        }

        private void Last_Click(object sender, EventArgs e)
        {
            bs.MoveLast();
            remplirChamps();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            viderChamps();
        }

        private void drop_Click(object sender, EventArgs e)
        {
            var abonne = (from ab in dp.Abonnements
                         where ab.idAb == int.Parse(txtId.Text)
                         select ab).SingleOrDefault();
            dp.Abonnements.DeleteOnSubmit(abonne);
            dp.SubmitChanges();
            remplirDataGrid();
            viderChamps();
        }
    }
}

La classe Liste des abonnements

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TP20_GestionPark_LINQ
{
    public partial class listeAbonnements : Form
    {
        DataParkDataContext dp = new DataParkDataContext();

        public listeAbonnements()
        {
            InitializeComponent();
        }

        private void listeAbonnements_Load(object sender, EventArgs e)
        {

        }


        private void listeAbonnements_Load_1(object sender, EventArgs e)
        {
             
            var listeAb = (from ab in dp.Abonnements
                           join clt in dp.Clients on ab.idClt equals clt.idClt
                           join pk in dp.Parkings on ab.idPark equals pk.idPark
                           select new
                           {
                               pk.nomPark,
                               ab.dateAb,
                               nomClient = clt.nomClt + " " + clt.prenClt
                           });

            dv.DataSource = listeAb;
            remplirComboTypeAb();  
        }
        public void remplirComboTypeAb()
        {
            var listeTypeAb = (from typeAb in dp.TypeAbonnements
                               select new
                               {
                                   typeAb.idTypeAb,
                                   typeAb.nomTypeAb,
                               }).ToList();

            comboTypeAb.DataSource = listeTypeAb;
            comboTypeAb.DisplayMember = "nomTypeAb";
            comboTypeAb.ValueMember = "idTypeAb";
            comboTypeAb.SelectedIndex = -1;
        }
        private void drop_Click(object sender, EventArgs e)
        {
            var listeAb = (from ab in dp.Abonnements
                           join clt in dp.Clients on ab.idClt equals clt.idClt
                           join typeAb in dp.TypeAbonnements on ab.idTypeAb equals typeAb.idTypeAb
                           join pk in dp.Parkings on ab.idPark equals pk.idPark
                           where pk.adressePark==txtVille.Text 
                           && typeAb.nomTypeAb==comboTypeAb.Text 
                           select new
                           {
                               ab.idAb,
                               ab.dateAb,
                               pk.nomPark,
                               typeAb.nomTypeAb,
                               nomClient = clt.nomClt + " " + clt.prenClt
                           });

            dv.DataSource = listeAb;
        }
    }
}

La classe Liste des parkings

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TP20_GestionPark_LINQ
{
    public partial class listeParkings : Form
    {
        DataParkDataContext dp = new DataParkDataContext();

        public listeParkings()
        {
            InitializeComponent();
        }

        private void drop_Click(object sender, EventArgs e)
        {
            var listePk = (from ab in dp.Abonnements
                           join etr in dp.Entrees on ab.idAb equals etr.idAb
                           join pk in dp.Parkings on ab.idPark equals pk.idPark
                           where etr.dateEntree == datePickAb.Value
                           group pk by new { pk.nomPark, pk.adressePark } into p
                           where p.Count() > 10   
                           select new
                           {
                               nom = p.Key.nomPark,
                               ville = p.Key.adressePark
                           });

            dv.DataSource = listePk;
        }
    }
}
TP
Share this Story:
  • facebook
  • twitter
  • gplus

About Hassan EL Bahi

Assistant Professor at Cadi ayyad University.

Leave a comment

Comment