Mission Carthage Français

الرئيسية › الامتحانات › باكالوريا علوم الإعلامية

Devoir pratique STI n°10 : la boutique Info Matériel, vérifier une commande en JavaScript, l'enregistrer en PHP et MySQL

باكالوريا علوم الإعلامية، الثلاثي الثالث. المدّة: ساعة. على 20 نقطة.

اكتب البرامج متاعك بـ Python ولا بالـ algorithme وثبّت فيهم في بلاصتهم، وبعد حلّ الإصلاح تمرين بتمرين.

Le travail se fait sur ordinateur, avec un serveur local (XAMPP) : chaque fichier est enregistré sous le nom donné, dans le même dossier. Les deux exercices construisent la commande en ligne de la boutique Info Matériel : la page commande.html affiche le prix et vérifie la commande avec le fichier commande.js de l'exercice 1, puis l'envoie à la page commande.php de l'exercice 2. Barème sur 20 points.

الموضوع مكتوب بالفرنسي، كيما في القسم.

Exercice 1 : vérifier la commande dans le navigateur (8 pts)

La boutique de matériel informatique Info Matériel prend les commandes en ligne avec la page commande.html suivante, reliée au fichier commande.js. Ses fonctions afficherPrix() (quand le produit ou la quantité change) et verifier() (avant l'envoi) sont données dans la page ; elles utilisent deux fonctions JavaScript, à écrire dans commande.js.

<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Commander</title>
</head>
<body>
  <h1>Info Matériel : commander</h1>
  <form action="commande.php" method="post" onsubmit="return verifier()">
    <label for="client">Client</label>
    <select id="client" name="client">
      <option value="1">Amel</option>
      <option value="2">Bilel</option>
      <option value="3">Chiraz</option>
      <option value="4">Dhia</option>
    </select>
    <label for="produit">Produit</label>
    <select id="produit" name="produit" onchange="afficherPrix()">
      <option value="1">Clavier</option>
      <option value="2">Souris</option>
      <option value="3">Casque</option>
      <option value="4">Clé USB</option>
    </select>
    <label for="qte">Quantité</label>
    <input type="number" id="qte" name="qte" value="1" onchange="afficherPrix()">
    <input type="submit" value="Commander">
  </form>
  <p id="prix"></p>
  <p id="message"></p>
  <p><a href="clients.php">Clients sans commande</a></p>
  <script>
    var prix = [35, 15, 60, 20];
    var stocks = [10, 4, 0, 25];
    function afficherPrix() {
      var i = document.getElementById("produit").selectedIndex;
      var q = Number(document.getElementById("qte").value);
      document.getElementById("prix").innerHTML = "Prix : " + prixTotal(prix[i], q) + " DT";
    }
    function verifier() {
      var i = document.getElementById("produit").selectedIndex;
      var r = verifierCommande(Number(document.getElementById("qte").value), stocks[i]);
      document.getElementById("message").innerHTML = r;
      return r == "OK";
    }
  </script>
  <script src="commande.js"></script>
</body>
</html>
  • 1) Écrire la fonction verifierCommande(qte, stock) qui renvoie « Quantité invalide » si qte n'est pas un entier strictement positif, « Stock insuffisant » si qte dépasse le stock, et « OK » sinon (4 pts).
  • 2) Écrire la fonction prixTotal(prix, qte) qui renvoie le prix de qte articles au prix unitaire prix, avec une remise de 10 % à partir de 10 articles, arrondi au millime (4 pts).

Exemples : verifierCommande(3, 10) donne OK, verifierCommande(0, 10) donne Quantité invalide ; prixTotal(35, 2) donne 70 et prixTotal(20, 10) donne 180.

Exercice 2 : les pages PHP des commandes (12 pts)

La boutique garde ses produits, ses clients et leurs commandes dans la base MySQL boutique, créée par le fichier base.sql. Le formulaire de la page commande.html (exercice 1) envoie les champs client, produit (les identifiants) et qte à la page commande.php avec la méthode POST ; son lien ouvre clients.php. La connexion à la base est dans connexion.php.

CREATE DATABASE boutique;
USE boutique;
CREATE TABLE produit (
  id INT PRIMARY KEY,
  nom VARCHAR(30) NOT NULL,
  prix INT NOT NULL,
  stock INT NOT NULL
);
CREATE TABLE client (
  id INT PRIMARY KEY,
  nom VARCHAR(30) NOT NULL
);
CREATE TABLE commande (
  id INT AUTO_INCREMENT PRIMARY KEY,
  id_client INT NOT NULL,
  id_produit INT NOT NULL,
  qte INT NOT NULL,
  FOREIGN KEY (id_client) REFERENCES client(id),
  FOREIGN KEY (id_produit) REFERENCES produit(id)
);
INSERT INTO produit VALUES (1, 'Clavier', 35, 10), (2, 'Souris', 15, 4), (3, 'Casque', 60, 0), (4, 'Clé USB', 20, 25);
INSERT INTO client VALUES (1, 'Amel'), (2, 'Bilel'), (3, 'Chiraz'), (4, 'Dhia');
INSERT INTO commande (id_client, id_produit, qte) VALUES (1, 1, 2), (1, 4, 5), (3, 2, 1);
<?php
$cnx = mysqli_connect("localhost", "root", "", "boutique");
?>
  • 1) Écrire la page commande.php. Si la quantité n'est pas strictement positive, elle affiche « Quantité invalide » ; sinon, si le produit n'existe pas, « Produit inconnu » ; sinon, si la quantité dépasse le stock du produit, « Stock insuffisant » ; sinon elle ajoute la commande à la table commande, diminue le stock du produit de la quantité commandée et affiche « Commande enregistrée » (7 pts).
  • 2) Écrire la page clients.php qui affiche le titre « Clients sans commande », puis la liste (ul) des noms des clients qui n'ont passé aucune commande, par ordre alphabétique, puis leur nombre sous la forme « 2 client(s) » (5 pts).

Exemple : avec la base donnée, la commande client=2, produit=2, qte=5 affiche Stock insuffisant, car il ne reste que 4 souris.

الإصلاح المفصّل

الإصلاح متاع الامتحان هذا للمشتركين. فيه التحليل، والـ algorithme بالنوطاسيون التونسية، والبرنامج Python المجرّب، والغلطات اللي ترجع برشا في كل تمرين. بحساب بلاش، تنجم تحلّ 3 إصلاحات تختارهم إنت.

كل الإصلاحات حتى الفرض التأليفي3 أشهر بـ 20 د، العرض حتى 30 نوفمبر 2026 ابعثها لبابا ولّا ماما يخلّصو

موضوع أصلي كتبناه لـ Mission Carthage، على نفس الشكل متاع امتحانات القسم. الأستاذ متاعك يبقى هو المرجع.

البرنامج الكل: باكالوريا علوم الإعلامية · عاود اقرا الكور · الامتحانات الكل