Université du Québec à Montréal
Département d’Informatique Été 2006
INF3180
Fichiers et bases de données
Objectif
L’objectif de ce travail est la maitrise:
La création des bases de données;
L'utilisation des fonctions et des procédures en PL/SQL;
L'utilisation des déclencheurs;
Spécification du Problème
Le club de golf Gdebay Inc. désire informatiser la gestion de ses membres et leur offrir la possibilité d’utiliser le système pour enregistrer leurs performances et calculer leur handicap. Le club offre un parcours régulier de 18 trous (normale 72) et un parcours par 3 pour débutant de 9 trous (normale 27). Les membres peuvent également profiter de deux restaurants, d’un bar, d’une boutique ainsi que de leçons de golf.
Gestion des membres
1. Lorsqu’un individu ou une famille désire devenir membre du club, il choisit le type d’abonnement qu’il
désire, soit individuel, couple ou familial, avec le droit de jouer tous les jours ou seulement sur semaine. On ouvre alors un dossier comprenant entre autres les noms, adresse, téléphone, type d’abonnement et nombre d’individus membres de la famille.
Une famille peut être composée de plusieurs personnes, à condition que tous vivent à la même adresse et que les enfants soient âgés de moins de 18 ans au moment de l’abonnement.
Gestion des parties
2. Au cours de la saison, chaque membre doit entrer ses joutes : date, parcours, score (par trou). Lorsqu’il y a
suffisamment de parties entrées, le membre peut demander au système de calculer son handicap.
Un handicap consiste en un certain nombre de coups qui sépare un joueur qui joue régulièrement la normale (handicap nul) d’un joueur inexpérimenté. Plus le joueur est inexpérimenté, plus son handicap est élevé. Par exemple, si on calcule une moyenne des scores des plus récentes parties et qu’on obtient 98, le handicap sera de 26 (98-72). On se sert du handicap pour les compétitions entre joueurs de niveau différent, afin que chacun ait une chance de gagner.
Gestion des paiements et dépenses
3. Le paiement de l’abonnement doit se faire dans les 30 jours suivant l’ouverture du dossier sinon
l’abonnement est annulé. Un champ DatePaiement dans le dossier indique si oui ou non l’abonnement est payé.
4. Les dépenses courantes, reliées à la boutique, au restaurant, au bar ou aux leçons sont effectuées par les membres alors que la facturation est faite au membre principal. (N.B:pas besoin pour ce TP)
PARTIE A , FC_TYPE_MEMBRE:
Cette fonction valide le type de membre. Elle sera appelée par un déclencheur lors de l’insertion d’un membre. Elle utilise les paramètres suivants :
1) le numéro de dossier
2) le type de membre ('P',’C’ ou 'E')
Si le type est invalide, la fonction affiche un message approprié et retourne 1 sinon elle retourne 0;
Validations requises
On ne peut ajouter un membre principal à un dossier qui en a déjà un.
Si on insère un conjoint, le type d’abonnement ne doit pas être individuel, il ne doit pas y avoir de conjoint dans la base pour ce dossier et le membre principal du dossier doit déjà être dans la base.
Si on insère un enfant, le type d’abonnement doit être familial et le membre principal doit déjà être dans la base.
PARTIE B , FC_Traitement_Partie:
Cette fonction ajoute une nouvelle partie pour un joueur .
Si le type est invalide, la fonction affiche un message approprié et retourne 1 sinon elle retourne 0;
Validations requises
L’abonnement du membre n’est pas annulé.
Le type d’abonnement est valide cette journée.
PARTIE C , FC_Traitement_detailPartie:
Cette fonction ajoute les scores par trou pour une partie.
Si le type est invalide, la fonction affiche un message approprié et retourne 1 sinon elle retourne 0;
Validations requises
La valeur minimale du champ score doit être la moitié de la valeur Normaltrou.
Valider l'existence du trou selon le terrain.
PARTIE D, Procédure PROC_Calcul_Handicap:
Cette procédure utilise deux paramètres (le premier: le numéro de membre et le deuxième de type date sous la forme 'dd-mm-yy' )
La procédure nous permet de calculer la valeur de l’handicap du membre à partir de la date passé en paramètre.
PARTIE E, Déclencheur DECL_Membre :
Ce déclencheur prend le contrôle lorsqu'on insère une ligne dans la table G_membres. Ce déclencheur appelle la fonction FC_TYPE_MEMBRE et quitte l'ordre insert avec une erreur si le code de validation = 1. Si le code de validation est 0, il laisse l’ordre insert s’exécuter.
PARTIE F, Déclencheur DECL_Partie :
Ce déclencheur prend le contrôle lorsqu'on insère une ligne dans la table G_Partie. Ce déclencheur appelle la fonction FC_Traitement_Partie et quitte l'ordre insert avec une erreur si le code de validation = 1. Si le code de validation est 0, il laisse l’ordre insert s’exécuter.
PARTIE G, Déclencheur DECL_DetailPartie :
Ce déclencheur prend le contrôle lorsqu'on insère une ligne dans la table G_Details_Partie. Ce déclencheur appelle la fonction FC_Traitement_detailPartie et quitte l'ordre insert avec une erreur si le code de validation = 1. Si le code de validation est 0, il laisse l’ordre insert s’exécuter.
Attention:
← x0 pour clé primaire.
← Le champs NO_TROU dans la table D_Details_Parties est de type Number (2)
←
Exemple:
Table G_Type Abonnements:
TYPE DESCRIPTION ---- --- COU couple FAM FAMILIALE IND INDIVIDU
G_Couts_Abonnements:
TYPE DROITS MONTANT ---- --- --- COU 5 1530
FAM 5 2040 IND 5 816 COU 7 2080 FAM 7 2600 IND 7 1248 Table G_Dossiers:
--- --- --- --- --- -- --- --- --- ---- --- 1 06-04-15 Pigeon 2205 Jarry est Montréal Qc H6M4T5 5146681222 06-04-15 COU 7
2 06-04-15 Martel 129 Berri Laval Qc H8M3JR 4506691277 06-04-18 FAM 5 Table G_Membres
NOMEMBRE TYPEMEMB NOM PRENOM S DATENAIS C HANDICAPDONNE NODOSSIER --- --- --- --- - --- - --- ---
901 P Sicotte Louis M 32-05-22 A 12 3 802 C Pigeon Adèle F 38-08-12 C 25 1 902 P Pigeon Henri-Paul M 40-06-03 B 17 1 932 P Martel Normand M 62-09-14 D 2 Table G_Parcours
NOTERRAIN NOM_DU_TERRAIN NORMALE ANNEEOUVERTURE --- --- --- --- 2 La pineraie 27 1999
1 Le massif 72 1985 Table G_details_Parcours:
NOTERRAIN NOTROU NORMALETROU DISTANCEROUGE DISTANCEBLANC DISTANCEBLEU --- --- --- --- --- ---
2 1 5 442 515 525 2 2 4 296 386 401 2 3 4 322 357 371 2 4 3 113 140 152 2 5 5 422 510 526 2 6 3 116 155 166 2 7 4 336 360 387 2 8 3 133 164 175 2 9 5 420 497 511 1 1 5 442 515 525 1 2 4 296 386 401 1 3 4 322 357 371 1 4 3 113 140 152 1 5 5 422 510 526 1 6 3 116 155 166 1 7 4 336 360 387 1 8 3 133 164 175 1 9 5 420 497 511 1 10 5 412 516 534 1 11 4 336 363 376 1 12 4 327 350 364 1 13 3 122 152 161 1 14 5 451 521 532 1 15 3 145 164 178 1 16 5 479 518 537 1 17 3 127 167 175 1 18 4 275 366 385 Table G_parties
IDPARTIE DATEPART SCORETOTAL NOMEMBRE NOTERRAIN --- --- --- --- ---
1 06-08-25 82 701 1 2 06-08-27 83 701 1 3 06-08-28 91 701 1 4 06-08-25 90 791 1 5 06-09-27 771 1 6 06-08-28 901 1 7 06-08-29 901 1 8 06-08-30 901 1 9 06-08-31 901 1
10 06-09-20 901 1 11 06-09-21 901 1 12 06-09-22 901 1 13 06-08-23 90 908 1 14 06-09-24 908 1 15 06-07-28 94 911 1 Table G_Details_Partie
IDPARTIE NO_TROU SCORE --- --- --- 3 1 5
3 2 6 3 3 5 3 4 4 3 5 5 3 6 3 3 7 10 3 8 4 3 9 6
Table G_type transactions
CODE_TRANSAC DESC_TRANSAC --- ---
1 BAR
2 RESTAURANT 3 COURS 4 BOUTIQUE 5 SURCHARGE 6 PAIEMENT
Remise du tp:
← Veuillez remettre par voie électronique les fichiers dans un seul fichier compressé nommé (inf3180_e06_tp2.zip). Cette remise se fera via la commande rendre_tp (vous trouverez les instructions sur la commande rendre_tp au http://www.labunix.uqam.ca/prive/ ).
1. Répertoire de remise : /usagers/k26750/inf3180/inf3180_e06_tp2
← Un document composé de:
← Une page de garde
← le script contient :
← La création des tables
← Insertion des enregistrements dans les tables
← Les fonctions.
← La procédure.
← Les déclencheurs.