Xavier Crégut <prenom.nom@enseeiht.fr>
L’objectif de ce sujet est de proposer un outil de gestion pour un laboratoire de recherche, et plus précisément les personnels et le bureau qu’ils occupent. Cet outil pourra avoir plusieurs interfaces utilisateurs :
Une interface dans le terminal qui propose un menu pour accéder aux différentes fonctionnalités.
Une interface en ligne de commande (optionnelle). Par exemple pour ajouter Xavier qui est dans le bureau F305 on tapera la commande suivante.
python labo_cmd.py add Xavier F305
Une interface graphique (on ne la réalisera pas)
Une interface Web (on ne la réalisera pas)
Pour simplifier, nous considérons que nous ne gérons qu’un seul laboratoire.
Ces multiplies interfaces utilisateurs possibles conduiront à bien isoler la partie gestion du laboratoire (sans interactions avec l’utilisateur) dans un module spécifique qui ne fait aucune interaction avec l’utilisateur.
Dans un premier temps, on veut simplement recenser les personnes qui travaillent dans le laboratoire et, plus précisément, savoir quel bureau elles occupent.
On sait que :
On veut donc pouvoir :
PresentException
signalera la tentative d’enregistrer une
personne déjà connue du laboratoire.AbsentException
si la personne est
inconnue.Un menu textuel doit donner accès à ces différentes possibilités.
pass
)On définira comme suit les exceptions susmentionnées :
class LaboException(Exception):
""" Généralise les exceptions du laboratoire."""
pass
class AbsentException(LaboException):
pass
class PresentException(LaboException):
pass
Une nouvelle fonctionnalité est demandée : la possibilité d’afficher l’occupation des bureaux.
On affichera d’abord d’occupation des bureaux en mode texte. Voici le type d’affichage attendu :
F305:
- Marc
- Xavier
F307:
- Aurélie
On produira l’occupation des bureaux sous la forme d’une page HTML
On affichera les bureaux et leurs occupnants dans l’ordre lexicographique
Interrongeons nous sur les menus que nous avons définis.
Proposer une nouvelle implantation des menus réutilisables.
Entre deux exécutions de l’application, on veut conserver les informations déjà renseignées. Pour ce faire un sauvegardera dans un ou plusieurs fichiers texte les informations de manière à pouvoir les charger à chaque lancement de l’application.
On pourra utiliser le format JSON et le module json de Python.
On veut aussi pouvoir importer dans le laboratoire des données au format csv. Voici un exemple d’un tel fichier (la première ligne contient le titre des colonnes).
Nom, Bureau
Aurélie, F307
Xavier, F305
Marc, F305
On utilisera le module csv et en
particulier DictReader
. On affichera à la fin un rapport
pour indiquer les personnes du fichiers csv déjà enregistrées mais avec
un numéro de bureau différent.
Pour vérifier la cohérence des informations données, en l’occurrence le numéro de bureau, on définira tous les bureaux possibles et on s’assurera que l’information saisie pour le numéro de bureau est cohérente.
On veut pouvoir aussi enregistrer les informations suivantes sur un personnel :
Modifier l’application en conséquence
Écrire des scripts de gestion du laboratoire qui ne fonctionnent que grâce aux arguments de la ligne de commande (donc non interactifs). On aura alors un script par fonctionnalité attendu. Par exemple, un script ‘arrivée’ qui prend en argument le laboratoire, le nom du nouvel arrivant et son numéro de bureau.
On peut le faire directement en manipulant la variable
argv
du module os
ou en utilisant le module argparse
spécialisé dans le traitement des arguments de la ligne de commande.
Les personnels du laboratoire sont généralement attachés à une équipe de recherche. Il faut pouvoir de :
Chaque équipe a un responsable qui fait l’interface entre son équipe et le directeur du laboratoire. Il est demandé de gérer ces responsables et de pouvoir lister tous les responsables avec l’équipe dont ils sont responsables.
On souhaite disposer d’un organigramme graphique en utilisant graphviz/dot.