Vous êtes sur la page 1sur 6

Lycée Secondaire RUE DE PACHA, TUNIS NIVEAU : 4ème Info STI

********************* Corrigé DEVOIR DE SYNTHESE N°2


****************
Date : 16 Mars 2023
*********
PROFESSEUR : Ben Maaouia Mohamed Coefficient : 3 Durée : 2H

PARTIE 1 : BASES DE DONNEES (10,75 pts)


Soit la représentation graphique suivante de la base de Données « Gestion_aeroport »

1- D’après la représentation graphique ci-dessus, en déduire la représentation textuelle (1 point)

Constructeur(Code_Const, Nom_Const, Pays_Const)


Avion(Num_Av, Code_Const#, Nom_Av, Capacite, Localisation)
Vol(Num_Vol, Num_Pil#, Num_Av#, Ville_Depart, Ville_Arrivee, Date_Vol)
Pilote(Num_Pil, Civilite, Nom_Pil, Prénom_Pil, Ville_Pil, Salaire_Pil, Num_tel)
Ci-dessous les requêtes de création des 4 tables de la base :
Constructeur Avion
Create Table Constructeur ( Create Table Avion (
Code_Const Varchar(10) Primary Key, Num_Av int(8) Primary Key,
Nom_Const Varchar(10) Not Null, Code_Const Varchar(10) references
Pays_Const Varchar(20)) ; Constructeur(Code_Const),
Nom_Av Varchar(10) Not Null,
Capacite int(3),
Localisation Varchar (20)) ;

Vol Pilote
Create Table Vol ( Create Table Pilote (
Num_Vol int(4) Primary Key, Num_Pil varchar(6) Primary Key,
Num_Pil int(5) Not Null , Civilite Varchar(5) Not Null Check Civilite in
Num_Av int(8) Not Null, ('Mme', 'Mr', 'Mlle'),
Ville_Depart Varchar (12), Nom_Pil Varchar (10) Not Null,
Ville_Arrivee Varchar (12), Prenom_Pil Varchar (10),
Date_Vol Date Not Null, Ville_Pil Varchar(12),
Foreign Key (Num_Pil) references Pilote(Num_Pil), Salaire_Pil Decimal(8,3) Not Null,
Foreign Key (Num_Av) references Avion(Num_Av)) ; Num_Tel int(8)) ;

1/6
2- Dites si les requêtes suivantes sont valides ou non en mettant dans la case le mot "Valide" ou "Invalide" et
expliquer dans le cas d’invalidité (2.25 points)
NB : Les requêtes sont indépendantes.
a- INSERT INTO Constructeur Values ('C328', 'Airbus','France') ; valide
b- INSERT INTO Vol (Num_Vol, Num_Pil, Num_Av, Ville_Depart, Ville_Arrivee) Values ('201',
'23','622','Tunis','France') ;
Invalide
L’attribut Date_Vol doit avoir une valeur non nulle
c- INSERT INTO Pilote Values ('23', 'Mr', 'Torki' , 'Ahmed' , 'Tunis' , '2005.9' ,
'+216 22536956') ; Invalide

L’attribut num_Tel est de type Entier et de taille 8 alors que la valeur attribuée est de type chaine et
dépasse les 8 caractères
d- INSERT INTO Avion Values ('512', 'C25','Gloster','1201','Amerique') ; Invalide
L’attribut capacite est de type entier au maximum de 3 chiffres alors que la valeur attribuée dépasse celle
permise.
e- INSERT INTO Vol (Num_Pil, Num_Av, Ville_Depart, Ville_Arrivee, Date_Vol) Values ('29','92',
'France','Allemagne', '2015-02-02') ; Invalide
La clé primaire est inexistante dans la requête ce qui est impossible car la clé primaire doit toujours avoir
une valeur.

3- Exprimer en SQL les modifications à effectuer sur les tables Pilote, Vol et Constructeur pour que les requêtes
suivantes soient valides : (1.5 points)

a- INSERT INTO Pilote Values ('23', 'Mr','Torki','Ahmed','Tunis','2005,9') ;


ALTER TABLE Pilote
DROP COLUMN Num_Tel ;
b- INSERT INTO Vol (Num_Vol, Num_Pil, Num_Av, Ville_Depart, Ville_Arrivee, Date_Vol) Values ('109',
'16','134','Italie','Turquie', '2014-09-03 16 :30 :52') ;
ALTER TABLE Vol
MODIFY Date_Vol Timestamp Not Null;
c- INSERT INTO Constructeur (Code_Const, Nom_Const, Pays_Const, Tel_Const) Values ('C882',
'Auster','Angleterre',' 00447112233445') ;
ALTER TABLE Constructeur
ADD COLUMN Tel_Const Varchar(14);

4- Exprimer en SQL les requêtes suivantes (6 points)

a- Donner le nom, le prénom et la ville de tous les pilotes par ordre alphabétique des noms.
Select Nom_Pil, Prenom_Pil
From pilote
Order by 1 ;

b- Donner le nombre total des vols.


Select count(*)
From Vol ;

c- Par localisation, donner les numéros des avions et la moyenne des capacités dépassant 400 personnes.
2/6
Select Num_Av, AVG(Capacite)
From Avion
Group by Localisation
Having AVG(Capacite) > 400 ;
d- Donner les différents pays (sans doublons) des constructeurs des avions.
Select Distinct(Pays_Const)
From Constructeur ;
e- Donner les noms et les prénoms des pilotes qui ont un salaire entre 1500 et 3000.
Select Nom_Pil, Prenom_Pil
From Pilote
Where Salaire_Pil between (1500 and 3000) ;
f- Donner la capacité maximale et minimale des avions localisés à Paris et construits en Amerique.
Select Max(capacite), Min(capacite)
From Avion x, Constructeur y
Where x.Code_Const=y.Code.Const and x.Localisation = 'Paris' and y.Pays_Const='Amerique' ;
g- Donner le numéro, la ville de départ et la ville d'arrivée des vols dont le deuxième caractère de la ville de
départ est 'a'.
Select Num_Vol, Ville_Depart, Ville_Arrivee
From Vol
Where Ville_Depart like '_a%' ;
h- Donner pour chaque vol, le numéro, la ville de départ, la ville d'arrivée, le nom et le prénom de son pilote
et la capacité de l’avion correspondante.
Select Num_Vol, Ville_Depart, Ville_Arrivee, Nom_Pil, Prenom_Pil, Capacite
From Vol X, Avion Y, Pilote Z
Where X.Num_Av=Y.Num_Av and X.Num_Pil = Z.Num_Pil

PARTIE 2 : DEVELOPPEMENT WEB (9,25 pts)


Soit la même représentation graphique de la base de données illustrée dans la Partie1 et soit le formulaire suivant :

3/6
1- Compléter le fichier "AjoutPilote.html" correspondant au formulaire ci-dessus : (2,25 points)

<html>
<head>
<meta charset="utf-8">
<title>Ajout d'un nouveau pilote</title>
</head>
<body>
<h1 align="center">Ajout d'un nouveau pilote</h1>
<form action="ajout.php" method="POST">
<fieldset><legend>Veuillez remplir les informations suivantes</legend><br><br>
<label>Code pilote : </label><input type="text" id="code" name="cp"><br><br>
<label>Civilité :</label>
<select id="civ" name= "civ">
<option>Choisir une civilité</option>
<option>Mr</option>
<option>Mme</option>
<option>Mlle</option>
</select><br><br>
<label>Nom : </label><input type="text" id="nom" name="nom"><br><br>
<label>Prénom : </label><input type="text" id="prenom" name="prenom"><br><br>
<label>Ville : </label>
<select id="ville" name="vl">
<option>Chosir une ville</option>
<option>Tunis</option>
<option>Ariana</option>
<option>Bizerte</option>
</select>
<input type="button" id="b1" value="Ajouter nouvelle ville"><input type="text"
id="nville"><br><br>
<label>Salaire : </label><input type="text" id="salaire" name="sal"><br><br>
<label>Téléphone : </label><input type="text" id="tel" name="tel"><br><br>
<div align="center">
<input id="Aj" type="submit" name="" value="Ajouter">
<input id="An" type="reset" name="" value="Annuler">
</div></ fieldset></form>
<script type="text/javascript" src="validation.js"></script>
</body></html>

2- Compléter le fichier "validation.js" ci-dessous en se référant au code HTML précédent, afin de valider les
conditions suivantes sur les champs du formulaire. (3,75 points)

Champs Conditions
Code pilote Contenant 6 caractères commençant par la chaine "Pil" suivi de 3 chiffres.
Civilité Choix obligatoire
Nom Non vide contenant au maximum 10 caractères dont un seul espace
Prénom Non vide contenant au maximum 3 chaines
Ville Choix obligatoire
Salaire Non vide numérique de 4 chiffres ne dépassant pas 5000
Téléphone Numérique commençant soit par 7 ou 2 ou 9 ou 5 et contenant 8 chiffres

Le fichier "validation.js" :
document.getElementById("Aj").addEventListener("click",verif);
function verif(){
let cp=document.getElementById("code").value;
let civ=document.getElementById("civ");
let pos1 = civ.options.selectedIndex;
let nom=document.getElementById("nom").value;
let prenom=document.getElementById("prenom").value;
4/6
let ville=document.getElementById("ville");
let pos2 = ville.options.selectedIndex;
let salaire=document.getElementById("salaire").value;
let tel=document.getElementById("tel").value;

// Vérification du code pilote


if (cp[0]!="P" || cp[1]!="i" || cp[2]!="l" || isNaN(cp[3]) || isNaN(cp[4]) ||
isNaN(cp[5]) || cp.length!=6 )
{alert("Vérifier le code pilote!");
return false;}
//Vérification de la civilité
else if (pos1==0)
{alert("Choisir une civilité!");
return false;}
//Vérification du nom
else if (nom=="" || nom.length>10 || nom.split(" ").length!=2)
{alert("Vérifier le nom!");
return false;}
//Vérification du prénom
else if (prenom=="" || prenom.length>10 || prenom.split(" ").length>3)
{alert("Vérifier le prénom!");
return false;}
// Vérification de la ville
else if (pos2==0)
{alert("Choisir une ville!");
return false;}
//Vérification du salaire
else if (salaire=="" || isNaN(salaire) || salaire>5000)
{alert("Vérifier le salaire!");
return false;}
//Vérification du numéro de téléphone
else if (isNaN(tel) || (tel[0]!='7' && tel[0]!='2' && tel[0]!='9' &&
tel[0]!='5') || tel.length!=8)
{alert("Vérifier le téléphone!");
return false;}
}

3- Dans le même fichier, on désire programmer le bouton « Ajouter nouvelle ville » qui permettra d’ajouter la
nouvelle ville saisie dans le champ texte dans la liste de choix des villes, compléter par ce qui manque pour
que la fonction « ajout » soit fonctionnelle : (1 point)

document.getElementById("b1").addEventListener("click",ajout);
function ajout(){
let nville=document.getElementById("nville").value;
let ville=document.getElementById("ville");
op=new Option(nville);
ville.options[ville.length]=op;
}

5/6
4- Compléter le fichier « ajout.php » qui permettra d’ajouter les données saisies à la table Pilote si le code du
pilote (Num_Pil) n’est pas existant avec affichage du message « Pilote ajouté avec succès » sinon afficher le
message « Pilote déjà existant » (1,5 points)
Le fichier "ajout.php" :

<?php
//Ouverture de la connexion
mysql_connect("127.0.0.1","root","") or die("erreur de connexion");
//Sélection de la base de données
mysql_select_db(Gestion_aeroport )or die("erreur connexion");
//Récupération des données du formulaire
$cp = $_POST['cp'];
$civil = $_POST['civ'];
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$ville = $_POST['vl'];
$salaire = $_POST['sal'];
$tel = $_POST['tel'];

//vérification de l’existence d’un enregistrement contenant le même code du


pilote dans la table pilote
$sql1 = "select * from pilote where Num_Pil = '$cp'";
$res1 = mysql_query($sql1) or die("erreur requête 1");

if (mysql_num_rows($res1) != 0) echo ("Pilote déjà existant") ;


else {
//requête d’insertion des données dans la table pilote
$sql2 = "insert into pilote values ('$cp','$civil','$nom','$prenom', '$ville',
'$salaire','$tel')" ;
$res2 = mysql_query($sql2) or die("erreur requête 2");
if(mysql_affected_rows()!=-1) echo ("Pilote ajouté avec succès");
}
mysql_close();
?>

5- Donner le rôle des fonctions suivantes : (0,75 points)


 Mysql-query : permet d’exécuter la requête en paramètre
 Mysql-num-rows : permet de clculer le nombre de lignes retournées par la requête en paramètre
 Mysql-affected-rows : permet de vérifier si il y a des enregistrements qui ont été ajoutés à la table ou non
après l’exécution de la dernière requête

Bonne Chance
6/6

Vous aimerez peut-être aussi