Académique Documents
Professionnel Documents
Culture Documents
ⵜⴰⵎⴰⵡⴰⵙⵜⵏⵓⵙⴳⵎⵉⴰⵏⴰⵎⵓⵔ
ⴷⵓⵙⵉⵍⵖⴰⵣⵣⵓⵍⴰⵏ
المملكة المغربية
وزارة التربية الوطنية
T
والتكوين المهني
S
RAPPORT DE JURY
EXAMEN NATIONAL D’OBTENTION DU
BREVET DE TECHNICIEN SUPÉRIEUR (BTS)
S
I
Signatures
Le bulletin officiel N° : 6116 publié le 27 Safar 1434 H (eq. 10 janvier 2013) fixe les
modalités d’obtention du diplôme de technicien supérieur en développement des systèmes
d’information DSI.
L’examen national portera sur trois unités distinctes :
Nombre
Sujet Désignation Unité
exemplaire
Principale 13
Développement des Applications
U5 : DAI
Principale Informatiques
02
(Corrigé)
Principale 13
Conception des Applications Informatiques U4 : CAI
Principale
02
(Corrigé)
Reserve 01
Développement des Applications
U5 : DAI
Reserve Informatiques
01
(Corrigé)
Reserve 01
Conception des Applications Informatiques U4 : CAI
Reserve
01
(Corrigé)
Avant de commencer la réalisation des sujets, une analyse détaillée des propositions des différents centres de formation en BTS-DSI, est
nécessaire. Le tableau suivant résume les propositions reçues de la part des centres :
Indice
G. Projet UML SQL Server JAVA Dot.Net PHP C/S
Synthèse
Synthèse
N Académie Centre C C C C
S CD C S CD C S CD C S C S C S C S C
D D D D
Clés :
<Col> Synthèse : est ce que le sujet envoyé est sujet de synthèse ou non.
<Col> CD : est ce que le CD est envoyé ou non. ; <Col> S : Sujet ; <Col> C : Corrigé
Les membres du jury ont soulevé les remarques suivantes :
5. Informations et statistiques :
a. NOMBRE DE CANDIDATS :
Le nombre total des candidats qui ont passés l’examen est : 293 dont 74 sont libres,
répartis sur le territoire national selon le tableau suivant :
Une étude statistique des compositions des étudiants dans les différentes parties a
permis de soulever les valeurs suivantes :
Admis Ajourné
Centre de Formation
Scolarisé Libre Scolarisé Libre
L. Q.Abi Yaakoub Al Badissi - Al Hociema 100 % 50 % 0% 50 %
L. Q Hassan Ii - Marrakech 65 % 0% 35 % 100 %
L. Q Ibn Al Haitam - Ouarzazate 52 % 28 % 48 % 72 %
L. Q Ibn Sina - Kenitra 84 % 0% 16 % 100 %
L. Q Ibn Sina - Taounate 46 % 0% 54 % 100 %
L. Q Lalla Khadija - Dakhla 41 % 40 % 59 % 60 %
L. Q Maghribe Arabie - Oujda 56 % 36 % 44 % 64 %
L. Q Moulay Ismail - Meknès 67 % 50 % 33 % 50 %
L. Q Technique - Fès 68 % 57 % 32 % 43 %
L. Q Technique - Guelmim 73 % 30 % 27 % 70 %
L. Q Technique - Settat 73 % 0% 27 % 100 %
L. Q Lissane Eddine Ben El Khatib - Laayoune 94 % 33 % 6% 67 %
Moyenne
Centre de Formation Langue Scientifique Professionnel
Général
L. Q.Abi Yaakoub Al Badissi - Al Hociema 12,60 12,04 14,58 13,42
L. Q Hassan Ii - Marrakech 11,82 09,81 12,15 11,38
L. Q Ibn Al Haitam - Ouarzazate 11,53 08,46 11,61 10,65
L. Q Ibn Sina - Kenitra 12,62 13,20 13,25 13,11
L. Q Ibn Sina - Taounate 10,62 10,22 13,38 11,88
L. Q Lalla Khadija - Dakhla 10,90 08,29 12,23 10,78
L. Q Maghribe Arabie - Oujda 11,57 09,07 13,04 11,56
L. Q Moulay Ismail - Meknès 12,99 10,21 12,98 12,15
L. Q Technique - Fès 12,30 10,99 13,94 12,73
L. Q Technique - Guelmim 12,35 10,99 13,18 12,36
L. Q Technique - Settat 11,94 08,94 12,72 11,43
L. Q Lissane Eddine Ben El Khatib - Laayoune 13,28 11,59 14,23 13,25
Total général 11,99 10,00 12,93 11,86
On notera que pour effectuer les tâches demandées, certaines autres compétences
peuvent être mobilisées.
La répartition de la charge de l’épreuve a pris en compte le volume horaire alloué pour
chaque partie, ainsi que les compétences spécifiées dans le référentiel de formation.
Nous rappelons ici la philosophie de l’épreuve qui est, bien entendu, d’appliquer les
différentes notions vues dans le cours sur un cas d’étude pratique. Certaines questions
demandent une réflexion alors que d’autres sont des questions directes.
Tous les items du sujet ont été abordés mais le nombre global de bonnes réponses reste
faible, sans que les questions proposées soient d’une difficulté élevée.
3. Épreuve de CAI :
Une lecture diagonale des statistiques présentées dans la section précédente permet de
tirer les remarques suivantes :
L’écart type est typique ainsi que la moyenne générale de l’épreuve. Mais après analyse
des différentes parties, on remarque :
4. Épreuve de DAI :
L’écart type est grand (8.25 points/40 d’écart).
Partie 1 : EDI (VB.Net)
o Les réponses à cette partie étaient en général satisfaisantes plus de 60% ont donné
de bonnes réponses.
o Malgré que le sujet laisse la liberté à l’étudiant de choisir le mode d’accès à la base de
données, on remarque que quelques centres ont mal traité cette partie.
Partie 2 : Développement WEB
o On remarque une légère amélioration par rapport à l’année précédente.
o Les étudiants de quelques centres ont répondu uniquement à la première question.
Partie 3 : POO
o Cette partie a été traitée par la majorité des candidats, ce qui donne l’intuition que les
étudiants réservent plus de temps à cette partie.
AGL WINDEV
PLANIFICATION DU PROJET
I - 1. Établir le diagramme de GANTT. (à réaliser sur le document réponse DR1, Figure 1) (2 pts)
I - 2. Élaborer le diagramme de PERT. (à réaliser sur le document réponse DR1, Figure 2) (2 pts)
I - 3. Calculer les marges totales. (1,5 pt)
I - 4. Déterminer le chemin critique. (à tracer avec une couleur différente sur le diagramme de PERT).
(1 pt)
I - 5. Si la tâche « F » subit un retard d’une journée, quel impact aurait-il sur la réalisation et
l’avancement du projet. (1 pt)
I - 6. Quels sont les trois facteurs qui influencent, d’une façon générale, le déroulement du projet.
(0,5 pt)
II - 6. Quel est le type d’association qui relie les classes « COMPTE » et « CLIENT ». Justifier son
utilisation. (1 pt)
II - 7. Expliquer les cardinalités utilisées entre les classes « DIVISION » et « CLIENT ». (1 pt)
II - 8. Compléter le diagramme de classes répondant aux exigences du système. (à réaliser sur le
document réponse DR2, Figure 3) (3 pts)
La rémunération de salarié est déterminée lors de son embauche par une base fixée en fonction
du poste occupé. Le salaire peut ensuite évoluer. Pour chaque salarié, on conserve l’historique de ses
rémunérations.
Chaque année, tous les employés sont évalués par leur supérieur hiérarchique lors d’un
entretien individuel. Cette évaluation fait l’objet d’un rapport écrit proposant pour chaque salarié un
niveau d’évaluation (inacceptable, faible, passable, assez bon, bon, élevé ou exceptionnel), ainsi qu’une
éventuelle augmentation mensuelle (sous la forme d’un pourcentage) ayant pour motif : « mérite ».
Cependant, pour l’année 2014, l’augmentation mensuelle maximale est fixée à 5 % par employé.
Par exemple, le salarié Marouane Slimani est classé au niveau « exceptionnel» et a obtenu une
augmentation de 4,2 %. D’autres évolutions peuvent intervenir à la suite de modifications de la
législation fiscale ou de la convention collective. Dans ce cas, le motif peut être « augmentation
générale », « convention », etc.
Suite à l’entretien annuel individuel, la direction valide ou non les propositions
d’augmentations mensuelles faites par les supérieurs hiérarchiques en fonction du rapport écrit et de
la rentabilité du compte pour lequel travaille le salarié. Elle peut en outre décider d’accorder une
prime annuelle complémentaire pour les salariés les plus méritants. Les données sociales concernant
les employés de l’entreprise ISA-DEV et leurs évaluations, sont rassemblées dans une base de
données relationnelle.
Un extrait du schéma relationnel de cette base est fourni ci-dessous :
T_EVALUATION
FK_S Nom de la colonne Type condensé
Matricule int
Date_Evaluation date
Niveau varchar(50)
Augm_Prop real
Prime_Prop real
Remarque :
(Matricule,Date_Evaluation) : clé primaire de la table « T_EVALUATION ».
(Matricule,Date_Mise_A_Jour) : clé primaire de la table « T_EVOLUTION ».
Le champ « Niveau » correspond au niveau d’évaluation obtenu (faible, passable, ...).
Le champ « Augm_Prop » correspond au pourcentage d’augmentation proposé.
Le champ « Prime_Prop » correspond à la prime proposée.
Le champ « Ancien_Salaire_Ann » correspond au salaire annuel précédent.
Le champ « Pourc_Augm » correspond au pourcentage d’augmentation retenu.
Le champ « Prime » correspond à la prime retenue.
END
GO
III - 5. Écrire en SQL le code de la procédure « Proc_Liste » permettant d'obtenir la liste des
salariés ayant eu au moins trois augmentations supérieures à 2,5% et ayant pour motif :
« mérite ». Cette procédure affichera la matricule de chaque salarié et le nombre
d’augmentations supérieures à 2,5 %. (3 pts)
Create Procedure Proc_Liste AS
BEGIN
……
End
III - 6. Donner le code permettant la création du trigger « Trig_Supp » qui, à la suppression d’un
salarié, supprime aussi ses évolutions et ses évaluations. (2,5 pts)
Proposer une autre solution qui fera le même comportement que ce trigger. (Le code n’est
demandé). (1 pt)
Comptes :
01 6, rue taounate, Q.I
Kenitra
Directeur: Slimane Ragueb
Tel : **************
02 45, rue Tadhia, Quartier Nahda
Oujda
Directeur : Abdellah Raissi
Tel : **************
03 12, avenue Manama,
Taza
Directeur : Layla Bennani
Tel : **************
42020 Analyste-programmeur
F
Figure1 : Diagramme de GANTT
G
Temps
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
en jour
CLIENT COMPTE
DIVISION
1 Appartenir numClient : long 1 Posséder numCompte : int
Num : long
0..* rue : String 1..* rueCompte : String
Designation : String
ville : String villeCompte : String
1
tel : String directeur : String
PLANIFICATION DU PROJET
I - 10. Diagramme de GANTT. (voir document réponse DR1, Figure 1) (2 pts)
I - 11. Diagramme de PERT. (voir document réponse DR1, Figure 2) (2 pts)
I - 12. Calcule des marges totales. (1,5 pt)
MT(A)=1-0-1=0 MT(B)=4-1-2=1 MT(C)=2-1-1=0
MT(D)=5-3-1=1 MT(E)=7-4-2=1 MT(F)=7-2-5=0 MT(G)=8-7-1=0
ESTIMATION DE CHARGE
I - 16. Déterminer la charge de réalisation du projet. (1,5 pt)
Le projet comporte 20000 lignes de code. Donc c’est un projet simple.
C=3,2(20)1,05=74,34≈74 mois/homme
I - 17. Déterminer la durée de réalisation du projet. (1,5 pt)
D=2,5(74)0,38=12,83≈13 mois
I - 18. Déduire la taille moyenne de l’équipe qui doit travailler le projet. (1 pt)
Taille de l’équipe=74/13=5,69≈6 hommes
II - 9. Comparaison entre le test fonctionnel (boite noire) et le test structurel (boite blanche). (1,25 pt)
Le test est l’exécution ou l’évaluation d’un système ou d’un composant par des moyens
automatiques ou manuels, pour vérifier qu’il répond à ses spécifications ou identifier les différences
entre les résultats attendus et les résultats obtenus.
Le test fonctionnel est basé sur les spécifications du programme, par contre le test structurel est
basé sur l'analyse du programme et cela nécessite le code source du programme.
Division
: Système
: Personnel
Productif
1: demande d'ajout d'un compte( )
2: verfier( )
3: autorisation+fourmulaire( )
5: enregistrement( )
7: autorisation( )
9: enregistrement( )
10: information( )
12: verfier( )
LE SUIVI DES QUALIFICATIONS :
II - 13. Le type d’association qui relie les classes « COMPTE » et « CLIENT » est une composition.
Car la classe « COMPTE » n’a aucun rôle sans l’instance de la classe « CLIENT ». (1 pt) 13: autoris
II - 14. Les cardinalités utilisées entre les classes « DIVISION » et « CLIENT ». (1 pt)
14: changer et saisir les info
Un client appartient à une et 1 seule division alors qu’une division peut comporter plusieurs clients.
II - 15. Compléter le diagramme de classes répondant aux exigences du système. (3 pts)
15: enregistrement( )
16: inform
Affectation
TypePoste 0..*
avoir rang : int
type : String
dateDebut : Date
libelle : String 1 0.* dateFin : Date
1..* Obtenir
dateObtention : Date
affecter
1
Salarie
matricule : String Qualification
adresse : String 0..* code : String
dateEmbauche : Date
1..* titre : String
natureContrat : String
1.2 Créer les 3 tables de cette base (respecter toutes les contraintes). (3 pts)
Create table T_SALARIE(Matricule Int Primary Key,Nom varchar(50),
Prenom varchar(50), Date_Naissance Date,Date_Embauche Date,
Salaire_Annuel real,Type_Poste varchar(40));
4. Créer en SQL la fonction « F_Nbe_Salariés » permettant d'obtenir le nombre de salariés ayant plus
d’un nombre d’ans, donné en paramètre, dans l’année et dont l’évaluation en 2014 est « faible ».
(2,5 pts)
Un service d’accueil dans lequel, on trouve une application Desktop sous VB.NET qui permet
de consulter les émissions programmées et d’ajouter d’autres.
Un service de programmation qui valide les émissions proposées par le service d’accueil.
Une application Web facilite, aux internautes, la consultation en ligne des émissions
programmées et de donner leurs avis.
Une description des champs de MPD est donnée dans les tableaux suivants :
Champ Type Détail
Champ Type Détail CodeEm int Clé primaire auto incrémenté
codeType nchar(10) Clé primaire titreEm nchar(40)
nomType nchar(40) DateHeureEm Datetime
Votes int Valeur par défaut est zéro
codeType nchar(10) Clé étrangère
Durée nchar(20)
L’application, sous VB.Net, permet la consultation des émissions proposées selon leur titre et
permet aussi la création, la modification et la suppression d’une émission. L’IHM de cette application
est la suivante :
N.B : Vous pouvez utiliser soit le mode connecté soit le mode non connecté
Travail à Faire :
I-1. Selon le mode utilisé, citer les objets nécessaires pour accéder et manipuler cette base de
données. (0,5 pt)
I-2. Donner le code d’une procédure nommée « Connexion » permettant la connexion à la base de
données. Une gestion d’exception est obligatoire. (1,5 pt)
I-3. Donner le code de la procédure « charger_Types » permettant de remplir l’objet ComboBox
nommé « CmbType » par les noms de différents types d’émissions. (1,5 pt)
I-4. Donner le code de la procédure « Lister_Emissions » permettant de remplir l’objet
DataGridView nommé « DGV » par toutes les émissions (Code, Titre, Date et le nom de type).
(1,5 pt)
I-5. Écrire le code des procédures évènementielles associées aux boutons :
– CmdAjouter : pour enregistrer une nouvelle émission dans la base de données. Tous les
champs doivent êtres remplis. (1,5 pt)
– CmdModifier : permet d’enregistrer les modifications apportées aux données du
formulaire d’insertion et actualiser, par la suite, l’affichage de l’objet DataGridView.
(1,5 pt)
– CmdFin : permet de mettre fin à l’application après confirmation de l’utilisateur. (0,5 pt)
I-6. Donner le code de la procédure évènementielle de la zone texte « TxtRech ». (1,5 pt)
Private Sub txtRech_TextChanged(ByVal sender …., ByVal e As …) Handles txtRech.TextChanged
…………
End Sub
Cette procédure permet de rechercher une émission dont le titre commence par les caractères
saisis dans la zone de texte « TxtRech ». Le résultat de recherche s’affichera dans l’objet
DataGridView (DGV).
– Lister toutes les émissions avec une case à cocher au niveau de chacune ;
– Valider le vote via le bouton « Voter ».
II-1. Donner le code PHP de la fonction « connecter » permettant d’établir une connexion avec la
base de données dont le prototype est le suivant : (2 pts)
<?php
function connecter () {
…………………………
?>
<html>
<head>
<?php
function connecter () {………………………}
?>
</head>
<body>
<h1 align=”center”>Listing des émissions</h1>
<form method="POST" action="voter.php">
<table align=”center” border=”2” width=”60%”>
<caption>Liste de toutes les émissions</caption>
<tr>
<th>Code</th>
<th>Titre</th>
<th>Date</th>
<th>Type</th>
<th>Sélectionner</th>
</tr>
<?php
connecter();
………………………………
?>
</table>
</form>
</body></html>
Compléter le script PHP de la balise <Body> permettant de lister « Code, Titre, Date et
Type » de toutes les émissions avec une case à cocher au niveau de chacune. (Voir figure 4)
a) Définir les deux constructeurs pour initialiser les attributs de cette classe. Le constructeur
avec deux arguments initialise la date d’émission par celle du système.
Thème : xxxxxxxx
Réalisateur : xxxxxxxx
Producteur : xxxxxxxx
Connexion
- cn : Connection
- URL : String
- User : String
- Password : String
+ …()
Figure 6 : Classe « Connexion »
public class Connexion{
private String URL,User, Password ;
private Connection cn;
//---------------------------------------------------------------
public Connexion(String URL, String User, String Password) {
this.URL=URL;
this.User=User;
this.Password=Password; }
//---------------------------------------------------------------
public boolean connecter( ){
……………………………
}
//---------------------------------------------------------------
public ResulatSet lire(String requete){
…………………………… }
//---------------------------------------------------------------
public Vector<Object[]> toVector(String requete, int n)
{
…………………………… }
//---------------------------------------------------------------
public boolean miseAjour(String requete){
……………………………
}
//---------------------------------------------------------------
public boolean fermer( ){
try{
cn.close();
return true;
}Catch(SQLException ex){
return false;
} }
IV-1. Une méthode « connecter » pour se connecter à la base de données en se basant sur les
attributs déjà initialisés par le constructeur. Cette méthode retourne « true » en cas de succès
ou « false » en cas d’échec. (1 pt)
IV-2. Une méthode « lire » permet d’exécuter une requête de sélection et retourner le résultat dans
un objet « ResultSet ». En cas d’échec, elle retournera « null ». (1 pt)
IV-3. Une méthode « miseAjour » permettant d’exécuter une requête de mise à jour. Cette
méthode retourne « true » en cas de succès ou « false » en cas d’échec. (1 pt)
IV-4. Une méthode « toVector » qui reçoit une requête et un nombre de champs puis retourne un
Vector de tableaux d’objets. Chaque tableau contient les n champs d’un enregistrement.
(1 pt)
CLIENT
Dans cette partie, on veut implémenter un client qui envoie des requêtes au serveur d’application
en utilisant les sockets en mode connecté. Client
Le modèle Orienté Objet du client est donné dans la - IP : String
- Port : int
figure ci-contre : +Client(…)
+demande(requete : String) : Object
Travail à Faire :
IV-5. Définir un Socket (0,5 pt);
IV-6. Comparer les deux modes TCP et UDP (0,5 pt);
IV-7. Définir le constructeur de la classe « Client » (0,5 pt);
IV-8. Définir la méthode « demande » qui permet de :
– Créer un Socket client (0,5 pt);
– Créer les objets de communication (0,5 pt);
– Envoyer une requête au serveur (0,5 pt) ;
– Lire la réponse provenant du serveur (0,5 pt);
– Retourner cette réponse (0,5 pt).
Sub charger()
adptType = New SqlDataAdapter("select * from typeem", cn)
adptEm = New SqlDataAdapter("select * from emission", cn)
adptem1 = New SqlDataAdapter("select codeem as Code,TitreEm as
Titre,datehem as Date,nomtype as Type from emission e inner join typeem t on
e.codetype=t.codetype", cn)
adptType.Fill(dset, "typeem")
adptEm.Fill(dset, "emission")
adptem1.Fill(dset, "emission1")
EndSub
<html>
<head>
< ?php
function connecter () {…} ?> </head>
<body>
<h1 align=”center”>Listing des émissions</h1>
<form method="POST" action="voter.php">
<table align=”center” border=”2” width=”60%”>
<caption>Liste de toutes les émissions</caption>
<tr>
<th>Code</th>
<th>Titre</th>
<th>Date</th>
<th>Type</th>
<th>Selectionner</th> </tr>
<?php
connecter();
$r=mysql_query("select codeem as Code, TitreEm as Titre, dateHeureEm as
Date, nomtype as Type from emission e inner join typeem t on
e.codetype=t.codetype");
while($L=mysql_fetch_row($r))
echo
"<tr><td>$L[0]</td><td>$L[1]</td><td>$L[2]</td><td>$L[3]</td><td><input
type='checkbox' value=$L[0] name=T[]></td></tr>";
?>
</table>
<input type="submit" value=" Voter ">
</form>
</body></html>
1) Le détail de la classe Emission est le suivant (14 pts : 1pt par question):
//---------------------------------------------------------
public void affiche( ){
String r=””
for(Emission e:Liste) r+=e+”\n”;
System.out.println(r) ;
}
//-----------------------------------------------------
public Boolean saveAll(String f) {
Try{ObjectOutputStream ob=new ObjectOutputStream(FileOutputStream(f));
for(Emission e:Liste)
{ob.writeObject(e) ;
ob.flush(); }
ob.close();
return true;
}catch(Exception ex)
{
ex.printStackTrace();
return false; } }
//-------------------------------------------------------
}
}