TDM - Correction d'Examen de Fin de Formation Théorie, 2011 et 2012
....
Question 1 (6 pts) : code html et code javascript.
....
            
....
....
....
....
            
      
      
document.form1.onsubmit = verifForm ;
Examen de Fin de Formation - Session Juin 2011
Eléments de Correction
| 
Filière
  : Techniques de
  Développement  Multimédia 
Niveau :
  Technicien Spécialisé | 
Epreuve : Théorie 
Barème
   :  40 pts 
Durée     :  4h30mn | 
Dossier 1 (8 pts)
-   
Voir cours
Dossier 2 (16 pts)
1) Créer les
tables  stagiaire et notation  avec des contraintes. (4 pts)
·  
Create table satgiaire(numstagiaire  int primary key check (numstagiaire   <1000),
nom_stag  char(20),prenom_stag
char(20),adresse char(40),email  char(40),num_groupe
 int references  groupe(num_groupe
))
....
·  
Create table notation(numstagiaire  int  references satgiaire  (numstagiaire  ),
Numcontrole  int  references 
Contrôle(num_controle) ,
note int check(note  between 0 and
20),
Primary  key(numstagiaire  , num_controle))
2) Liste des Stagiaire de filière 
TDM  du  groupe  nommé A et 
du groupe nommé  B.  (2 pts)
Select  s.* from 
stagiaire s,groupe  g where
s.num_groupe=g.num_groupe
And g.nom_groupe in(’A’,’B’)
3) Le groupe (toutes les informations) ayant   le plus grand nombre  de stagiaires. (4 pts)
Select  from groupe  where num_groupe in(
Select  num_groupe
from stagiaire 
Group by num_groupe 
Having count(num_stagiaire)>=
all(select count(num_stagiaire) from stagiaire 
Group by num_groupe)
4) Liste des modules 
enseignés par le(s) formateur(s)  ‘ ABDELLAOUI
‘. (1 pt)
Select m.* from  module m,formateur  f  where
m.numformateurmatricule=f.numformateur
And nomf= ‘ ABDELLAOUI ‘
5) Liste des modules  déjà  terminés.
(1 pt)
Select m.* from module m where
masse_horaire_prevue = masse_horaire_réalisé
6) Liste des modules non terminés  et enseignés par le formateur ‘ahmadi ‘ pour
la filière ‘TDM’.
(1 pt)
Select m.* from module m ,formateur form,
filiere fil where 
m.numformateur=form. numformateur and  nomf=‘ahmadi ‘  and  masse_horaire_réalisé <
masse_horaire_prevue  and form.
Num_filiere =fil.um_filere and nom_filiere=’TDM’
7) Supprimer  tous les
groupes  dont le nombre de stagiaires ne
dépassent pas dix.  (1 pt)
Delete  from  groupe  where num_groupe in(select num_groupe from
stagiaire
                       Group
by num_groupe
                       Having
count(num_stagiaire <=10)
8) Affecter  la note 12/20
pour  le contrôle numéro : 2 du
module  nommé « programmation 3D »
pour la filière TDM  au stagiaire ayant
comme numéro 3006. (2 pts)
Update notation
Set note=12 where num_controle=2  and 
num_stagiare =3006
....
Dossier  3 (16 pts)
Première Partie : (8 pts)
Question 1 (6 pts) : code html et code javascript.
Page. html  (2 pts)
Voici une proposition de solution:
<html>
<head>
    <title>Page</title>
</head>
<body>
<form name="formMail" action="#">
    <pre>
   <label>numero  </label>: <input name="Text1" type="text" />
   <label>nom   </label>     :   <input name="Text2"
type="text"
/>
  <label> prenom    </label> :   <input name="Text3" type="text" />
   <label> choisir une filiere</label>    : 
       <input name="Radio1" type="radio" 
value='TDM'/>TDM
       <input name="Radio1" type="radio" 
value='TDI'/>TDI
       <input name="Radio1" type="radio" 
value='TRI'/>TRI
   <label>adresse</label><textarea id="TextArea1"
cols="20"
rows="2"></textarea>
rows="2"></textarea>
   <label>email</label>:<input name="email"
type="text"
/>
     <input
type="button" name="but" value="valider"
onclick="controlMail(formMail)">
/><input id="Reset1"
type="reset"
value="reset"
/>
</pre>
</form>
</body>
</html>
code javascript : Voici une proposition de solution: (4 pts)
<script language="JavaScript">
        function
controlMail(formS)
        {
var adresse=formS.email.value;
            var
aro=adresse.charAt(3);
            var
point=adresse.charAt(8);
if(aro!="@" || point!="."
||adresse.length!=12||(adresse.indexOf("@")<>adresse.lastIndexOf("@"))||(adresse.indexOf(".")<>adresse.lastIndexOf(".")))
            {
alert("adresse incorrecte");
            }
            else
            {
            alert("adresse
correcte");formMail.submit();alert("donnees envoyées") ;
            }
</script>
Question 2 :
(2 pts)
On doit ajouter dans la balise head du fichier « page.html »  la ligne suivante :
<link rel="stylesheet"
type="text/css" href="style.css">
Tous les titres doivent être balisés dans la balise
label :
Code Source du fichier externe :  style.css
input{
color:green;
font-size:14pt;}
label { color:red;
font-size:10pt;}
Deuxième Partie : (8 pts)
Question 1 :    (4 pts)
Design 
<%@ Page Language="vb"
AutoEventWireup="false"
CodeBehind="q1.aspx.vb"
Inherits="OFPPT.q1"
%>
<html >
<head runat="server">
    <title>Untitled
Page</title>
</head>
<body>
    <center>Ajout d'un
Stagiaire</center>
    <form id="form1" runat="server">
    <div>
    <pre>
numero :    <asp:TextBox ID="TextBox5" runat="server"></asp:TextBox>
nom:   <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
prenom:     <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
adresse:    <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
email: <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
numero groupe<asp:DropDownList ID="DropDownList1"
runat="server"
       DataSourceID="SqlDataSource1"
DataTextField="num_groupe"></asp:DropDownList>    
<asp:SqlDataSource ID="SqlDataSource1"
runat="server"
       ConnectionString="<%$ ConnectionStrings:OFPPTConnectionString %>" 
       SelectCommand="SELECT
[num_groupe] FROM [groupe]"></asp:SqlDataSource>
    <asp:Button ID="Button1"
runat="server"
Text="ajouter"
/
   </pre>
    </form>
</body>
</html>
CodeBehind
  Protected Sub Button1_Click(ByVal
sender As Object,
ByVal e As
EventArgs) Handles Button1.Click
Dim ConnectionString
As String = "server=.\netsdk2;database=ofppt;trusted_connection=true"
   Dim CommandText As String = "insert
into stagiaire values( " & TextBox5.Text & " ,'" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "'," & DropDownList1.SelectedValue
& ")"
   Dim
myConnection As New
SqlConnection(ConnectionString)
   Dim
myCommand As New
SqlCommand(CommandText, myConnection)
   Try
       myConnection.Open()
       myCommand.ExecuteReader()
       myConnection.Close()
   Catch
ex As Exception
       MsgBox(ex.Message)
   End Try
   Response.Write("ajout effectué")  
  End
Sub
Question-2 :
liste des stagiaires par filière (4 pts)
design
<%@ Page Language="vb"
AutoEventWireup="false"
CodeBehind="Default.aspx.vb"
Inherits="OFPPT._Default"
%>
<html>
<head runat="server">
    <title>Untitled
Page</title>
</head>
<body>
    <form id="Form2" runat="server">
   <p>
       Selection d'une filiere: 
            <asp:DropDownList id="DropDownList1" runat="server" AutoPostBack="True" 
     DataSourceID="SqlDataSource1" DataTextField="num_filiaire"></asp:DropDownList>
        
       </p>
   <asp:datagrid id="DataGrid1" runat="server" CellSpacing="1" GridLines="None" CellPadding="3" BackColor="White" ForeColor="Black" EnableViewState="False">
       <HeaderStyle font-bold="True" forecolor="white" backcolor="#4A3C8C"></HeaderStyle>
       <ItemStyle backcolor="#DEDFDE"></ItemStyle>
   </asp:datagrid>
   <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
       ConnectionString="<%$ConnectionStrings:OFPPTConnectionString%>" 
       SelectCommand="SELECT [num_filiaire] FROM [filiaire]"></asp:SqlDataSource>
    </form>
</body>
</html>
CodeBehind
Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles
DropDownList1.SelectedIndexChanged
   Dim
ConnectionString As String
= "server=.\netsdk2;database=ofppt;trusted_connection=true"
   Dim
CommandText As String
   Dim
filtre As String
= DropDownList1.SelectedValue
   CommandText = "select
s.* from stagiaire s,groupe g where g.num_groupe=s.num_groupe and
g.num_filiere=" & filtre
   Dim myConnection
As New
SqlConnection(ConnectionString)
   Dim myCommand As New SqlCommand(CommandText, myConnection)
   myConnection.Open()
   DataGrid1.DataSource =
myCommand.ExecuteReader()
   DataGrid1.DataBind()
   myConnection.Close()
    End Sub
Examen de Fin de Formation - Session Juin 2012
Eléments de Correction
| 
Filière
  : Techniques de Développement  Multimédia 
Niveau :
  Technicien Spécialisé | 
Epreuve : Théorique 
Barème
   :  20 pts 
Durée     :  4h30mn | 
Dossier 1 (4 pts)
-         
Voir cours
Dossier 2 (8 pts)
1.   
Créer les tables Clients, Commandes et DetailsCommande en précisant
les clés primaires et étrangères. (2
pts)
CREATE TABLE Clients(
      CodeClt int
PRIMARY KEY IDENTITY(1,1) NOT NULL,
      Société
varchar(50) ,
      Adresse varchar(50) ,
      CodePostal int ,
      Ville varchar(50) ,
      Tel varchar(50)
 )
CREATE TABLE Commandes(
      NumCmd int PRIMARY
KEY NOT NULL,
CodeClt int NOT NULL
FOREIGN KEY REFERENCES Clients(CodeClt) ON DELETE CASCADE ON UPDATE CASCADE ,
      DateCmd
datetime ,
      DateLivraison datetime ,
      Destinataire varchar(50) ,
      AdresseLivraison
varchar(50) 
)
CREATE TABLE DetailsCommande(
NumCmd int NOT NULL
FOREIGN KEY REFERENCES Commandes(NumCmd) ON DELETE CASCADE ON UPDATE CASCADE ,
      RefProd
varchar(50) NOT NULL FOREIGN KEY REFERENCES  
      Produits(RefProd)
ON DELETE CASCADE ON UPDATE CASCADE,
      Quantité int NULL,
      PRIMARY KEY (NumCmd, RefProd)
)
2.   
Mettre en place les contraintes d’intégrité
suivantes :
a.  
Le code postal doit être un numéro de 5 chiffres. (0,5
pt)
....
ALTER TABLE Clients ADD
CONSTRAINT ck_codePos check(CodePostal like'[0-9][0-9][0-9][0-9][0-9]')
b.  
La date de commande doit être antérieure à la date de
livraison. (0,25 pt)
ALTER TABLE Commandes
ADD CONSTRAINT ck_Date 
check(DateCmd <
DateLivraison)
c.  
La référence de produit doit comporter au moins 3
caractères et doit commencer par 2 caractères alphabétiques et non numériques. (0,75
pt)
ALTER TABLE Produits ADD CONSTRAINT ck_refProd 
check(RefProd like'[a-zA-Z][a-zA-Z].%')
3.    Lister les
commandes entre les deux dates 20/05/2011 et 19/05/2013. (0,25 pt)
Select *
from Commandes where DateCmd between '20/05/2011'
and '19/05/2013'
4.   
Lister les produits de la catégorie «
Informatique » (triés par RefProd). 
(0,5 pt)
Select
Produits.* from Produits, Categories Where Produits.CodeCat =
Categories.CodeCat and NomCat = 'Informatique' order by RefProd
5.   
Donner le nombre de commandes par produit.  (0,5 pt)
Select RefProd, count(NumCmd) as 'Nombre de commandes' From
DetailsCommande group by RefProd
6.    Lister les
clients qui n’ont pas fait une commande depuis 5 ans. (1 pt)
Select Clients.* from Clients Where CodeClt not in (Select
CodeClt from Commandes Where datediff(year, DateCmd, getdate())<5) 
7.    Supprimer les
produits appartenant à la catégorie « Sport ».  (0,5
pt)
Delete from Produits Where Produits.CodeCat = (Select
Categories.CodeCat from Categories Where NomCat = 'Sport')
8.    Modifier la
structure de la table Clients afin d'ajouter un champ email.
(0,5 pt)
ALTER TABLE Clients ADD email
varchar(50)
9.    Afficher le
montant total de chaque commande. (1,25 pts)
Select NumCmd, sum(P.PrixUnitaire * Dc.Quantité) As 'Montant
Total' From DetailsCommande Dc, Produits P where Dc.RefProd=P.RefProd group by
NumCmd
Dossier  3 (8 pts)
Partie 1 :
(4 pts)
1- Ecrire le code HTML
correspondant au formulaire. (2 pts)
<html>
<head>
 
<title>Demande d'emploi</title>
  <meta
http-equiv="Content-Type" content="text/html; utf-8" />
</head>
<body>
  <form name="form1"
enctype="multipart/form-data" method="post">
    <h2>Demande
d'emploi</h2>
    <div>DevelopInfo  Sarl.</div>
    <p>
      <label for="elt1">Nom
complet <span>*</span></label> <br />
<input name="elt1"
type="text" size="25" />
    </p>
    <p>
<label for="elt2">Adresse
Email <span>*</span></label> <br />
<input name="elt2"
type="text" maxlength="255" /> 
    </p>
    <p>
<label for="elt3">Téléphone<span>*</span></label>
<br />
<input name="elt3"
type="text" value="05" size="2"
maxlength="2" />
-
<input name="elt3_1"
type="text" size="8" maxlength="8" />
    </p> 
    <p>
<label for="elt4">Profil
de compétences<span>*</span></label> <br
/>
<select name="elt4"> 
<option value=""
selected="selected"></option>
<option>Infographiste</option>
<option>Ingénieur
Logiciel</option>
<option>Administrateur
Système</option>
<option>Développeur
Web</option>
</select>
    </p>
    <p>
<label
for="elt5">Etes-vous prêt à déménager ?</label>    <br />
<input
name="elt5" type="radio" value="Oui"
checked="checked" /> Oui <br />
<input name="elt5"
type="radio" value="Non" /> Non <br />
    </p>
    <p>
<label
for="elt6">Salaire souhaité</label> <br />
<input name="elt6"
type="text" size="10" />
    </p>
    <p>
<label for="elt7">Quand
pouvez-vous commencer? <span>*</span></label>
<br />
<input name="elt7"
type="text" size="12" maxlength="10" />
    </p>
    <p>
<label
for="elt8">Joindre une copie de votre CV</label> <br
/>
<input name="elt8"
type="file" size="12" /> <br />
<small>Documents Word ou PDF
seulement</small>
    </p>
    <p>
<label
for="elt9">Questions et commentaires</label> <br />
<textarea
name="elt9" rows="10" cols="50">Entrer vos
questions et vos  
commentaires...</textarea>
    </p>
    <p>
<input name="btnEnvoyer" type="submit"
value="Envoyer" />
<input name="btnEffacer"
type="reset" value="Effacer" />
    </p>
  </form> 
</body>
</html>
2-
Ecrire le code CSS pour la présentation afin de mettre :
a.   
La page à une couleur
de fond grise, avec le nom de police « Lucida Grande » et une
taille de 95% ; (0,75 pts)
body{
            background-color
: #ccc ;
            font-family:
"Lucida Grande" ;
            font-size: 95%;
}
b.   
Le formulaire au
centre de la page web, à une couleur de fond blanche, avec une largeur de 50%
de la page, une marge intérieure de 20px et une bordure en gris clair de taille
1px ; (0,5 pt)
form{
            margin:
0 auto;
            background-color
: #fff ;
            width:
50%;
            padding:
20px;
            border:
2px solid #ccc;
}
c.   
Les étiquettes
(labels) en gras ; (0,25 pt)
label{
            font-weight:
bold;
      }
d.   
Les étoiles (*) en rouge ; (0,25 pt)
span{
            color: #ff0000;
      }
e.   
Une bordure qui
sépare le titre et les éléments du formulaire. (0,25 pt)
form
div{
            border-bottom: 1px dotted #000;
      }
Partie 2 :
(4 pts)
1- Créer une fonction
JavaScript qui contrôle la saisie : (2,75 pt)
function
verifForm()
{
  var nom = document.form1.elt1.value;
  var mail = document.form1.elt2.value;
  var tel1 = document.form1.elt3.value;
  var tel2 = document.form1.elt3_1.value;
  var profil = document.form1.elt4.value;
  var salaire =
document.form1.elt6.value;
 
var dateDebut =
document.form1.elt7.value;
  var msg = "";
  //Question
a
 
if(nom == "" || mail == "" || tel1 == ""
|| tel2 == "" || profil == "" ||     
 
dateDebut == "")
msg +=
"Les champs marqués en (*) sont obligatoires !\n" ;
 
//Question b
 
if(mail.indexOf("@") == -1)
      msg
+= "L'adresse E-mail est invalide\n" ;
 
//Question c - il n’est pas demandé de vérifier la validité de la date
 
if (dateDebut.length > 0)
  { 
      var tabDate = dateDebut.split('/');
      var annee = parseInt(tabDate2]) ;
var mois =
parseInt(tabDate1]) ;
var jour =
parseInt(tabDate0]) ;
      var
dateAujourdhui = new Date();
      var
dateTest = new Date(annee, mois-1, jour);
      if
(tabDate.length != 3 || (jour <= 0 || jour > 31) || (mois <= 0 ||  
      mois
> 12) || dateTest.toString() == 'Invalid Date' ) 
            msg += "Le format de la date
est incorrect (JJ/MM/AAAA) \n" ;
      if(dateTest
<= dateAujourdhui)
            msg+="La date doit être postérieure
à la date d'aujourd'hui\n";
 
}
 
//Question d
 
if(salaire != "" && (isNaN(salaire) || (salaire
<999 || salaire >99999)))
      msg
+= "Le salaire doit être un nombre compris entre 999 et 99999\n";
 
//Question e - On peut utiliser les RegExp
 
if(isNaN(tel1) ||
isNaN(tel2) || tel1.length != 2 || tel2.length != 8 ||  
  tel1.charAt(0) != 0 || (tel1.charAt(1) != 5
&&  tel1.charAt(1) != 6))
      msg
+= "Le numero de téléphone doit respecter le format marocain \n";
 
if(msg != "")
  {
      alert(msg)
      return false ;
  }
 
return true ;
}
2-  La deuxième fonction JavaScript. (0,75
pt)
function resetTxt()
{
      var txt = document.form1.elt9;
      if(txt.value == 'Entrer vos questions
et vos commentaires...')
      {
            txt.value = '';  
      }
      else if (txt.value == '') {
            this.value =
'Entrer vos questions et vos commentaires...'; 
      }
}
3- Appeler
les deux fonctions (des 2 questions précédentes 1 et 2) dans votre script en
utilisant les événements appropriés. (0,5 pt)       
document.form1.onsubmit = verifForm ;
      document.form1.elt9.onfocus =
resetTxt ;
      document.form1.elt9.onblur =
resetTxt ;
....
 



 
 
 
 
 
 
 
 
 
 
 
Enregistrer un commentaire