59
1 RAPPORT DE PROJET SITE WEB - DEV-FLY JULIE NUGUET

RAPPORT DE PROJET SITE WEB - DEV-FLY

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: RAPPORT DE PROJET SITE WEB - DEV-FLY

1

RAPPORT DE PROJET

SITE WEB - DEV-FLY

JULIE NUGUET

Page 2: RAPPORT DE PROJET SITE WEB - DEV-FLY

2

TABLE DES MATIÈRES

Définitions / Abréviations .......................................................................................................................................................................... 3

Introduction ....................................................................................................................................................................................................... 3

Contexte ................................................................................................................................................................................................................ 4

Exigences .............................................................................................................................................................................................................. 4

Outils utilisés ..................................................................................................................................................................................................... 4

Base de données ............................................................................................................................................................................................... 6

Diagramme de cas d’utilisation ............................................................................................................................................................... 8

Maquettage des IHM ...................................................................................................................................................................................... 9

Diagrammes de séquence système : réservation d'un vol ..................................................................................................... 15

Architecture de l'application ................................................................................................................................................................. 16

Rendu .................................................................................................................................................................................................................. 20

Code source de l'application .................................................................................................................................................................. 24

Mise en ligne du site .................................................................................................................................................................................... 30

Conclusion ........................................................................................................................................................................................................ 30

Webographie ................................................................................................................................................................................................... 31

Annexes .............................................................................................................................................................................................................. 31

Page 3: RAPPORT DE PROJET SITE WEB - DEV-FLY

3

DÉFINITIONS / ABRÉVIATIONS

Cahier des charges : document fixant les modalités de réalisation d’un projet, en listant les besoins et exigences auxquels le prestataire doit se conformer. CamelCase : pratique qui consiste à relier des mots ensemble, en mettant une majuscule aux premières lettres de chaque mot. Diagramme de cas d'utilisation : en UML, diagramme fonctionnel permettant de donner une vision globale des fonctionnalités que le logiciel doit fournir. Diagramme de séquence système : en UML, représentation des échanges de messages entre les acteurs et le système selon un axe temporel. Dictionnaire des données : recense l'ensemble des données élémentaires (= non décomposables) nécessaires à la conception de la base de données. Expression régulière ou rationnelle : les expressions régulières ou « regex » permettent de trouver les chaînes de caractères correspondant à un modèle défini (le modèle est en fait une chaîne de caractères souvent appelée « motif »). IHM : acronyme utilisé pour désigner les Interfaces Homme / Machine, c’est-à-dire l’ensemble des moyens utilisés par l’homme pour communiquer avec une machine. Modèle Conceptuel de Données (MCD) : représentation graphique des informations de l'entreprise, telles qu'elles ont été recensées dans le dictionnaire des données. On parle également de modèle entité – association. Lorsque ces termes sont employés au sein du présent document, ils sont mentionnés sous cette forme.

INTRODUCTION

Dans le cadre du Titre Professionnel Développeur Logiciel, j'ai réalisé une application de gestion des vols pour une compagnie aérienne. Ce projet a été fait en groupe de 3 personnes. Après avoir réfléchi ensemble à notre objectif, nous avons décidé que chacun d'entre nous serait responsable d'une partie distincte de l'application, que nous avons scindée comme suit :

- réservation d'un vol, - espace client, - back-office.

Bien qu'ayant participé à tous les aspects de l'application, je me suis focalisée plus particulièrement sur la réservation des vols, que je présenterai plus en détails ici. Étant donné que le projet était un « exercice » (bien que réalisé dans un contexte professionnel, il ne concernait pas une réelle compagnie aérienne), nous avons décidé de nous imposer un contexte fictif. Ainsi,

Page 4: RAPPORT DE PROJET SITE WEB - DEV-FLY

4

nous avons réalisé en amont un cahier des charges avec des exigences que nous nous sommes efforcés de respecter. Le cahier des charges se trouve en annexe du présent rapport.

CONTEXTE

Nous sommes partis du principe que nous travaillions pour DEV-FLY, une filiale d'Air Greta France spécialisée dans le marché low-cost du transport de passagers. Jusqu’à présent, ils avaient recours au logiciel de la maison mère, et souhaitaient maintenant avoir leur propre application, afin d’avoir un outil personnalisé.

EXIGENCES

Il a été décidé que l'application serait un site web qui permet :

- la réservation d'un vol, pour un ou plusieurs passagers,

- la gestion d’un espace client, avec possibilité de consulter ses anciennes réservations,

- une partie back-office, permettant par exemple de visualiser les employés travaillant sur un vol

particulier.

Par ailleurs, la compagnie nous a fait part des remarques suivantes, dont nous avons dû tenir compte :

- sur chaque vol, on retrouve systématiquement 5 membres du personnel : 1 pilote, 1 copilote, et 3 stewards ou hôtesses.

- le prix d'un billet dépend du vol choisi et de l'âge du passager (les enfants de moins de 3 ans ne

payent que le prix de l'assurance, soit 50 €).

- les vols doivent avoir un numéro unique (ex : le Berne - Sydney du 02/03 n'a pas le même numéro que le Berne – Sydney du 26/03).

- les couleurs à utiliser pour le site doivent être celles de la compagnie : bleu et/ou blanc et/ou rouge.

- un client peut réserver pour plusieurs passagers (quelqu’un réserve pour son conjoint et ses enfants

par exemple). Ainsi, une réservation est associée à un seul client mais peut être reliée à plusieurs passagers.

OUTILS UTILISÉS

J'ai réalisé ce site en grande partie dans un environnement Linux (Debian et dérivées), qui offre un panel d'outils adaptés à la programmation. Certaines parties ont cependant été réalisées sous Windows 7, qui est le système d'exploitation utilisé sur mon lieu de formation.

Page 5: RAPPORT DE PROJET SITE WEB - DEV-FLY

5

Afin de mener à bien ce projet, j'ai utilisé :

- différents navigateurs web afin de vérifier la compatibilité

- le gestionnaire de versions Git, afin de garder un historique du travail produit, de faciliter le travail en groupe, et de gérer un backup des données

- Balsamiq pour réaliser la maquette du site

- WinDesign pour réaliser le MCD

- Dia, logiciel libre utilisé pour la création des diagrammes pour le cahier des charges

- Bootstrap, framework développé par Twitter, dont des éléments ont été intégrés au sein du site (le

carousel de la page d'accueil, les menus en haut du site...)

- et différents logiciels dédiés à l'écriture de code. Les navigateurs web utilisés :

- Firefox : navigateur libre de la fondation Mozilla. Un test complet a été réalisé sur la version 22 de ce navigateur. Le rendu est conforme à ce qui était attendu. Des tests plus succincts ont été effectués sur les versions précédentes, et se sont également révélés concluants.

- Chrome : navigateur développé par Google. Le site fonctionne parfaitement sur la version 28. Là

encore, des tests ont été effectués sur les versions précédentes, le rendu est identique et conforme aux attentes.

- Internet Explorer : navigateur développé par Microsoft, afin de vérifier la compatibilité (en effet, si ce navigateur souvent décrié par les développeurs voit sa part de marché décroître régulièrement, il est cependant toujours utilisé par ~30% de la population à l'heure actuelle [1] ). Nous avons fait en sorte que le site s'affiche correctement sur ce navigateur. J’ai réalisé un test complet sur la version 10, et des tests de compatibilité sur les versions antérieures pour m'assurer que le site fonctionnait correctement.

Concernant l'écriture du code, j'ai eu recours à :

- NetBeans, un environnement de développement intégré qui fonctionne aussi bien sous Windows que sous Linux

- Vim, éditeur de texte modal qui s'utilise directement dans la console sous Linux. Une fois pris en main, il permet de coder rapidement, et est également très personnalisable.

________________________________________________________________________________________ [1] https://fr.wikipedia.org/wiki/Parts_de_march%C3%A9_des_navigateurs_web

Page 6: RAPPORT DE PROJET SITE WEB - DEV-FLY

6

BASE DE DONNÉES

En premier lieu, nous avons réfléchi à la base de données. Nous avons commencé par lister toutes les données nécessaires à conserver. Voici le dictionnaire des données correspondant :

Nom Rubrique Commentaire Type Taille Domaine

numclient Clé primaire numérique 15

civilite alphanumérique 3 {"mme", "m"}

nom alphanumérique 50

prenom alphanumérique 50

adresse alphanumérique 100

codepostal alphanumérique 10

ville alphanumérique 20

pays alphanumérique 20

mail alphanumérique 80

telfixe Peut contenir un + alphanumérique 15

mobile Peut contenir un + alphanumérique 15

login Utilisé pour la connexion au site alphanumérique 20

password Sera chiffré alphanumérique 100

numemploye Clé primaire alphanumérique 5 ex. P0001 pour le 1er pilote

civilite alphanumérique 3 {"mme", "m"}

nom alphanumérique 50

prenom alphanumérique 50

adresse alphanumérique 100

codepostal alphanumérique 10

ville alphanumérique 20

pays alphanumérique 20

fonction Fonction au sein de la compagnie alphanumérique 10 {"pilote", "copilote", "hotesse", "steward"}

numpassager Clé primaire numérique 15

civilite alphanumérique 3

nom alphanumérique 50

prenom alphanumérique 50

datenaissance date

numplace Clé primaire numérique 15

prix flottant

Page 7: RAPPORT DE PROJET SITE WEB - DEV-FLY

7

numreserv Clé primaire – numéro de réservation

numérique 15

datereservation date

travailler_date date à laquelle un employé X travaille sur un vol Y

date

numvol Clé primaire alphanumérique 15

lieudep Lieu de départ du vol alphanumérique 50

lieuarriv Lieu d'arrivée du vol alphanumérique 50

dateheuredep Date et heure de départ du vol datetime

dateheurearrivee Date et heure d'arrivée du vol datetime

tarif Le tarif standard pour un passager adulte.

flottant

iduser Clé primaire (concerne les personnes qui ont accès au back office)

alphanumérique 5

statut alphanumérique 20 Ex : administrateur, directeur...

login Utilisé pour la connexion alphanumérique 20

password Sera chiffré alphanumérique 100

droits 0 = consultation / 1 = consultation et modification. (note : dans un premier temps, seule la partie « consultation » est prévue en production).

booléen 0 ou 1

À partir de ces données, nous avons réalisé le modèle conceptuel de données page suivante (représentation selon la méthode Merise).

Page 8: RAPPORT DE PROJET SITE WEB - DEV-FLY

8

On constate par exemple qu'une réservation n'est effectuée que par un seul client. En revanche, elle peut concerner plusieurs places, chacune ne pouvant être attribuée qu'à un seul passager. Remarque : certaines tables ne sont pas reliées aux autres, et n'apparaissent pas sur ce modèle. C'est le cas notamment de la table « user », dans laquelle sont renseignées les personnes qui ont accès au back-office. Le script de création de la structure de la base de données est visible en annexe du présent document.

DIAGRAMME DE CAS D’UTILISATION

La fonctionnalité de « réservation d’un vol » sur le site a d'abord été représentée schématiquement, à l'aide du diagramme de cas d'utilisation page suivante.

Page 9: RAPPORT DE PROJET SITE WEB - DEV-FLY

9

La relation d'extension, symbolisée par le mot clé « extend » indique qu'une réservation peut être faite après la recherche d'un vol. Pour réserver, le client doit impérativement être authentifié, comme le montre la relation d'inclusion sur le schéma (mot-clé « include »).

MAQUETTAGE DES IHM

Avant de commencer à coder, nous avons d'abord défini le résultat auquel nous souhaitions arriver. Nous avons défini le scénario de recherche basique d'un vol, pour lequel nous avons réalisé les IHM correspondantes. Ce travail a également permis de mettre en lumière les règles de gestion auxquelles il fallait penser lors de la phase de codage (colonne de droite ci-dessous). Ici, le cas d'un nouveau client est choisi pour illustrer le scénario de recherche d'un vol.

Scénarios IHM Règles de gestion

La personne arrive sur la page d’accueil et doit cliquer sur « bienvenue » afin d’entrer sur le site.

Image 1

La personne se rend sur la page de recherche et saisit les critères de recherche : ville de départ, ville d’arrivée, date de départ, nombre d’adultes et nombre d’enfants.

Image 2 Tous les champs doivent être renseignés et valides : la date doit être au format approprié et ne doit pas être antérieure à la date du jour. Les villes doivent correspondre aux destinations prévues par la compagnie. Les villes de départ et d’arrivée doivent être différentes. Le nombre d’adultes indiqué doit être numérique et supérieur ou égal à 1. Le nombre d’enfants indiqué doit être numérique et supérieur ou égal à 0.

La compagnie renvoie une page de résultats.

Image 3

Page 10: RAPPORT DE PROJET SITE WEB - DEV-FLY

10

L’utilisateur sélectionne un choix. Image 3 Le choix sélectionné doit correspondre à ce que la compagnie propose.

La compagnie envoie un formulaire d’inscription de(s) passager(s) : civilité, nom, prénom, date de naissance.

Image 4

L’utilisateur remplit le formulaire. Image 4 Tous les champs doivent être renseignés et valides : les dates doivent être au format approprié. La civilité doit être soit « Monsieur » soit « Madame ». Les noms et prénoms doivent être constitués de lettres. Au minimum un passager doit être majeur.

La compagnie envoie une fiche client à remplir pour inscription : civilité, nom, prénom, adresse, code postal, ville, pays, mail, tél fixe, mobile, identifiant, mot de passe.

Image 5

L’utilisateur remplit le formulaire. Image 5 Tous les champs doivent être renseignés et valides. La civilité doit être soit « Monsieur » soit « Madame ». Le nom et le prénom doivent être constitués de lettres. Les numéros de téléphone doivent comporter des chiffres exclusivement, et peuvent commencer par « + ». L’adresse e-mail doit être au format correct, sans espaces ni caractères spéciaux ([email protected]). Le login doit être alphanumérique, et ne doit pas être déjà existant dans la base de données. Le mot de passe doit être une chaîne de caractères.

La compagnie envoie une fiche de synthèse + le formulaire de paiement.

Image 6

Le client procède à la transaction. Image 6 Remarque : seul le paiement par carte bancaire est possible.

La compagnie génère et affiche le billet.

Image 7

Remarques:

- Si une valeur dans un des champs du formulaire n’est pas conforme aux attentes, le formulaire est retourné avec un message explicatif en en-tête.

- Tout au long de la procédure, le client a la possibilité à tout moment de revenir à l’accueil en

cliquant sur « Accueil » dans le menu.

Page 11: RAPPORT DE PROJET SITE WEB - DEV-FLY

11

Image 1

Sur la page d'accueil du site, on trouve un carousel dans lequel défilent des images illustrant des destinations proposées par la compagnie. Image 2

La page de recherche d'un vol est la première visible après avoir cliqué sur « bienvenue » (IHM précédente). Elle contient un formulaire à remplir avec les choix de l'utilisateur.

Page 12: RAPPORT DE PROJET SITE WEB - DEV-FLY

12

Image 3

La compagnie renvoie une liste de propositions, en fonction du trajet et de la date choisis. Les vols partant le jour souhaité sont affichés s'il y en a. À défaut, les vols ultérieurs à la date choisie sont proposés au client. Image 4

L'utilisateur renseigne les données sur les passagers. La date de naissance pourra influencer le prix du billet. Le nombre de passagers pour lesquels les informations sont attendues correspond aux nombres d'adultes et d'enfants préalablement renseignés.

Page 13: RAPPORT DE PROJET SITE WEB - DEV-FLY

13

Image 5

Ici l'utilisateur s'inscrit sur le site. Il pourrait s'identifier directement s'il possédait déjà un compte client.

Page 14: RAPPORT DE PROJET SITE WEB - DEV-FLY

14

Image 6

Un récapitulatif est affiché afin de permettre au client de vérifier l'exactitude des données avant de procéder au paiement.

Image 7

Après avoir procédé au règlement, l'utilisateur visualise les détails de son billet, avec la liste des passagers et les places qui leur sont attribuées.

Page 15: RAPPORT DE PROJET SITE WEB - DEV-FLY

15

DIAGRAMMES DE SÉQUENCE SYSTÈME : RÉSERVATION D'UN VOL

Des diagrammes de séquence système ont été réalisés avant de démarrer la phase de codage, afin d'être clairs sur la manière de gérer le processus de réservation d'un billet. J'ai fait ressortir différents cas :

1) Cas d’un nouveau client

On voit les échanges entre le client (à gauche) et la compagnie DEV-FLY (à droite). Le client indique des critères de voyage, la compagnie lui renvoie une liste de vols trouvés, il en sélectionne un, et ainsi de suite... Si le client n'a pas encore de compte chez DEV-FLY, on lui demandera de remplir un formulaire pour inscription.

2) Cas d’un client déjà enregistré Un client disposant déjà d’un compte ne remplira pas la fiche d’inscription. On distingue 2 cas :

a) le client est déjà connecté à son compte lors de la recherche du billet :

On saute tout simplement la partie «d'authentification ou d’inscription », car le client est déjà identifié.

Page 16: RAPPORT DE PROJET SITE WEB - DEV-FLY

16

b) Le client n’est pas connecté à son compte lors de la recherche du billet :

Le client va tout simplement renseigner ses login et password déjà existants lorsqu'il lui sera demandé de s'inscrire ou de s'identifier. Pour tous les cas présentés ci-dessus :

- si un vol a lieu le jour souhaité vers la destination choisie, celui-ci sera proposé au client.

- si aucun vol n'a lieu le jour souhaité vers la destination choisie, le client se verra proposer les vols suivants.

- si le nombre de passagers souhaité par le client est supérieur au nombre de places restantes dans

l'avion, le vol est considéré comme complet.

- si tous les vols susceptibles d'être proposés sont complets, le client est informé qu'aucun vol ne correspond à sa demande.

ARCHITECTURE DE L'APPLICATION

L'application a été réalisée en PHP5 orienté objet et construite selon le modèle MVC2. Le modèle MVC2 est un motif de conception (on emploie souvent la dénomination anglaise « design pattern »). Le principe du modèle MVC repose, comme ses initiales l'indiquent, sur la séparation entre les différents éléments du code :

- le Modèle (Model en anglais) concerne le cœur du métier. C'est lui qui va interagir avec la base de données, et traiter les données pour fournir de l'information aux contrôleurs.

- le Contrôleur (Controller en anglais) va diriger vers une page ou une autre en fonction des informations reçues.

- la Vue (View en anglais), comme son nom le laisse penser, concerne tout ce qui a trait à la présentation.

Page 17: RAPPORT DE PROJET SITE WEB - DEV-FLY

17

La spécificité du MVC « 2 » est l'utilisation d'un contrôleur frontal (on emploie très souvent la dénomination anglaise « front-controller »), qui est un point d'entrée unique dans l'application. De plus, chaque contrôleur correspond à une classe (ce qui n'est pas le cas avec le MVC « 1 »). Concernant l'application pour la société DEV-FLY, voici l'arborescence des fichiers constituant le projet : ├── conf

│ └── configuration.ini

├── controller

│ ├── AffichageClientController.php

│ ├── AffichageEmployeController.php

│ ├── AffichagePassagerController.php

│ ├── AffichagePassagersController.php

│ ├── AffichageReservationController.php

│ ├── AffichageVolController.php

│ ├── AffichageVolsController.php

│ ├── AuthAdminController.php

│ ├── AuthClientController.php

│ ├── BilletController.php

│ ├── ContactController.php

│ ├── CreationClientController.php

│ ├── DeconnexionController.php

│ ├── DetailsReservationController.php

│ ├── EnregistrementPassagersController.php

│ ├── ListeReservationsController.php

│ ├── PropositionsController.php

│ └── SyntheseController.php

├── dao

│ └── MysqlDao.php

├── entity

│ ├── Client.php

│ ├── Employe.php

│ ├── Passager.php

│ ├── Personne.php

│ ├── Place.php

│ ├── Reservation.php

│ ├── User.php

│ └── Vol.php

├── public

│ ├── css

│ │ ├── bootstrap.css

│ │ └── style.css

│ ├── images

│ │ ├── avions1.jpg

│ │ ├── img10.jpg

│ │ ├── img11.jpg

│ │ ├── img12.jpg

│ │ ├── img13.jpg

│ │ ├── img1.jpg

│ │ ├── img2.jpg

│ │ ├── img3.jpg

│ │ ├── img4.jpg

│ │ ├── img5.jpg

│ │ ├── img6.jpg

│ │ ├── img7.jpg

│ │ ├── img8.jpg

Page 18: RAPPORT DE PROJET SITE WEB - DEV-FLY

18

│ │ ├── img9.jpg

│ │ └── logo.jpg

│ ├── include

│ │ ├── footer.php

│ │ ├── formulaire_auth_admin.php

│ │ ├── formulaire_connexion_client.php

│ │ ├── formulaire_creation_client.php

│ │ ├── menu_bo.php

│ │ └── menu_front_office.php

│ ├── js

│ │ └── bootstrap.js

│ ├── accueil.php

│ ├── billet.php

│ ├── bo_choix_critere.php

│ ├── bo_client.php

│ ├── bo_employe.php

│ ├── bo_passager.php

│ ├── bo_passagers.php

│ ├── bo_reservation.php

│ ├── bo_vol.php

│ ├── bo_vols.php

│ ├── confirmation_inscription.php

│ ├── connexion_client.php

│ ├── contact.php

│ ├── enregistrement_passagers.php

│ ├── erreur_401.php

│ ├── erreur_500.php

│ ├── espace_client.php

│ ├── index.php

│ ├── la_compagnie.php

│ ├── propositions.php

│ ├── recherche.php

│ ├── retour_contact.php

│ └── synthese.php

├── test

│ ├── test_motdepassechiffre.php

│ └── test_MysqlDao.php

└── setup.php

On constate que les fichiers sont séparés dans différents dossiers :

- « dao », pour Data Access Object (= objet d’accès aux données). À l'intérieur se trouve le fichier MysqlDao.php dans lequel la classe « MysqlDao » contient des méthodes qui « attaquent » la base de données pour en extraire de l'information utilisable.

- « entity » est utilisé pour les objets métiers. Les différentes classes (Client, Passager, Vol...) vont permettre de créer au sein de l'application un ensemble d'objets partageant les mêmes méthodes et attributs. Par exemple, chaque vol possède un numéro, un lieu de départ, et un lieu d'arrivée.

- « controller », qui comme son nom l'indique, regroupe les contrôleurs utilisés. Ceux-ci font les

vérifications nécessaires et, en fonction de cela, renvoient vers une vue ou une autre. Par exemple, le contrôleur « PropositionsController » intervient après que l'utilisateur ait renseigné les données concernant le vol qu'il recherche (villes de départ et d'arrivée, date...). Le contrôleur va vérifier la saisie de l'utilisateur, et il peut notamment :

Page 19: RAPPORT DE PROJET SITE WEB - DEV-FLY

19

o renvoyer vers une vue contenant une liste des différents vols correspondant aux critères du client, s'il y en a.

o rediriger vers la page précédente, si le client a par exemple « omis » de préciser une ville

d'arrivée (un message lui demandera alors d'indiquer la destination choisie).

- « public » contient les différentes vues. Par exemple, le fichier propositions.php correspond à la vue évoquée précédemment. Les différents vols correspondant aux critères du client sont listés au sein d'un formulaire. Il doit en choisir un et valider.

« public » contient également :

o un sous-dossier « include » pour les portions de vues qui se répètent sur plusieurs pages

(elles sont alors « inclus » dans ces pages). C'est le cas par exemple du pied de page ou des menus.

o un sous-dossier « images », dans lequel sont stockées les images utilisées par l'application.

o un sous-dossier « css » contient le code css. On y trouve le fichier css de Bootstrap (pour

rappel, il s'agit du framework développé par Twitter qui offre un panel important de « briques » réutilisables au sein de notre propre site). Un second fichier (style.css) contient le style personnalisé que nous avons écrit « à la main » pour nos pages.

o un sous-dossier « js » contient le code JavaScript de Bootstrap dont nous avons intégré des

éléments au site (par exemple, le carousel de la page d'accueil).

o un fichier nommé .htaccess. Il permet de définir les règles de réécriture d'URL sur lesquelles l'application se base. Le principe est d'accéder aux pages via des URL « réécrites », plus propres (on a parfois recours à ces méthodes pour améliorer le référencement par exemple). À cet effet, on utilise les expressions régulières : on indique un motif, ainsi que la page vers laquelle on doit être renvoyé si l'URL correspond au motif.

Pour illustrer, prenons le code suivant :

Les parenthèses servent à capter un motif qui pourra être réutilisé dans la redéfinition de l'URL (ici, le $1 sera remplacé par le motif capté). L'expression régulière définie ici correspond à « une chaîne de lettres majuscules et/ou minuscules (qui sera captée) suivi d'un C majuscule ». Ex : BilletC La chaîne captée est « Billet ». On sera renvoyé vers l'URL indiquée, en remplaçant $1 par la chaîne captée, ce qui donnera : index.php?controller=BilletController&method=action (Le visiteur, lui, verra seulement la chaîne « BilletC » dans la barre d’adresse de son navigateur).

o le fichier index.php qui est le fameux point d'entrée dans l'application (front controller).

Lorsqu'on veut appeler une méthode d'un contrôleur, on arrivera toujours en premier sur index.php (cf la réécriture d'URL précédemment évoquée). C'est en récupérant les informations dans l'URL que le front controller « saura » vers quel contrôleur rediriger, et quelle méthode « activer ». Si on reprend l'exemple du paragraphe précédent, le contrôleur sera « BilletController » et la méthode « action ».

Page 20: RAPPORT DE PROJET SITE WEB - DEV-FLY

20

- « test » est un dossier qui n'est pas utile pour l'application finale. Il contient des tests qui ont été réalisés au fur et à mesure du développement, lors de la phase de programmation.

- « conf » contient un fichier configuration.ini. Celui-ci contient les informations de connexion à la

base de données (nom de la base, nom de l'utilisateur, mot de passe...). Enfin, on trouve à la racine un fichier nommé setup.php. Il permet de définir des constantes qui pourront être utilisées au sein de l'application. Par exemple, la constante VIEW correspond au chemin absolu vers le dossier « public » contenant les vues. Le fichier setup.php récupère les informations concernant la base de données contenues dans le fichier configuration.ini. Concernant les noms de fichiers, j'ai essayé de respecter une norme :

- les controllers sont en CamelCase avec la première lettre en majuscule (car ce sont des classes) - les vues ont des noms en minuscules séparés par des underscores.

RENDU

Cette section présente les différentes pages qui s'affichent, de l'arrivée du visiteur sur le site à la fin du processus de réservation. On peut remarquer que le rendu est conforme au maquettage des IHM présenté en amont.

On voit ici la page d'accueil du site, avec des images qui défilent et donnent envie de voyager. Ici, la photo illustre des vacances à la mer. En arrière-plan, une image représentant des avions est présente. On retrouve les couleurs de la compagnie : bleu, blanc, et rouge. Cette image reste fixe sur la totalité des pages du site. Seul le rectangle au premier plan voit son contenu changer. Les autres vues présentées ci-après se focalisent sur cette partie centrale. Tout d’abord, le visiteur doit indiquer ses critères pour le vol qu'il souhaite réserver (vue suivante).

Page 21: RAPPORT DE PROJET SITE WEB - DEV-FLY

21

On remarque un menu en haut, qui est présent sur chaque page lorsqu'on visite le site (sauf en cas de connexion à la partie « administrateur »). Une indication montre la section sur laquelle on se trouve (ici, « chercher un vol »). Pour la couleur de fond, nous sommes restés dans les tons bleus à la demande de la compagnie. Le bleu ciel s'est imposé, car il semble approprié pour une compagnie aérienne et n'est pas agressif à l’œil. À droite, une barre de défilement permet de faire défiler verticalement le contenu de la page. Elle est présente sur tout le site, dès lors que le contenu d'une page l'impose. On voit ici la même page, mais remplie par l'utilisateur : En cas d'erreur, un message indicatif s'affiche. Par exemple ici, le visiteur souhaite voyager à une date passée : il doit donc corriger son erreur. Les champs du formulaire sont déjà préremplis pour lui éviter une ressaisie. Pour l'exemple, le visiteur corrige la date de départ souhaitée à une date ultérieure :

Page 22: RAPPORT DE PROJET SITE WEB - DEV-FLY

22

Le visiteur arrive ensuite sur une page de résultats : Si un vol avait été trouvé à la date de départ souhaitée (05/12/2013), on lui aurait proposé uniquement ce vol à cette date. À défaut, comme ici, on lui propose les vols suivants. Les prix indiqués dépendent des nombres d'adultes et d'enfants renseignés à la vue précédente. L'utilisateur doit sélectionner un vol avant de poursuivre. Ici, il a tenté de valider sans avoir choisi de vol au préalable, il y a donc un message qui s'affiche en rouge lui demandant de faire un choix. Pour l'exemple, le visiteur choisi finalement le vol N°DF5 :

On lui demande ensuite d'inscrire les passagers : Ici, 2 passagers sont renseignées car le client a indiqué qu'1 adulte + 1 enfant participeraient au vol. À cette étape, les dates de naissance vont être vérifiées. Il faut au minimum qu'une personne majeure voyage (la compagnie ne propose pas de service d'encadrement pour les mineurs voyageant seuls). Par ailleurs, l'âge des passagers à la date du vol est calculé, afin de déterminer le prix définitif du billet. Sur l'écran suivant, l'utilisateur peut :

- se connecter s'il possède déjà un compte

- s'enregistrer pour se créer un compte.

Page 23: RAPPORT DE PROJET SITE WEB - DEV-FLY

23

Lors de la phase d'enregistrement, plusieurs vérifications sont faites : les champs doivent être au format valide, et le client ne doit pas choisir un login déjà utilisé par quelqu'un d'autre. On vérifie aussi que le client ne modifie pas le code HTML pour indiquer une civilité farfelue au lieu de « Monsieur » ou « Madame ». On arrive ensuite sur une page récapitulative : Ici, le prix à payer pour le billet est de 1522€, ce qui est conforme à ce qui était prévu : un adulte + un enfant de moins de 3 ans (à la date du vol !). Si jamais le client avait finalement renseigné 2 adultes, le prix final indiqué sur cette vue serait différent du prix indicatif donné initialement. Pour finir, le client obtient un récapitulatif de son billet : On constate que le prix pour le passager « enfant » n'est bien que de 50 € (soit uniquement l'assurance).

Page 24: RAPPORT DE PROJET SITE WEB - DEV-FLY

24

CODE SOURCE DE L'APPLICATION

Voici quelques extraits du code relatif au processus de réservation décrit précédemment. J'ai fait en sorte de commenter tout le code que j'ai produit, afin de faciliter sa compréhension par toute personne ayant à le consulter. Avant de proposer des vols à l'utilisateur, des vérifications sont effectuées, par exemple :

$jour, $mois, $annee ont été récupérées depuis le formulaire. $datedujour est un objet DateTime, auquel va être comparé la date de départ souhaitée, préalablement mise également sous forme d'objet DateTime. $messages[] correspond à un tableau de messages d'erreur qui seront affichées au client le cas échéant. On va d'ailleurs l'utiliser pour savoir si le client doit être ramené sur le formulaire de recherche (= si le tableau contient des erreurs, autrement dit s'il n'est pas vide), ou si on peut appeler la méthode de recherche d'un vol.

On initialise ici un nouvel objet MysqlDao que l'on nomme $dao. On appelle sa méthode getPropositions(), qui retourne un tableau d'objets Vol. Voici une requête SQL utilisée dans cette méthode :

On cherche les vols circulant à la date demandée (passée en paramètre de la méthode sous forme d'objet DateTime).

Page 25: RAPPORT DE PROJET SITE WEB - DEV-FLY

25

DATE_FORMAT permet de déterminer un format pour la date, ici jour/mois/année heures:minutes. Il est important de vérifier que les vols proposés au client ne sont pas complets ! On doit vérifier que le nombre de places libres dans l'avion est supérieur ou égal au nombre de places requises par le client. Pour connaître le nombre de places libres : 1) on récupère le nombre de places total dans l'avion, qui est en fait une constante, car tous les avions de la compagnie ont le même nombre de places. Constante définie dans la classe Vol :

Utilisation de la constante au sein de la méthode getPropositions() :

2) on compte le nombre de places déjà réservées avec « count », que l'on retranche du nombre précédent. Si aucune place n'est réservée (cf « ifnull »), on retranche zéro. On remarque l'utilisation de «:datedepart » ou «:villearrivee ». Cela est dû à l'utilisation de requêtes préparées. Si on exécutait les requêtes directement, on courrait le risque d'une injection SQL de la part d'un utilisateur malveillant (cela consiste à exploiter une faille de sécurité, en interagissant avec la base de données). Avec les requêtes préparées, le code que l'on tenterait d'injecter ne serait pas interprété. Pour cela, on prépare d'abord la requête (mot-clé « prepare »), puis on lie les paramètres, par exemple ici à l'aide de bindParam :

(...) Enfin, on exécute la requête :

Les vols trouvés sont récupérés sous forme d'un tableau d'objets Vol. Ils sont ensuite affichés sur la vue (propositions.php) :

Page 26: RAPPORT DE PROJET SITE WEB - DEV-FLY

26

On utilise un « foreach » pour parcourir le tableau d'objets. foreach($vols as $vol) va permettre d’interagir sur chaque objet (qu'on nommera $vol) contenu dans la tableau d'objet $vols. On peut donc appeler les méthodes sur chaque objet (autrement dit à chaque passage dans la boucle). Par exemple, $vol->getNumVol() permet de récupérer le numéro de vol. On utilise la méthode statique createFromFormat de la classe DateTime (d'où les « :: ») pour indiquer dans quel format se trouve la date à partir de laquelle on souhaite créer un objet DateTime. Une fois l'objet créé, on peut appeler les méthodes dessus, par exemple ici « format ». Le tout est mis dans un formulaire (on voit la balise HTML « form ») : l'utilisateur devra en effet sélectionner un vol parmi ceux proposés. C'est le contenu de l'attribut « value » (donc le numéro de vol) qui sera récupéré via la méthode POST. L'attribut « action » permet de spécifier la page qui fera le traitement. Ici, on a « /EnregistrementPassagersC ». Pour rappel, cela correspond à la règle de réécriture suivante définie dans le .htaccess :

Autrement dit, la page qui traitera les données en réalité est le controller « EnregistrementPassagersController » dont on appelle la méthode « action ». Lors de la phase d'enregistrement des passagers, on doit vérifier l'âge des personnes : 1) il faut s'assurer qu'au minimum une personne majeure voyage. 2) il faut voir si la personne a plus ou moins de 3 ans, à la date du vol, car cela détermine le prix du billet. On va faire appel pour cela à 2 méthodes dans MysqlDao :

On utilise des objets DateTime qu'on initialise en passant en paramètre des dates au format ISO (AAAA-MM-JJ) : la date de naissance du passager à tester d'une part, et la date du vol d'autre part. On récupère ensuite l'intervalle entre les 2 dates grâce à « diff », qui renvoie un objet de type DateInterval qu'on nomme $interval. $interval->format('%a') permet de récupérer un nombre de jours, que l'on compare à 365 * 18 (soit 18 ans). La fonction retourne un booléen (true si la personne est majeure à la date du vol).

Page 27: RAPPORT DE PROJET SITE WEB - DEV-FLY

27

La seconde méthode est basée sur le même principe, mais vérifie si la personne a plus de 3 ans (autrement dit, si elle paye plein tarif).

L'âge de la personne (en jours, à la date du vol) est comparé à 365 * 3. Là encore, un booléen est renvoyé (true si la personne paye plein tarif). Ces 2 méthodes du dao sont appelées dans le controller « EnregistrementPassagersController » :

On fait le test autant de fois qu'il y a de passagers : on entre dans la boucle while tant que $i est inférieur au nombre de passagers en session, et on incrémente $i de 1 à chaque passage dans la boucle. En fonction de l'âge trouvé, on incrémente le nombre « d'adultes » (+ de 3 ans) ou le nombre d'enfants, que l'on stocke en session. On vérifie également la présence d'un « vrai » adulte (+ de 18 ans). On commence par initialiser le booléen $un_vrai_adulte_present à false. On le passe à true dès lors que $dao->estMajeur renvoie vrai. Après l'enregistrement des passagers, on regarde si le client est connecté.

Page 28: RAPPORT DE PROJET SITE WEB - DEV-FLY

28

Le controller va, avec la fonction « header », renvoyer sur :

- la page de synthèse si le client est déjà connecté

- la page de connexion dans le cas contraire. Au préalable, on enregistre en session la « page sur laquelle on devra aller » une fois la connexion effectuée. Cela permet de ne pas perdre les informations sur la réservation en cours.

Lorsque le client va s'authentifier, on aura recours à la méthode clientLogin() du dao :

On recherche le login qui correspond aux login et password renseignés. S'il y a une correspondance, un tableau contenant le login et le mot de passe (chiffré) est renvoyé. On a recours là aussi à une requête préparée pour se protéger des injections SQL. J'ai choisi de chiffrer les mots de passe pour plus de sécurité. J'utilise pour cela la fonction « crypt » avec l’algorithme de hachage « sha256 ». L'emploi d'un grain de sel permet de compliquer le déchiffrage de la chaîne. Une fois le client connecté, si tout s'est bien passé, il visualise la page récapitulant sa réservation. On a recours à nouveau à un foreach pour afficher les informations sur chaque passager.

Page 29: RAPPORT DE PROJET SITE WEB - DEV-FLY

29

On ouvre la balise HTML <ul>, pour unordered list = liste non ordonnée. À l'intérieur, on boucle sur chaque passager trouvé que l'on va lister (balise <li>). À chaque tour de boucle, on agit sur l'objet Passager $passager qui se trouve dans le tableau de Passagers en session. On appelle dessus les méthodes getNom() et getPrenom() pour récupérer ses nom et prénom. Pour la date de naissance, on utilise un objet DateTime sur lequel on appelle « format('d/m/Y') », afin d'afficher la date dans un format français (JJ/MM/AAAA). Pour finir, une fois le paiement et les vérifications nécessaires effectués, le client aura un aperçu de son billet sous forme de tableau (balise <table>). Hormis la ligne de titres, chaque ligne (<tr>) correspond à un passager. On utilise htmlentities pour convertir les caractères en entités HTML : c'est une sécurité, car les informations affichées sur cette page proviennent de la base de données. Si un script avait été inséré dans la base de données pour une raison ou une autre, il ne serait pas interprété, grâce à cette protection. On peut remarquer que le tout se trouve dans une balise <div> avec l'id=''billet''. Cela sert uniquement pour définir le style. Voici un extrait du fichier style.css :

Ce style s'applique au tableau à l'intérieur de l'id billet. On définit sa couleur de fond, sa taille, son positionnement par rapport à l'élément parent. De plus, le texte sera centré.

Page 30: RAPPORT DE PROJET SITE WEB - DEV-FLY

30

MISE EN LIGNE DU SITE

J'ai choisi d'héberger le site chez moi, sur mon propre serveur (tournant sous Debian Wheezy), largement suffisant pour un site qui concerne une compagnie fictive, n'ayant donc pas vocation à accueillir des milliers de visiteurs simultanément... Pour que le site fonctionne correctement, j'ai configuré un hôte virtuel avec Apache2, en autorisant la réécriture d'URL (module « rewrite »).

CONCLUSION

La réalisation de ce site web est un projet intéressant. Cela m’a permis de mettre en application les connaissances théoriques enseignées en cours, pour obtenir un résultat concret. J’ai même été incitée à aller plus loin que le cours, et à parcourir la toile pour enrichir mes connaissances en programmation, afin d’optimiser mon site. Le résultat est concluant, les exigences définies dans le cahier des charges ont été respectées, le rendu obtenu est conforme à ce qui était attendu. Le site pourrait encore être amélioré, on pourrait implémenter des fonctionnalités supplémentaires, telles que :

- l’auto-complétion des villes de départ et d'arrivée depuis une liste d'aéroports définie,

- la réservation d’un billet aller-retour, avec une réduction qui s'appliquerait dans ce cas,

- la possibilité pour un client de récupérer son mot de passe en cas de perte,

- un système de points de fidélité qui donnerait droit à des réductions. Concernant un aspect plus technique, on pourrait :

- rendre le site pleinement responsive (avoir le même confort de navigation quels que soient l'appareil et l'écran),

- harmoniser davantage le code : par exemple, faire en sorte que les contrôleurs incluent systématiquement les vues, au lieu de rediriger parfois dessus,

- ajouter du JavaScript, pour la vérification des formulaires par exemple. Il pourrait faire des tests préliminaires pour s'assurer côté client que les informations sont correctement rentrées. Les mêmes tests seront toujours effectués côté serveur, mais étant donné que la plupart des utilisateurs n'ont pas désactivé le JavaScript, cela économiserait le renvoi d'une page.

Ce site n'est pas parfait, mais il s'agit d'une bonne première expérience, qui marque le début d’une longue série de sites web que je serai amenée à réaliser...

Page 31: RAPPORT DE PROJET SITE WEB - DEV-FLY

31

WEBOGRAPHIE

J'ai consulté différents sites web pour m'aider à réaliser le mien, parmi lesquels : PHP.net, le site de référence sur le langage PHP http://php.net Developpez.com, qui offre des réponses sur des questions de programmation http://www.developpez.com Wikipédia, pour des informations diverses, sur l'UML par exemple http://fr.wikipedia.org Le site de Bootstrap, en anglais http://twitter.github.io/bootstrap

ANNEXES

Vous trouverez en annexes : - le script de création des tables de la base de données, - la copie du cahier des charges sur laquelle l’application se base.

1 ) Voici le script de création des différentes tables de la base de données (structure uniquement) : -- -- Base de données: `DEVFLY` -- -- -------------------------------------------------------- -- -- Structure de la table `client` -- CREATE TABLE IF NOT EXISTS `client` ( `numclient` int(15) NOT NULL AUTO_INCREMENT, `civilite` varchar(3) DEFAULT NULL, `nom` varchar(50) DEFAULT NULL, `prenom` varchar(50) DEFAULT NULL, `adresse` varchar(100) DEFAULT NULL, `codepostal` varchar(10) DEFAULT NULL, `ville` varchar(20) DEFAULT NULL, `pays` varchar(20) DEFAULT NULL, `mail` varchar(80) DEFAULT NULL, `telfixe` varchar(15) DEFAULT NULL, `mobile` varchar(15) DEFAULT NULL, `login` varchar(20) DEFAULT NULL, `password` varchar(100) DEFAULT NULL, PRIMARY KEY (`numclient`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- --

Page 32: RAPPORT DE PROJET SITE WEB - DEV-FLY

32

-- Structure de la table `contact` -- CREATE TABLE IF NOT EXISTS `contact` ( `id` int(20) unsigned NOT NULL AUTO_INCREMENT, `nom` varchar(50) NOT NULL, `prenom` varchar(50) NOT NULL, `mail` varchar(80) NOT NULL, `sujet` varchar(100) NOT NULL, `telephone` varchar(15) NOT NULL, `message` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Structure de la table `destination` -- CREATE TABLE IF NOT EXISTS `destination` ( `codeaeroport` varchar(3) NOT NULL, `ville` varchar(50) NOT NULL, `pays` varchar(50) NOT NULL, PRIMARY KEY (`codeaeroport`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Structure de la table `employe` -- CREATE TABLE IF NOT EXISTS `employe` ( `numemploye` varchar(5) NOT NULL, `civilite` varchar(3) NOT NULL, `nom` varchar(50) NOT NULL, `prenom` varchar(50) NOT NULL, `adresse` varchar(100) NOT NULL, `codepostal` varchar(10) NOT NULL, `ville` varchar(20) NOT NULL, `pays` varchar(20) NOT NULL, `fonction` varchar(10) NOT NULL, PRIMARY KEY (`numemploye`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Structure de la table `passager` -- CREATE TABLE IF NOT EXISTS `passager` ( `numpassager` int(15) NOT NULL AUTO_INCREMENT, `civilite` varchar(3) NOT NULL, `nom` varchar(50) NOT NULL, `prenom` varchar(50) NOT NULL, `datenaissance` date NOT NULL, PRIMARY KEY (`numpassager`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- --------------------------------------------------------

Page 33: RAPPORT DE PROJET SITE WEB - DEV-FLY

33

-- -- Structure de la table `place` -- CREATE TABLE IF NOT EXISTS `place` ( `numplace` int(15) NOT NULL AUTO_INCREMENT, `numpassager` int(15) NOT NULL, `numvol` varchar(15) NOT NULL, `numreservation` int(15) NOT NULL, `prix` float NOT NULL, PRIMARY KEY (`numplace`), KEY `numreservation` (`numreservation`), KEY `numvol` (`numvol`), KEY `numpassager` (`numpassager`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Structure de la table `reservation` -- CREATE TABLE IF NOT EXISTS `reservation` ( `numreserv` int(15) NOT NULL AUTO_INCREMENT, `datereserv` date NOT NULL, `numclient` int(15) NOT NULL, PRIMARY KEY (`numreserv`), KEY `numclient` (`numclient`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Structure de la table `travailler` -- CREATE TABLE IF NOT EXISTS `travailler` ( `vol` varchar(15) NOT NULL, `pilote` varchar(5) NOT NULL, `copilote` varchar(5) NOT NULL, `hotesse_steward1` varchar(5) NOT NULL, `hotesse_steward2` varchar(5) NOT NULL, `hotesse_steward3` varchar(5) NOT NULL, `date` date NOT NULL, KEY `vol` (`vol`), KEY `pilote` (`pilote`), KEY `co-pilote` (`copilote`), KEY `hotess/stewart1` (`hotesse_steward1`), KEY `hotess/stewart2` (`hotesse_steward2`), KEY `hotess/stewart3` (`hotesse_steward3`), ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Structure de la table `user` -- CREATE TABLE IF NOT EXISTS `user` ( `id` varchar(5) NOT NULL, `statut` varchar(20) NOT NULL, `login` varchar(20) NOT NULL, `password` varchar(100) NOT NULL,

Page 34: RAPPORT DE PROJET SITE WEB - DEV-FLY

34

`droits` tinyint(1) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Structure de la table `vol` -- CREATE TABLE IF NOT EXISTS `vol` ( `numvol` varchar(15) NOT NULL, `lieudep` varchar(50) NOT NULL, `lieuarriv` varchar(50) NOT NULL, `dateheuredep` datetime NOT NULL, `dateheurearrivee` datetime NOT NULL, `tarif` float NOT NULL, PRIMARY KEY (`numvol`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Contraintes pour les tables exportées -- -- -- Contraintes pour la table `place` -- ALTER TABLE `place` ADD CONSTRAINT `place_ibfk_4` FOREIGN KEY (`numpassager`) REFERENCES `passager` (`numpassager`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `place_ibfk_5` FOREIGN KEY (`numvol`) REFERENCES `vol` (`numvol`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `place_ibfk_6` FOREIGN KEY (`numreservation`) REFERENCES `reservation` (`numreserv`) ON DELETE CASCADE ON UPDATE CASCADE; -- -- Contraintes pour la table `reservation` -- ALTER TABLE `reservation` ADD CONSTRAINT `reservation_ibfk_1` FOREIGN KEY (`numclient`) REFERENCES `client` (`numclient`) ON DELETE CASCADE ON UPDATE CASCADE; -- -- Contraintes pour la table `travailler` -- ALTER TABLE `travailler` ADD CONSTRAINT `travailler_ibfk_10` FOREIGN KEY (`hotesse_steward3`) REFERENCES `employe` (`numemploye`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `travailler_ibfk_11` FOREIGN KEY (`vol`) REFERENCES `vol` (`numvol`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `travailler_ibfk_2` FOREIGN KEY (`pilote`) REFERENCES `employe` (`numemploye`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `travailler_ibfk_7` FOREIGN KEY (`copilote`) REFERENCES `employe` (`numemploye`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `travailler_ibfk_8` FOREIGN KEY (`hotesse_steward1`) REFERENCES `employe` (`numemploye`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `travailler_ibfk_9` FOREIGN KEY (`hotesse_steward2`) REFERENCES `employe` (`numemploye`) ON DELETE CASCADE ON UPDATE CASCADE;

2) Vous trouverez, page suivante, le cahier des charges du projet :

Page 35: RAPPORT DE PROJET SITE WEB - DEV-FLY

35

Page 36: RAPPORT DE PROJET SITE WEB - DEV-FLY

36

Sommaire

Contexte ___________________________________________________________________________ 37

Objectif ____________________________________________________________________________ 37

Contraintes _________________________________________________________________________ 37

Scénario de recherche d’un vol _________________________________________________________ 38

Réservation d’un billet ________________________________________________________________ 46

Cas d’un nouveau client ____________________________________________________________________ 46

Cas d’un client déjà enregistré _______________________________________________________________ 47

Espace client ________________________________________________________________________ 48

Back-office _________________________________________________________________________ 48

Recherche par vol _________________________________________________________________________ 49

Recherche par passager ____________________________________________________________________ 49

Recherche par employé ____________________________________________________________________ 50

Recherche par réservation __________________________________________________________________ 50

Recherche par client _______________________________________________________________________ 51

Cas d’une recherche par N° de vol ____________________________________________________________ 52

Cas d’une recherche par N° de passager _______________________________________________________ 53

Cas d’une recherche par N° d’employé ________________________________________________________ 54

Cas d’une recherche par N° de réservation _____________________________________________________ 56

Cas d’une recherche par N° de client __________________________________________________________ 58

Modèle Conceptuel de Données ________________________________________________________ 59

Page 37: RAPPORT DE PROJET SITE WEB - DEV-FLY

37

CAHIER DES CHARGES

PROJET DEV-FLY

Contexte DEV-FLY est une filiale d'Air Greta France créée en décembre 2012. Elle est spécialisée dans le marché

low-cost du transport de passagers. Implantée à Paris, elle emploie 978 salariés. Sa flotte est constituée de

126 avions Airfly E321 de 170 places qui desservent 42 destinations, une fois par semaine.

Jusqu’à maintenant, Air Greta France ne gérait pas les vols low-costs. C’est pour se faire une place sur ce

marché porteur qu’elle a décidé de créer DEV-FLY. En effet, les vols low-costs devraient s’accroître de

50% d’ici 2020, et Air Greta France souhaite prendre part à cette croissance.

Objectif Jusqu’à présent, la filiale DEV-FLY avait recours aux logiciels de sa maison-mère. Aujourd’hui, elle

souhaite avoir son propre système d’information, afin d’avoir un outil personnalisé, sur lequel de

nouvelles fonctionnalités pourraient facilement se greffer.

L’application devra couvrir :

- la possibilité de consulter et réserver des vols, pour 1 ou plusieurs passagers

- la gestion d’un espace client (avec login et mot de passe)

- des fonctionnalités en back-office : visualisation détaillée des passagers, des vols, des

réservations, des clients et des employés. Chaque élément renvoie vers d’autres informations.

Ainsi par exemple, la description d’un vol contient les différents employés qui y travaillent. Un

clic sur l’identifiant d’un employé amène à la page détaillée sur cet employé, etc.

Le tout prendra la forme d’un site web.

Remarques :

- La gestion des bagages n’est pas prise en compte (chaque voyageur a droit à un bagage de 23kg en soute

et à un bagage à main de 10kg maximum, inclus dans le prix du billet – seule exception : les enfants de

moins de 2 ans n’ont droit qu’au bagage à main).

- Sur un vol, on retrouve systématiquement 5 membres du personnel : 1 pilote, 1 copilote, et 3 stewards

ou hôtesses.

- L'accès au back-office sera protégé par un login et un mot de passe individuels, qui seront directement

délivrés aux personnes concernées par l'administrateur de la base de données.

- Le prix d'un billet dépend du vol choisi et de l'âge du passager (les enfants de moins de 3 ans ne payent

que le prix de l'assurance, soit 50 €).

- Un vol a un numéro unique (ex : le Paris - Tunis du 02/03 n'aura pas le même numéro que le Paris –

Tunis du 26/03).

Contraintes - Seulement 3 personnes dédiées au projet.

- L’application doit avoir un temps de réponse de 2 secondes maximum avant d’afficher un résultat.

- Un élément de la charte graphique de la société doit être respecté : une référence aux couleurs

bleu, blanc, et rouge, doit être faite.

- Le projet doit être terminé dans un délai de 2 mois à compter de l'approbation du cahier des

charges par le comité de pilotage.

- Un client peut réserver pour plusieurs passagers (quelqu’un réserve pour son conjoint et ses

enfants par exemple). Ainsi, une réservation est associée à un seul client mais peut être reliée à

plusieurs passagers.

Page 38: RAPPORT DE PROJET SITE WEB - DEV-FLY

38

Scénario de recherche d’un vol Ici, le cas d’un nouveau client est choisi pour illustrer ce scénario.

Scénarios IHM Règles de gestion

La personne arrive sur la page

d’accueil et doit cliquer sur

« bienvenue » afin d’entrer sur le

site.

Image 1

La personne se rend sur la page de

recherche et saisit les critères de

recherche : ville de départ, ville

d’arrivée, date de départ, nombre

d’adultes et nombre d’enfants.

Image 2 Tous les champs doivent être

renseignés et valides : la date doit

être au format approprié et ne doit

pas être antérieure à la date du jour.

Les villes doivent correspondre aux

destinations prévues par la

compagnie. Les villes de départ et

d’arrivée doivent être différentes. Le

nombre d’adultes indiqué doit être

numérique et supérieur ou égal à 1.

Le nombre d’enfants indiqué doit

être numérique et supérieur ou égal à

0.

La compagnie renvoie une page

de résultats.

Image 3

L’utilisateur sélectionne un choix. Image 3 Le choix sélectionné doit

correspondre à ce que la compagnie

propose.

La compagnie envoie un

formulaire d’inscription de(s)

passager(s) : civilité, nom,

prénom, date de naissance.

Image 4

L’utilisateur remplit le formulaire. Image 4 Tous les champs doivent être

renseignés et valides : les dates

doivent être au format approprié. La

civilité doit être soit « Monsieur »

soit « Madame ». Les noms et

prénoms doivent être constitués de

lettres. Au minimum un passager doit

être majeur.

La compagnie envoie une fiche

client à remplir pour inscription :

civilité, nom, prénom, adresse,

code postal, ville, pays, mail, tél

fixe, mobile, identifiant, mot de

passe.

Image 5

L’utilisateur remplit le formulaire. Image 5 Tous les champs doivent être

renseignés et valides. La civilité doit

être soit « Monsieur » soit

« Madame ». Les noms et prénoms

doivent être constitués de lettres. Les

numéros de téléphone doivent

comporter des chiffres

exclusivement, et peuvent

commencer par « + ». L’adresse e-

Page 39: RAPPORT DE PROJET SITE WEB - DEV-FLY

39

mail doit être au format correct, sans

espaces ni caractères spéciaux

([email protected]). Le login doit être

alphanumérique, et ne doit pas être

déjà existant dans la base de données.

Le mot de passe doit être une chaîne

de caractères.

La compagnie envoie une fiche de

synthèse + le formulaire de

paiement.

Image 6

Le client procède à la transaction. Image 6 Remarque : seul le paiement par carte

bancaire est possible.

La compagnie génère et affiche le

billet.

Image 7

Remarques:

- si une valeur dans un des champs du formulaire n’est pas conforme aux attentes, le formulaire est

retourné avec un message explicatif en en-tête.

- Tout au long de la procédure, le client a la possibilité à tout moment de revenir à l’accueil en

cliquant sur « Accueil » dans le menu. Image 1

Page 40: RAPPORT DE PROJET SITE WEB - DEV-FLY

40

Image 2

Page 41: RAPPORT DE PROJET SITE WEB - DEV-FLY

41

Image 3

Page 42: RAPPORT DE PROJET SITE WEB - DEV-FLY

42

Image 4

Page 43: RAPPORT DE PROJET SITE WEB - DEV-FLY

43

Image 5

Page 44: RAPPORT DE PROJET SITE WEB - DEV-FLY

44

Image 6

Page 45: RAPPORT DE PROJET SITE WEB - DEV-FLY

45

Image 7

Page 46: RAPPORT DE PROJET SITE WEB - DEV-FLY

46

Réservation d’un billet

La fonctionnalité de « réservation » sur le site par un client est résumée ici au moyen d'un diagramme de

cas d'utilisation :

Pour réserver un billet, le processus sera le suivant :

Cas d’un nouveau client

Page 47: RAPPORT DE PROJET SITE WEB - DEV-FLY

47

Cas d’un client déjà enregistré Un client disposant déjà d’un compte ne remplira pas la fiche d’inscription.

On distingue 2 cas :

a) le client est déjà connecté à son compte lors de la recherche du billet :

b) Le client n’est pas connecté à son compte lors de la recherche du billet :

Pour tous les cas présentés ci-dessus :

- si un vol a lieu le jour souhaité vers la destination choisie, celui-ci sera proposé au client.

- si aucun vol n'a lieu le jour souhaité vers la destination choisie, le client se verra proposer les vols

suivants.

- si le nombre de passagers souhaité par le client est supérieur au nombre de places restantes dans l'avion,

le vol est considéré comme complet.

- si tous les vols susceptibles d'être proposés sont complets, le client est informé qu'aucun vol ne

correspond à sa demande.

Page 48: RAPPORT DE PROJET SITE WEB - DEV-FLY

48

Espace client Les différentes opérations dans l’espace client sont :

Dans le cas d’une modification de la réservation, le client est informé dès le début que sa réservation

précédente sera annulée, il doit l'accepter avant de poursuivre.

Back-office Les employés de la compagnie qui ont accès au back-office peuvent effectuer des recherches

multicritères, pour retrouver des informations.

Ci-dessous le diagramme d’activités système symbolisant les différentes options :

Voici les IHM montrant les différentes possibilités de recherche (page suivante):

Page 49: RAPPORT DE PROJET SITE WEB - DEV-FLY

49

Recherche par vol

Recherche par passager

Page 50: RAPPORT DE PROJET SITE WEB - DEV-FLY

50

Recherche par employé

Recherche par réservation

Page 51: RAPPORT DE PROJET SITE WEB - DEV-FLY

51

Recherche par client

Selon le critère choisi, le résultat affiché à l’écran sera différent (page suivante).

Page 52: RAPPORT DE PROJET SITE WEB - DEV-FLY

52

Cas d’une recherche par N° de vol

Page 53: RAPPORT DE PROJET SITE WEB - DEV-FLY

53

Cas d’une recherche par N° de passager

Page 54: RAPPORT DE PROJET SITE WEB - DEV-FLY

54

Cas d’une recherche par N° d’employé

Page 55: RAPPORT DE PROJET SITE WEB - DEV-FLY

55

Page 56: RAPPORT DE PROJET SITE WEB - DEV-FLY

56

Cas d’une recherche par N° de réservation

Page 57: RAPPORT DE PROJET SITE WEB - DEV-FLY

57

Page 58: RAPPORT DE PROJET SITE WEB - DEV-FLY

58

Cas d’une recherche par N° de client

Page 59: RAPPORT DE PROJET SITE WEB - DEV-FLY

59

Modèle Conceptuel de Données

L’application se base sur le modèle de données suivant (ici, représentation selon la méthode Merise) :

Remarque : on utilise également une table « user », dans laquelle sont renseignées les personnes qui ont

accès au back-office en consultation. La table contient un champ « droit » (booléen), ce qui pourra

permettre à terme de distinguer les personnes qui ont uniquement le droit de consultation de celles qui ont

également le droit de modification. Dans un premier temps, seule la partie « consultation » est prévue en

production.