Exercice Visual Basic : Classe Stagiaire
Rédigé par GC Team, Publié le 06 Janvier 2012, Mise à jour le Samedi, 17 Décembre 2022 15:13![](/images/thumb/146/default.png)
Participez au vote ☆☆☆☆☆★★★★★
Entrer le code pour réaliser l'interface suivante:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 |
' Indiactions : ' On dispose d'un tableau T de stagiaires de (Nmax +1) stagiares maximum : ' Les indices de ce tableau vont de 0 à Nmax. Il n'est pas nécessaire de remplir ' tout le tableau. N (si >-1) nous indique l'indice du dernier stagiaire introduit dans le tableau. ' pos indique l'indice du stagiaire affiché sur la feuille Const Nmax As Integer = 3 Dim N As Integer, pos As Integer Dim T(Nmax) As Stagiaire ' Sub RecopierZonesDansEnreg(ByVal i As Byte) ' Recopie les données saisies (sur la feuille ) dans le stagiaire ' ayant l'indice i With T(i) .Ins = Val(TxtNumIns.Text) .Nom = Trim(TxtNom.Text) ' Trim élimine les espaces inutiles .Prenom = Trim(TxtPrénom.Text) .DateNaissance = TxtDateNais.Text .adresse = TxtAdr.Text .ville = Trim(CbVille.Text) .masculin = OptMasculin.Checked If Optetat1.Checked Then .etat = 1 ElseIf Optetat2.Checked Then .etat = 2 ElseIf Optetat3.Checked Then .etat = 3 ElseIf Optetat4.Checked Then .etat = 4 End If ' Nous disposons de trois langues : ReDim .langues(2) If ChecLang0.Checked Then .langues(0) = 1 Else .langues(0) = 0 If ChecLang1.Checked Then .langues(1) = 1 Else .langues(1) = 0 If ChecLang2.Checked Then .langues(2) = 1 Else .langues(2) = 0 .Note1 = TxtNote1.Text .Note2 = TxtNote2.Text .Note3 = TxtNote3.Text ' Je calcule ici la moyenne du stagiaire .Moy = (.Note1 + .Note2 + .Note3) / 3 End With End Sub Sub RecopierEnregDansZones(ByVal i As Byte) ' Montre les informations concernant le stagiaire d'indice i sur la feuille With T(i) TxtNumIns.Text = .Ins TxtNom.Text = .Nom TxtPrénom.Text = .Prenom TxtDateNais.Text = .DateNaissance TxtAdr.Text = .adresse CbVille.Text = .ville If .masculin Then OptMasculin.Checked = True Else OptFeminin.Checked = True End If Select Case .etat Case 1 ' Si le champs etat = 1 ==> activer Célibataire ' qui est la première option de l'état civil Optetat1.Checked = True Case 2 ' Si le champs etat = 2 ==> activer Marié(e) Optetat2.Checked = True Case 3 ' Si le champs etat = 3 ==> activer Divorcé(e) Optetat3.Checked = True Case 4 ' Si le champs etat = 4 ==> activer Veuf(ve) Optetat4.Checked = True End Select ChecLang0.Checked = (.langues(0) = 1) ChecLang1.Checked = (.langues(1) = 1) ChecLang2.Checked = (.langues(2) = 1) TxtNote1.Text = Format(.Note1, "0.00") TxtNote2.Text = Format(.Note2, "0.00") TxtNote3.Text = Format(.Note3, "0.00") TxtMoy.Text = Format((.Note1 + .Note2 + .Note3) / 3, "0.00") End With End Sub Private Sub Nouveau_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Nouveau.Click If N >= Nmax Then MsgBox("Vous n'avez plus le droit d'ajouter un stagiaire", MsgBoxStyle.Exclamation, "Attention") Exit Sub End If pos = N + 1 TxtNumIns.Text = "" TxtNom.Text = "" TxtPrénom.Text = "" TxtDateNais.Text = "" TxtAdr.Text = "" CbVille.Text = "Rabat" OptMasculin.Checked = True Optetat1.Checked = True ChecLang0.Checked = True ChecLang1.Checked = True ChecLang2.Checked = False TxtNote1.Text = "" TxtNote2.Text = "" TxtNote3.Text = "" TxtMoy.Text = "" TxtNumIns.Focus() End Sub Private Sub Form2_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing If MessageBox.Show("Voulez-vous fermer l'application?", "Fin de l'application", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.No Then e.Cancel = True End Sub Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load N = -1 pos = 0 End Sub Private Sub Premier_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Premier.Click If pos > 0 Then pos = 0 RecopierEnregDansZones(0) Else MsgBox("C'est le premier") End If End Sub Private Sub Dernier_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Dernier.Click If pos < N Then pos = N RecopierEnregDansZones(N) Else MsgBox("C'est le dernier") End If End Sub Private Sub Enregistrer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Enregistrer.Click ' Cette procédure permet : ' - La modification lorsqu'on affiche un enregistrement existant ' - L'ajout si appel de la procédure Nouveau_Click ' Le seul cas où pos est égal à (N+1) est lorsqu'on a appelé ' la procédure Nouveau_Click. Ainsi, si j'enregistre dans ce cas, le N devra être incrémenté ' Et dans tous les cas (ajout ou modification), on enregistre à la position pos du tableau des stagiaires If pos = N + 1 Then N += 1 End If RecopierZonesDansEnreg(pos) End Sub Private Sub Quitter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Quitter.Click Me.Close() End Sub Private Sub Precedent_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Precedent.Click If pos > 0 Then pos -= 1 RecopierEnregDansZones(pos) Else MsgBox("C'est le premier") End If End Sub Private Sub Rechercher_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Rechercher.Click Dim NumInscription As Integer, Trouve As Boolean, i As Byte NumInscription = InputBox("Numéro d'inscription à rechercher", "Recherche") Trouve = False i = 0 While Not (Trouve) And (i <= N) If T(i).Ins = NumInscription Then Trouve = True pos = i RecopierEnregDansZones(i) Else i += 1 End If End While If Not Trouve Then MsgBox("Numéro introuvable") End Sub Private Sub Suivant_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Suivant.Click If pos < N Then pos += 1 RecopierEnregDansZones(pos) Else MsgBox("C'est le dernier") End If End Sub Private Sub Supprimer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Supprimer.Click Dim i As Byte ' S'il y'a au plus un stagiaire, signaler qu'il n'y en a plus : N = -1, et faire appel à Nouveau_Click pour ' rénitialiser les zones If (N <= 0) Then N = -1 : Nouveau_Click(sender, e) : Exit Sub ' On veut supprimer le stagiaire d'indice pos : décalage des cellules ' Trace : ' T(pos)= T(pos+1) ' T(pos+1)= T(pos+2) ' ........ ' T(N-1)= T(N) For i = pos To N - 1 T(i) = T(i + 1) Next i 'Après suppression, diminuer la valeur de N N -= 1 ' Si on supprime le stagiaire qui se trouvait à la dernière position, on ' voudra afficher celui qui le précédait : celui-ci se trouve à la position N (la dernière) ' sinon ' le stagiaire qui suivait celui supprimé, va être affiché (T(pos)=T(pos+1)) ' Fin Si If pos > N Then pos = N ' Affichage du stagiaire d'indice pos RecopierEnregDansZones(pos) End Sub Private Sub Calculer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Calculer.Click ' Calcul et affichage de la moyenne TxtMoy.Text = Format((CSng(TxtNote1.Text) + CSng(TxtNote2.Text) + CSng(TxtNote3.Text)) / 3, "0.00") End Sub Private Sub Resultat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Resultat.Click Dim i As Integer, P As Boolean, St As Stagiaire, Msg As String Do P = False For i = 0 To N - 1 If T(i).Moy < T(i + 1).Moy Then St = T(i) T(i) = T(i + 1) T(i + 1) = St P = True End If Next Loop Until P = False T(0).Clas = 1 For i = 1 To N If T(i - 1).Moy T(i).Moy Then T(i).Clas = i + 1 Else T(i).Clas = T(i - 1).Clas End If Next Msg = "N°" & vbTab & "Nom" & vbTab & "Prenom" & vbTab & "Date de naissance" & vbTab & "Note1" & vbTab & "Note2" & vbTab & "Note3" & vbTab & "Moyenne" & vbTab & "Classement" & vbCrLf For i = 0 To N With T(i) Msg &= .Ins & vbTab & .Nom & vbTab & .Prenom & vbTab & .DateNaissance & vbTab & .Note1 & vbTab & .Note2 & vbTab & .Note3 & vbTab & .Moy & vbTab & .Clas & vbCrLf End With Next 'MsgBox(Msg) txt1.Text = Msg End Sub End Class ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Module Module1 Structure Stagiaire Dim Ins As Integer Dim Nom As String Dim Prenom As String Dim DateNaissance As Date Dim adresse, ville As String Dim masculin As Boolean Dim Note1, Note2, Note3, Moy As Single Dim etat As Byte Dim langues() As Byte Dim Clas As Byte End Structure End Module |