2001-2002 Projet CORBA : gestion de supermarchés Catherine FRANCO, Laetitia SOULIÉ et David ROUSSE
SOMMAIRE I - Spécifications 3 a) Cas d utilisation 3 b) Scénarios 3 Afficher total ventes agences 3 Afficher total ventes terminal 4 Editer ticket 4 Enregistrer vente 4 Gérer données agence 5 Gérer fichier produits 5 Gérer stocks agence 6 Identifier utilisateur 6 II - Analyse 7 a) Diagramme des classes 7 b) Règles de gestion 7 III - Conception 8 a) Architecture 8 Vue générale 8 Vue CORBA 8 Fédération 9 b) Contrat IDL 9 lundi 22 décembre 2003 Page 2
I - Spécifications a) Cas d utilisation Supermarche Identifier utilisateur Enregistrer vente Caissier Editer Ticket Afficher total ventes terminal Afficher total ventes agence Gérant agence Gérer données agence Gérer stocks agences Siège Gérer fichier produits b) Scénarios Afficher total ventes agences : Gérant agence Afficher total (menu 3) Vérifier droits Total ventes agence Calculer total lundi 22 décembre 2003 Page 3
Afficher total ventes terminal : Caissier Afficher total (menu 2) Total ventes terminal pour ce login Editer ticket : Caissier Editer ticket (menu 5) Pour chaque ligne du ticket, mettre à jour le stock Afficher ticket Mettre à jour le total de vente pour cette caisse Enregistrer vente : Caissier Demande code barre? Code barre "Vente enregistrée" Vente multiple (menu 4) Demande quantité? Quantité Demande code barre? Code barre "Vente enregistrée" lundi 22 décembre 2003 Page 4
Gérer données agence : Gérant agence Gérer données (menu 6) Formulaire renseigné des données de l'agence (marge, TVA, nom gérant, employés) Formulaire modifié "Modification(s) prise(s) en compte" Gérer fichier produits : Siège Gérer fichier produits (menu 1) Type action? Créer produit Formulaire saisie produit vierge? Formulaire saisie produit complété Informer agences "Produit enregistré" Gérer fichier produits (menu 1) Type action? Modifier produit Formulaire modification produit renseigné? Formulaire modification produit complété "Produit enregistré" Si code barre modifié, informer agences Gérer fichier produits (menu 1) Type action? Supprimer produit Code barre? Code barre Produit supprimé" Vérifier si des ventes sont en cours. Si oui, suppression impossible. Gérer fichier produits (menu 1) Type action? Rechercher produit Code barre? Code barre Fiche informations produit lundi 22 décembre 2003 Page 5
Gérer stocks agence : Siège Gérer stocks agences (menu 2) Type action? Consulter stock Nom agence, code barre? Nom agence, code barre Quantité en stock Gérer stocks agences (menu 2) Type action? Mettre à jour stock Nom agence, code barre, quantité? Nom agence, code barre, quantité "Stock mis à jour" Identifier utilisateur : Caissier Identification (menu 1) Demande login/password? login/password "Prêt pour la vente" lundi 22 décembre 2003 Page 6
II - Analyse a) Diagramme des classes <<CORBA : fabrique>> GererAgences creer() supprimer() rechercher() <<CORBA : obje... Siege 1 0..n <<CORBA : obje... GererProduits listep creer() creerp() modifier() modifierp() supprimer() supprimerp() rechercher() rechercherp() <<CORBA : structure>> Produit codebarre designation prixht <<CORBA : objet>> Agence marge tva totalventes connecter() deconnecter() recupererinfoproduit() affichertotalventes() <<CORBA : obje... GererStocks listes rechercher() modifier() creer() supprimer() <<CORBA : structure>> Stock codebarre quantite 1 0..n <<CORBA : fabrique>> GererCaisses listec creer() supprimer() rechercher() <<CORBA : objet>> Caisse totalventes 0..1 <<CORBA : obje... GererEmployes listee creer() creere() modifier() modifiere() supprimer() supprimere() rechercher() recherchere() utilise à un instant t 1 <<CORBA : structure>> Employe login password droits vendres() vendrec() editerticket() affichertotalventes() 1 0..1 Ticket montantventes montanttva LigneTicket codebarre designation prixttc quantite Autres classes identifiées : <<CORBA : objet>> PersistanceDonnees source inserer() mettreajour() supprimer() rechercher() ouvrirsource() fermersource() <<CORBA : obje... Federation ajouterobjet() rechercherobjet() supprimerobjet() <<CORBA : client>> ClientGerantAgence <<CORBA : client>> ClientSiege <<CORBA : client>> ClientCaisseAgence b) Règles de gestion On considère que pour une agence donnée, le taux de TVA est le même pour tous les produits. On mettra à jour le stock lorsque le ticket est édité. lundi 22 décembre 2003 Page 7
III - Conception a) Architecture Vue générale Produit Siège s IIOP/TCP/I P Stocks Agence Agence TX TX Ethernet TX TX Vue CORBA Serveur Siège PC Agence GererAgences GererProduits Siege IIOP/TCP/IP Agence GererStocks GererEmployes GererCaisses Caisse Caisse Caisse ClientSiège Terminal Terminal En rouge, les objets CORBA enregistrés dans la fédération. En vert, les objets CORBA non enregistrés dans la fédération. ClientGérant Ethernet ClientCaissier lundi 22 décembre 2003 Page 8
Fédération Siège Agence Toulouse Contexte de base Contexte de base supermarche federation supermarche federation siege toulouse toulouse siege Contexte de désignation Contexte de federation Contexte de désignation Contexte de federation gerer_produits siege gerer_agences agence gerer_stocks gerer_caisses gerer_employes Ainsi, par exemple, on pourra consulter les stocks des agences depuis le siège en nommant les objets ainsi : federation.toulouse.supermarche.gerer_stocks federation.pau.supermarche.gerer_stocks federation.marseille.supermarche.gerer_stocks ect b) Contrat IDL module supermarche { exception CaisseException { exception GererCaissesException { exception AgenceException { lundi 22 décembre 2003 Page 9
exception GererAgencesException { exception SiegeException { exception GererStocksException { exception GererProduitsException { exception GererEmployesException { struct Employe { string login; string password; string droit; struct Stock { string codebarre; short qte; struct Produit { string codebarre; string designation; double prixht; interface Base { readonly attribute string ; interface Caisse : Base { attribute double totalventes; readonly attribute string agence; readonly attribute string caissier; void vendres(in string codebarre) raises (CaisseException); void vendrec(in string codebarre, in short qte) raises (CaisseException); void editerticket() raises (CaisseException); typedef sequence<caisse> listecaisses; lundi 22 décembre 2003 Page 10
interface GererCaisses : Base { readonly attribute listecaisses listec; Caisse creer(in string login, in string agence, in string logincaissier) raises (GererCaissesException); void supprimer(in string login) raises (GererCaissesException); Caisse rechercher(in string login) raises (GererCaissesException); typedef sequence<stock> listestocks; interface GererStocks : Base { readonly attribute listestocks listes; void creer (in string codebarre, in short qte) raises (GererStocksException); void creers (in Stock s) raises (GererStocksException); void modifier (in string codebarre, in short qte) raises (GererStocksException); void modifiers (in Stock s) raises (GererStocksException); void supprimer (in string codebarre) raises (GererStocksException); void supprimers (in Stock s) raises (GererStocksException); Stock rechercher (in string codebarre) raises (GererStocksException); Stock recherchers (in Stock s) raises (GererStocksException); typedef sequence<employe> listeemployes; interface GererEmployes : Base { readonly attribute listeemployes listee; void creer (in string login, in string password, in string droit) raises (GererEmployesException); void creere (in Employe e) raises (GererEmployesException); void modifier (in string login, in string password, in string droit) raises (GererEmployesException); void modifiere (in Employe e) raises (GererEmployesException); void supprimer (in string login) raises (GererEmployesException); void supprimere (in Employe e) raises (GererEmployesException); Employe rechercher (in string login) raises (GererEmployesException); Employe recherchere (in Employe e) raises (GererEmployesException); interface Agence : Base { readonly attribute double totalventes; attribute double marge; attribute double TVA; Caisse connecter(in string login, in string password) raises (AgenceException); void deconnecter(in string login) raises (AgenceException); Produit recupererinfoproduit(in string codebarre) raises (AgenceException); typedef sequence<agence> listeagences; lundi 22 décembre 2003 Page 11
interface GererAgences : Base { readonly attribute listeagences listea; Agence creer(in string ) raises (GererAgencesException); void supprimer(in string ) raises (GererAgencesException); Agence rechercher(in string ) raises (GererAgencesException); interface Siege : Base { Produit recupererproduit (in string codebarre) raises (SiegeException); typedef sequence<produit> listeproduits; interface GererProduits : Base { readonly attribute listeproduits listep; void creer (in string codebarre, in string designation, in double prixht) raises (GererProduitsException); void creerp (in Produit p) raises (GererProduitsException); void supprimer (in string codebarre) raises (GererProduitsException); void supprimerp (in Produit p) raises (GererProduitsException); void modifier (in string codebarre, in string designation, in double prixht) raises (GererProduitsException); void modifierp (in Produit p) raises (GererProduitsException); Produit rechercher (in string codebarre) raises (GererProduitsException); Produit rechercherp (in Produit p) raises (GererProduitsException); lundi 22 décembre 2003 Page 12