Vous êtes sur la page 1sur 8

Baccalauréat 2017 - Épreuve pratique T.I.C 4S.I.

RÉPUBLIQUE TUNISIENNE ÉPREUVE : T.I.C


MINISTÈRE DE L'ÉDUCATION
****** Section : Sciences de l'Informatique
EXAMEN DU BACCALAURÉAT
SESSION 2017 Durée : 2 Heures

Important :
Dans le dossier "www", créer un dossier de travail en le nommant "SW<votre numéro d'inscription>" où
seront enregistrés tous les documents à réaliser.

Une boite de développement, cherche un free-lance pour développer des parties d'un sites
web dédié à la vente aux enchères des articles d'antiquité.
Pour cela, on se propose de réaliser les tâches suivantes :
❖ Création d'un document flash : "Animation.fla"
❖ Création d'une base de données
❖ Création de trois documents web : "Ajout.Html", "Contrôle.js" et "Ajout.php"
Partie I :
Créer un document Flash sous le nom "Animation.fla" qui permet de déplacer
horizontalement le texte "Ventes aux enchères" tout en effectuant une rotation de 180° dans
le ses inverse des aiguilles d'une montre, comme illustré dans les figures ci-dessous:

Lycée Attarine Ariana 2019-2020 Page 1/8 Lycee.attarine@gmail.com


Baccalauréat 2017 - Épreuve pratique T.I.C 4S.I.

Partie II :
A. Création de la base de données :
1) Créer une base de données intitulée "BD<votre numéro d’inscription>", puis créer les
tables suivantes :
Client (Cin, Nom, Prenom, Tel)
Article (Code, Libelle, PrixBase)
Offre (Cin#, Code#, PrixPropose)
Les champs des tables sont décrits dans le tableau ci-dessous :
Champ Type Observation
Cin Chaîne de taille 8 Numéro de la carte d'identité du client
Nom Chaîne de taille 30 Nom du client
Prenom Chaîne de taille 30 Prénom du client
Tel Chaîne de taille 8 Numéro de téléphone du client
Code Entier Identifiant de l'article
Libelle Chaîne de taille 30 Libellé de l'article
PrixBase Entier Prix d'ouverture de la vente de l'article
PrixPropose Entier Prix d'achat de l'article proposé par le client
2) Insérer les lignes suivantes dans les tables concernées :
Table Article
Code Libelle PrixBase
120 Les gants du gardien Attouga 453
212 Voiture 202 Bh 25470
36 Luth du Hedi Jouini 525
45 Manuscrit d'Abou el Kacem Echebbi 8520
3) Exporter la base au format SQL sous le nom attribué dans la première question.
B. Création des documents web :
1) Créer la page "Ajout.html" permettant à toute personne d'envoyer une proposition
d'offre pour l'achat d'un article à travers le formulaire suivant :

Le clic sur le bouton "Annuler" permet d'initialiser les champs du formulaire.


Le clic sur le bouton "Valider" fait appel à :
❖ Une fonction intitulée Verif à développée dans le fichier "Contrôle.js"
❖ Un fichier "Ajout.php"

Lycée Attarine Ariana 2019-2020 Page 2/8 Lycee.attarine@gmail.com


Baccalauréat 2017 - Épreuve pratique T.I.C 4S.I.

2) Les contrôles en JavaScript de la validité des champs du formulaire :


Tableau des contrôles
Champ Contrôle
Cin Chaîne de 8 chiffres dont le premier est "1" ou "0"
Nom Chaîne de 3 à 30 lettres
Prénom Chaîne de 3 à 30 lettres
Tel Chaîne de 8 chiffres dont le premier est différent de "0"
Article Sélection obligatoire d'un article
Prix proposé Entier strictement positif
3) Créer le fichier "Ajout.php" permettant de manipuler les données issues de la page
"Ajout.html" pour réaliser les tâches suivantes :
❖ afficher le message "Offre rejetée" lorsque le prix proposé est strictement inférieur
au prix d'ouverture (PrixBase) de l'article sélectionné,
ou bien,
▪ ajouter les données relatives au client et à l'offre aux tables appropriées
lorsque le client n'existe pas dans la base, puis afficher le message "Offre
enregistrée pour ce nouveau client"
ou bien,
▪ ajouter l'offre à la table appropriée, lorsque le client n'a jamais déposé une
proposition pour l'article sélectionné, puis afficher le message "Nouvelle
offre enregistrée"
ou bien,
▪ mettre à jour le champ PrixPropose de l'offre concernée, puis afficher le
message "Mise à jour faite avec succès"
C. Développement d'une fonction JavaScript
Pour un besoin identifié, développer dans le fichier "Contrôle.js", créé précédemment une
fonction intitulée "Espaces(Ch)" permettant de retourner une chaîne qui resulte de
l'application des traitements ci-dessous sur la chaîne Ch passée en paramètre:
❖ supprimer les espaces du début et de la fin,
❖ supprimer les espaces superflus afin de garder un seul espace entre deux mots
consécutifs,
❖ remplacer la première lettre de chaque mot par son équivalent en majuscule.

Barème

Partie II
Partie Partie I
A-1 A-2 A-3 B-1 B-2 B-3 B-4
Nombre de points 3 2.25 0.5 0.25 3 3 5 3

Lycée Attarine Ariana 2019-2020 Page 3/8 Lycee.attarine@gmail.com


Baccalauréat 2017 - Épreuve pratique T.I.C 4S.I.

Correction de l'Examen TIC 2017


Ajout.html

T1
T2
T3
T4

D1
T5

<select name="D1">
<option>Sélectionner un article</option>
<option value="120">Les gants du gardien Attouga</option>
<option value="212">Voiture 202 Bh</option>
<option value="36">Luth du Hedi Jouini</option>
<option value="45">Manuscrit d'Abou el Kacem Echebbi</option>
</select>

Ajout.html

function Verif() {
var Cin = F.T1.value;
var Nom = F.T2.value;
var Prenom = F.T3.value;
var Tel = F.T4.value;
var Prix = F.T5.value;

// Cin: Chaîne de 8 chiffres dont le premier est "1" ou "0"


if (Cin.length != 8 || (Cin[0] != '0' && Cin[0] != '1') || !Numerique(Cin)) {
alert('Cin invalide');
return false;
}

// Nom: Chaîne de 3 à 30 lettres


if (Nom.length < 3 || Nom.length > 30 || !Alphabetique(Nom)) {
alert('Nom invalide');
return false;
}

// Prénom: Chaîne de 3 à 30 lettres


if (Prenom.length < 3 || Prenom.length > 30 || !Alphabetique(Prenom)) {
alert('Prénom invalide');
return false;
}
Lycée Attarine Ariana 2019-2020 Page 4/8 Lycee.attarine@gmail.com
Baccalauréat 2017 - Épreuve pratique T.I.C 4S.I.

// Tel: Chaîne de 8 chiffres dont le premier est différent de "0"


if (Tel.length != 8 || Tel[0] == 0 || !Numerique(Cin)) {
alert('Tel invalide');
return false;
}

// Article: Sélection obligatoire d'un article


if (F.D1.selectedIndex == 0) {
alert('Vous devez choisir un article');
return false;
}

// Prix proposé: Entier strictement positif


// 10.7 % 1 = 0.7
// 10 % 1 = 0
if (isNaN(Prix) || Prix % 1 != 0 || Prix <= 0) {
alert('Prix Invalide');
return false;
}
}

//Fn qui vérifie si Ch est composé uniquement par des chiffres


function Numerique(Ch) {
for (var i = 0; i < Ch.length; i++) {
if ((Ch[i] < "0") || (Ch[i] > "9")) return false;
}
return true;
}

//Fn qui vérifie si le paramètre Ch est composé uniquement par des Lettres
function Alphabetique(Ch) {
var Lettres = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
Ch = Ch.toUpperCase();
for (var i = 0; i < Ch.length; i++) {
if (Lettres.indexOf(Ch[i]) < 0) return false;
}
return true;
}

Ajout.php

<?php
//Récupération des Champs T1, T2, T3 , T4, D1 et T5
$Cin = $_POST["T1"];
$Nom = $_POST["T2"];
$Prenom = $_POST["T3"];
$Tel = $_POST["T4"];
$CodeArticle = $_POST["D1"];
$Prix = $_POST["T5"];

//Connexion à MySQL & Sélection de la BD


mysql_connect("localhost", "root") or exit("E1: ".mysql_error());
mysql_select_db("BD2017") or exit("E2: ".mysql_error());

Lycée Attarine Ariana 2019-2020 Page 5/8 Lycee.attarine@gmail.com


Baccalauréat 2017 - Épreuve pratique T.I.C 4S.I.

/*==========================================================================
afficher le message "Offre rejetée" lorsque le prix proposé est
strictement inférieur au prix d'ouverture (PrixBase) de l'article sélectionné
==========================================================================*/
$Q = "SELECT PrixBase FROM Article WHERE Code='$CodeArticle'";
$R = mysql_query($Q) or exit("E3: ".mysql_error());
$T = mysql_fetch_array($R);

//Si Prix < PrixBase on quitte le script en affichant le message :"Offre Rejetée"
if ($Prix < $T[0]) exit("Offre Rejetée");

/*==========================================================================
ajouter les données relatives au client et à l'offre aux tables appropriées
lorsque le client n'existe pas dans la base, puis afficher le message
"Offre enregistrée pour ce nouveau client"
==========================================================================*/
$Q = "SELECT * FROM Client WHERE Cin='$Cin'";
$R = mysql_query($Q) or exit("E4: ".mysql_error());

if (mysql_num_rows($R) == 0) { //Si le Client ne se trouve pas dans la base

// Ajout du client à la Table "Client"


$Q = "INSERT INTO Client VALUES('$Cin','$Nom','$Prenom','$Tel')";
$R = mysql_query($Q) or exit("E5: ".mysql_error());

// Ajout de l'offre
$Q = "INSERT INTO Offre VALUES('$Cin','$CodeArticle',$Prix)";
$R = mysql_query($Q) or exit("E6: ".mysql_error());

exit("Offre Enregistrée pour ce nouveau client");


}

/*==========================================================================
ajouter l'offre à la table appropriée, lorsque le client n'a jamais déposé
une proposition pour l'article sélectionné, puis afficher le message
"Nouvelle offre enregistrée"
==========================================================================*/

//On vérifie alors si le Client a déjà déposé une offre pour le même article
$Q = "SELECT * FROM Offre WHERE Code='$CodeArticle' AND Cin='$Cin'";
$R = mysql_query($Q) or exit("E7: ".mysql_error());

if (mysql_num_rows($R) == 0) { //S'il n'a pas une ancienne offre pour cet article
//...on ajoute sa nouvelle offre à la table "Offre"
$Q = "INSERT INTO Offre VALUES('$Cin','$CodeArticle',$Prix)";
$R = mysql_query($Q) or exit("E8: ".mysql_error());

exit("Nouvelle Offre Enregistrée");


}

Lycée Attarine Ariana 2019-2020 Page 6/8 Lycee.attarine@gmail.com


Baccalauréat 2017 - Épreuve pratique T.I.C 4S.I.

/*==========================================================================
mettre à jour le champ PrixPropose de l'offre concernée, puis afficher le
message "Mise à jour faite avec succès"
==========================================================================*/

// Mise à jour de l'offre du client


$Q = "UPDATE Offre SET PrixPropose=$Prix
WHERE Code='$CodeArticle' AND Cin='$Cin'";
$R = mysql_query($Q) or exit("E9: ".mysql_error());
echo ("Mise à jour faite avec Succès");
?>

Fonction Effacer Version 1

function Espaces_V1(Ch) {
// Ch = "bonjour mes amis "
while (Ch.indexOf(" ") != -1) {
Ch = Ch.replace(" ", " "); // Remplacer 2 esppaces par 1 seul
}

// Ch = "bonjour mes amis "


// Supprimer le premier caratère s'il est un espace.
if (Ch.length > 0 && Ch[0] == ' ') {
Ch = Ch.substr(1)
}

// Ch = "bonjour mes amis "


// Supprimer le dernier caratère s'il est un espace.
if (Ch.length > 0 && Ch[Ch.length - 1] == ' ') {
Ch = Ch.substr(0, Ch.length - 1)
}

// Ch = "bonjour mes amis"


// Convertir le premier caractère en Majuscule
if (Ch.length > 0) Ch = Ch[0].toUpperCase() + Ch.substr(1);

// Ch = "Bonjour mes amis"


// Convertir en majuscule chaque caratère qui vient directement après un espace
for (var i = 2; i < Ch.length; i++) {
if (Ch[i - 1] == ' ') {
Ch = Ch.substr(0, i) + Ch[i].toUpperCase() + Ch.substr(i + 1);
}
}

// Ch = "Bonjour Mes Amis"


return Ch
}

Lycée Attarine Ariana 2019-2020 Page 7/8 Lycee.attarine@gmail.com


Baccalauréat 2017 - Épreuve pratique T.I.C 4S.I.

Fonction Effacer Version 2

function Espaces_V2(Ch) {
// Ch = "bonjour mes amis "
// Tant qu'on a 2 espaces, on supprime 1
var P = Ch.indexOf(" "); // Pos de 2 espaces
while (P != -1) {
Ch = Ch.substring(0, P) + Ch.substring(P + 1);
P = Ch.indexOf(" ");
}

// Ch = "bonjour mes amis "


// Supprimer le premier caratère s'il est un espace.
if (Ch.length > 0 && Ch[0] == ' ') {
Ch = Ch.substring(1)
}

// Ch = "bonjour mes amis "


// Supprimer le dernier caratère s'il est un espace.
if (Ch.length > 0 && Ch[Ch.length - 1] == ' ') {
Ch = Ch.substring(0, Ch.length - 1)
}

// Ch = "bonjour mes amis"


// Générer un tableau composé par les mots de Ch
var T = Ch.split(" ");

// T = ["bonjour", "mes", "amis"]


// Convertir en majuscule le premier caractère de chaque mot
for (var i = 0; i < T.length; i++) {
Kes = T[i];
T[i] = Kes[0].toUpperCase() + Kes.substring(1);
}

// T = ["Bonjour", "Mes", "Amis"]


// Concaténer les mots de T en ajoutant comme séparateur un espace
Ch = T.join(" ");

// Ch = "Bonjour Mes Amis"


return Ch
}

Lycée Attarine Ariana 2019-2020 Page 8/8 Lycee.attarine@gmail.com