Projet du semestre deux.
Auteur : Jérôme Benoit.
Le présent document a pour objectif de rendre compte du projet de réalisation d'un site web pour une compagnie aérienne fictive du nom de “Air Polytech” au sein de l’école d'ingénieur de Luminy Polytech pour la promotion HUGo.
Nous étudierons en premier lieu les besoins de la compagnie aérienne qui seront traduit en différentes phases de réalisation de l'application web :
La compagnie aérienne fictive “Air Polytech” souhaite avoir un site web permettant :
Il est à noter que certains besoins ont des dépendances : le besoin concernant la réservation est dépendant de la possibilité de se créer un compte (2 dépend de 3).
Le cahier de conception comprend la structure du site, la conception de l'IHM, des cinématiques de navigation, de la base de données et de l'architecture de l'application web.
L'application web comprend deux parties :
La partie front office couvre les fonctionnalités suivantes :
La partie front office comprend les pages :
Les pages de la partie front office sont découpées en 3 parties :
La partie back office couvre les fonctionnalités suivantes :
La partie back office comprend les pages :
Les pages de la partie back office sont découpées en 3 parties :
Une maquette papier implantant la structure ci-dessus a été réalisée pour la partie front office seule. Il a été décidé d'implanter en PHP/HTML/CSS/SQL la partie front office du site en priorité en suivant la maquette papier (très peu de différences fonctionnelles entre la maquette papier et le site: une information en plus sur la recherche ou un bouton annuler sur la liste des réservations par exemple) et de faire les séances de tests utilisateurs directement sur la maquette du site afin de prendre un peu plus de temps pour la phase d’implantation.
Les tests utilisateurs couvraient un seul scenario : la réservation d'un vol aller/retour pour Marseille↔Amsterdam et ont été conduits avec deux personnes.
Ils ont remonté :
La partie back office n'a pas été maquettée. Elle n'a en fait pas dépassé le stade de la conception.
L'IHM suit le principe Gestalt de similitude en mettant les fonctions de même niveau avec la même forme/mise en page. Elle le suit même de manière excessive sur les formulaires en mettant par exemple le champs pour le numéro de rue au même niveau que le champs pour le nom de la rue.
Le menu principal dans l’entête est séquentiel et ne contient que les deux fonctions principales : la recherche et les réservations qui est conditionnelle au statut d’identification du client. Il contient aussi le lien standard vers la page d’accueil.
L’entête contient un lien vers l'espace client et les informations d'identification alignés sur la gauche.
L'intégralité du contenu est centré et s'adapte à la taille de l’écran.
Par manque de temps, un certain nombre d'habillages n'ont pas été implantés :
La liste n'est pas exhaustive et le choix a été d'implanter les points les plus importants en priorité.
Schéma de relations de la base de données :
AVIONS(NumAv, NomAv, CapAv, VilleAv)
PILOTES(NumPil, NomPil, NaisPil, VillePil)
VOLS(NumVol,VilleD, VilleA, DateD, DateA, #NumPil, #NumAv, CoutVol)
CLIENTS(NumCl, PrenomCl, NomCl, EmailCl, PasswordCl, NumRueCl, NomRueCl, CodePosteCl, VilleCl)
DEFCLASSES(#NumVol, Classe, CoeffPlace, CoeffPrix)
RESERVATIONS(#NumCl, #NumVol, #Classe, NbPlaces)
ADMINISTRATEURS(NumAdm, NomAdm, EmailAdm, PasswordAdm)
Les types des attributs, autres que chaîne de caractères, sont donnés ici :
La racine du site contient :
Il est à noter que le routage dans index.php en cas d'une requête HTTP GET inclura le contenu du fichier include/page.php et en cas d'une requête HTTP POST inclura le contenu du fichier includes/formpage.php.
La liste des pages routées est contrôlée dans le fichier de configuration de l'application pour éviter toutes demandes illégitimes de contenu via le fichier index.php et la variable page.
On trouve dans la plupart des formulaires du site des listes de choix unique à faire parmi du contenu en base. La construction de ces listes s'articule autour d'une requête SQL select sur un seul champs d'une table dont le contenu est rendu unique et qu'on ordonne.
Par exemple pour les villes/aéroports de départ des vols :
SELECT DISTINCT VilleD FROM VOLS ORDER BY VilleD
La fonction recherche est dans les fichiers
Le contenu du formulaire est soumis à un certain nombre de vérifications avant execution de la requête SQL principale :
Le traitement s'articule autour de la requête SQL paramétrée :
SELECT VOLS.NumVol AS NumVol, VilleD, DateD, VilleA, DateA, DEFCLASSES.Classe, round(CoutVol*CoeffPrix, 2) AS Prix, CapAv FROM VOLS JOIN DEFCLASSES ON DEFCLASSES.NumVol = VOLS.NumVol JOIN AVIONS ON AVIONS.NumAv = VOLS.NumAv WHERE DateD >= ? AND VilleD = ? AND DateA <= ? AND VilleA = ? ORDER BY DateD, NumVol, Prix
Les résultats contiennent également le nombre de places disponibles par vol qui sont obtenus par la requête SQL:
SELECT SUM(NbPlaces) AS BookedPlaces FROM RESERVATIONS WHERE NumVol = ?
et le calcul de la différence avec la valeur de CapAv pour chaque vol.
Accueil → includes/home.php.
Espace client → include/account.php et includes/formaccount.php.
Connexion → includes/login.php et includes/formlogin.php.
Déconnexion → includes/logout.php.
Création de compte → includes/register.php et includes/formregister.php
Réservations client → includes/reservations.php et includes/formreservations.php
Réservation → includes/formbooking.php.
Modification réservation → includes/modify.php et includes/formmodify.php
Les requêtes SQL paramétrées se trouvent dans les variables $sql_pquery pour chaque implantation de chaque fonctionnalité.
Le test qui a permis de debugger et stabiliser la partie front office de l'application a été une réservation en partant de zéro (sans compte sur le site) d'un vol aller/retour suivi d'une annulation du retour et de trois modifications de l'aller, une pour le nombre de places et pour la classe et une pour les deux.
Le temps imparti ne m'a permis que d'implanter la partie front office, la partie back office n'ayant pas quitté le stade de la conception.
Certaines fonctionnalités manquent toujours à la partie front office et sont en fait les trois points que les tests utilisateurs ont remontés qui posent tout de même un problème pour faire une réservation en partant de zéro, qui est le cas de figure de base.