Rapport Projet Informatique
Rapport Projet Informatique
Rapport Projet Informatique
Réalisé par :
Proposé par :
ATOEMNE NYANU louis
M.SEKHARA Youssef
MPETEYE Jacintho
PALLI Sylvain
1
Table des matières
Introduction .......................................................................................................................... 3
1-Présentation du thème proposé ......................................................................................... 4
2-Présentation du programme .............................................................................................. 4
1.1-Organisation du programme ....................................................................................... 5
1.1.1-Arbre des onglets du logiciel ................................................................................ 5
1.1.2-Fonctions .............................................................................................................. 5
1.2-Explication du script ................................................................................................. 14
1.2.1-Architecture du script des fenêtres ..................................................................... 14
1.2.2-Gestion des fichiers servant de base de données ................................................ 15
1.2.3-Gestion de la notion d’ID unique ....................................................................... 17
1.2.4-Implémentation des barres de recherche ............................................................ 17
1.2.5-Traçabilité à l’aide de l’historique...................................................................... 18
1.2.6- Auto-remplissage pour une modification simplifiée ......................................... 18
1.2.7-Gestion du chiffrage et du déchiffrage des identifiants ..................................... 18
1.2.8-Enjeu de la fonction update_table().................................................................... 20
1.3-Mode d’emploi du logiciel ....................................................................................... 21
1.3.1-Authentification .................................................................................................. 21
1.3.2-Onglet «Gestion des équipements » ................................................................... 21
1.3.3- Onglet « Gestion des utilisateurs » .................................................................... 22
1.3.4-Onglet « Historique » ......................................................................................... 23
3-Bilan du travail................................................................................................................ 23
Conclusion & Perspectives ................................................................................................ 25
Webographie (Ressources didactiques) ............................................................................. 26
Table des illustrations ........................................................................................................ 27
2
Introduction
3
1-Présentation du thème proposé
Le programme que nous allons présenter dans ce rapport est essentiellement écrit en
langage python pour ainsi respecter le cahier des charges. Comme énoncé dans
l’introduction, c’est un programme qui est sensé gérer un stock. Dans l’optique de se munir
d’un cas concret, nous avons jugé bon de mettre ce calquer ce logiciel sur les besoins de
notre école plus précisément, le laboratoire technique HESTIM. En effet, ce dernier se voit
accueillir de nombreux équipements par lots dans les différents compartiments, au fur et à
mesure qu’il se développe. La dynamique inverse se produit au même titre, car bon nombre
de ces équipements sont utilisés ou écartés du stock d’équipement car défectueux ou pour
tout autre raison. Ainsi lorsqu’un lot d’équipements est nouvellement acheté ou épuisé, il
serait très commode d’avoir un logiciel à disposition afin de gérer toute cette dynamique
des stocks d’équipement, ce qui va permettre d’avoir une vue et un total contrôle sur la
désignation de l’équipement, la quantité, le prix unitaire, et l’appartenance aux différents
départements présents dans le laboratoire. Bien évidemment, ce sera la fonctionnalité
principale du programme mais pas la seule. Nous avons su implémenter dans le programme
plusieurs fonctionnalités opportunes afin de rendre le travail de gestion simple, transparent
et traçable.
2-Présentation du programme
4
1.1-Organisation du programme
1.1.2-Fonctions
5
Fonctions de la fenêtre d’authentification
blink()
Cette fonction permet de faire clignoter le bouton « Accéder » de la fenêtre.
hide_show_password()
Fonction connectée à l’icône d’œil au bout du champ de saisie du mot de passe
permettant de masquer ou d’afficher à volonté le mot de passe que l’utilisateur saisit.
check()
Il s’agit de notre police d’authentification. Par le biais de cette fonction, les
identifiants saisis par l’utilisateur sont comparés à ceux contenus dans le fichier texte
« identifiants.txt » faisant office de base de données. En cas de conformité le fenêtre
principale est ouverte. Dans le cas contraire, un message de refus d’accès est affiché.
6
Fonctions de la fenêtre principale
Dans un premier temps, nous présenterons les fonctions qui sont directement
connectées à des boutons ou autres éléments de l’interface avec une brève description de
leurs rôles.
add_eq()
Cette fonction est connectée au bouton « Ajouter » dans l’onglet «Ajouter un
équipement » permettant d’ajouter un nouvel équipement par l’utilisateur dans les tables
du logiciel, une fois que les informations nécessaires ont été saisies.
7
Connectée au bouton « Supprimer », cette fonction permet de supprimer un
équipement de la table une fois que ce dernier y a été sélectionné.
export_table()
Il s’agit de la fonction d’export du contenu des tables d’équipements dans un fichier
de tableur excel, soit encore un fichier « .xlsx » ou « .xls », qui sera enregistré dans le
répertoire désigné par l’utilisateur.
modify_eq()
Elle est reliée au bouton « Modifier » de l’onglet « Modifier des spécifications » et
permet de changer certaines propriétés d’un équipement au besoin, à savoir son nom, sa
quantité, son prix unitaire, son département d’appartenance.
fill_area_on_selection()
Fonction intervenant dès qu’un élément de la table est sélectionné et génère le
remplissage automatique des champs à renseigner dans l’onglet « Modifier des
spécifications ».
8
Figure 5 : Fonctions search, modify_eq et fill_area_on_selection dans l’onglet de modification des équipements
sort_eq()
C’est la fonction de tri des équipements selon le choix fait par l’utilisateur dans la
liste déroulante. Les éléments triés s’affichent dans la liste de l’onglet «Tri et Statistiques ».
Le tri peut se faire par ordre alphabétique ou par département.
draw_graph()
C’est la fonction connectée au bouton « obtenir des stats » de l’onglet «Tri et
Statistiques » permettant d’obtenir des graphiques à partir du choix de l’utilisateur dans la
liste déroulante du type de graphique à afficher. La bibliothèque Matplotlib est utilisée à
cet effet.
9
Figure 6 : Fonctions sort_eq et draw_graph de l’ongle de tri et de statistiques
add_user()
Cette fonction est directement connectée au bouton « Ajouter » sur l’interface et
permet d’ajouter un nouvel utilisateur dans le système du logiciel. Ce dernier pourra dès la
prochaine ouverture de session se servir de ses identifiants pour accéder à l’application.
delete_user ()
Elle est connectée au bouton « supprimer » de l’onglet «supprimer un utilisateur »
et nous permet de retirer l’accès au logiciel d’un utilisateur et effaçant ses identifiants du
système.
10
Figure 7 : Fonction add_user de l’onglet d’ajout d’utilisateur
11
delete_history_element()
Elle sous-tend la suppression d’un élément dans l’historique et est connectée au
bouton « effacer un élément ». Encore une fois, un simple clic sur l’élément suffit.
delete_whole_history()
Connectée au bouton, « effacer l’historique » cette fonction permet de supprimer
tous les éléments de l’historique.
open-help()
Fonction directement connectée au bouton «Aide» dans le coin supérieur gauche de
l’interface ouvre une fenêtre renfermant des instructions et des directives concernant le
mode d’emploi du produit.
Par-delà, d’autres fonctions, qui ne sont pas des fonctions liées à des éléments
d’interface, ont été éditées dans le programme. Ces dernières peuvent être appelées ou non
à l’intérieur de la définition des fonctions précitées. Ces fonctions sont :
12
save_data()
Elle permet de stocker la table des équipements (ID, non, quantité, prix unitaire et le
département) dans le fichier texte « equipements.txt » faisant office de base de données.
save_user_data()
C’est la fonction d’enregistrement des données des utilisateurs dans le fichier texte
« identifiants.txt » faisant office de base de données.
load_data()
Elle charge dans les tables (tableWidget) les données des équipements (ID, nom,
quantité, prix unitaire et le département) stockées le fichier « equipements.txt » faisant
office de base de données.
load_user_data()
Elle charge dans la liste des utilisateurs (listWidget) et dans la liste(variable au sein
du code) « passwords » les données des utilisateurs préalablement stockées le fichier
« identifiants.txt » faisant office de base de données.
save_history_data()
Cette fonction permet d’enregistrer les éléments de l’historique dans le fichier texte
« historique.txt » faisant office de base de données.
load_history_data()
Elle charge dans les tables (tableWidget) les éléments de l’historique stockés le
fichier « historique.txt » faisant office de base de données
set_history_element (action)
Cette fonction prend en argument une chaîne de caractères qui décrit l’action réalisée
par l’utilisateur et ajoute à la table d’historique un élément d’historique comprenant la date,
l’action réalisée et le nom de l’utilisateur en cause. Les actions pouvant être répertoriées
sont les suivantes :
Nouvel équipement <désignation> ajouté
Equipement <désignation> supprimé
Spécification de l’équipement <désignation> modifié
Nouvel utilisateur <nom> ajouté
Utilisateur <nom> supprimé
13
update_table()
C’est une fonction auxiliaire de mise à jour de ligne des tables, utilisée pour réduire
le nombre de lignes de codes et éviter la redondance dans l’édition des tables.
cesar(chaîne, clé)
Fonction de chiffrage importée depuis le script «chiffrage.py », et utilisée pour
crypter les données écrites dans le fichier « identifiant.py ». Elle prend en paramètre la
chaîne à crypter et la clé de chiffrage et renvoie la chaîne cryptée.
cesar_reverse(chaîne, clé)
Fonction de déchiffrage, également importée depuis le script «chiffrage.py »,
utilisée pour décrypter les données les du fichier « identifiants.py ». Elle prend en
paramètre la chaîne à décrypter et la clé de chiffrage et renvoie la chaîne décryptée.
1.2-Explication du script
14
1.2.2-Gestion des fichiers servant de base de données
Comme constaté plus haut, parmi les fonctions qui interagissent avec nos pseudo-
bases de données on peut distinguer des « load » et des « save ». Pour se faire une idée de
comment les données sont chargées depuis les fichiers dans les tables du programme,
intéressons-nous à un exemple :
Comme on peut le voir, chaque ligne du fichier est une ligne de la table des
équipements et les éléments de cette ligne sont séparés par le caractère « | ». En ouvrant ce
fichier à l’aide de la fonction « open » en mode lecture ‘r’, il suffit d’un traitement sur
chacune des lignes du document, qui ne sont autres que des chaînes de caractères pour
extraire les données dont nous avons besoin. Pour plus de compréhension, voici la partie
d’extraction éditée dans la fonction load_data() :
15
Figure 12 : Fonction load_data partie extraction des données
16
Par contre les fonctions de chargement des données ne sont appelées qu’une fois en
règle générale dans la fonction setupUi() du début.
Afin de nous assurer que tous les ID attribués à chaque stock d’équipement seront
uniques, nous avons opté pour un système d’identification auto incrément. Ces ID ne sont
pas réutilisables non plus. Un fichier texte « last_id.txt » conserve le dernier ID attribué,
ce qui permet même après le redémarrage de la session de reprendre l’incrémentation des
ID comme il se doit.
17
Figure 15 : Fonction search()
Dans l’onglet de modifications des stocks d’équipements, afin de s’assurer que seules les
informations modifiées seront altérées dans les tables, nous avons trouvé astucieux de pré-
remplir les champs de saisie de ces dernières de sorte à pouvoir récupérer l’intégralité du
contenu des champs pour la mise à jour des tables. Pour ce faire la fonction
fill_area_on_selection(), est connectée à la table de l’onglet de modification. Cette fonction
se présente comme suit :
18
Les identifiants sont aussi des données chargées et sauvegardées tout au long du
programme. Cependant une dynamique de chiffrage et de déchiffrage est implémentée dans
le code. C’est cet aspect que nous allons toucher dans cette partie.
Le fichier chiffrage.py contient la fonction de chiffrage cesar(chaine, clé) et la
fonction de déchiffrage cesar_reverse(chaine, clé).
19
1.2.8-Enjeu de la fonction update_table()
20
1.3-Mode d’emploi du logiciel
1.3.1-Authentification
Ajouter un équipement
21
N’hésitez pas à saisir la désignation de votre stock dans la barre de recherche pour la
faire remonter en haut de la table.
Vérifiez ensuite dans la table si l’élément à bien été supprimé
En cliquant sur le bouton « Exporter la table », un répertoire s’ouvrira. Vous devrez
alors choisir le dossier dans lequel vous souhaitez enregistrer la feuille de calcul Excel qui
sera créée. Cela peut être pratique si vous voulez imprimer le contenu des tables pour un
bilan ou quelque tâche que ce soit.
Pour modifier les information relatives à un stock donné, cliquez dans la table sur la
ligne correspondant à votre stock.
Ces informations remplirons automatiquement les champs à gauche de la table. Ensuite
vous n’avez plus qu’à changer celles des informations que vous désirez modifier.
Une fois cela fait, cliquez sur le bouton « modifier »
Vérifiez ensuite si les informations ont bien été mise à jour dans la table
Tri et statistiques
La première liste déroulante vous propose les options de tri existantes. Il vous suffit
d’en sélectionner une pour voir le résultat apparaître dans le champ à droite.
Pour obtenir des graphiques construites à partir des données des tables, sélectionnez un
type de graphique dans la dernière liste déroulante, puis cliquez sur le bouton « Obtenir
des stats » . Vous verrez apparaître une fenêtre avec un diagramme à bandes. N’hésitez
pas personnaliser le graphique à votre guise à l’aide des boutons de la barre d’outils.
Ajouter un utilisateur
22
Pour ajouter un nouvel utilisateur, renseigner le nom d’utilisateur ainsi que son mot de
passe. Ensuite cliquez sur le bouton « Ajouter ». Vous verrez s’ouvrir une notification de
confirmation.
N.B : Le nom d’utilisateur n’a que 15 caractères admissibles et le mot de passe 10
caractères admissibles.
Supprimer un utilisateur
Pour supprimer un utilisateur sélectionnez le nom de ce dernier dans la liste des
utilisateurs à droite, puis cliquez sur le bouton « Supprimer ».
1.3.4-Onglet « Historique »
3-Bilan du travail
Dans l’ensemble la conception du logiciel a été un succès, car les objectifs que nous
nous sommes fixés au début ont été atteints voire dépassés. La chose n’a toutefois pas été
simple à tous les niveaux. Il y a eu plusieurs difficultés rencontrées en route, des problèmes
que nous avons su résoudre au fur et à mesure de l’édition du programme.
Le premier de ces problèmes était l’abondance des lignes de codes dans le fichier
d’extension .py obtenu une fois le fichier .ui converti. Le code obtenu était long et
compact. Il va sans dire que son édition était au début assez ardue. Cependant, les noms
des widgets ayant été bien définies au départ, il suffisait de réorganiser le code proprement
pour en faciliter l’édition. L’IDE PyCharm a également été très utile dans la mesure où il
rend l’édition et l’organisation du code plus limpide.
23
Le second problème était la connexion des fonctions aux signaux des widgets.
Nous avons pu le surmonter en effectuant bon nombre de recherches non seulement sur les
forums mais aussi à travers la documentation du module PyQt5.
Un autre des défis que nous avons dû relever est le passage de données à travers
les fenêtres. Notamment l’enregistrement de l’utilisateur de la session dans la fenêtre
principale en en prenant la valeur à partir de la fenêtre d’authentification. Une série de
tutoriel YouTube, que nous citerons en référence, a été très instructive à cet effet et nous a
permis de régler le problème.
Un problème majeur et pas des moindres a été l’ensemble des conflits de classe
parent-enfant qui pouvaient survenir. Bien que la programmation orientée objet soit très
simple avec le langage python, certaines de ses subtilités si elles ne sont pas considérées
peuvent renvoyer une erreur.
Pour finir, il fallait aussi parcourir le logiciel dans tous ses scénarios possibles,
détecter les éventuels bugs et les corriger sans dégrader la structure du code.
24
Conclusion & Perspectives
Somme toute, travailler sur ce projet a été une expérience très enrichissante
pour chacun d’entre nous. Il nous a notamment permis de nous orienter vers de nouvelles
technologies, d’acquérir de nouvelles compétences tout en renforçant les précédentes. Ce
travail a su mobiliser en nous une grande capacité de réflexion et de résolution dynamique
des problèmes de programmation. L’esprit de recherche était également au rendez-vous car
comme nous l’avons appris, en ce qui est de la programmation nous ne sommes limités que
par notre imagination mais pour le reste il suffit d’être un bon chercheur.
Ceci étant dit les perspectives d’amélioration de ce programme sont
nombreuses. Il pourrait déjà s’agir d’utiliser la bibliothèque Sqlite pour gérer les bases de
données et rendre le programme encore plus professionnel. Il serait également bien d’éditer
un panneau de contrôle de divers paramètres relatifs au logiciel, ou encore d’animer les
widgets et les onglets. D’énormes possibilités s’offrent à nous, du moment que nous
sommes mues par la curiosité et la passion pour l’édition de programme utiles à la société.
25
Webographie (Ressources didactiques)
[2] J. Jenn, «Add, Copy, Delete selected row on a Table Widget (QTableWidget) | PyQt5
Tutorial,» [En ligne].
[3] J. Jenn, «How To Launch Matplotlib Chart With A Button In PyQt5,» [En ligne].
[4] A. Academy, «Bar Graph | Bar Chart | Matplotlib | Python Tutorials,» [En ligne].
26
Table des illustrations
27