GÉNIE LOGICIEL AVANCÉ

Documents pareils
CREATION WEB DYNAMIQUE

OpenPaaS Le réseau social d'entreprise

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Olivier Mondet

PHP 5. La base de données MySql. A. Belaïd 1

1. Base de données SQLite

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Java DataBaseConnectivity

Introduction à JDBC. Accès aux bases de données en Java

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Langage SQL : créer et interroger une base

Les BASES de DONNEES dans WampServer

Accès aux bases de données

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

Paginer les données côté serveur, mettre en cache côté client

Création et Gestion des tables

I4 : Bases de Données

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Modélisation et Gestion des bases de données avec mysql workbench

SQL Historique

Mysql. Les requêtes préparées Prepared statements

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Gestion de base de données

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Programmer en JAVA. par Tama

Stockage du fichier dans une table mysql:

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Mise en oeuvre d'une base de données mono-utilisateur avec SQLite

Architecture Orientée Service, JSON et API REST

Cours Bases de données 2ème année IUT

PDO : PHP Data Object 1/13

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Bases de données relationnelles

Application web de gestion de comptes en banques

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

TP Programmation Java / JDBC / Oracle

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

I. MySQL : Serveur et SGBD

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

Historisation des données

Encryptions, compression et partitionnement des données

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

CATALOGUE FORMATIONS DOMAINE Bases de données

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

[BASE DE DONNEES MULTIMEDIA]

PHP. PHP et bases de données

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Notes de cours : bases de données distribuées et repliquées

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Bases de Données relationnelles et leurs systèmes de Gestion

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Connaître la version de SharePoint installée

Package Java.util Classe générique

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

PHP 4 PARTIE : BASE DE DONNEES

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

IFT3030 Base de données. Chapitre 1 Introduction

Gestion du cache dans les applications ASP.NET

Compétences Business Objects

Programmation d application Bases de données avec Java

Configurer la supervision pour une base MS SQL Server Viadéis Services

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Bases de données et fournisseurs de contenu

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

TP3 : Creation de tables 1 seance

TP1 : Initiation à Java et Eclipse

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

Bases de données avancées

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

BASES DE DONNEES TP POSTGRESQL

Exercices INF5171 : série #3 (Automne 2012)

Pratique et administration des systèmes

Bases de données Page 1 de 11. Bases de données. Prof. : Dzenan Ridjanovic

Les déclencheurs. Version 1.0. Grégory CASANOVA

Tutoriel d installation de Hibernate avec Eclipse

PHP et les Bases de données - Généralités

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Notion de base de données

Présentation du langage et premières fonctions

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Gestion de stock pour un magasin

Le Langage De Description De Données(LDD)

Installation d'un serveur FTP géré par une base de données MySQL

Présentation Windows Azure Hadoop Big Data - BI

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Information utiles. webpage : Google+ : digiusto/

Guide d'installation rapide TFM-560X YO.13

CONCOURS DE L AGRÉGATION INTERNE «ÉCONOMIE ET GESTION» SESSION 2015 SECONDE ÉPREUVE

Transcription:

Institut de la Francophonie pour l Informatique RAPPORT DU PROJET GÉNIE LOGICIEL AVANCÉ Sujet : «Implémentation d'un carnet d'adresse en Java» Réalisé par: NGUYEN Van Tho KASEREKA KABUNGA Selain Hanoï, Décembre 2012

TABLE DES MATIERES TABLE DES MATIERES... 2 1. INTRODUCTION... 3 2. SPECIFICATION DE L'APPLICATION... 3 3. LES EXIGENCES FONCTIONNELLES ET NON FONCTIONNELLES DE L'APPLICATION... 4 3.1. Exigences fonctionnelles... 4 a. Diagramme de cas d utilisation... 5 3.2. Les exigences non-fonctionnelles de l application... 6 4. LA CONCEPTION... 7 4.1. Diagramme de classe... 7 4.2. Diagramme de séquence... 7 a. Création d un contact... 8 b. Rechercher un contact... 8 c. Modifier un contact... 9 d. Supprimer un contact... 9 5. IMPLEMENTATION ET TEST... 10 5.1. Solution technique... 10 a. Le choix de la plate forme de développement... 10 b. Le choix du langage de programmation... 10 c. La base de données... 10 5.2. Le test d acceptation... 10 6. CONCLUSION... 13 7. CODE SOURCE... 14

1. INTRODUCTION C est dans le cadre du cours de Génie logiciel avancé que nous avons réalisé ce travail. Le but poursuivi est de revoir les concepts de la modélisation avec UML et la programmation orientée - objet avec Java et aussi de se familiariser à l'environnement de développement intégré (IDE) «libre» (Open Source) ECLIPSE. Jadis les notions de gestion par les technologies de l'information et de la communication n'existaient pas, la gestion d'informations était totalement manuelle et plusieurs désavantages de cette façon de faire se sont vite fait remarquer par plusieurs indices. Nous pouvons citer le gaspillage de temps dans la gestion, la sécurité des informations non garantie, les erreurs dans les calculs rendant ainsi le résultat biaisé, etc. Cet outil que nous développons n'est qu'un petit programme qui permet à un utilisateur de gérer ses contacts grâce à un carnet d adresse. 2. SPECIFICATION DE L'APPLICATION Le projet que nous concevons et réalisons dans ce travail est un gestionnaire de carnet d adresse. Les entrées de ce carnet sont : le nom de la personne, ses numéros de téléphone et ses adresses (travail et domicile). Ce gestionnaire fournit à l'utilisateur les fonctionnalités suivantes: Créer une nouvelle personne; Chercher et afficher tous les numéros de téléphone et l adresse d'une personne étant donné que son nom est entré à partir du clavier; Supprimer une personne de la liste étant donné que son nom est entré à partir du clavier; Chercher et modifier les numéros de téléphone et l adresse d'une personne étant donné que son nom est entré à partir du clavier; Afficher la liste de toutes les personnes enregistrées dans la base de données (nom, numéros de téléphone, adresses).

3. LES EXIGENCES FONCTIONNELLES ET NON FONCTIONNELLES DE L'APPLICATION 3.1. Exigences fonctionnelles Notre application se base sur plusieurs exigences fonctionnelles que nous pouvons décrire dans le tableau ci-dessous : EF 1.0 EF 5.1 EF 5.2 EF 5.3 Ajouter une personne Le système doit demander de saisir des informations sur la personne Le système doit enregistrer la personne Le système doit attribuer un identifiant à cette personne EF 2.0 EF 2.1 EF 2.2 Rechercher une personne Le système doit demander de saisir le nom de la personne à chercher Le système doit permettre de vérifier une personne EF 3.0 EF 3.1 EF 3.2 Modifier une personne Le système doit permettre de modifier une personne Le système doit permettre d enregistrer les nouvelles informations sur la personne EF 4.0 EF 4.1 EF 4.2 Supprimer une personne Le système doit permettre de supprimer une personne Le système doit demander la confirmation de suppression EF 5.0 EF 5.1 EF 5.2 Afficher Le système doit permettre d afficher une personne Le système doit permettre d afficher toute les personnes Tableau 1. Tableau des exigences fonctionnelles

a. Diagramme de cas d utilisation Ci-dessous nous présentons le diagramme de cas d utilisation pour montrer l interaction entre l utilisateur (gestionnaire de carnet d adresse) et le système : Figure 1. Diagramme de cas d utilisation Ci-dessous nous présentons le tableau des relations dans le diagramme de cas d utilisation : 1.Erreur! Signet non défini. 2.Erreur! Signet non défini. 3.Erreur! Signet non défini. 4.Erreur! Signet non défini. 5.Erreur! Signet non défini. Type From To Include Afficher une Rechercher une personne personne (Use Case) (UseCase) Include Modifier une personne (Use Case) Association Gestionnaire (Actor) Include Supprimer une personne (Use Case) Association Gestionnaire (Actor) 6.Erreur! Association Gestionnaire (Actor) Rechercher une personne (UseCase) Modifier une personne (UseCase) Rechercher une personne (UseCase) Afficher toutes les personnes (UseCase) Afficher une personne

Signet non défini. 7.Erreur! Signet non défini. 8.Erreur! Signet non défini. 9.Erreur! Signet non défini. Association Gestionnaire (Actor) Association Gestionnaire (Actor) Association Gestionnaire (Actor) (UseCase) Supprimer une personne (UseCase) Ajouter une personne (UseCase) Ajouter une personne (UseCase) Tableau 2. Les relations dans le diagramme de cas d utilisation

3.2. Les exigences non-fonctionnelles de l application Ci-dessous nous présentons un tableau qui présente les exigences non fonctionnelles, leur description et leur numéro d exigence fonctionnelle utilisées. Description ENF 1.0 Le taux pour qu un échec survienne lors d une opération sur le système doit être très faible soit 0.0001% ENF 2.0 Le système doit être disponible durant toutes les opérations ENF 3.0 En cas de défaillance, le système ne devra pas causer de dommages matériels ENF 4.0 En cas d erreurs venant de l utilisateur, les données ne doivent subir aucun changement, la disponibilité des données doit être garantie. ENF 5.0 Le système doit avoir au plus 3 secondes comme temps de réponse à une opération. EF utilisée Toutes les exigences Toutes les exigences Toutes les exigences Toutes les exigences Toutes les exigences Tableau 3. Tableau des exigences non fonctionnelles

4. LA CONCEPTION 4.1. Diagramme de classe Voici le diagramme de classe de notre application : 4.2. Diagramme de séquence Figure 2. Diagramme de classe Dans ce point nous présentons les opérations qui se font sur le système via le diagramme de séquence :

a. Création d un contact Figure 3. Diagramme de séquence pour la création d un contact b. Rechercher un contact Figure 4. Diagramme de séquence pour la recherche d un contact

c. Modifier un contact Figure 4. Diagramme de séquence pour la modification d un contact d. Supprimer un contact Figure 5. Diagramme de séquence pour la suppression d un contact

5. IMPLEMENTATION ET TEST 5.1. Solution technique a. Le choix de la plate forme de développement Pour implémenter notre application nous avons utilisé Eclipse IDE, qui est un environnement de développement intégré libre extensible, universel et polyvalent, permettant potentiellement de créer des projets de développement mettant en œuvre n'importe quel langage de programmation. b. Le choix du langage de programmation Le langage utilisé pour l implémentation de cette application est le langage java. Ce langage complètement orienté objet. Java permet et pousse à développer les applications d'une façon orientée objet et permet d'avoir une application bien structurée, modulable, maintenable beaucoup plus facilement et efficace. c. La base de données Comme signifié dans les pages précédentes nous avons utilisé SQLite qui est un formidable moteur de base de données, ne nécessitant pratiquement aucune administration, portable (tous systèmes) et accessible de pratiquement tous les langages (C, C++, Java, Python...). Contrairement à mysql, SQLite ne nécessite pas la mise en place d'un service. La structure de notre table est la suivante : Nom des champs id name home_phone work_phone home_address work_address Type INTEGER PRIMARY KEY TEXT TEXT TEXT TEXT TEXT 5.2. Le test d acceptation Dans cette partie nous soumettons à notre programme un jeu de données pour le tester. Ces opérations englobent l ensemble d opérations qui seront faites par l utilisateur (gestionnaire pour notre cas). Enregistrer un contact Grace a cette interface l utilisateur a la possibilité de saisir les informations sur le

contact et les enregistrer. Signalons aussi que l utilisateur doit remplir tous les champs obligatoires avant d enregistrer. Cette fenêtre montre un exemple ou l utilisateur click sur enregistrer sans respecter cette condition :

Rechercher un contact A partir ce cette interface l utilisateur écrit une partie ou l intégralité du nom a chercher dans son carnet d adresse : Sélectionner un contact

6. CONCLUSION Dans ce document nous présentons le logiciel que nous avons réalisé. Ce programme permet de gérer un carnet d adresse. Pour la partie modélisation nous avons utilisé UML. Les opérations, dans ce petit logiciel, sont faites en interaction avec sqlite3. Pour tester le bon fonctionnement des méthodes nous avons utilisé JUnit. Ce programme marche très bien et répond aux exigences décrites dans le cahier de charge. Cependant, ce programme peut être amélioré dans l avenir pour permettre la prise en charge par exemple de plus de deux numéros de téléphone et deux adresses pour un contact enregistré dans le système, la prise en charge des groupes ou catégorie des contacts.

7. EXTRAIT DU CODE SOURCE Dans ce point nous présentons un extrait du code source de l application /** * get connection to sqlite database * @return connection */ private Connection getconnection(){ Connection connection = null; try { Class.forName(SQLITE_DRIVER); connection = DriverManager.getConnection(DB_NAME); catch (ClassNotFoundException e) { return null; catch (SQLException e) { return null; return connection; /** * delete a person * delete a person from database and from model data * @param id of person * @param index * @return boolean */ public boolean delete(int id, int index){ Connection connection = getconnection(); if(connection == null){ //error handle return false; PreparedStatement preparedstatement; try { preparedstatement = connection.preparestatement( "DELETE FROM " + "person WHERE id =?"); preparedstatement.setint(1, id); preparedstatement.execute(); preparedstatement.close(); catch (SQLException e) { // TODO Auto-generated catch block return false; finally{ try { connection.close(); catch (SQLException e) { // TODO Auto-generated catch block //remove this person from model data persons.remove(index);

//update jtable UI firetablerowsdeleted(index, index); //firetabledatachanged(); return true; /** * update information for a person * @param person * @param index : index of person in model data * @return boolean */ public boolean update(person person, int index){ Connection connection = getconnection(); if(connection == null){ //error handle return false; PreparedStatement preparedstatement; try { preparedstatement = connection.preparestatement( "UPDATE " + "person set name =?, home_phone =?, work_phone =?, home_address =?, work_address =?" + " WHERE id =?"); preparedstatement.setstring(1, person.getname()); preparedstatement.setstring(2, person.gethomephone()); preparedstatement.setstring(3, person.getworkphone()); preparedstatement.setstring(4, person.gethomeaddress()); preparedstatement.setstring(5, person.getworkaddress()); preparedstatement.setint(6, person.getid()); preparedstatement.execute(); preparedstatement.close(); catch (SQLException e) { // TODO Auto-generated catch block return false; finally{ try { connection.close(); catch (SQLException e) { // TODO Auto-generated catch block //update model data persons.set(index, person); //update jtable UI firetablerowsupdated(index, index); //firetabledatachanged(); return true; public boolean insert(person person){ if (person == null){ return false; Connection connection = getconnection();

if(connection == null){ //error handle return false; + PreparedStatement preparedstatement; try { preparedstatement = connection.preparestatement( "INSERT INTO " + "person(name, home_phone, work_phone, home_address, work_address)" "VALUES (?,?,?,?,?)"); preparedstatement.setstring(1, person.getname()); preparedstatement.setstring(2, person.gethomephone()); preparedstatement.setstring(3, person.getworkphone()); preparedstatement.setstring(4, person.gethomeaddress()); preparedstatement.setstring(5, person.getworkaddress()); preparedstatement.execute(); preparedstatement.close(); catch (SQLException e) { return false; finally{ try { connection.close(); catch (SQLException e) { persons.add(person); firetablerowsinserted(persons.size() - 1, persons.size() - 1); //firetabledatachanged(); return true; /** * get a list of Person, if searchname is empty, return all * if searchname is not empty, return all the persons whose name contains searchname * @param searchname * @return list of Person */ public List<Person> getpersons(string searchname){ List<Person> persons= new ArrayList<Person>(); Connection connection = getconnection(); if(connection == null){ //error handle return null; PreparedStatement preparedstatement; try { String sql = "SELECT * FROM person "; if(!searchname.isempty()){ sql += " WHERE name like '%" + searchname + "%'"; preparedstatement = connection.preparestatement(sql); ResultSet resultset = preparedstatement.executequery(); while (resultset.next()) { int id = resultset.getint("id"); System.out.println(id); String name = resultset.getstring("name");

workaddress); String homephone = resultset.getstring("home_phone"); String workphone = resultset.getstring("work_phone"); String homeaddress = resultset.getstring("home_address"); String workaddress = resultset.getstring("work_address"); Person person = new Person(name, homephone, workphone, homeaddress, person.setid(id); persons.add(person); preparedstatement.close(); catch (SQLException e) { return null; finally{ try { connection.close(); catch (SQLException e) { return persons;