Bases de données

publicité
1/44
TER
Bases de données
2006-2007
2/44
Ministère de l'Éducation Nationale
Université Montpellier II
Rapport de TER
Master informatique
Décembre 2006
Bases de données
2006-2007
Naïtan GROLLEMUND
Jean-Marie CODOL
3/44
4/44
Remerciements
Ce rapport présente nos travaux d'analyse et le début de l'élaboration d'un site
Web pour la gestion d'une banque virtuelle et de ses agences. L'analyse représente environ
les deux tiers de notre réalisation, et pour cette partie, nous tenons tout particulièrement à
remercier Mme Thérèse Libourel (notre professeur de bases de donnée) pour les
nombreuses heures qu'elle nous a consacrées en plus des cours et des Travaux Pratiques du
semestre ainsi que Mme Isabelle Mougenot pour les Travaux Dirigés de Bases de Donnée
qui nous ont aussi beaucoup aidés.
Enfin nous remercions l'Université Montpellier 2 de nous proposer de présenter
un projet de TER, ce qui nous permet de nous spécialiser dans un domaine et de l'explorer
plus en détail.
5/44
Table des matières
1) Introduction.............................................................................................................................6
1.1) - Généralités..............................................................................................................................6
1.2) - Le sujet................................................................................................................................... 6
1.3) - Cahier des charges..................................................................................................................6
2) Stratégie de développement.................................................................................................... 8
2.1) - Outils de développement........................................................................................................8
2.2) - Collaboration permanente.......................................................................................... 11
3) Analyse du projet.................................................................................................................. 12
3.1) - Diagramme des cas d'utilisation...........................................................................................12
3.2) - Diagramme des états............................................................................................................ 14
3.3) - Diagramme des séquences................................................................................................... 15
3.4) - Diagramme des classes........................................................................................................ 18
4) Base de données....................................................................................................................22
4.1) - Création des tables............................................................................................................... 22
4.2) - Trigger..................................................................................................................................22
4.3) - Fonction................................................................................................................................23
4.4) - Procédure..............................................................................................................................23
5) Implémentation.................................................................................................................... 25
5.1) - Base de données................................................................................................................... 25
5.2) - Interface web........................................................................................................................ 26
5.3) - Client Lourd, interface administrateur................................................................................. 33
6) Discussion.............................................................................................................................41
6/44
1-Introduction
1.1- Généralités:
Ce Travail d'Etudes et de Recherche (TER) prend place dans notre formation
d'informaticien au sein de l'Université Montpellier 2 et plus précisément dans l'unité
d'enseignement ''Bases de Données'' (UMINM 132) du premier semestre de Master.
Dans cette unité d'enseignement, nous abordons les notions de :
− ' modèles relationnels et objets ',
− ' normalisations des schémas ',
− ' contraintes et triggers ',
− ' modélisation par UML et E/A ',
− ' utilisation de Power AMC ',
− 'ODL et OCL’.
L’ensemble des leçons nous a apporté un bagage que nous avons utilisé pour mener à
bien ce projet. Cependant nous avons du approfondir certaines notions, notamment au niveau
de l’analyse UML.
Enfin le deuxième point important est notre organisation, nous avons utilisé la
technologie CVS et ainsi nous avons pu travailler à distance et apprendre à utiliser cette
nouvelle méthode de travail.
1.2- Le Sujet:
Une banque possédant plusieurs agences en France, désire mettre en ligne la gestion
de divers produits financiers qu'elle propose aux clients. Nous souhaitons réaliser un site
internet proposant ces produits en ligne. Le site présentera une liste d'agences (on pourra
envisager une interface cartographique pour désigner celles-ci).
[-- Suivi d'une série de contraintes sur les produits, les clients, et les employés. --]
7/44
1.3- Cahier des charges:
Le travail demandé aborde les aspects de conception de base de données ainsi que sa
mise en oeuvre avec Oracle.
Pour cela, il nous est demandé:
1. de modéliser à l'aide d'un diagramme de classe UML L'application proposée (Ne
pas oublier les règles de gestion et les contraintes diverses).
2. de proposer deux mises en oeuvre avec Oracle, l'une avec un schéma relationnel
plat, l'autre avec un schéma relationnel-objet.
3. de réaliser l'implantation de ces 2 types de solutions.
4. de faire un bilan critique des différentes solutions.
5. de réaliser l'interface avec un langage hôte de notre choix.
8/44
2-Stratégie de développement
2.1- Outils de développement:
2.1.1- Subversion (SVN):
On utilise souvent un gestionnaire de version pour les projets de grande ampleur, ou les
projets où le nombre de développeurs est élevé. Au cours d'un TP de bases de données, on nous
a proposé (à tout le groupe de TP) d'utiliser un gestionnaire de version: Subversion.
Subversion est apparu après CVS et s’est avéré être plus performant, les clients sont déjà
présents dans la majorité des distributions linux, et sous Windows, il existe un client simple et
performant : tortoise SVN, qui s'intègre a l’explorer.
N'ayant pas reçu de mail de confirmation pour le service universitaire de Subversion, nous
nous sommes mis à la recherche de serveurs gratuits sur Internet et avons trouvé deux sites :
sourceforge.net (mais sous condition
d'avoir un logiciel anglophone et nous
sommes toujours en attente de la réponse
du jury pour le recevoir).
➢ code.google.com
(contre une simple
inscription au service mail Gmail -immédiat).
➢
Nous avons donc choisi l'offre de
code.google.com et donc à 100 Mo d'espace
de stockage par projet pour un nombre
illimité de projets (avec un wiki et un
gestionnaire de bugs [issue repository]) et le
client TortoiseSVN (pour Windows) afin de
gérer facilement les commandes d’accès au
serveur (commit, update…
toutes les
fonctionnalités de Svn sont accessibles par un
clic droit dans un dossier).
Nous travaillions donc sur 2 parties différentes à un instant t pour éviter les conflits et
restions en contact permanent via MSN Messenger pour se poser des questions et discuter des
différents choix de développement.
9/44
2.1.2- Power AMC:
Power AMC est la version française du logiciel Power Designer. Commercialisé
mondialement par Sybase, ce logiciel permet, entre autre, de modéliser des bases de
données, de générer du code SQL, de générer des données de test, et de calculer des
estimations de taille.
Il gère divers formats de sortie SQL, tel que Oracle 9i que nous utiliserons.
La modélisation intuitive (héritage, clés) et la version française claire nous facilitent
le travail.
10/44
2.1.3- Oracle Express:
En Novembre 2005, la Société 'Oracle corporation', qui commercialise 'Oracle' (le premier
Système de gestion de bases de données [SGBDR] relationnel au monde), propose ''Oracle
Database 10g Express Edition'' (version gratuite d’Oracle), à ne pas confondre avec la
technologie Express, commercialisée avec 'Oracle' en 1995.
Cette version est restreinte à des fichiers de donnée limités à 4 Giga-octets, à un seul
processeur pour son exécution, et à 1 Giga-octet de mémoire RAM au maximum.
Cette version est entièrement compatible (si différente) avec celle de l'université où nous
feront la démonstration de notre interface.
L'installation contient une interface Web (ouverte dans un navigateur) très pratique pour
visualiser et créer les tables ainsi que le logiciel SQLPLUS, le même logiciel qu'en salle de TP
donc pratique et simple d'utilisation.
2.1.4- Autres applications:
−
−
−
−
−
−
Pour ce qui est des logiciels utilisés, nous citerons:
Open Office (sous Licence GPL),
The Gimp (Licence GPL),
Notepad++ (Licence GPL).
MSN Messenger (pour communiquer hors des heures de cours)
EasyPHP (contient le serveur apache pour la création du site Web)
Eclipse (programmation de l'interface administrateur)
−
−
Systèmes d'exploitation:
Windows XP (à nos domiciles)
Linux Fedora (à l'Université)
11/44
2.2- Collaboration permanente:
Comme nous étions deux étudiants à s’occuper du projet nous avons dû nous occuper
de la répartition du travail.
Pour la phase d'analyse, cela s'est fait facilement vu que cette phase s'est faite à
l'Université en salle de TP et en amphithéâtre et donc nous étions ensemble pour discuter.
Mais pour le développement comme nous ne pouvions pas développer séparément
l'interface de la structure logique des requêtes nous avons dû être en contact permanant.
2.2.1- Phase d'analyse:
Durant la phase d'analyse, nous utilisions la méthode d' ''extreme programming'': pendant
que le premier travaillait sur powerAMC, le deuxième supervisait, proposait des solutions et
posait des questions sur ce qu'il voyait Nous échangions nos rôles régulièrement afin d’être
présent sur les deux plans.
La phase d'analyse a aussi été l'occasion de nombreuses réunions (salles de TD et
amphithéâtres) avec ou sans nos professeurs ce qui nous a permis d'avancer rapidement tout en
sachant que nous allions dans la bonne direction.
2.2.2- Phase de développement:
Grâce a SVN et MSN Messenger, nous restions en contact et à chaque fois qu’un
problème se présentait (script PL/SQL difficile, ...) il était résolu rapidement grâce a cette mise
en commun permanente des idées. De plus comme nous avions eu beaucoup de réunions
d'analyse, nous n'avons pas eu beaucoup de points sur lesquels nous avons eu des désaccords et
nous n'avons pas eu à prendre de décisions importantes séparément.
12/44
3-Analyse du projet
3.1- Diagramme des cas d'utilisation:
3.1.1- Annotations:
Nous prévoyons quatre types d'utilisateurs:
Le simple Visiteur, qui n'a pas de compte, qui a donc simplement le droit de
consulter les produits disponibles, une liste d'agence ainsi que des informations
générales sur la banque.
➢ Le Client, qui s'identifie et peut consulter ses produits ou faire des virements entre
ses propres comptes.
➢ L'Employé, qui peut consulter les produits de son agence, éditer les produits des
clients de son agence, inscrire un nouveau client ou éditer les informations d'un client
de son agence.
➢ L'administrateur, qui va gérer les employés et les agences grâce au Client lourd en
java. Il aura accès à toutes les données de la base et pourra faire une sauvegarde de la
base de données.
➢
Certains aspects n'apparaissent pas sur les schémas:
➢ Les clients et les employés ne peuvent pas avoir le même login.
➢ Un employé peut être aussi client, il aura seulement 2 login différents
➢ Un employé ne peut gérer que les clients de son agence
➢ Un administrateur n'est pas lié à une agence, il a accès à toutes les données
13/44
3.1.2- Diagramme :
14/44
3.2.1- Diagramme des états :
3.2.1- Annotations:
Les Quatre Groupes d'utilisateurs sont distingués lors du contrôle de à la connexion.
Chaque type d'utilisateur a ses fonctions disponibles.
Il peut revenir à l'accueil en se déconnectant.
On ne rentre pas le détail sur ce diagramme, mais le contrôle de connexion effectue un
test sur le fait qu'on est ou non en intranet (sécurité pour les employés).
3.2.2- Diagramme :
15/44
3.3- Diagramme des séquences:
3.3.1- Visiteurs et Clients:
16/44
3.3.2- Les Employés:
17/44
3.3.3- L'Administrateur:
18/44
3.4- Diagramme des classes:
3.4.1 – Annotations
Les 3 types d'utilisateur sont des personnes (héritage).
Tous les comptes et produits ont une racine commune (héritage).
La table opération va suivre les virements entre les comptes des clients.
3.4.1- Vue globale:
19/44
3.4.2- Coupe 1/4:
3.4.3- Coupe 2/4:
20/44
3.4.4- Coupe 3/4:
21/44
3.4.5- Coupe 4/4:
22/44
4-Base de données
Nous allons ici décrire le code SQL qui sera exécuté dans la base de données. Nous
utilisons les outils d'Oracle : code SQL classique, Trigger et programmation PL/SQL.
4.1- Création des tables :
Génération du code :
Le logiciel PowerAMC permet de générer automatiquement du code SQL à partir d'un
diagramme de classe, donc une fois notre diagramme complet nous avons utilisé cette option.
Le code de création de table est très clair et bien écris, le seul problème a été que tout les
noms de variables (nom des tables et des attributs) ont été crée avec des guillemets ce qui n'est
pas pratique après dans la programmation mais le remplacement des guillemets s'est fait
rapidement avec un simple logiciel de traitement de texte.
Contrainte :
Il a fallu rajouter des contraintes manuellement dans le code car nous n'avions pas
réussi à les intégrer dans notre diagramme des classes dans powerAMC.
La connexion à l'interface devait se faire par un login et un mot de passe. Il fallait
donc un login unique pour différencier les clients ou employés, alors nous avons ajouté une
contrainte d'unicité du login sur les tables Client, Employé et administrateur.
Notre banque était prévue pour être installée en France donc il fallait gérer les
départements français allant de 1 à 95, nous avons donc ajouté une contrainte de type CHECK
sur le numéro de département.
Séquence :
On voulait que lorsque qu'on ajoute une ‘personne’, un ‘produit’, une ‘opération’,
une ‘agence’, ou un ‘département’ leurs numéros s'incrémentent automatiquement, nous avons
pour cela utilisé des séquences pour chacune des tables cités. Les séquences commencent à 1 et
à chaque ajout sont automatiquement incrémenté de 1.
23/44
4.2- Trigger:
Unicité des logins :
Nous avions prévu qu'un employé pouvait aussi être client, donc il fallait
différencier les comptes par leur login. De plus la fonction de connexion (voir plus bas)
parcours les tables ‘client’ puis ‘employé’ or si les deux logins étaient les mêmes, la fonction
renverrai automatiquement vers l'interface client et donc la personne ne pourrait jamais accéder
à son compte employé.
Nous avons donc créer des trigger, qui lors de l'ajout d'une personne (client,
employé ou administrateur) parcourront les 3 tables, afin de vérifier que le login n'existe pas
déjà.
Ville et département :
En France les deux premiers chiffre d'un code postal correspondent au numéro de
département, il fallait ajouter cette contrainte dans notre système afin qu'il soit impossible
d'ajouter un code postal dans le mauvais département.
Nous avons donc d'abord créé une fonction (CP_to_Dept) qui à partir d'un code
postal renvoie le numéro de département, puis un trigger sur la table Ville qui à chaque ajout
vérifie que le code postal et le département correspondent bien.
4.3- Fonction :
Connexion :
Lorsqu'une personne tente d'accéder à son interface elle doit entrer son login et son
mot de passe et la fonction va vérifier que les informations sont correctes.
Une telle fonction pouvait être écrite dans le code PHP du site Web ou dans le code
java du client lourd mais nous avons préféré l'intégrer directement à la base de données pour
raison de sécurité et de simplicité d’utilisation.
La fonction va parcourir la table client, puis la table employé, puis la table
administrateur et chercher si le login/mot de passe correspond. Elle va renvoyer respectivement
1, 2 ou 3 si elle trouve, et 0 si aucune ligne ne correspond. Dans le site Web, ce numéro sera
conservé comme « droit d'accès ».
24/44
4.4- Procédure :
Insertion :
Dans notre base de donnée, il y avait plusieurs relations d'héritage ainsi lorsqu'on
ajoutait un client par exemple il fallait obligatoirement d'abord créer une personne. Nous avons
donc décidé de créer des procédures d'insertion, qui fera toutes les insertions nécessaires avant
de terminer par la table fille. Elles prennent en argument toutes les valeurs nécessaires aux
tables parentes ainsi qu’aux tables concernées.
Ainsi lorsqu'on insère un Plan epargne-logement dans la table, grâce à sa procédure
d'insertion, on insère automatiquement un produit, un compte, un livret épargne correspondant
avec le même numéro de produit (grâce au sequence.currval).
A noter qu'un employé ne pourra ajouter des clients que dans sa propre agence
donc la procédure d'ajout de client demande un numéro d'employé. Et lorsqu'on ajoute un client
dans une ville non présente dans la base de données elle est automatiquement ajoutée.
Update :
Certaine information devront pouvoir être modifier (adresse client par exemple)
donc nous avons créer des procédures d'update dans le même esprit que les procédures que les
procédures d'insertion : on rentre toutes les informations que l'on souhaite changer et toutes les
tables sont modifier automatiquement.
Suppression :
Lorsqu'on veut supprimer une personne il faut supprimer tous ces comptes en
même temps, et pour chaque produit il faut supprimé ces uplet « parents » ainsi que les
opérations. Donc lorsqu'on va supprimer un objet dans la table on va faire appel à ces
procédures qui feront toutes les suppressions au fur et à mesure.
La suppression d'un client implique la suppression de tout ces produit, il faut donc
utilisé un curseur (pl/sql) qui va parcourir chaque produit lui appartenant et faire les
suppressions.
La suppression d'un produit implique celle de toutes ces occurrences dans la base
de données (numproduit étant clé étranger presque partout), donc tous les produits qui en
héritent mais aussi toutes les opérations où le produit a été concerné, cela va poser problème car
un client ne verra plus son virement vers un produit qui a été par la suite supprimé.
Virement :
Ces procédure vont être appeler pour un virement entre deux comptes, elle va
automatiquement faire les entrés dans la table opérations et modifier les soldes des comptes
concernés. Cette procédure existe en deux versions : virement_client et virement_employe.
Virement_client ne permet que les virements entre deux comptes d'un même client (intra
client) et donc sera accessible directement par celui ci dans son interface.
Virement_employe est plus générale et permet les virements entre deux clients (inter client)
et donc sera accessible seulement par un employé. Si un client désire faire un virement vers un
autre client il devra en faire la demande à un employé dans son agence.
25/44
5-Implémentation
5.1- Base de données :
On va exécuter (grâce a la commande START ou @) chaque fichier .sql du dossier
dans la base de données dans un ordre précis :
1- drop_banque.sql : qui va supprimer tout les éléments de la banque de la base (si
jamais les tables ont déjà été créés)
2- creation_table_banque.sql : qui contient la création des tables, les contraintes, et
la création des séquences.
3- creation_fonction_trigger_banque.sql : qui contient les trigger d'unicité des
logins, la vérification des départements, et la fonction de connexion.
4- creation_procedure_insert-update-supp.sql : qui contient toutes les procédures
d'insertion, d'update et de suppressions.
5- creation_procedure_virement.sql : qui contient les deux procédures de virements
(inter client et intra client).
6- insertion_dept_banque.sql : qui va insérer tous les départements de France, ce
sont des données de base que l'on ne modifie généralement pas et reste fixe.
7- insertion_divers_banque.sql : qui va insérer un échantillon de données afin de
découvrir et tester l'interface.
26/44
5.2- Interface Web :
5.2.1- PHP et Oracle :
Nous avons décidé de créer notre interface Web grâce au langage PHP, ce langage
permet de manipuler facilement des bases de données, de gérer les résultats et de les faire
afficher en HTML.
La librairie PHP possède deux types de fonctions pour manipuler une base de
données Oracle, les fonctions de type ORA et OCI. OCI est une série de fonctions utiles pour
des versions d'Oracle supérieures ou égales à 8, pour les versions inférieures on utilisera ORA.
Afin que notre interface soit compatible avec n'importe quelle version nous avons
créer 2 classes « oracle_oci.php » et « oracle_ora.php », ainsi on les inclura au choix suivant la
version d'oracle utilisée.
Le fichier « configuration.php » contiendra les informations propres à la base de données
(accès, nom) et une inclusion d'une des classes.
Le fichier index crée ensuite un objet « sql » de la classe choisie et on pourra utiliser les
fonctions oracle.
27/44
5.2.2- Structure :
Le site est découpé en plusieurs parties qui sont inclues et gérées par la page index.
Ainsi si on veut modifier un menu ou une description il n'y qu'une seule page à éditer.
Header.php
Description.php
Menuconnexion.php
Menu.php
contenu (xxxxx.inc.php)
footer.php
Quand on clique sur un lien, seul le contenu va changer, ou rediriger vers
« index.php?p=xxxx » si la page « xxxx.inc.php » existe elle sera incluse dans le contenu, sinon
ça sera la page d'accueil qui sera affiché.
5.2.3- Visiteur :
Le visiteur est une personne lambda qui va se connecter au site. Il pourra accéder :
-aux informations générales sur la banque (page d'accueil, page d'aide).
-à une liste des agences de la banque triées par code postal (page contact) :
-au formulaire de connexion pour accéder aux interfaces client, employé ou administrateur.
Le formulaire renvoie vers la page login.php qui va gérer le contenu du formulaire et faire appel
a la fonction connexion de notre base de données, en fonction des résultats renvoyés, le visiteur
sera redirigé vers la page approprié (respectivement accueil_client, accueil_employe,
accueil_admin).
Une fois connecté on a accès aux autres interfaces.
28/44
5.2.4- Client :
Une fois connecté en tant que client on accède à l'accueil client qui va décrire ce que peut
faire le client, à savoir : consulter ses comptes, consulter l'historique des actions sur ses comptes
(virements) et faire un virement entre ses propres comptes (intra client). On remarque qu'un
bouton déconnexion est apparu dans le menu en haut (dans le header) et que le menu a changé
avec les options clients.
Liste des produits :
Dans cette page tous les produits du client sont référencés et consultables. Chaque
produit est affiché dans un tableau avec son numéro et quelques renseignements. Si on veut plus
d'information sur un produit, le lien « plus d'info » renvoie vers une page où le produit sera
détaillé.
Les requêtes utilisées pour faire afficher le tableau sont des SELECT, à noter que quand on
veut sélectionner des uplets d'une table d'où héritent d'autres tables (parents) il faut faire
attention à ne pas sélectionner aussi les uplets parents (par exemple on va sélectionner tous les
livrets épargne moins ceux où les « numproduit » sont aussi des plans épargne logement)
Détail du produit :
Le lien « plus d'info » dans la liste des produits renvoie vers cette page, chaque
attribut du produit y est décrit et tous les virements faits à partir ou vers ce compte sont affichés
(voir plus loin la page historique). La requête SQL est un simple SELECT * sur le numéro du
produit pour chaque table.
29/44
Historique :
Cette page va contenir un tableau décrivant toutes les opérations effectuées sur les
comptes du client, à chaque virement une entrée du compte crédité et du produit débité est écrite
dans la table opérations, on va donc faire afficher son contenu en fonction.
Si le virement appartient au client, le numéro de compte sera affiché, sinon ce sera
le nom du propriétaire du compte concerné. De même lorsqu'il s'agit d'un virement inter client le
responsable sera le numéro de l'employé ayant effectué le virement (si jamais il y a un
problème) sinon ce sera le client (« vous mêmes »). Les virements sont triés par date
descendante (on affiche d'abord le plus récent).
Virement intra client :
Un client sera autorisé à faire un virement entre ses propres comptes directement à
partir de son interface.
On va donc faire appel ici à la procédure « virement_client » enregistré dans la
base de données lors de l'implémentation SQL.
30/44
Le client remplit un formulaire en sélectionnant un compte à débiter et un autre à
créditer, un motif, un montant à envoyer. Le formulaire va d'abord vérifier que les données
envoyées sont correctes puis faire appel à la procédure.
En cas de problème (comme un dépassement du découvert autorisé), une erreur est affichée
et le client doit recommencer.
5.2.5- Employé :
Similairement à l'interface client, une fois connecté on accède a la page d'accueil employé
qui va décrire les possibilités. Le menu de droite va détailler chacune des fonctionnalités
(gestion des clients, gestion des comptes) et le menu sous la description va servir de menu
rapide où on pourra accéder rapidement à des pages pratiques.
31/44
Liste des clients :
Cette page permet de voir la liste des clients triés dans un tableau, on peut voir leur nombre
de produits et des « boutons » permettant d'accéder aux fonctions d'employés rapidement :
−
−
−
le bouton de la colonne « voir » envoie vers la liste des comptes d'un client
le bouton de la colonne « edit » permet de modifier les informations d'un client ainsi que
d'avoir des informations plus précises sur la personne.
Le bouton de a colonne « supp » permet de supprimer le client avec tous ses comptes.
La page se termine par un lien vers le formulaire d'ajout de client.
À noter qu'un employé ne pourra voir que les clients inscrits dans son agence, il n'a donc
pas accès à toutes les données de la table, seul l'administrateur pourra voir la liste complète des
clients.
Ajouter un client :
On va faire appel à la procédure « insert_cli » de notre base de donnée. L'employé remplit
le formulaire avec les informations sur le client et en l'envoyant va exécuter la procédure. On
peut accéder à cette page directement à partir du menu ou alors à partir de la liste des clients.
Une personne est client lorsqu'il possède au moins un compte, donc lorsqu'il s'inscrit on va
automatiquement lui ajouter un compte ordinaire, son solde sera nul et le découvert autorisé
aussi, à la demande du client on pourra le modifier ou le supprimer s'il prend un autre produit.
Modifier un client :
Cette page permet de modifier certaines informations sur le client, elle va faire appel à la
procédure « update_client ». On peut accéder à cette page a partir du menu ou alors à partir de la
liste des clients.
32/44
Supprimer un client :
Lorsqu'on veut supprimer un client, on va d'abord vérifier s'il lui reste des comptes et
toujours demander une confirmation à la suppression. Si l'employé est sûr de vouloir supprimer
la personne il va faire appel a la procédure « supp_client ».
Lorsque cette page est appelée à partir du menu, l'employé va devoir rentrer le numéro du
client, on vérifie s'il existe puis on compte son nombre de produit et on fait un « afficher un
message de confirmation ». Si on choisit de supprimer un client à partir de la liste des clients on
arrivera directement sur le message de confirmation.
Liste des comptes :
Le menu rapide employé (sous la description) contient un formulaire qui permet d'accéder
directement à la liste des produits d'un client a partir de son numpersonne.
La liste des produits d'un client est exactement la même que la version de l'interface client
(on incluse le fichier) sauf que l'on rajoute les options employé a savoir : l'ajout, l'édition ou la
suppression d'un produit. On peut de la même façon suivre le lien « plus d'info » qui décrit
précisément le produit sélectionné ainsi que son historique, toujours pareil à l'interface client.
33/44
Ajouter un produit pour un client :
Pour ajouter un produit, on entre d'abord le numéro de client dans le formulaire puis on
valide, on va ainsi accéder à une page où il sera possible d’ajouter tous les produits gràce à de
simples formulaires Chaque formulaire d'ajout de produit est un fichier à part qui est inclus,
ainsi les traitements sont faits dans des pages différentes, c'est plus pratique s'il faut modifier
un formulaire (ajout un attribut par exemple).
Chaque page d'ajout utilise la procédure insert du produit que l'on a entré dans la base
de données.
Modifier un produit :
Cette page permet de modifier certaines informations sur le produit, elle va faire appel à la
procédure enregistrée dans la base de données. On peut accéder à cette page a partir du menu ou
alors à partir de la liste des produits grâce au lien.
Supprimer un produit :
On entre le numéro de client et le numéro du compte et on valide le formulaire qui va
utiliser la procédure « supp_produit » de la base de données.
34/44
5.2.6- Administrateur :
L'interface administrateur a d'abord été prévu pour le site Web donc la page d'accueil a été
écrite et lorsqu'on entre un login/mot de passe administrateur on accède à la page d'accueil qui
va décrire les fonctionnalités du compte.
Mais nous avons par la suite décidé de créer plutôt un client lourd en java avec l'interface
administrateur donc la section administrateur du site a été laissé de coté mais elle pourrait être
facilement implémenté à la manière des interfaces clients et employés.
5.3- Client lourd, interface administrateur :
D'une part pour garantir une sécurité évidente (attaques http, failles PHP bien connues,
...), et d'autre part pour explorer les possibilités offertes par objc (librairie java pour les
connexions aux bases de données Oracle), nous avons développé une interface Java/Swing que
peuvent utiliser les administrateurs de la banque pour consulter et gérer certains éléments de
leur banque.
L'avantage moins évident d'un tel développement est l'analyse des possibilités offertes par
le déploiement d'une plateforme RPC (Plateforme Client Riche [Rich Client Platform]), en
effet, bien que nous n'ayons pas exploité ce mode de développement (car ce n'était pas une
priorité), il faut bien avouer qu'une telle technologie est utile surtout pour un administrateur qui
veut (à priori), une interface réactive avec des accès possibles aux ressources locales
( périphériques de stockage, look-and-feel, ... ).
Le langage java offre l'opportunité de développer rapidement (à l'aide de plugins) des
interfaces conviviales et fluides .Cependant la gestion des 'processus légers' (Threads) doit être
gérée contrairement aux interfaces Web .Ojdbc est présent dans le répertoire d'installation
d'Oracle pour Windows. Avec le développement sous Eclipse, il faudra préciser les astuces
d'intégration de la librairie Oracle dans l'exécutable jar pour avoir une application réellement
portable.
35/44
5.3.1 - L'accès a la base :
Pour le développement de l'interface, nous avons reliés le projet Eclipse à la librairie ojdbc
avec les propriétés du projet.
Puis nous avons installé un plugin (payant mais en version d'évaluation) nommé
''SWT&Swing designer''. Ce plugin permet de construire une interface très rapidement et produit
un code source propre et performant.
L'accès à la base de la banque se fait par des saisies dans des champs texte et password.
Attention, les informations sont relatives à la base de donnée, le contrôle du login de
l'administrateur vient après.
36/44
Il se peut que les informations données soient erronées, ou bien que le serveur soit hors
service, alors un message d'erreur peut apparaître :
5.3.2 - L'accès administrateur :
Sinon on arrive à un deuxième panneau.
Celui de l'authentification de l’administrateur.
Indication: en Swing, le rafraîchissement de panneau se fait en supprimant tout le contenu
d'un panneau (removeAll()), puis en reconstruisant le Layout (setLayout(LayoutManager)), en
ajoutant le nouveau contenu (add(Component)), et en appelant la reconstruction (validate()) .
37/44
Et éventuellement au message d'erreur classique :
5.3.3 - Manipulation des Employés :
L'administrateur peut, à travers cette interface, consulter et éditer les informations sur les
employés, en cliquant sur le tableau de gauche, il peut afficher les informations détaillées sur
un employé. Par un simple click (avec confirmation), supprimer un employé.
38/44
Indication: Certains éléments sont présents sur touts les panneaux :
➢ Un lien pour se déconnecter.
➢ Un lien pour rafraîchir les données (synchronisation avec la base).
➢ Un filtre sur les données (sauf pour les interfaces de création).
➢ Un menu déroulant présentant toutes les possibilités de l'interface :
➢ déconnexion.
➢ liste et ajouter des employés.
➢ liste des clients.
➢ liste et ajouter des agences.
➢ éditer les villes.
➢ quitter le programme (avec popup de confirmation).
L'administrateur peut aussi ajouter des employés :
39/44
5.3.4 - Manipulation des Clients :
L'administrateur peut voir la liste de tous les clients (pas seulement ceux d'une agence),
mais ne peut pas influencer sur les soldes (ni même les consulter).
40/44
5.3.5 - Manipulation des Agences :
L'interface permet de visualiser les agences, voir pour chaque agence le nombre d'employés,
de clients, et de produits .D'ajouter, de supprimer une agence (sélectionner la ligne dans le
tableau et cliquer sur le bouton ''supprimer l'agence'').
Le filtre est disponible et permet de diminuer le nombre de lignes du tableau.
41/44
5.3.6 - Manipulation des Villes :
Au cours de la création d'un client, un employé a la possibilité de créer une ville avec
un code postal, s'il s'est trompé, l'administrateur peut rectifier le code postal pour le nom de
ville, et ainsi modifier le nom de la ville pour tous les clients, tous les employés, et toutes les
agences qui ont pour code postal ce code postal.
5.3.7 - Améliorations possibles de l'interface :
La principale amélioration serait de mettre un curseur d'attente pendant les
connexions et exécutions des requêtes (en manipulant des threads).
La seconde serait de redimensionner les tableaux en fonction de la taille de la fenêtre
(utiliser un LayoutManager plus ergonomique, mais plus complexe à manipuler).
Mettre en place une plateforme complète de mise a jour de version (RPC), ce qui
rendrait le client beaucoup plus complet, serait un autre objectif.
Enfin au niveau des fonctionnalités, il faudrait ajouter une coloration des clients ayant
un compte dans le rouge, faire une sauvegarde de l'état de l'agence, ou encore avoir une vue
spatiale des agences.
42/44
5.3.7 - Un mot sur Eclipse et ojdbc :
Pour intégrer obdbc.jar dans le projet eclipse, une simple configuration suffit,
cependant au moment de compiler et générer l'exécutable jar, on perd le classpath du projet
Eclipse.2 solutions :
➢ Décompresser l'archive ojdbc (avec 7zip par exemple) intégrer les .class dans le
projet, générer le .jar et cela fonctionne (c'est la solution que nous avons choisie).
➢ Intégrer ojdbc.jar dans le projet, faire un ''loader de .jar'', charger dynamiquement au
lancement du programme le contenu de ojbdc.jar et lancer l'interface.
Malheureusement il n'existe pas de chargeur de .jar dans l'API java SE, et sur internet,
nous n'avons trouvé que des chargeurs défaillants ou en développement.
Pour le reste du développement, nous avons réutilisé les techniques vues en TP.
Indication: pour faire appel a une procédure en java avec ojdbc, il faut:
➢ créer un Objet Connexion,
➢ créer un objet Statement (C.createStatement()) ,
➢ executer la requête (req.executeQuery('' begin
nom_procedure('arg1','arg2',...) ; end ; '')) ,
L’exception pouvant être levée est du type SQLException .
Indication: utiliser la fonction Oracle to_date comme ceci :
 update Personne
set datenaissance=to_date('84-01-23','YY-MM-DD')
WHERE numPersonne='3' ;
43/44
6-Discussion
Au final, on s'aperçoit que même s'il est fonctionnel notre système est loin d'être complet.
En effet il manque certaines choses qui en feraient une vraie interface bancaire, professionnelle
et sérieuse.
D'abord, un manque évident du contenu, les pages du site Web accessibles par le simple
visiteur sont vides d'informations. on pourrait aussi opter pour une meilleure mise en page.
D'autre part il manque des fonctionnalités, il n'y a quasiment aucun système de communication
entre la banque et le client. A l'avenir on pourrait mettre un système de messagerie entre un
client et un employé, lorsqu'un client aurait besoin de faire une action nécessaire, il pourrait
remplir un formulaire que l'employé recevrait et validerait, cela faciliterait la rapidité et la
qualité des services. Il faudrait aussi améliorer la sécurité: actuellement les mots de passe sont
stockés en clair dans la base de données et un employé peut voir les mots de passe des clients
de son agence ce qui est impossible pour une banque professionnelle. Ajouter une
authentification ssl serait indispensable.
Mais le site Web et le client lourd sont actuellement seulement l'implémentation des
fonctions de notre base de données dans 2 interfaces simples et aussi claires que possible pour
le temps imparti. De plus la structure du site et de la base de données est très évolutive, il est
très simple de rajouter des requêtes SQL et des procédures PL/SQL dans la base de données et
de rajouter des pages pour implémenter ces fonctions sans tout changer.
Malgré certains manques, le système est fonctionnel et prêt à évoluer.
44/44
Conclusion
Ce travail d'étude et de recherche (TER) nous a permis de développer les étapes d'un
projet. Nous somme passés de la théorie à la pratique, de l'analyse à l'implémentation dans
une optique professionnelle.
La phase d'analyse nous a permis d'étudier correctement le sujet et de savoir clairement
ce que nous devions faire et quels étaient les besoins du projet. Puis nous avons pu améliorer
nos connaissances en base de données et dans le logiciel oracle lors de la création des tables
et des fonctions. Enfin nous avons découvert et amélioré nos connaissances pour créer une
interaction entre une interface PHP ou java et une base de données oracle.
Ce projet nous a aussi obligé de développer une communication quasi permanente dans
le groupe, notamment grâce au protocole SVN qui nous a permis de travailler à distance sans
problème, et obtenir un travail clair et correctement organisé.
Grâce à ce travail, nous avons donc amélioré nos connaissances en base de données et
notre organisation et ainsi développer un projet de façon professionnelle.
Téléchargement