REPUBLIQUE TUNISIENNE CORRECTION DEVOIR TAIEB AMARI
MINISTERE D’EDUCATION DE SYNTHESE 4 SI (STI)
LYCEE MARETH N°02 17/03/2023 (2H)
Nom et prénom : …………………………………………………………………………………………………
▪ Le sujet comporte 6 pages numérotées de 1/6 à 6/6
▪ Le candidat est appelé à répondre sur cette même feuille d'examen qui sera
remise à la fin de l'épreuve
Exercice 01 (2.5) :
Pour chacune des propositions ci-dessous, une seule proposition est correcte. Mettre une croix (X) dans
la case correspondante à la proposition correcte :
1. En css, pour définir les propriétés de mise en forme d'un élément HTML d'attribut class="c1", on
utilise :
☐ c1{propriétés css}
☒ .c1{propriétés css}
☐ #c1{propriétés css}
2. En css, h1{text-align: center;transition: 5s;} h1:hover{color:blue;}
☐ transforme h1 en lien hypertexte du couleur bleu
☒ ajoute une animation du couleur sur le titre h1 lorsqu'on survole la souris
☐ permet de centrer le titre h1 lorsqu'on survole la souris pendant 5 secondes
3. En HTML, onsubmit:
☐ Envoie les éléments du formulaire obligatoirement vers une autre page
☐ Envoie les éléments du formulaire obligatoirement vers la même page
☒ Envoie les éléments du formulaire vers une autre page ou vers la même page selon la valeur de
l'attribut action
4. En HTML, l'attribut action de la balise form :
☐ Est [toujours] obligatoire
☒ N'est pas [toujours] obligatoire
5. En javascript, ch.substr(a, b) :
☒ retourne une sous-chaîne commençant à la position a et de longueur b.
☐ retourne une sous-chaîne commençant à la position a jusqu'à la position b.
Page 1 sur 6
Exercice 02 (6.75 points) :
Soit l'aperçu de la page Web contenant le formulaire de connexion suivant :
Sachant que le clic sur le bouton :
▪ Login : permet d'appeler une fonction intitulée test() qui se charge de s'assurer de la validité des champs
du formulaire, puis d'envoyer les données saisies au fichier "login.php" sans les affichant dans la barre
d'adresse du navigateur :
▪ Annuler : permet d'initialiser tous les champs du formulaire
▪ Le nom d'utilisateur est obligatoire
Partie 1 : (3.75)
Compléter le code HTML suivant :
<h1>formulaire d'authentification</h1>
<form action="login.php" method="post" onsubmit="test()">
<div class="container">
<label ><b>Nom utilisateur</label>
<input type="text" placeholder="entrer nom d'utilisateur" required>
<label for="psw"><b>Password</b></label>
<input type="password" placeholder ="Enter votre mot de passe">
<button type="submit">Login</button>
<label><input type="checkbox" checked="checked"> reste active</label>
</div>
<div class="container" >
<button type="reset" class="cancelbtn">Annuler</button>
<span class="psw">Mot de passe <a>oublié?</a></span>
</div>
</form>
Page 2 sur 6
Partie 2 : (3 points)
Soit la représentation textuelle de la table User, ainsi que la description des champs :
User (IdUser, login, password, nom, prenom, tel)
Champ Description et type
IdUser Identifiant d'un user, de type chaine de 5 caractères
login Nom utilisé pour la connexion, de type chaine de 20 caractères
password Mot de passe de connexion, de type chaine de 8 caractères au minimum
Nom Nom user, de type chaine de 50 caractères
prenom Prénom user, de type chaine de 50 caractères
tel Numéro de téléphone, chaine entre 8 et 13 caractères dans le format
+216CCCCCCCC (ou chaque C designe un chiffre de 0 à 9, les deux premiers
chiffres sont dans l'intervalle 20..58 ou 90..99 et le premier chiffre différent de 0
1. Compléter la fonction test() pour contrôler la partie soulignée du champ tel (1.25 point)
function test() {
test=true;
var tel =document.getElementById("tel").value
if (tel.length < 8 || tel.length > 13 || tel.substr(0,4)!="+216" ||
isNaN(tel.substr(4,8) || tel.charAt(4)=='0'|| !(parseInt(tel.substr(4))>=20 &&
parseInt(tel.substr(4))<=58 || parseInt(tel.substr(4))>=90 &&
parseInt(tel.substr(4))<=99)
{alert('numéro tél saisie invalide ! ');
test=false;}
return test;
}
2. Donner la requête SQL pour créer la table user (1.75 point)
-- Créer la table User
Create Table User(
idUser varchar(5), login varchar(20), password varchar(50), Nom
varchar(50), prenom varchar(50), tel varchar(13),
primary key(idUser));
-- Ajouter la contrainte sur le champ password (Contient au minimum 8 caractères) alter table
alter table User add constraint Check (password like "_ _ _ _ _ _ _ _%";
Exercice 03 (10,75 points) :
Afin de mieux gérer les différents services dans un restaurant, on se propose d’utiliser la base de données
simplifiée intitulée "Gestion_Restaurant" décrite par le schéma textuel suivant :
Table (NumTable, NbrePlaces )
Serveur (IdServeur, NomPrenom )
Plat (CodePlat, NomPlat, PrixPlat )
Commande (NumTable#, IdServeur#, CodePlat#, DateCom, HeureCom, NbrePlats )
Soit la description des colonnes des tables de cette base de données :
Nom du
Description Type Taille Contraine
champ
NumTable Numéro d'une table Numérique Entier Auto-incrementé
NbrePlaces Nombre de places d’une table Numérique Entier Null interdit
Page 3 sur 6
IdServeur Identifiant d’un serveur Chaine 3
NomPrenom Nom et prénom d’un serveur Chaine 50 Null interdit
CodePlat Code d’un plat Chaine 5
NomPlat Nom d’un plat Chaine 50 Null interdit
PrixPlat Prix d’un plat exprimé en DT Numérique Entier >0
DateCom Date d’une commande Date
HeureCom Heure d’une commande Heure
NbrePlats Nombre de plats commandés Numérique Entier >0
1. Compléter le schéma relationnel ci-dessous par les cardinalités 1 ou n (l'infinie) sachant que :
◼ Règle 1 : Une table peut être utilisée dans plusieurs commandes
◼ Règle 2 : Un plat peut être demandé plusieurs fois (dans plusieurs commandes)
1
3
1
n
2 4
n 1
2. Justifier votre réponse pour les numéros 2 et 3 :
◼ : CodePlat est une clé étrangère, alors sa cardinalité dans la
table Commande doit être n
◼ : NumTable est une clé étrangère, alors sa cardinalité dans la
table Commande doit être n
Soit le contenu des tables suivant :
Page 4 sur 6
3. Donner la requête SQL pour
a. Créer la table Commande
create table Commande
NumTable int,
idServeur varchar(3),
codePlat varchar(5),
DateCom date,
HeureCom time,
NbrePlats int,
constraint primary key (NumTable, IdServeur, CodePlat, DateCom, HeureCom)
);
alter table Commande
add constraint foreign key cleEtrang1 (NumTable) references
Table(NumTable),
add constraint foreign key cleEtrang2 (IdServeur) references
Serveur(IdServeur),
add constraint foreign key cleEtrang3 (CodePlat) references Plat(CodePlat),
add constraint verfier check (NbrePlats>0);
b. On suppose que les DateCom sont insérés dans la table dans le format SQL ('yyyy-mm-dd'),
afficher les commandes (Numéro table, Nom et prénom du serveur, nom plat, date commande) du
mois d'Avril
select NumTable, NomPrenom, NomPlat, dateCom
from Commande C, Serveur S, Plat P
where C.codePlat = P.CodePlat and C.IdServeur=S.IdServeur and
Month(DateCom)=4
Page 5 sur 6
c. Afficher pour chaque table, le nom et le nombre total de plats servis le "03/01/2022" pour la
table numéro 1.
select NomTable, Sum(NbrePlats)
from Table T, Commande C
where T.NumTable=C.NumTable and DateCom="2022-01-03" and NumTable=1
group by NumTable, NomTable
d. Afficher les plats dont leurs prix est supérieur au prix du plat moyenne
select * from plats where prixPlat>(select AVG(prixPlat) from plats)
4. On veut ajouter une autre table de 5 places dans la table Table de la base, donner la requête avec trois
méthodes:
• insert into table values (5,5);
• insert into table(NumTable, NbrPlaces) values (5,5)
• insert into table (NbrPlaces) values (5)
--- dans la troisième méthode, je n'ai pas utilisé NumTable, car il
est auto-incrémenté (voir tableau de description, colonne contrainte
au début de l'exercice)
Page 6 sur 6