Cours Programmation Desktop
Cours Programmation Desktop
INFOTMATIQUE
DE GESTION
Programmation
DESKTOP
Langages C#
PREAMBULE
C# (C sharp) est un langage de programmation orienté objet commercialisé par Microsoft
depuis 2002, conçu par son ingénieur Anders Hejlsberg. Ce langage est proche du Java et
est utilisé pour développer des applications windows (DESKTOP), mobiles, web, des
services web ainsi que des jeux vidéos.
Microsoft visual studio est l’environnement de développement utilisé pour programmer
en C#.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
2
PLAN DU COURS
Chapitre I : Introduction
Chapitre II : La programmation orientée Objet
Chapitre III : Programmation DESKTOP
Chapitre IV : Les rapports
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
3
CHAPITRE I. INTRODUCTION
D’après le classement récent des langages de programmation les plus utilisés, C# se place
à la cinquième position après Python, C, Java et C++. Comprenez par-là que c’est un
langage de programmation intéressant vu son classement.
Sa syntaxe n’est pas différente de celle du Java.
Toutefois, celui qui aura une version inférieure telle que MS Visual studio 2008,
celle supérieure, pourra l’utiliser.
I.2. SYNTAXE
Un projet C# a la même syntaxe que java. Cela peut se constater en créant notre
premier projet.
Lancer Microsoft visual studio/Fichier/Nouveau/Projet/Choix du langage
(C#)/Sélectionner application console/Nommer le projet/Choisir l’emplacement/Clic sur
Ok.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
4
Interprétation : Par défaut, 5 bibliothèques ont été générées. Elles commencent par le
mot clé « using ».
Le namespace prend le nom de notre projet. Nos codes sont mis dans une méthode
principale « Main ».
[Link] : pour afficher à l’écran
[Link] : pour bloquer jusqu’à ce qu’à ce qu’une touche de caractère ou
fonction soit enfoncée pour sortir.
Après avoir créé le projet, nous affichons une salutation et exécutons ce
programme.
Voici le résultat :
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
5
Résultat :
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
6
}
else{
Instruction ;
}
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
7
/*Action*/
break ;
case /*Argument2*/ :
/*Action*/
break ;
default:
/*Action*/
}
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
8
switch (mois)
{
case 1:
[Link]("Janvier");
[Link]();
break; case 2:
[Link]("Fevrier");
[Link]();
break; case 3:
[Link]("Mars");
[Link](); break;
case 4:
[Link]("Avril");
[Link](); break;
case 5:
[Link]("Mai");
[Link](); break;
case 6:
[Link]("Juin");
[Link](); break;
case 7:
[Link]("Juillet");
[Link]();
break;
case 8:
[Link]("Aout");
[Link](); break;
case 9:
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
9
[Link]("Septembre");
[Link]();
break; case 10:
[Link]("Octobre");
[Link]();
break; case 11:
[Link]("Novembre");
[Link]();
break; case 12:
[Link]("Decembre");
[Link]();
break;
- La boucle while
La boucle while est une structure de contrôle permettant d’exécuter un ensemble
d’instructions de façon répétée sur base d’une condition booléenne.
Pour utiliser une boucle, il faut faire la déclaration. La condition suit pour permettre à
la boucle de s’arrêter. Cela nous évite des boucles infinies.
La boucle while va dans le sens de tant que….
While(/* condition*/)
{
Instruction à répéter ;
}
Expérimentons notre boucle avec le code suivant :
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
10
Résultat :
Interprétation : Ces codes affichent Bonjour L3, 10 fois. Nous avons initialisé notre boucle
à 1. Et avons mis la condition « <=10 » dans notre boucle.
- Boucle for
Nous avons vu comment faire une boucle avec while, maintenant nous allons voir
comment réaliser une boucle avec for. Cette boucle autorise l’exécution des instructions
à l’intérieur du bloc en répétition un certain nombre de fois précis. Il prend tous ses
attributs dans sa condition pour agir. Avec while, nous avons déclaré et initialisé avant
la boucle. Avec for, tout sera mis dans sa condition.
Nous illustrons la boucle for pour obtenir le résultat comme celui précédent :
Résultat : La salutation sera affichée 10 fois comme ce fut le cas avec while.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
11
L’instruction do… while crée une boucle qui exécute une instruction jusqu’à ce qu’une
condition de test ne soit plus vérifiée. Le bloc d’instruction défini dans la boucle est
exécuté au moins une seule fois.
Différence entre la boucle while et do… while Les
deux blocs sont semblables. La différence réside au niveau ou :
- Boucle imbriquée
Est dite boucle imbriquée, une boucle à l’intérieur d’une autre boucle. On peut
faire une boucle imbriquée avec différents types, c.à.d. dans un for, on peut y mettre
un while et vice-versa.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
12
Interprétation : Nous avons créé un programme où nous avons la variable nom qui est un
tableau contenant deux informations.
Lors de l’affichage, nous parcourons notre tableau pour afficher le premier élément.
Résultat :
Nous pouvons afficher tous les éléments du tableau en utilisant une boucle.
Expérimentons-le :
Résultat :
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
13
Interprétation : Nous mettons une boucle for, dans laquelle nous initialisons notre
variable i à 0, le parcours est inférieur à la taille du tableau. Dans l’affichage, nous
mettons i qui contient la taille du tableau (Length).
N.B : il y a une possibilité de déclarer un tableau tout en limitant sa taille. Dans ce cas,
on utilise le mot clé new permettant d’instancier.
Ex : string[] postnom = new string[5];
I.6. METHODE
Une méthode est une fonction faisant partie d’une classe. Elle permet
d’effectuer des traitements sur (ou avec) les données membres. Elle est définie par son
nom suivie des parenthèses. Pour son utilisation, il suffit de l’appeler à l’intérieur d’une
autre méthode suivie des parenthèses et point-virgule pour terminer.
Nous l’illustrons par l’exemple précédent.
Interprétation : Nous créons une méthode de type void dans laquelle nous mettons nos
instructions.
Cette méthode « CalculAge() » est appelée dans la méthode principale « Main ».
Le type void signifie qu’il s’agit d’une méthode retournant un vide.
On a utilisé le mot clé static parce que la méthode ne s’applique qu’à la classe elle même
et pas à ses instances.
N.B : Si la méthode retourne une valeur, cela signifie qu’elle a pris un type, par
conséquent elle devient une fonction. Celle-ci est une méthode qui retourne une valeur.
Dans ce cas, à la fin on met le mot clé return.
Elle peut être de type int, double, float, string et…
Exemple : Nous utilisons l’exercice précédent avec une fonction.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
14
Interprétation : Dans ces codes, nous avons changé le type de notre méthode, de void à
int. A la fin de l’instruction, nous avons retourné la variable ag.
Dans la méthode principale « Main », nous avons appelé notre fonction en la concaténant
dans des chaines des caractères. Ce qui a produit le même résultat.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
15
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
16
En voyant les codes ci-dessus, on se rend compte qu’il s’agit de la classe Program.
Lorsqu’on crée une classe, il y a présence du mot clé class suivi du nom de la classe. Ex
: class Program
Le nom de la classe est coloré différemment du mot clé class.
N.B : La classe Program n’est pas à confondre avec d’autres classes par le fait que celleci
est exécutable.
II.2. LA CLASSE
Une classe est une représentation abstraite d’un objet. Si on a des classes à créer,
procéder de la manière suivante :
Projet/Ajouter une classe/Nommer/Clic sur le bouton ajouter
N.B : A voir cette classe, on constate qu’elle est différente de la classe par défaut
Program
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
17
A. Notions de portée
On parle d’une portée pour symboliser l’accessibilité qu’aura un attribut par rapport aux
autres classes. Une portée peut être publique, privée ou protégée.
Nos attributs de la classe Cours sont tous privatisés. Cela se constate par le signe (-) qui
est devant l’attribut.
Notre méthode listeCours est publique. C’est la raison de la présence du signe (+).
- : privé
+ : public
# : protégé
La portée a un même sens que la visibilité. Elle détermine qui peut avoir accès à une
classe, une méthode ou une variable. Nos classes sont publiques. Cela signifie qu’on peut
y accéder étant dans l’une ou autre classe.
Une portée privée signifie que la méthode ou l’attribut n’est accessible que si on est à
l’intérieur de la classe. On peut aussi protéger une méthode en utilisant le mot-clé
protected.
Mettons nos attributs de la classe Cours dans nos codes. Pour ce faire, un attribut est
précédé de sa portée et du type.
Ex : private int nombre ;
Voici comment cela se présente :
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
18
Nous devons maintenant créer un objet. Pour ce faire, nous allons avoir un constructeur.
Un constructeur est une méthode spéciale utilisée pour initialiser les objets. Il peut être
utilisé pour définir des variables initiales des attributs d’un objet.
Il est conseillé de créer un constructeur par défaut, c’est-à-dire un constructeur sans
paramètre. Son rôle sera de permettre l’instanciation. Celui-ci prend le nom de sa classe
et il est public.
Nous pouvons instancier un objet Cours en allant dans la classe (Program) contenant la
méthode Main.
L’instanciation est faite en prenant le nom de la classe suivi du nom d’objet, signe
d’égalité puis new nom de la classe.
Exemple : Cours cours = new Cours();
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
19
Ce qui signifie que pour accéder à la classe Cours, on doit utiliser le nom de l’objet cours.
Dans ce, si nous procédons de la sorte, l’instruction se trouvant dans le constructeur par
défaut va être exécutée. Néanmoins, pour bloquer l’affichage, nous ajoutons la méthode
ReadKey().
Ce message vient de la classe Cours. Comme nous l’avons instancié dans la classe
Program, il est accessible.
Jusqu’à ce niveau, nos attributs ne sont pas accessibles à l’extérieur de sa classe. Etant
donné que nos attributs sont privés, ils ne peuvent pas être accessibles à l’extérieur de
la classe. On parle de l’encapsulation.
L’encapsulation désigne le regroupement de données avec un ensemble des routines qui
permettent la lecture et la manipulation. Ce principe est souvent accompagné du
masquage. Il empêche l’accès aux données par un autre moyen que les services proposés.
B. Accesseurs et mutateurs
Les accesseurs sont les moyens permettant d’agir sur nos objets en lecture, alors que
les mutateurs permettent d’agir sur nos variables en écriture. On peut donc afficher les
variables de nos objets grâce aux accesseurs (getters) et les modifier grâce aux
mutateurs (setters). Nos méthodes accesseurs et mutateurs doivent donc être publics
afin d’être accessible depuis les autres classes. On peut donc retenir qu’un mutateur
sera de type void car il ne renvoie rien. Alors qu’un accesseur renvoie une variable et
sera donc de type de celle-ci.
Pour ce faire, nous cliquons droit sur un attribut, puis
refactoriser/Encapsuler/Ok/Appliquer
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
20
using System;
using
[Link];
using [Link]; using
[Link];
using [Link];
namespace
Premier_Projet_L3_ISESOD
{
class Cours
{
private string codeCours;
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
21
Nous allons devoir accéder aux données à travers nos accesseurs. Nous revenons
dans la classe où il y a la méthode Main.
Interprétation : Nous avons créée 3 objets dont cours1, cours2, cours3. Ces objets sont
lus en les renvoyant à la ligne suivante après chaque objet. Un objet contient le code du
cours, la désignation et le crédit.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
22
Si nous rentrons dans notre diagramme de classe, nous constaterons qu’il y a une
fonction appelée listeCours de type void dans le troisième compartiment. Créons une
méthode listeCours dans la classe Cours. En tenant compte de la modélisation, il y a le
signe (+) devant la méthode, ce qui veut dire qu’elle est publique. Elle sera accessible
dans d’autres classes.
Partant de cela, nous allons récupérer nos objets crées dans la classe principale
pour les mettre dans une méthode listeCours de la classe Cours.
Classe Cours
Classe Program
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
23
C. Héritage
1. Généralités
L’héritage est un concept fondamental qui permet de réutiliser le code de la
classe mère appelée en d’autres termes classe de base. Il symbolise la relation est Un.
Exemple : Un Agent est une personne, Une pomme est un fruit, Un chou est un légume.
Alors que l'objet membre représente la relation: A-UN
Exemple : Une voiture a un moteur
L'héritage est mis en œuvre par la construction de classes dérivées. Le graphe
de l'héritage est comme suit :
Personne
Fruit Légume
2. Hiérarchisation
• La classe dont on dérive est dite CLASSE DE BASE.
Personne, Fruit et Légume sont donc des classes de base (classe supérieure) ;
• Les classes obtenues par dérivation sont dites CLASSE DERIVEE
Etudiant est une classe dérivée (sous-classes) de la classe de base Personne
Chat est une classe dérivée de la classe de base Animal
Voiture est une sous classe de la classe de base Véhicule
• Vers le haut (en analyse O.O.) => on regroupe dans une classe ce qui est commun
à plusieurs classes. Dans la classe Personne, on regroupe les caractéristiques
communes aux Agents, Etudiants et Directeur.
• Vers le bas (lors de la réutilisabilité) => la classe de base étant définie, on peut la
reprendre intégralement pour construire la classe dérivée. La classe Personne
étant définie, on peut la reprendre intégralement, pour construire la classe Agent .
3. Classe dérivée
Une classe dérivée modélise un cas particulier de la classe de base, et est
enrichie d'informations supplémentaires.
La classe dérivée possède les propriétés suivantes :
Contient les données membres de la classe de base,
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
24
Personne
Numéro d’ordre
Nom
Post-nom
Sexe
Classe de base
Héritage
Attributs de Personne
Agent
using System;
using
[Link];
using [Link]; using
[Link];
using [Link];
namespace Premier_Projet_L3_ISESOD
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
25
{
class Personne
{
private int idpers;
public Personne()
{
}
}
}
Ci-dessus, la classe de base Personne avec un constructeur par défaut. Ses
attributs sont protégés.
Dans la classe dérivée, nous allons devoir faire hériter de la classe de base avec
l’instruction « : (double point) ». Ce qui nous permettra d’avoir accès aux attributs de
sa classe. A la suite, nous allons utiliser le mot clé « this. » pour accéder aux attributs
de la classe de base, tout comme de la classe dérivée.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
26
Classe Agent
Interprétation : Dans cette classe dérivée, nous avons déclaré un attribut privé fonction
qui est propre à cette classe. Un double point ( : ) nous a permis d’avoir accès aux
attributs de la classe Personne, tout comme on peut avoir accès à ses méthodes.
Un constructeur surchargé a été créé, dans lequel nous avons affecté les attributs avec
le mot clé this.
D. Le polymorphisme
Le polymorphisme est un mécanisme de la programmation qui permet de modifier
le comportement d’une sous classe (classé dérivée ou classe fille) par rapport à la
classe de base (classe mère).
Le polymorphisme veut dire simplement qu’une classe peut prendre plusieurs
formes et c’est d’autant plus vrai avec les classes qui héritent d’une classe de base.
Prenons l’exemple de la classe de base Personne avec ses sous classes. La classe
de base offre une méthode Liste des personnes « listePersonne() ». Cette liste affiche
toutes les personnes.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
27
Classe Personne
using System; using
[Link]; using
[Link]; using [Link];
using [Link];
namespace Premier_Projet_L3_ISESOD
{
class Personne
{
private int idpers;
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
28
{
}
//Constructeur surchargé
public Personne(int id, string no, string post, string sex)
{
[Link] = id;
[Link] = no;
[Link] = post;
[Link] = sex;
}
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
29
Interprétation : Dans la classe dérivée, nous créons la méthode liste qui appelle la
méthode listePersonne de la classe de base tout en ajoutant un titre. Résultat
Résumé :
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
30
Une classe permet de définir des objets. Ceux-ci ont des attributs (variables
d'instance) et des méthodes (méthodes d'instance + accesseurs).
Les objets permettent d'encapsuler du code et des données.
Les constructeurs d'une classe doivent porter le même nom que la classe et n'ont
pas de type de retour.
L'ordre des paramètres passés dans le constructeur doit être respecté.
Il est recommandé de déclarer ses variables d'instance private, pour les protéger
d'une mauvaise utilisation par le programmeur.
On crée des accesseurs et mutateurs (méthodes getters et setters) pour permettre
une modification sûre des variables d'instance.
Dans une classe, on accède aux variables de celle-ci grâce au mot clé this.
On instancie un nouvel objet grâce au mot clé new.
On peut avoir autant des classes dans un projet.
Si les classes partagent les attributs, on peut faire l’héritage, ce qui va donner
naissance aux notions de classe de base ou classe parente et sous-classe ou classe
fille.
Le double point ( : ) est utilisé pour hériter une classe de base dans une sousclasse.
Le polymorphisme permet de modifier le comportement d’une sous-classe par
rapport à la classe de base.
On peut redéfinir et ajouter une signature dans une méthode où la portée public
ne reste que public, le protected peut rester ainsi ou devenir public.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
31
III.1. LE FORMULAIRE
Un formulaire est une fenêtre crée dans le but de saisir une série de données
structurées. Il est composé des contrôles graphiques. Un contrôle graphique est un
composant logiciel paramétrable destiné à être affiché sur le formulaire.
Si on doit utiliser un formulaire, lors de la création du projet, on doit sélectionner
C#/Application windows Form/Nommer le projet.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
32
Nous pouvons mettre des contrôles ou outils sur notre formulaire en allant dans l’option
boite à outils.
Le label : C’est une étiquette. Il va jouer le rôle d’affichage d’un texte statique.
Toute, il est possible de le manipuler aussi.
Le TextBox : C’est une zone de saisie.
Le bouton : Pour lancer une commande.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
33
Nous avons deux labels (premier nombre et deuxième nombre) et un bouton. Pour
changer le texte de nos outils, nous sélectionnons l’outil et allons dans text de notre
propriété.
Créons un événement sur le bouton calculer afin qu’en cliquant sur le bouton calculer,
qu’on obtienne la sommation de ces deux nombres.
Avant de créer un événement, nous allons renommer nos outils. Pour ce faire, nous allons
dans propriétés/name après avoir sélectionné l’outil à renommer.
Après avoir, renommé, nous faisons un double clic sur le bouton calculer pour obtenir
l’événement click.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
34
Nous déclarons la variable somme de type int sur laquelle, nous affectons nos deux
variables (n1 et n2), puis nous affichons le résultat dans une boite.
Interprétation : Par défaut, nos variables sont de type string, raison pour laquelle nous
devons les convertir aussi.
[Link] nous permet d’afficher le résultat dans une boîte. La somme doit aussi
être convertie en string pour qu’elle s’affiche dans le MessageBox car prenant par défaut
le type string.
Voici le résultat après exécution et un clic sur le bouton Calculer.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
35
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
36
Nous créons notre base de données avec du code sql que nous allons exécuter et la
sélectionner pour y créer deux tables à savoir : Etudiant et Paiement.
Nous créons maintenant nos deux tables tout en sachant que la table étudiant cède une
clé étrangère à la table paiement selon deux règles de gestion suivantes :
RG1 : Un étudiant peut effectuer un ou plusieurs paiements
RG2 : Un paiement est effectué par un et un seul étudiant.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
37
Pour l’exécution, nous allons sélectionner les codes créant nos deux tables et
cliquer sur le bouton exécuter.
Nous mettons en relation les deux tables par une contrainte Foreign key. Le type
text est varchar dans la base de données et on doit préciser la taille.
Comme nous venons de créer notre base de données avec ses deux tables,
connectons-la à une application.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
38
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
39
using [Link];
Nous créons deux méthodes à savoir : Une pour la connexion (ouverture de la
connexion) à la Base de données et l’autre pour la déconnexion (fermeture connexion).
Voici la classe Connexion
using System;
using [Link];
using [Link]; using
[Link];
using [Link];
//Importation de la bibliothèque nous permettant de nous connecter à sql/Server
using [Link];
//Importation de la bibliothèque pouvant gérer les classes des données using
[Link];
namespace Application_Windows_L3
{
class ConnexionBD
{
//Instanciation de deux objets. cnx qui va nous permettre de gérer notre
connexion
SqlConnection cnx = new SqlConnection();
//cmd pour l'exécution des commandes
SqlCommand cmd = new SqlCommand();
}
//Méthode pour connecter la BD
public void Connecter()
{
//Nous testons si la connexion est fermée
if ([Link] == [Link])
{
//Prise en compte de la chaine de connexion en spécifaint le nom du serveur et
celui de la base de données
[Link] = @"Data Source=JUSTINKABANZA\KABANZA;Initial
Catalog=BD_Gestion_paiement_ISESOD_L3;Integrated Security=True";
//Ouverture de la connexion
[Link]();
}
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
40
Classe Etudiant
using System;
using [Link];
using [Link]; using
[Link]; using
[Link];
using [Link];
namespace Application_Windows_L3
{
class Etudiant
{
private string numMat;
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
41
//Constructeur paramétré
public Etudiant(string mat, string no, string postn, string pren, string sex)
{
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
42
[Link] = mat;
[Link] = no;
[Link] = postn;
[Link] = pren;
[Link] = sex;
}
Après avoir fini avec la classe Etudiant, nous allons au formulaire pour y mettre des
contrôles. Néanmoins, le premier formulaire sera notre menu. Nous y mettons les options
puis nous allons créer un autre formulaire du nom « frmEtudiant ». Sur le menu, nous y
mettons le contrôle menustrip.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
43
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
44
Par les codes ci-dessus, nous venons d’ajouter les items sur notre liste déroulante sexe.
Créons un deuxième événement. Il s’agit de clic sur le bouton enregistrer. On y fait juste
un double clic pour y mettre les instructions.
Nous lançons notre application pour tester si le bouton enregistrer est devenu
fonctionnel après avoir mis les instructions ci-dessus.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
45
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
46
Interprétation : Nous avons mis nos variables sur lesquelles nous affectons un vide. Ce
qui va faire le nettoyage après enregistrement. Puis nous avons fait [Link]() pour
placer le curseur sur la zone de saisie des matricules.
Comme nous avons déjà enregistré, chargeons nos informations dans le DataGridView
(tableau) pour nous permettre de voir ce qui est la table Etudiant.
Vu que le chargement d’informations dans notre DataGridView pourra être utilisé dans le
formulaire paiement aussi, pour éviter de nous répéter, nous créons une méthode dans
la classe ConnexionBD. Cette dernière sera paramétrée afin de la standardiser.
Pour charger les données dans un datagridview, nous aurons besoin d’utiliser deux objets
de deux classes différentes à savoir :
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
47
Cette méthode, doit être appelée dans l’événement load pour qu’au chargement du
formulaire, les informations s’affichent.
Créons l’événement CellClick sur le datagrid afin qu’à un clic sur la colonne
du datagrid, les zones de saisie se complètent automatiquement. Pour ce faire, nous
sélectionnons le datagridview/Propriétés/Evénement/double clic sur CellClick.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
48
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
49
Comme nous avons déjà les données sur le datagrid, nous pouvons maintenant
programmer le bouton Modifier. Etant donné que nous avons une méthode dans la classe
ConnexionBD nommée executerRequete, nous l’utilisons dans la classe Etudiant en
créant une méthode appelée Modifier.
Après avoir créé la méthode, nous créons un événement clic sur le bouton modifier sur
lequel nous allons relier les contrôles du formulaire avec les paramètres de notre
constructeur.
Code de la méthode Modifier de la classe Etudiant
Nous créons la méthode supprimer dans la classe Etudiant. Avant de le faire, nous créons
un constructeur avec un seul argument pour gérer la suppression d’autant plus que seule
la clé primaire nous permettra de supprimer.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
50
Nous venons de terminer avec notre formulaire Etudiant qui est en interconnexion avec
la table Etudiant de la base de données BD_Gestion_paiement_ISESOD_L3 où nous avons
programmé les boutons Enregistrer, Modifier et supprimer. Pour ce qui est de la
recherche, nous nous sommes concentrés sur l’événement cellclick de notre
datagridview. Toutefois, cela n’exclut pas la fonctionnalité recherche.
Nous procédons de la même façon pour programmer le formulaire Paiement. Ce qui fait
que nous allons devoir créer la classe paiement avec ses attributs et créer différentes
méthodes possibles.
Allons-y.
Nous devons ajouter une méthode de chargement du ComboBox dans la classe
ConnexionBD étant donné que nous avons un champ qui va récupérer la clé étrangère.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
51
Classe Paiement
using System;
using [Link];
using [Link]; using
[Link]; using
[Link];
using [Link];
namespace Application_Windows_L3
{
class Paiement
{
private int numPaie;
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
52
//Constructeur surchargé
public Paiement(int num, double mont, string mot, DateTime datp, string numMa)
{
[Link] = num;
[Link] = mont;
[Link] = mot;
[Link] = datp;
[Link] = numMa;
}
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
53
[Link] = num;
}
//Méthode Enregistrer
public void Enregistrer() {
try
{
ConnexionBD con = new ConnexionBD();
[Link]("SET DATEFORMAT DMY INSERT INTO Paiement
(numPaie,montant,motif,datepaie,numMat) values ("+ numPaie +",'"+ montant +"','"+
motif +"','"+ datePaie +"','"+ numMat +"') ");
[Link]("Enregistrement effectué avec succès");
}
catch (Exception ex)
{
[Link]([Link]);
}
}
//Méthode Modifier
public void Modifier()
{
try
{
ConnexionBD con = new ConnexionBD();
//SET DATEFROMAT DMY permet de spécifier le format de la date française
[Link]("SET DATEFORMAT DMY UPDATE Paiement SET montant='" +
montant + "',motif='" + motif + "',datepaie='" + datePaie + "',numMat='" + numMat + "'
Where numPaie=" + numPaie + " ");
[Link]("Modification reussie");
}
catch (Exception ex)
{
[Link]([Link]);
}
}
//Méthode Supprimer
public void Supprimer()
{
try
{
ConnexionBD con = new ConnexionBD();
[Link]("DELETE FROM Paiement Where numPaie=" + numPaie
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
54
+ " ");
[Link]("Suppression effectuée");
}
catch (Exception ex)
{
[Link]([Link]);
}
}
}
}
namespace Application_Windows_L3
{
public partial class frmPaiement : UserControl
{
public frmPaiement()
{
InitializeComponent();
}
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
55
Initialiser();
}
//Chargement datagrid
private void ChargerDGVPaiemnt()
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
56
{
//Instanciation de la classe ConnexionBD
ConnexionBD con = new ConnexionBD();
//Appel de la méthode pour charger DGV
[Link]("SELECT *from Paiement", dataGridView1);
}
}
//Evénement cellclick du datagrid pour afficher les informations de la cellule
cliquée
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
[Link] = [Link][0].[Link]();
[Link] = [Link][1].[Link]();
[Link] = [Link][2].[Link](); [Link]
= [Link][3].[Link](); [Link] =
[Link][4].[Link]();
}
}
}
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
57
Formulaire paiement
Résumé : Avec deux tables, nous avons créé deux formulaires y correspondant. Mais
également trois classes dont Etudiant, Paiement et ConnexionBD. Les événements ont
été créés sur nos formulaires et les codes sont commentés au point qu’il n’y aura pas de
confusion là-dessus. Ce qui fait à ce que la base de données joue pleinement son rôle de
stockage de données.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
58
En lançant l’installation de crystal report, faites toujours des clics sur suivant
en acceptant les conditions d’utilisation.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
59
Après l’installation de cet outil, nous lançons MS visual studio 2012 pour voir si
CrystalReportViewer est intégré dans la boite à outils.
Une fois notre outil installé, nous créons un rapport qui va afficher la situation
globale de paiement. Nous rappelons avoir eu à créer une base de données avec deux
tables dont Etudiant et Paiement. Notre rapport aura les informations venant de ces
deux tables. Ce qui va faire à ce que nous puissions créer une vue dans MS SQL/Server
que nous allons nommer SituationGlobale.
Après avoir créé une requête, nous ajoutons un contrôle utilisateur (formulaire)
dans le projet créé précédemment qui va nous permettre de charger la situation
globale.
Nous lançons notre projet/Clic droit sur projet/Ajouter un contrôle
utilisateur/Nommer/OK.
Nous faisons un double clic sur le formulaire créé pour avoir l’événement load
à utiliser dans le chargement de ce dernier.
Nous revenons à notre formulaire frmSituationGlobale pour y mettre le contrôle
CrystalReportViewer ce qui va ressembler comme ceci afin de jouer le rôle de lecteur.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
60
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
61
Pour mettre un titre à notre rapport, nous utilisons l’outil « Objet texte ». On a
la possibilité de spécifier la police avec la propriété Font. Si nous faisons un aperçu de
notre rapport, on aura :
En voyant ce rapport, on constate que nous n’avons pas encore mis des lignes et des
colonnes pour en faire un tableau. Pour ce faire, nous utilisons l’outils « Objet ligne ».
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
62
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
63
Ce message est justifié par le fait que nous avions installé notre outil
CrystalReportViewer venant de l’extérieur. Il est recommandé de revoir les
configurations dans fichier xml de notre projet. Il s’agit du fichier AppConfig.
Etant donné que nous venons de créer la situation globale de paiement, faisons en
sorte qu’après avoir enregistré un paiement qu’on nous affiche le reçu qui peut être
imprimé. Nous rappelons que le reçu est un rapport paramétré d’autant plus qu’il sera
personnalisé.
Nous commençons par créer une vue dans la base de données qui va charger le numéro nom,
le postnom, prénom, montant payé, date de paiement et le motif.
Après l’avoir créé, nous l’exécutons puis créons un CrystalReport comme nous l’avons fait avec
la situation globale de paiement.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
64
Nous mettons un cadre arrondi qui va contenir nos données. Etant donné que c’est un
reçu, créons un champ qui va transcrire les chiffres en lettre pour avoir une zone de
montant payé en lettre.
Nous déroulons Explorateur des champs à gauche/Cliquons droit sur champ de
formule/Nous nommons/OK.
Après avoir cliqué sur Ok, un éditeur de formule s’ouvre et on met :
Enregistrer la formule puis, récupérer le champ crée comme formule et déposer sur le
crystal report.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
65
Les codes qui chargent le reçu sur le formulaire paiement. Une nouveauté est qu’au
lieu de charger les données dans un DataSet, nous avons utilisé un DataTable pour
dynamiser les données. Il doit être aussi déclaré dans la classe ConnexionDB.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
66
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
67
I.1. Formulaire
Pour créer un projet en [Link], on lance MS Visual
Studio/Fichier/Nouveau/Projet/Sélectionner visual Basic/ Sélectionner le type
d’application/Ok.
Les projets conçus avec C# peuvent l’être avec [Link]. Seules la syntaxe change
mais cela n’affecte à rien le résultat. D’ailleurs on a du mal à distinguer un produit fini
fait avec c# avec celui du [Link].
En c# on déclare comme en java en faisant type suivi du nom de la variable et
en fin un point-virgule, tandis que qu’en [Link], on fait Dim suivi du nom de variable
as type de la variable sans point-virgule. Dans les codes on en sait partant de la syntaxe
mais également de l’extension des fichiers. En C#, c’est « .cs » alors qu’en [Link] c’est
« .vb ».
C# : string idpers;
[Link]: Dim idpers As string
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
68
Créons un événement sur le bouton calculer comme nous l’avons fait dans c# en
faisant un double clic sur le bouton calculer.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
69
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
70
Retenez qu’ici, nous avons fait la programmation procédurale. A travers elle, nous
avons mis nos codes uniquement derrière le formulaire. Voici les codes derrière le
formulaire Etudiant
'Nous importons nos bibliothèques pour manipuler des
'données avec SQL/SERVER
Imports [Link]
Imports [Link]
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
71
'Evénement enregistré
Private Sub btnEnregistrer_Click(sender As Object, e As EventArgs) Handles
[Link]
Try
Connecter() [Link] = cnx [Link] = "Insert
into Etudiant values ('" & [Link] & "','" & [Link] & "','" & [Link] & "','" &
[Link] & "','" & [Link] & "')" [Link]()
[Link]("Enregistrement effectué avec succès")
'On actualise les données dans le datagridview après enregistrement
ChargerDgv()
'On nettoie les contrôles
initialiser()
Deconnecter()
Catch ex As Exception
[Link]([Link])
End Try
End Sub
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
72
initialiser()
Deconnecter()
Catch ex As Exception
[Link]([Link])
End Try
End Sub
'Evénement supprimer
Private Sub btnSupprimer_Click(sender As Object, e As EventArgs) Handles
[Link]
Try
Connecter()
[Link] = cnx
[Link] = "DELETE FROM Etudiant where numat='" & [Link] &
"'"
[Link]()
[Link]("suppression effectuée")
'On actualise les données dans le datagridview après suppression
ChargerDgv()
'On nettoie les contrôles
initialiser()
Deconnecter()
Catch ex As Exception
[Link]([Link])
End Try
End Sub
'Evénement cellclick
Private Sub dataGridView1_CellClick(sender As Object, e As
DataGridViewCellEventArgs) Handles [Link]
[Link] = [Link](0).[Link]
[Link] = [Link](1).[Link]
[Link] = [Link](2).[Link]
[Link] = [Link](3).[Link]
[Link] = [Link](4).[Link] End
Sub
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
73
Connecter()
Dim da As New SqlDataAdapter("select * from Etudiant ", cnx)
Dim dt As New DataTable
[Link](dt)
[Link] = dt
Deconnecter()
End Sub
'Evénement load
Private Sub frmEtudiant_Load(sender As Object, e As EventArgs) Handles [Link]
'En chargeant le formulaire, on charge le sexe
sexe()
'On charge les données dans le datagridview
ChargerDgv()
End Sub End
Class
Résumé : Le point commun entre C# et [Link] est l’environnement de développement.
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259
74
Table of Contents
PLAN DU COURS ........................................................................................................................................................... 2
1ère partie : C# ...................................................................................................................... Erreur ! Signet non défini.
CHAPITRE I. INTRODUCTION ........................................................................................................................................ 2
I.1. OUTILS DE DEVELOPPEMENT............................................................................................................................. 3
I.2. SYNTAXE ............................................................................................................................................................. 3
I.3. LES CONDITIONS ................................................................................................................................................ 6
I.4. LES TABLEAUX .................................................................................................................................................. 12
I.5. ENTREE AU CLAVIER ........................................................................................................................................... 5
I.6. METHODE ......................................................................................................................................................... 13
CHAPITRE II. LA PROGRAMMATION ORIENTEE OBJET ............................................................................................. 15
II.1. OBJECTIF DE LA PROGRAMMATION ORIENTEE OBJET ....................................................................... 15
II.2. LA CLASSE .................................................................................................................................................... 16
A. Notions de portée ......................................................................................................................................... 17
B. Accesseurs et mutateurs ............................................................................................................................... 19
C. Héritage .......................................................................................................................................................... 23
D. Le polymorphisme ........................................................................................................................................ 26
CHAPITRE III. LA PROGRAMMATION EVENEMENTIELLE ........................................................................................... 31
III.1. LE FORMULAIRE ............................................................................................................................................. 31
III.2. INTERACTION AVEC LA BASE DE DONNEES................................................................................................... 35
1. CREATION DE LA BASE DE DONNEES ................................................................................................................ 36
CHAPITRE IV. LES RAPPORTS ..................................................................................................................................... 58
2ème partie : [Link] .................................................................................................................................................... 67
Chapitre I : La programmation événementielle ........................................................................................................ 67
I.1. Formulaire ........................................................................................................................................................ 67
Email: michelsadaka9@[Link]
Téléphone : +243 99 18 15 259