SlideShare une entreprise Scribd logo
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Frédéric Sagez 
D.U.T. Informatique 
Institut Universitaire Technologique de Vélizy 
Années 1995-1997 
RAPPORT DE STAGE 
Page 1 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
J'ai effectué du 5 mai au 30 juin 1997 un stage au Service Informatique de Gestion de l'Institut 
Universitaire de Formation des Maîtres de l'académie de Versailles. 
La tâche qui m'a été confiée pendant cette période a été de faire un programme écrit en PL/SQL s ur un 
serveur de base de données Oracle. Ce programme consiste à effectuer les admissions des candidats qui 
s'inscrivent en première année pour devenir professeur d'écoles (inscription au C.A.P.E.). 
La première étape du stage a été de faire un cahier des charges afin de définir les besoins des différents 
utilisateurs. A partir de celui-ci, j'ai conçu, réalisé et testé un programme qui répond à tous les critères 
demandés. 
Mais pour comprendre à quoi va servir le programme, le chapitre I présente l'I.U.F.M. de Versailles ainsi 
que la structure ou j'ai effectué mon stage. Le chapitre II défini très clairement tous les objectifs qui m'ont été 
demandés. Les autres chapitres comme le chapitre IV est la plus grosse partie de ce rapport, il explique la 
méthodologie employée pour concevoir le programme en PL/SQL ainsi que toutes les données et informations 
supplémentaires qui m'ont été apportés. 
Page 2 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Sommaire 
1 I.U.F.M. : Institut universitaire de formation des maîtres..............................................................................5 
1.1 Origine des I.U.F.M. ......................................................................................................................................................................... 5 
1.2 La structure des I.U.F.M. ................................................................................................................................................................ 5 
1.3 Les fonctions de l'I.U.F.M. .............................................................................................................................................................. 6 
1.4 Les différents services ..................................................................................................................................................................... 6 
2 Les objectifs............................................................................................................................................. 10 
3 Le Cahier des charges............................................................................................................................... 13 
3.1 Introduction ....................................................................................................................................................................................13 
3.2 Analyse de l’existant......................................................................................................................................................................13 
3.2.1 Le matériel ..........................................................................................................................................................................14 
3.3 Etude du système ..........................................................................................................................................................................14 
3.3.1 Analyse des besoins non-fonctionnels ..........................................................................................................................14 
3.3.2 Analyse des besoins fonctionnels...................................................................................................................................15 
3.4 Evolution du programme..............................................................................................................................................................17 
4 Le programme ......................................................................................................................................... 19 
4.1 Principe de fonctionnement ........................................................................................................................................................19 
4.2 Les structures..................................................................................................................................................................................20 
4.2.1 La table des candidats triés .............................................................................................................................................20 
4.2.2 La table des capacités des centres .................................................................................................................................20 
4.2.3 La table des erreurs sur les candidats ...........................................................................................................................21 
4.2.4 La table des admissions dans les centres......................................................................................................................22 
4.3 Le programme principal................................................................................................................................................................23 
4.4 Description de la procédure de tri des candidats ....................................................................................................................24 
4.4.1 Description de la procédure Initialise_T_CANDIDAT_DESC ......................................................................................25 
4.4.2 Description de la sous procédure Inscrit_Erreur .........................................................................................................27 
4.4.3 Description de la procédure Tri_par_note_de_bareme ............................................................................................28 
4.4.4 Description de la fonction Nombre_de_candidat_par_note_de_bareme .............................................................28 
4.4.5 Description de la procédure Selectionne_Candidat_pour_table_temporaire.......................................................28 
4.4.6 Description de la procédure Tri_par_note_de_prepo ................................................................................................29 
4.4.7 Description de la sous procédure Tri_par_critere_de_selection .............................................................................30 
4.4.8 Description de la procédure Classement_table_trie ..................................................................................................31 
4.5 Description de la procédure d'attribution des centres ...........................................................................................................31 
4.5.1 Description de la procédure Test_place_Centre .........................................................................................................32 
4.5.2 Description de la procédure Selection_Information_Centre ....................................................................................33 
4.5.3 Description de la fonction Traite_le_Centre ................................................................................................................33 
4.5.4 Description de la procédure Donne_nom_du_centre................................................................................................34 
4.5.5 Description de la procédure Inserer_Candidat_dans_Centre...................................................................................34 
4.5.6 Description de la procédure Mise_a_jour_des_Centres ............................................................................................35 
4.6 Description des procédures de mise à jour des atypiques et des dérogataires .................................................................36 
4.6.1 Description de la procédure Met_le_nombre_de_derogataire ...............................................................................36 
4.6.2 Description de la procédure Met_le_nombre_d_atypique.......................................................................................37 
5 Fonctionnement ...................................................................................................................................... 39 
6 Utilisation du programme......................................................................................................................... 45 
6.1 Lancement du script ......................................................................................................................................................................45 
6.2 Erreurs..............................................................................................................................................................................................46 
6.3 Vérifications ....................................................................................................................................................................................46 
6.4 Optimisation ...................................................................................................................................................................................48 
7 Jeux de tests ............................................................................................................................................ 50 
7.1 Constations et vérifications du tri des candidats .....................................................................................................................50 
7.2 Constations et vérifications sur l’admission des candidats....................................................................................................52 
8 Conclusion............................................................................................................................................... 56 
Page 3 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
9 Annexe.................................................................................................................................................... 57 
9.1 Le programme SQL (affect97.sql) ...............................................................................................................................................57 
9.2 Création des tables sous Oracle (creat1_0.sql) ........................................................................................................................93 
9.3 Gestion de la mémoire (space2.sql) ...........................................................................................................................................98 
Page 4 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
1 I.U.F.M. : INSTITUT UNIVERSITAIRE DE FORMATION DES MAITRES 
1.1 Origine des I.U.F.M. 
Les Instituts Universitaire de Formation des Maitres ont été créées par la loi d'orientation sur l'éducation n° 89- 
486 du 10 Juillet 1989. 
Les I.U.F.M. sont des établissements d'enseignement supérieur et, à ce titre, bénéficient de l'autonomie 
pédagogique et administrative : ce sont des établissements publics administratifs. 
Les I.U.F.M. sont rattachées aux universités des différentes académies. Des conventions sont signées ent re le 
président de l'établissement de rattachement et le directeur de l'institut après avis des conseils d'administration 
des deux établissements. 
De part ce changement de statut des établissements de formation des enseignants, la profession a été 
revalorisée et le recrutement ne s'effectue plus au même niveau. 
Au mois de Septembre 1991, les I.U.F.M. ont ouverts leurs portes, en remplacement des Ecoles Normales qui 
existaient par le passé car elles étaient gérées au niveau départemental (il en existait une pour chaque 
département). Désormais il n'existe plus qu'un I.U.F.M. par académie, ainsi leur création a entraîné le 
regroupement d'entités distinctes au sein d'un même établissement. 
1.2 La structure des I.U.F.M. 
Chaque I.U.F.M. a hérité au moment de sa création des locaux et du matériel des Ecoles Normales dont il est le 
successeur. 
Page 5 sur 99 
Présentation de l'organisation d'un I.U.F.M. : 
Il y a un siège qui est le centre de direction et de gestion de l'ensemble de l'établissement dont le rôle 
est de répartir les ressources entre les différents centres éparpillés à l'intérieur de l'académie selon leurs 
besoins. Au siège il y a un directeur qui a la charge de l'ensemble de l'institut, il est assisté par un secrétaire 
général et d'un agent comptable qui ont pour mission la gestion et la répartition du budget de l'I.U.F.M. 
Il y a des centres de formation dont le rôle est d'assurer la préparation des étudiants au concours de 
l'Education Nationale, la formation des professeurs stagiaires pendant leur deuxième année. Ces centres de 
formation sont répartis à travers l'académie administrée par l'I.U.F.M. 
Chaque centre a un directeur qui est responsable avec son équipe des orientations pédagogiques suivis par 
l'établissement ainsi que de son administration. 
Dans l'académie de Versailles, il y a 6 centres de formations : 
 Versailles (au même endroit que le siège), 
 Antony Jouhaux,
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 6 sur 99 
 Antony Val de Bièvre, 
 Cergy, 
 Etiolles, 
 Saint Germain en Laye. 
1.3 Les fonctions de l'I.U.F.M. 
La fonction essentielle de l'I.U.F.M. est la sélection et la formation des futurs enseignants de l'éducation 
nationale. Cette fonction s'exerce dans les centres de formation qui ont chacun leurs spécificités : 
 Le centre d'Antony Jouhaux forme les futurs enseignants technologiques dans les lycées et collèges, on y 
prépare le Certificat d'Aptitude au Professorat Technologique (CAPET) ainsi que des enseignants pour les 
Lycées Professionnels (LP) en y préparant le Certificat d'Aptitude au Professorat des Lycées 
Professionnels. 
 Les centres d'Antony Val de Bièvre, Cergy et Etiolles accueillent les candidats pour la préparation du 
Certificat d'Aptitude au Professorat des Ecoles (CAPE ou PE), de l'Enseignement Secondaire (CAPES) ainsi 
que l'Education Physique et Sportive (CAPEPS). 
 Les centres de Saint Germain en Laye et Versailles quant à eux sont chargés de préparer les CAPE ou le 
CAPES. 
La personne désirant s'inscrire dans l'une des branches doit avoir obligatoirement une licence sauf pour les CAPE 
ou l'on peut s'inscrire avec un diplôme équivalent au BAC+3 comme par exemple le Diplôme National Technique 
Supérieur après un Diplôme Universitaire Technologique. 
L'étudiant fait d'abord une démarche de préinscription. Son dossier passe alors devant une commission 
d'admission qui sélectionne les personnes qui vont disposer d'une place à l'I.U.F.M. 
Après son admission, l'étudiant passe une année dans un centre de l'I.U.F.M. pour préparer le concours auquel il 
est candidat. A l'issue de cette première année d'enseignement pédagogique, le candidat passe son concours. 
S’il l'obtient, le candidat entre en deuxième année en qualité de professeur stagiaire, sinon il peut redoubler sa 
première année s’il a eu l'avis favorable de ses professeurs. 
Durant la deuxième année, le professeur stagiaire est formé sur le "terrain" dans des classes. A la fin de son 
année, il passe devant une commission de validation du stage qui propose sa titularisation. Si la commission de 
titularisation lui donne un avis favorable alors le candidat deviendra professeur titulaire avec un poste 
d'enseignement à vie comme fonctionnaire, sinon il peut redoubler en renouvelant son stage. 
Chaque année, l'académie de Versailles enregistre sur l'ensemble de ses centres, plus de 15 000 demandes 
de dossier de préinscription à l'I.U.F.M. Sur ces 15 000 demandes de dossier, environ 12 000 seront soumises à 
la commission d'étude qui est chargée de les valider. Parmi ces dossiers, moins de 4 000 candidats pourront 
suivre une formation de CAPE en première année pour l'année scolaire 1997-1998. 
1.4 Les différents services 
Pour coordonner ses diverses formations et assurer le bon fonctionnement de l'I.U.F.M., il y a au siège de 
l'I.U.F.M. à Versailles des services administratifs. Leur principal travail est de donner aux centres de formation 
les moyens matériels pour former les personnes inscrites à l'I.U.F.M.
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 7 sur 99 
Ces services sont au nombre de quatre : 
1. Le service comptable qui a la responsabilité du budget de l'I.U.F.M., sa mission est la gestion et la 
redistribution des ressources de l'établissement, 
2. Le service scolarité qui gère les préinscriptions, le suivi des dossiers inscrits à l'I.U.F.M. ainsi que le 
versement des allocations aux étudiants de première et de deuxième année, 
3. Le service du personnel et des moyens qui assure la gestion du personnel administrat if et enseignant de 
l'I.U.F.M., des moyens nécessaires à la pédagogie et à l'enseignement dans les centres. 
4. Le service informatique de gestion qui est chargé de donner aux trois autres services les moyens 
informatiques (logiciels et matériels) ainsi que dans chaque centre, ses principales activités sont : 
 La maintenance des réseaux (il y en à trois, voir le chapitre V), 
 L'installation et la maintenance du matériel informatique, 
 L'installation et la maintenance des logiciels informatiques, 
 La formation du personnel des centres sur des progiciels, 
 Le traitement et la maintenance des bases de données, 
 L'achat de matériel informatique (ils ont leur propre budget). 
La particularité de ce service est qu'il est autonome vis-à-vis des autres services et ne dépend que de la direction 
générale. On peut le voir sur le schéma hiérarchique de la page suivante (numéro six).
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Equipe de Direction 
Siège de Versailles 
Service Comptable Service du Personnel et des Moyens Service Scolarité Service Informatique 
Page 8 sur 99 
Directeur de Centre 
Service administratif et Financier 
Administration 
Centre d'Antony Jouhaux 
V ) Les différents réseaux 
Pédagogie 
Directeur de Centre 
Service administratif et Financier 
Administration 
Pédagogie 
Directeur de Centre 
Service administratif et Financier 
Administration 
Pédagogie 
Centre d'Etiolles 
Directeur de Centre 
Service administratif et Financier 
Administration 
Pédagogie 
Centre de St Germain en Laye 
Centre d'Antony Val de Bièvre 
Directeur de Centre 
Service administratif et Financier 
Administration 
Pédagogie 
Centre de Versailles 
Directeur de Centre 
Service administratif et Financier 
Administration 
Pédagogie 
Centre de Cergy 
Bien sur l'équipe de direction est en relation directe avec le directeur de chaque centre ainsi que les autres 
services du siège qui sont en rapport avec le chef du service administratif et financier de chaque centre. Le 
service informatique agit surtout dans les services administratifs et pédagogiques des six centres.
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Il existe trois réseaux pour chaque centre de l'I.U.F.M. de Versailles, les serveurs se trouvent au siège et pour 
chaque service se trouve un réseau spécifique : 
 Le service scolarité a un réseau qui s'appuie sur une base de donnée placée dans chaque centre de l'I.U.F.M. 
La base de donnée "Prothée" contient les étudiants actuellement inscrits dans ces centres mais aussi ceux 
qui ont déposés leurs dossiers d'inscription pour cette année. Le nom du serveur est "Bécassine" sous 
Windows NT et cette base de données est administrée sous Oracle. Le logiciel qui gère les inscriptions 
s'appelle lui aussi "Prothée", et c'est à partir de ce logiciel que le personnel du service informatique et 
administratif de chaque centre va gérer toutes les informations sur les candidats qui préparent un certificat 
dans un centre I.U.F.M. 
 Le service du personnel et des moyens est équipé d'un réseau pour l'administration de son personnel 
administratif et enseignant. Ce réseau fonctionne sous une application nommée "G2i" et ne peut être utilisé 
que sur des ordinateurs de type Macintosh. Malheureusement ce réseau va être abandonné car il y a eu 
trop de maintenance à faire. 
 Le service comptable s'est vu imposé une comptabilité centralisée depuis l'intervention du ministère de 
l'éducation nationale en 1994. Elle a donc son propre réseau de type client/serveur dont le serveur se trouve 
au siège. L'application "Gérico" utilise le système de base de données relationnel Oracle sous Unix. La 
particularité de ce réseau est que les ordinateurs clients fonctionnent en émulation de terminal VT220. 
Chaque opérateur dans les centres saisisse leurs dépenses sur leurs postes et la comptabilité générale du 
siège de l'I.U.F.M. engage le paiement des factures. 
Page 9 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
2 LES OBJECTIFS 
Avant d’expliquer comment j’ai procédé à l’élaboration du cahier des charges, je vais expliquer où j’interviens 
dans le cycle des préinscriptions au C.A.P.E. des candidats. 
Depuis que les I.U.F.M. existent, les inscriptions se font par dossier ou par concours. Comme l’I.U.F.M. de 
Versailles doit gérer les candidats de l’académie de Versailles, il y a beaucoup de demandes. Depuis l’ année 
dernière, les préinscriptions se font par « Minitel ». Chaque candidat s’inscrit en donnant des informations 
diverses comme par exemple les diplômes qu’il a obtenus, et à partir de ces informations, le centre de Cergy va 
générer un fichier et l’envoyer au siège à Versailles. Le service informatique va transformer ce fichier et 
l’importer dans la base de données « Prothée » en pratiquant quelques routines de vérification (dé 
doublonnage, saisie de dossier non valide, ...). A partir des données recueillies, le service scolarité prépare un 
dossier pour le candidat et l’envoie par la poste en fixant un rendez -vous dans un centre pour valider le dossier 
dûment rempli. Le jour ou le candidat se présente à un centre d’I.U.F.M., une personne du service scolarité va 
saisir les informations sur le dossier que le candidat a rapporté ainsi qu’un justificatif des pièces demandées 
(diplôme certifié, une fiche de salaire indiquant que le candidat à travailler, etc. ...). Pendant la saisie du dossier, 
le candidat peut voir les informations qui sont mises par le biais d’un moniteur, un autre étant à la disposition de 
la personne qui inscrit le candidat sur un logiciel nommé « Prothée » qui a été conçus pour la saisie des 
préinscriptions. La saisie étant finie, ses données sont directement validées dans la base de données. Lorsque la 
date d’inscription est dépassée et que chaque centre à valider tous les candidats, le service informatique va trier 
tous ces candidats selon des critères de « barémage ». Une fois les candidats triés, le service va gérer les 
admissions dans les centres d’après un quota de place pour chacun d’entre eux, puis des listes de chaque centre 
vont être imprimées ainsi que des statistiques pour la direction du siège. Tous les candidats admissibles seron t 
traités par une commission de validation et recevront une lettre indiquant que leur candidature a été acceptée 
ou refusée. 
L'objectif du stage à l'I.U.F.M. de Versailles dans le service informatique est de reprendre le programme du tri et 
des admissions des candidats inscrits pour la préparation au C.A.P.E. de l'année 1996 en vue de l'améliorer. 
Le programme "voeu.sql" dont le script se trouve au chapitre III (les scripts) ne convenait plus pour cette année 
car le barémage et les voeux ont changé ainsi que les critères de sélection des différents candidats. 
Donc à la demande de Monsieur Vieux-Combe, un cahier des charges 'Affect97' a été établi pour spécifier les 
demandes, d'une part pour l'utilisateur du service informatique et d'autre part pour celui du service scolarité. 
Le nouveau programme demandé sera écrit en PL/SQL pour être lancé sur l'outil SQL*PLUS d'Oracle. 
L'un des directeurs assistants du centre de Versailles, Madame Quittet, a proposé un tri de chaque candidat très 
poussé pour éviter les égalités entre eux, de plus un rang académique leur sera affecté pour les classer 
hiérarchiquement. 
Le principe du tri des candidats ne concerne que les inscrits qui ont une note de barème supérieur ou égale à 
trente et vérifie bien si les candidats atypiques sont inclus et qu'ils ont bien obtenu une note d'entretien 
différent de zéro. 
Page 10 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Les candidats "dérogataires" quant à eux sont gérés directement par une procédure qui les affectent dans les 
centres demandés, car ils sont bien entendus prioritaire sur les autres candidats. 
La première étape du stage à été de faire un planning des différentes étapes de conception du programme : 
 Le cahier des charges pour spécifier les besoins des utilisateurs, 
 La conception du programme en faisant des algorithmes, 
 La réalisation du programme et les divers tests de vérification, 
 Et la validation du programme : mise en place du programme sur le serveur NT ainsi que son 
Mai Juin 
mercredi 7 au jeudi 22 au jeudi 29 au mardi 17 au 
mercredi 21 mercredi 28 lundi 16 jeudi 19 
PLANNIFICATION du 
projet 'Affect97'. 
Cahier des charges 
(spécifications et besoins) 
(algorithmes) 
Réalisation et Tests 
(codage du programme) 
(utilisation) 
TOTAL en jour * : 29 9 5 13 2 
Page 11 sur 99 
exécution. 
Voici la première version du diagramme de GANT du projet : 
Conception 
Validation 
Mais suite à des modifications de critères pendant le projet et suite aux enjeux des jalons finaux, voici la 
dernière version :
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Pour mieux distinguer les différentes étapes de conception, voici le cycle de vie : 
Du 12/05 au 21/05 Du 17/06 au 19/06 
Du 22/05 au 16/06 
Page 12 sur 99 
Spécification - Etudes des besoins 
Cahier des charges 
Validation 
Mise en place du Programme 
Conception 
Algorithmes 
Tests 
Jeux de tests 
Réalisation 
Codage en PL/SQL
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 13 sur 99 
3 LE CAHIER DES CHARGES 
3.1 Introduction 
L’Institut Universitaire de Formation des Maîtres de l’Académie de Versailles est le centre de direction 
et de gestion des différentes formations des futurs enseignants. Le siège de l’I.U.F.M. de Versailles gère 
six centres de formation : Cergy, Versailles, Antony Val de Bièvre, Etiolles, Saint Germain en Laye et 
Antony Jouhaux qui préparent la formation au Certificat d’Aptitude de Professorat d’Enseignement 
Secondaire. Leur rôle est d’assurer la préparation des étudiants au concours de l’Educa tion National 
des professeurs d’écoles. 
Des candidats s’inscrivent sur le Minitel pour préparer leur propre formation de professeur avant la fin 
du mois de Mai. Les informations recueillies seront retranscrites dans une base de données appelée 
« Prothée ». 
Le service scolarité du siège de Versailles qui gère les admissions demande au service informatique 
d’écrire un programme concernant les candidats de première année pour les postes de professeurs 
d’écoles. 
Le programme devra trier par ordre décroissant chaque candidat suivant une note de barème (un 
étudiant est « barèmé » suivant les diplômes obtenus et les différents stages qu’il a effectués). Des 
critères de sélection supplémentaires sont ajoutés pour traiter les égalités entre les différentes 
personnes, dans un premier temps on comparera les notes obtenues à la préprofessionnalisation (un 
second tri sera effectué par ordre de grandeur : de la note la plus forte à la plus faible), si on n'arrive 
toujours pas à les départager dans un deuxième temps on se basera sur les critères suivants dans cet 
ordre : si le candidat a fait au moins six mois de service d'enseignement ou de surveillance ou 
périscolaire dans un établissement scolaire ou d'activité périscolaire; si il a eu une activité péri - 
éducative ou périscolaire dans le cadre d'une institution (établissement scolaire, municipalité ou 
association) avec au moins deux expériences distinctes pendant une durée de six semaines cumulées 
ou de soixante heures de soutien scolaire; si il a eu une activité salariée de six mois à temps plein autre 
que l'enseignement; et dans l'ordre si il a obtenu le Brevet d'Aptitude à la Formation de Directeur de 
centre ou le Brevet d'Aptitude à la Formation d'Animateur de centre, ou le Brevet d'Education 
Sportive ou le Brevet National de Secourisme. Si on n'arrive toujours pas à les départager, le dernier 
critère sera l’âge du candidat tout en favorisant les plus jeunes (un troisième tri sera effectué toujours 
par ordre de grandeur : du plus jeune au plus vieux), puis on attribuera un rang pour chaque candidat. 
Une fois le tri fini, il ne reste plus qu’à affecter un centre pour chaque candidat suivant le nom de 
département sélectionné (le candidat avait choisi les cinq départements par ordre de préférence), 
ensuite le programme décrémentera le nombre d’inscription possible du centre où il est inscrit 
provisoirement. A la fin du programme, les meilleurs élèves retenues dans les cinq départements 
seront mis dans une liste à la disposition du service scolarité. 
3.2 Analyse de l’existant
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
3.2.1 Le matériel 
L’utilisation du programme se fera sur le serveur Windows NT appelé « Bécassine » qui a un 
accès direct sur la base de données. Voici sa configuration actuelle : 
 C'est un ordinateur de type P.C. équipé de 2 processeurs Pentium 100 et qui est muni 
Page 14 sur 99 
d’un moniteur, 
 Une mémoire vive (RAM) de 64 Méga Octets, 
 Un disque dur d’une capacité de 2,1 Giga Octets pour disposer des différents logiciels, 
 Une carte réseau Ethernet (LAN) de type 3COM. 
3.2.1.1 Les logiciels 
L’ordinateur P.C. est muni du système d’exploitation DOS version 6.22 avec Windows NT version 
3.5.1. 
L’application PL/SQL sur la base de données fonctionnera sous ORACLE version 7 avec ses outils 
de développements pour Windows (on aura surtout besoin du logiciel SQL*PLUS). 
3.3 Etude du système 
3.3.1 Analyse des besoins non-fonctionnels 
3.3.1.1 Le développement 
Le développement du logiciel s’effectuera sur un ordinateur P.C. de type Pentium 200 avec 32 
Méga Octets de mémoire vive connecté qui est au réseau sur la base de données, un disque 
dur de 2,1 Giga Octets servira de support permettant ainsi d’effectuer des tests sur des bases 
fictives afin de déboguer le programme avant son utilisation finale. Cela permettra aussi au 
développeur de mesurer la place mémoire requise pour les données stockées ainsi que la place 
disponible pour le support de fichier. Cette évaluation servira entre autres à l’examen des 
capacités d’adaptation du logiciel (par exemple la création de tables temporaires). 
3.3.1.2 L’utilisateur 
Il doit se trouver sous Oracle dans la base de données « Prothée » pour lancer le programme 
écrit en PL/SQL qui portera le nom de « affect97.sql ». 
Le programme demandera des informations à l’utilisateur afin d’optimiser le tri des candidats, 
selon des critères de choix sur les différentes formations à traiter. 
Des messages indiquant des erreurs à la fin du tri ou exceptionnellement pendant celui-ci 
seront répertoriés dans une table. 
Il se terminera par l’affichage d’informations indiquant à l’utilisateur que le tri est fini, ensuite il 
pourra visualiser le résultat final.
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
3.3.2 Analyse des besoins fonctionnels 
3.3.2.1 Services offerts à l’utilisateur du service informatique 
La première étape du programme lors de son exécution sera de sélectionner les candidats dont 
le numéro de dossier commencera par l’année en cours (exemple ‘97’) ainsi que le nom de la 
formation (par exemple on peut demander la première lettre : ‘E’ pour PE, signifiant Professeur 
d’Ecole) ce qui permettra à l’utilisateur de traiter les différents types de formation. 
Le programme n’est plus interrompu lorsqu'il est lancé sauf erreur grave, par exemple aucun 
moyen d’accès à une table. 
Pour chaque candidat un rang lui sera attribué, donc les affectations se feront par ordre 
décroissant des notes de barème obtenues par celui-ci. 
Pour chaque note de barème (inclus entre 30 et 69), on va traiter les égalités entre les 
candidats par des critères de sélections (le tri se fait séquentiellement) : 
 1er critère : on repartit chaque candidat par note de préprofessionnalisation (il y en a six 
Page 15 sur 99 
: 0, 3, 5, 6, 8, 10), 
 2ème critère : pour chaque note de préprofessionnalisation on répartira les candidats 
en deux blocs : ceux qui ont fait six mois d'enseignement ou non, 
 3ème critère : puis de ces deux blocs on repartitionnera ceux qui ont eu une expérience 
péri-éducative (ou périscolaire) ou pas, 
 4ème critère : puis de ces deux blocs on repartitionnera ceux qui ont eu une expérience 
de salariée ou non, 
 5ème critère : pour départager définitivement les candidats, on regarde si ils ont obtenu 
un ou plusieurs brevets (valeur possible : 1, 2, 3) et on les départage dans quatre blocs 
différents (0 : pas de brevet, 1 : B.A.F.D. 2 : B.A.F.A. ou B.E.S. 3 : B.N.S.) 
 Le dernier critère triera les candidats suivant leur âge tout en favorisant les plus jeunes 
dans chaque bloc. Puis on ajoutera tous ces derniers blocs triés dans la table des candidats 
admissibles.
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
8 10 
0 
Note préprofessionalisation 
candidat déjà trié : 
note de barème compris 
entre 47 et 69. 
Tous les candidats triés : 
note de barème égale à 46. 
Voici un exemple de répartition du tri séquentiel par critère de sélection 
Page 16 sur 99 
30 
31 ... 46 ... 69 
70 
3 
5 6 
0 
8 
0 5 0 
5 
Table C A NDIDATURE 
Note d'enseignement 
A ctiv ité péri-éducativ e 
0 
5 
0 
5 
0 
5 
0 
5 
activ ité de salariée 
0 
1 
2 
3 
0 
1 
2 
3 
note des brev ets 
tri de chaque bloc par ordre croissant de l'âge des candidats. 
on rajoute tous les bloques à la table des candidats triés.
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 17 sur 99 
D'autres conditions ont été rajoutées : 
 Les candidats atypiques (personne qui a un diplôme de plus de cinq ans et qui veut 
préparer le concours de professeur des écoles) sont inclus dans le tri, il suffira tout 
simplement de vérifier un champ d'une table pour savoir s’il a passé un entretien. Bien 
entendu il faudra qu'il ait une note de barème supérieur ou égale à trente. 
 Les candidats dérogataires (mère de trois enfants et plus ou sportif de haut niveau) vont 
directement être admis dans les centres qu'ils ont souhaités à la condition d'avoir 
obtenu une note d'entretien égale à soixante dix. 
Si des erreurs sont constatées pendant le tri alors elles seront rapportées dans une table qui 
sera créée à cet effet. L’utilisateur pourra donc les regarder pendant le programme sans 
perturbation du tri. 
Un scénario sera remis à la disposition de l’utilisateur afin de le guider dans les différentes 
étapes possibles du programme. 
3.3.2.2 Services offerts à l’utilisateur du service scolarité 
Une liste finalisée sera mise à la disposition pour le service scolarité, elle comportera les 
informations du candidat admissible de la façon suivante : 
 Le numéro de dossier, 
 Le numéro de candidature, 
 Le nom du candidat, 
 Le prénom du candidat, 
 L’adresse du candidat, 
 Les 5 départements qu’il a sélectionnés par ordre de préférence, 
 Le nom du département où il a été admis, 
 La formation souhaitée, 
 La note de barème, 
 Le rang définitif du candidat. 
A la visualisation, l’utilisateur pourra remarquer que le nom du département qui a été attribué 
au candidat est suivis d’une étoile, on pourra ainsi connaître lequel de ses voeux a été 
sélectionné. 
3.4 Evolution du programme 
Le programme sera modulaire, ainsi l’utilisateur pourra le modifier sans gêner le coeur du programme 
principal car le PL/SQL est un langage procédure, on peut ainsi ajouter des fonctions ou des 
procédures.
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Des commentaires seront implantés dans le programme pour aider l’utilisateur à changer la 
configuration du programme, ainsi des petits modules d’exemples seront rajoutés afin de faciliter la 
compréhension. 
Certaines erreurs seront gérées par des exceptions, ceci permettra de les répertorier dans une table en 
donnant la solution. 
On peut demander d'autre renseignement lors du lancement du programme. 
Page 18 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 19 sur 99 
4 LE PROGRAMME 
4.1 Principe de fonctionnement 
Nous travaillons sur une base de données avec des tables. Comme le programme est écrit en PL/SQL et que c'est 
un langage procédural nous pouvons modulariser celui-ci avec des procédures ou des fonctions. Afin de faciliter 
la compréhension des algorithmes, chaque table sera représentée par un tableau contenant une structure du 
type de la table employé à chaque case. Pour aller dans les cases et récupérer les informations il suffira d'un 
indice alors qu'avec le langage SQL il faut tout simplement faire un 'SELECT'. 
Le programme va trier les candidats par critère, dans la base on a besoin des tables qui détiennent les 
informations dont on a besoin : 
 La table CANDIDATURE contient le numéro de dossier et de candidature, la formation souhaitée, les 
cinq départements rangés par ordre de préférence ou souhaite étudier le candidat (les voeux) ainsi que 
la note de barème, 
 La table ETUDIANT contient le nom usuel, le prénom, la date de naissance et l'adresse complète du 
candidat, 
 La table BAREME_INDIVIDUEL contient la note de préprofessionnalisation, sensibilisation ainsi que la 
note du brevet obtenu ou encore la note d'entretien pour les dérogataires. On peut savoir si des "items" 
ont été cochés : si le candidat à six mois d'enseignement, une activité péri -éducative ou périscolaire, une 
activité salariée de plus de six mois. 
A partir de ces tables, le programme va en créer d'autres : 
 La table CANDIDAT_TRIE : tous les candidats validés seront triés par ordre croissant du rang avec une 
note de barème compris entre 30 et 69, 
 La table ERREUR_CANDIDAT : elle reportera les erreurs rencontrées sur des candidats comme par 
exemple l'oublie de mettre un cinquième département dans les voeux (on ne sait jamais), 
 Les tables ADMIS_ANTONY_VdB, ADMIS_CERGY, ADMIS_ETIOLLES, ADMIS_ST-GERMAIN et 
ADMIS_VERSAILLES contiendront les informations relatives aux candidats qui sont admissibles dans 
ces centres, elles formeront chacune une liste qui sera traitée par une autre personne du service 
informatique, 
Remarque : la table CAPACITE_CENTRE sera créée avant le programme. Elle renfermera toutes les informations 
concernant les cinq centres où seront admis les candidats. Le programme aura surtout besoin du quota de 
chaque centre pour y placer chaque candidat. 
A la fin du programme, une mise à jour sera effectuée dans la table CANDIDATURE pour y valider le champ 
'formation' qui contiendra le nom de la formation que le candidat a souhaité, 'dossier_recevable' et 'admission' 
s'il a bien été admis dans un centre (O pour oui et N pour Non). La table CAPACITE_CENTRE a un champ 
'quota_centre_restant' dont la valeur finale sera attribuée par le programme.
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 20 sur 99 
4.2 Les structures 
4.2.1 La table des candidats triés 
// STRUCTURE 
Type CANDIDAT_TRIE : Article 
{renseignement relatif au candidat} 
no_dossier : chaîne de caractère, 
no_candidature : réel, 
formation : caractère, 
{les cinq départements choisis par le candidat} 
departement1 : chaîne de caractère, 
departement2 : chaîne de caractère, 
departement3 : chaîne de caractère, 
departement4 : chaîne de caractère, 
departement5 : chaîne de caractère, 
{les critères de sélection} 
note_bareme : réel, { note de barème  [30..69] } 
preprofessionnalisation : caractère, { la note de prepro.  {0,3,5,6,8,10} } 
date_naissance : date, { sous la forme DD-MM-YY } 
date_retour_dossier : date, {le candidat est valide si la date > 01-01-1900} 
{ renseignement complémentaire sur ses autres notes obtenu par le candidat} 
enseignement : caractére { 'O' pour oui ou 'N' pour non } 
peri_educ_scol : caractére { 'O' pour oui ou 'N' pour non } 
activite_salarie : caractére { 'O' pour oui ou 'N' pour non } 
note_brevet : réel { note compris entre 0,1,2,3 } 
{chaque candidat sera classé par la note de barème la plus forte à la plus faible} 
rang : entier; 
// TABLEAU 
Type T_CANDIDAT_TRIE : tableau[1..nb_candidat] de CANDIDAT_TRIE 
Chaque case du tableau T_CANDIDAT_TRIE contient la structure CANDIDAT_TRIE concernant un 
candidat. Pour aller d'un candidat à un autre, il suffit de prendre un indice inclus entre un et le nombre 
total de candidats inscrits dans la table. 
4.2.2 La table des capacités des centres 
// STRUCTURE 
Type CAPACITE_CENTRE : Article
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
{ le code du centre est égal au nom du département pour faciliter la recherche } 
code_centre : chaîne de caractère, 
{ place totale dans un centre } 
quota_centre_initial : réel, 
{ place restante dans un centre } 
quota_centre_restant : réel, 
{ nombre total de candidat atypique dans chaque centre } 
nbre_atypique : réel, 
{ nombre total de candidat derogataire dans chaque centre } 
nbre_derogataire : réel, 
{ nom du centre en entier } 
nom_du_centre : chaîne de caractère; 
// TABLEAU 
{ type énumération } 
T_indice_centre = ( ANTONY_VdB, CERGY, ETIOLLES, ST-GERMAIN, VERSAILLES ) 
Type T_ CAPACITE_CENTRE : tableau[T_indice_centre] de CAPACITE_CENTRE 
Chaque centre a son propre quota de place de candidat admissible. Le quota restant du centre sera mis 
à jour lorsque tous les candidats auront été admis, donc à la fin des attributions le résultat devra être 
égal à zéro. Le code pour chaque centre est : 
 ANTONY_VdB : "92V" (Antony Val de Bièvres) 
 CERGY : "95" 
 ETIOLLES : "91" 
 ST-GERMAIN : "78S" (Saint Germain en Laye) 
 VERSAILLES : "78V" 
Page 21 sur 99 
4.2.3 La table des erreurs sur les candidats 
// STRUCTURE 
Type ERREUR_CANDIDAT : Article message : chaîne de caractère; 
// TABLEAU 
Type T_ ERREUR_CANDIDAT : tableau[1..nb_erreur] de ERREUR_CANDIDAT 
Le tableau contiendra toutes les erreurs rencontrées lors du tri des candidats. Par exemple un candidat a 
oublié de mettre un cinquième département, le message d'erreur indiquera la position du candidat dans 
la table CANDIDATURE est le type d'erreur lui concernant : département numéro cinq manquant.
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
4.2.4 La table des admissions dans les centres 
Page 22 sur 99 
// STRUCTURE 
Type ADMIS_nom du centre : Article 
{renseignement relatif au candidat} 
no_dossier : chaîne de caractère, 
no_candidature : réel, 
nom_usuel : chaîne de caractère, 
prénom : chaîne de caractère, 
adresse : chaîne de caractère, 
code_postal : chaîne de caractère, 
ville : chaîne de caractère, 
{les cinq départements choisis par le candidat} 
departement1 : chaîne de caractère, 
departement2 : chaîne de caractère, 
departement3 : chaîne de caractère, 
departement4 : chaîne de caractère, 
departement5 : chaîne de caractère, 
{détermine quel numéro de département où le candidat est affecté par une étoile} 
no_departement1 : caractère, 
no_departement2 : caractère, 
no_departement3 : caractère, 
no_departement4 : caractère, 
no_departement5 : caractère, 
{indique le nom du département où le candidat est admis} 
departement_choisis : chaîne de caractère, 
{ le nom de la formation souhaitée par le candidat } 
formation : caractère, 
{ on inclus les dérogataires qui ont une note de bareme > 69 } 
note_bareme : réel, { note de barème  [30..90] } 
{chaque candidat sera classé par ordre croissant du rang} 
rang : entier; 
// TABLEAU 
Type T_ ADMIS_nom du centre : tableau[1..nb_candidat_par_centre] de ADMIS_nom du centre 
 Il y aura cinq tableaux correspondant aux centres d'ANTONY Val de Bièvre, CERGY, ETIOLLES,
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
ST-GERMAIN et VERSAILLES (nom du centre). Chaque centre a un nombre maximum de candidat 
(représenté par 'nb_candidat_par_centre'), par exemple le centre de Cergy avait une capacité de 800 
places l'année dernière. 
La structure donne plus de renseignements sur le candidat admissible, cela facilitera le travail de la 
personne qui gérera les admissions pour chaque centre. Le programme SQL pour créer les tables se 
trouve en annexe. 
Affichage d'un message d'invite avec demande d'information 
Saisis des valeurs demandées à l'affichage 
{On va se servir des tables CANDIDATURE, ETUDIANT et BAREME_INDIVIDUEL 
pour prendre les informations de chaque candidat} 
Appel de la procédure de tri des candidats 
{la table CANDIDAT_TRIE est créée contenant les candidats valides à l'admission} 
{une table ERREUR_CANDIDAT sera créée s'il y a eu une ou des erreurs sur les 
candidats inscrits} 
{on ajoute les dérogataires dans les centres en leur mettant un rang égal à zéro} 
Appel de la procédure d'ajout des dérogataires 
{les cinq tables pour les centres seront créées} 
Appel de la procédure d'attribution des centres 
{les cinq tables pour les centres sont remplies} 
{les champs 'formation', 'dossier_recevable' et 'admission' de la table CANDIDATURE 
seront modifiés par l'utilisateur du service informatique} 
Mise à jour des candidats admissibles 
{met à jour le nombre total de dérogatiare et d'atypique dans chaque centre} 
Appel de la procédure Met_le_nombre_de_derogataire 
Appel de la procédure Met_le_nombre_d_atypique 
Page 23 sur 99 
4.3 Le programme principal 
Le programme principal fonctionnera de la façon suivante : 
DECLARATION des variables globales. 
DEBUT 
FIN 
Comme on peut le constater, le programme suit des étapes. Les principales sont le tri des candidats et 
l'attribution de candidats dans chaque centre. L'utilisateur peut ainsi en ajouter d'autres comme par 
exemple l'affichage de table entre les diverses procédures pour vérifier que tous c’est bien déroulé. 
Ou sinon, il peut effectuer un tri dans un premier temps et plus tard, relancer le programme en ne 
faisant que les admissions. 
Le programme SQL du programme principal se trouve en annexe.
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
4.4 Description de la procédure de tri des candidats 
Cette procédure va trier tous les candidats inscrits qui se trouvent dans la table CANDIDATURE par ordre 
décroissant des notes de barème selon les critères suivant : 
 La note de barème compris entre 30 et 69, 
 La date de retour de dossier supérieur au 01-01-1900, 
 Tous les renseignements que le programme a besoin sur le candidat sont biens mis, 
 On traite les égalités entre chaque candidat par la note de préprofessionnalisation, les critères de 
sélection ainsi que de l'âge en cas d'égalité persistante. 
Page 24 sur 99 
Procédure TRI_CANDIDAT( affiche_erreur : booléen ) 
Précondition : le tableau T_CANDIDATURE existe et remplit avec au moins un candidat 
la saisie du numéro de dossier ainsi que de la formation doit être validé 
Effet : le tableau T_CANDIDAT_TRIE est créée et remplit selon des critères de sélection 
si des erreurs sont rencontrées alors affiche_erreur prendra la valeur VRAI pour 
indiquer qu'il y a eu des erreurs sur certain candidat 
Variables auxiliaires : indice : 1..nb_candidat {nombre total de candidat inscrit} 
indice_note_bareme : 30..69 {la note de barème doit être >= 30} 
test_erreur : booléen {indique que des erreurs existent} 
{variable indiquant le nombre total de candidat valide pour l'admission} 
nb_candidat_total : nb_candidat - nb_candidat_non_valide 
{variable indiquant le nombre total de candidat qui ont la même note de 
barème} 
nb_candidat_par_note_de_bareme : entier 
indice_DESC : 1..nb_candidat_total {nombre total de candidat inscrit} 
{Le tableau contient tous les candidats valident pour l'admission} 
Type T_CANDIDAT_DESC : 
tableau[1..nb_candidat_total] de CANDIDAT_TRIE 
{Le tableau contient tous les candidats qui ont la même note de barème pour 
effectuer des opérations de tri sur les égalités} 
Type T_CANDIDAT_TEMP : 
tableau[1..nb_candidat_par_note_de_bareme] de 
CANDIDAT_TRIE 
Début 
// Ici création de la table temporaire CANDIDAT_DESC 
test_erreur := FAUX {aucune erreur avant de commencer le traitement} 
indice_DESC := 0 {initialise l'indice du tableau destination} 
Pour indice de 1 à nb_candidat Faire 
{on traite tous les candidats et test si il n'y a pas d'erreur} 
Initialise_T_CANDIDAT_DESC(indice, saisie_numero_dossier, 
saisie_formation,test_erreur, indice_DESC) 
Fin Pour 
{on tri chaque candidat par sa note de barème par ordre décroissant dans le tableau 
T_CANDIDAT_DESC } 
Tri_par_note_de_bareme(saisie_numero_dossier, saisie_formation) 
{on commence le tri par la note de barème la plus grande du tableau 
T_CANDIDAT_DESC jusqu'à la plus petite} 
Pour indice_note_bareme de 69 à 30 Faire 
{il faut au moins un candidat sinon on ne traite pas} 
Si ( Nombre_de_candidat_par_note_de_bareme(indice_note_bareme) ) Alors 
// Ici création de la table temporaire CANDIDAT_TEMP 
{on sélectionne tous les candidats qui ont la même note de barème et on les 
range dans le tableau T_CANDIDAT_TEMP} 
Selectionne_Candidat_pour_table_temporaire(indice_note_bareme, 
saisie_numero_dossier, saisie_formation)
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
{tri les candidats dans le tableau T_CANDIDAT_TEMP par la note de 
Page 25 sur 99 
preprofessionnalisation} 
Tri_par_note_de_prepo(saisie_numero_dossier, saisie_formation) 
// on supprime ici la table temporaire CANDIDAT_TEMP 
Fin Si 
Fin Pour 
{affecte un rang pour chaque candidat} 
Classement_table_trie(saisie_numero_dossier, saisie_formation) 
{si il s'est produit une erreur lors de l'appel de la procédure 
Initialise_T_CANDIDAT_DESC, 'affiche_erreur' aura la valeur 'VRAI' } 
affiche_erreur := test_erreur 
// On supprime ici la table temporaire CANDIDAT_DESC 
Fin TRI_CANDIDAT; 
L'objectif de cette procédure et d'épurer tous les candidats non valident et de les rangés par ordre de 
classement. Comme le nombre de candidat est grand (plus de 9000), l'algorithme est optimisé pour ne pas 
perdre de temps, par exemple il ne traite que les candidats qui ont une note de barème supérieur ou égale à 
trente (c’est le minimum pour s'inscrire en 1ère année de P.E. car trente points équivaut à une licence). 
Remarque: les variables 'saisie_numero_dossier' et 'saisie_formation' sont des variables globales du programme 
principal, on les appels dans la procédure TRI_CANDIDAT afin d'optimiser la recherche des candidats. 
4.4.1 Description de la procédure Initialise_T_CANDIDAT_DESC 
Elle va trier chaque candidat de la table CANDIDATURE et les mettre dans la table 
CANDIDAT_TRIE : on effectue un premier tri des candidats admissibles. S'il y a des erreurs sur un 
candidat alors on indiquera sa position exacte dans la table CANDIDATURE et les types d'erreurs 
rencontrées. 
Procédure Initialise_T_CANDIDAT_DESC(Entrée : l_indice : 1..nb_candidat, 
le_numero_dossier : réel, 
la_formation : chaîne de caractère, 
Sortie : test_l_erreur : booléen, 
Entrée/Sortie : mon_indice : 1..nb_candidat_total) 
Précondition : le début du numéro de dossier <> 0,0 
le début du nom de la formation <> d'une chaîne vide 
mon_indice > 0 
Effet : le candidat valide se trouve dans le tableau T_CANDIDAT_DESC 
si une erreur existe alors la procédure renvoie 'VRAI' pour indiquer au programme 
principal qu'il devra afficher le contenu du tableau T_ERREUR_CANDIDAT 
lorsque le programme est fini. 
Variables auxiliaires : 
verifie : booléen {test si il y a eu une erreur pour ne pas incrementer le compteur 
'mon_indice' du tableau T_CANDIDAT_DESC qui reçoit les valeurs} 
{il faut initialiser les variables avant de les affecter pour déterminer une erreur} 
Constante 
carac_no_dossier : chaîne de caractère := "##########" 
carac_no_candidature : réel := 0.0 
carac_formation : chaîne de caractère := "####" 
carac_departement : chaîne de caractère := "###" 
carac_note_bareme : réel := 0.0 
carac_note_prepo : caractère := '#' 
carac_date_naissance : chaîne de caractère := "##-##-##" 
carac_date_retour_dossier : chaîne de caractère := "##-##-##"
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 26 sur 99 
Début 
verifie := FAUX {aucune erreur avant de commencer le traitement} 
{initialise mes variables qui vont recevoir les données} 
T_CANDIDAT_DESC[mon_indice].no_dossier := carac_no_dossier 
T_CANDIDAT_DESC[mon_indice].no_candidature := carac_no_candidature 
T_CANDIDAT_DESC[mon_indice].formation := carac_formation 
T_CANDIDAT_DESC[mon_indice].departement1 := carac_departement 
T_CANDIDAT_DESC[mon_indice].departement2 := carac_departement 
T_CANDIDAT_DESC[mon_indice].departement3 := carac_departement 
T_CANDIDAT_DESC[mon_indice].departement4 := carac_departement 
T_CANDIDAT_DESC[mon_indice].departement5 := carac_departement 
T_CANDIDAT_DESC[mon_indice].note_bareme := carac_note_bareme 
T_CANDIDAT_DESC[mon_indice].note_prepo := carac_note_prepo 
T_CANDIDAT_DESC[mon_indice].date_naissance := carac_date_naissance 
T_CANDIDAT_DESC[mon_indice].date_retour_dossier := carac_date_retour_dossier 
{traite le bon candidat et vérifie si il a bien retourné son dossier rempli} 
Si ( T_CANDIDATURE [l_indice].no_dossier = le_numero_dossier ET 
T_CANDIDATURE [l_indice].formation = la_formation ET 
T_CANDIDATURE[l_indice].date_retour_dossier > '01-01-1900' ) Alors 
T_CANDIDAT_DESC[mon_indice].no_dossier := T_CANDIDATURE [l_indice].no_dossier 
T_CANDIDAT_DESC[mon_indice].no_candidature := T_CANDIDATURE 
[l_indice].no_candidature 
T_CANDIDAT_DESC[mon_indice].formation := T_CANDIDATURE [l_indice].formation 
T_CANDIDAT_DESC[mon_indice].departement1 := T_CANDIDATURE [l_indice].departement1 
T_CANDIDAT_DESC[mon_indice].departement2 := T_CANDIDATURE [l_indice].departement2 
T_CANDIDAT_DESC[mon_indice].departement3 := T_CANDIDATURE [l_indice].departement3 
T_CANDIDAT_DESC[mon_indice].departement4 := T_CANDIDATURE [l_indice].departement4 
T_CANDIDAT_DESC[mon_indice].departement5 := T_CANDIDATURE [l_indice].departement5 
T_CANDIDAT_DESC[mon_indice].note_bareme := T_CANDIDATURE [l_indice].note_bareme 
T_CANDIDAT_DESC[mon_indice].note_prepo := T_CANDIDATURE [l_indice].note_prepo 
T_CANDIDAT_DESC[mon_indice].date_naissance := T_CANDIDATURE 
[l_indice].date_naissance 
T_CANDIDAT_DESC[mon_indice].date_retour_dossier := T_CANDIDATURE 
[l_indice].date_retour_dossier 
// On test les erreurs une par une d'un candidat si il y en a 
{indique une erreur sur le numéro de dossier d'un candidat} 
Si (T_CANDIDAT_DESC[mon_indice].no_dossier = carac_ no_dossier ) Alors 
{indique le n ième candidat de la table pour verifier ses données} 
Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de 
numéro de dossier"); verifie := 
VRAI Fin Si 
{indique une erreur sur le numéro de candidature d'un candidat} 
Si (T_CANDIDAT_DESC[mon_indice].no_candidature = carac_ no_candidature ) 
Alors Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de 
numéro de candidature"); verifie := VRAI 
Fin Si 
{indique une erreur sur la formation d'un candidat} 
Si (T_CANDIDAT_DESC[mon_indice].formation = carac_ formation ) Alors 
Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de formation ") 
verifie := VRAI 
Fin Si 
{indique une erreur sur le 1er departement d'un candidat} 
Si (T_CANDIDAT_DESC[mon_indice]. departement1 = carac_ departement ) Alors 
Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de 1er voeu") 
verifie := VRAI 
Fin Si 
{indique une erreur sur le 2ème departement d'un candidat} 
Si (T_CANDIDAT_DESC[mon_indice]. departement2 = carac_ departement ) Alors 
Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de 2eme voeu") 
verifie := VRAI 
Fin Si 
{indique une erreur sur le 3ème departement d'un candidat} 
Si (T_CANDIDAT_DESC[mon_indice]. departement3 = carac_ departement ) Alors 
Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de 3eme voeu")
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
verifie := VRAI 
Fin Si 
{indique une erreur sur le 4ème departement d'un candidat} 
Si (T_CANDIDAT_DESC[mon_indice]. departement4 = carac_ departement ) Alors 
Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de 4ème voeu") 
verifie := VRAI 
Fin Si 
{indique une erreur sur le 5ème departement d'un candidat} 
Si (T_CANDIDAT_DESC[mon_indice]. departement5 = carac_ departement ) Alors 
Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de 5ème voeu") 
verifie := VRAI 
Fin Si 
{indique une erreur sur la note de barème d'un candidat} 
Si (T_CANDIDAT_DESC[mon_indice].note_bareme = carac_note_bareme ) Alors 
Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de note de 
Page 27 sur 99 
barème ") 
verifie := VRAI 
Fin Si 
{indique une erreur sur la note de prepro. d'un candidat} 
Si (T_CANDIDAT_DESC[mon_indice].note_prepo = carac_note_prepo ) Alors 
Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de 
note de preprofessionnalisation "); verifie := 
VRAI Fin Si 
{indique une erreur sur la date de naissance d'un candidat} 
Si (T_CANDIDAT_DESC[mon_indice].date_naissance = carac_date_naissance ) 
Alors Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de 
date de naissance "); verifie := VRAI 
Fin Si 
{indique une erreur sur la date de retour du dossier d'un candidat} 
Si (T_CANDIDAT_DESC[mon_indice].date_retour_dossier = carac_date_retour_dossier 
Alors Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de date de retour 
de dossier "); verifie := VRAI 
Fin Si 
Fin Si 
Si ( verifie ) Alors test_l_erreur := VRAI {erreur(s) de saisie sur un candidat} 
Sinon mon_indice := mon_indice + 1 {le candidat est enregistré dans le 
tableau} 
Fin Si 
Fin Initialise_T_CANDIDAT_DESC; 
4.4.2 Description de la sous procédure Inscrit_Erreur 
La procédure Inscrit_Erreur est une sous procédure. Elle est appelée lorsque l'on a besoin d'écrire une 
ou des erreurs relatives à un candidat dans le tableau T_ERREUR_CANDIDAT. 
Procédure Inscrit_Erreur(Entrée: message : chaîne de caractère) 
Précondition : message : chaîne de caractère non vide 
Effet : met dans le tableau T_ERREUR_CANDIDAT le message d'erreur rencontré 
sur un candidat 
Variable auxiliaire : ind : 0..nb_erreur {indice du tableau} 
Début 
T_ERREUR_CANDIDAT[ind + 1].erreur_candidat := message 
Fin Inscrit_Erreur;
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
4.4.3 Description de la procédure Tri_par_note_de_bareme 
Dans un premier temps, on tri chaque candidat par ordre décroissant des notes de barèmes 
obtenues par celui-ci. 
Procédure Tri_par_note_de_bareme(Entrée : le_numero_dossier : réel, 
la_formation : chaîne de caractère) 
Précondition : le tableau T_CANDIDAT_DESC existe avec au moins 1 candidat 
Effet : le tableau T_CANDIDAT_DESC est triée par ordre décroissant des notes de barème 
Page 28 sur 99 
Début 
Sélectionner TOUS 
Depuis le tableau T_CANDIDAT_DESC 
Ou T_CANDIDAT_DESC.no_dossier = le_numero_dossier 
Et T_CANDIDAT_DESC.formation = la_formation 
Par Ordre DECROISSANT note_de_bareme 
Fin Tri_par_note_de_bareme; 
4.4.4 Description de la fonction Nombre_de_candidat_par_note_de_bareme 
Ensuite on regarde s’il existe bien des candidats avec la note de barème demandée, cela évite de faire 
des traitements inutiles. 
Fonction Nombre_de_candidat_par_note_de_bareme(Entrée: l_indice_note_bareme : 30..69) retourne booléen 
Précondition : 30 < la note de barème <69 
le tableau T_CANDIDAT_DESC existe 
Effet : retourne la valeur VRAI si il y a bien des candidats à la note de barème indicée sinon 
elle retourne FAUX 
Variables auxiliaires : test_bareme : booléen 
{va indiquer le nombre total de candidat dans le tableau 
T_CANDIDAT_DESC} 
compteur : entier := 0 
Début 
Sélectionne compteur := compteur + 1 
Depuis le tableau T_CANDIDAT_DESC 
Ou note_bareme = l_indice_note_bareme 
Si ( compteur = 0 ) Alors test_bareme := FAUX {aucun candidat} 
Sinon test_bareme := VRAI {au moins un candidat} 
Fin Si 
Retourne test_bareme 
Fin Nombre_de_candidat_par_note_de_bareme; 
4.4.5 Description de la procédure Selectionne_Candidat_pour_table_temporaire 
Chaque candidat avec la même note de barème vont être mis dans une table temporaire 
CANDIDAT_TEMP pour effectuer un autre tri plus sélectif. 
Procédure Selectionne_Candidat_pour_table_temporaire(Entrée: l_indice_note_bareme : 30..69, 
le_numero_dossier : réel, 
la_formation : chaîne de caractère)
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Précondition : le tableau temporaire T_CANDIDAT_TEMP doit être créé 
Effet : le tableau temporaire T_CANDIDAT_TEMP contient que les candidats qui ont 
tous la même note de barème provenant du tableau T_CANDIDAT_DESC 
Page 29 sur 99 
Début 
Insérer dans le tableau T_CANDIDAT_TEMP 
Sélectionne TOUS 
Depuis le tableau T_CANDIDAT_DESC 
Ou T_CANDIDAT_DESC.no_dossier = le_numero_dossier 
Et T_CANDIDAT_DESC.formation = la_formation 
Et note_bareme = l_indice_note_bareme 
Fin Selectionne_Candidat_pour_table_temporaire; 
4.4.6 Description de la procédure Tri_par_note_de_prepo 
Dans cette table temporaire CANDIDAT_TEMP on départage les égalités en rajoutant un critère : 
la note de préprofessionnalisation, on range les candidats par ordre décroissant. 
Procédure Tri_par_note_de_prepo(Entrée : le_numero_dossier : réel, 
la_formation : chaîne de caractère) 
Précondition : le tableau temporaire T_CANDIDAT_TEMP existe et non vide 
Effet : le tableau temporaire T_CANDIDAT_TEMP contient les candidats triés qui ont la 
meme note de bareme 
le tableau temporaire T_CANDIDAT_TEMP_SELECT contient les candidats triés 
qui ont la meme note de préprofessionnalisation 
Ce tableau une fois trié, ses valeurs seront ajoutées à la suite du tableau 
T_CANDIDAT_TRIE 
Variables auxiliaires : 
// Ce sont des caractères qui vérifient si la case est cochée 'O'ui ou 'N'on dans la table 
BAREME_INDIVIDUEL (leurs notes ne varient pas) 
Constantes 
{deux valeurs possibles du critère d'enseignement} 
note_enseignementOUI : caractère := 'O' 
note_enseignementNON : caractère := 'N' 
{deux valeurs possibles du critère de l'activité éducative} 
note_peri_educativeOUI : caractère := 'O' 
note_peri_educativeNON : caractère := 'N' 
{deux valeurs possibles du critère d'activité salariée} 
note_activite_salarialeOUI : caractère := 'O' 
note_activite_salarialeNON : caractère := 'N' 
enum_note_prepro : entier  {0,3,5,6,8,10} 
Début 
//on selctionne ce que l'on a besoin dans un curseur que l'on créait 
Pour indice_prepro inclus dans enum_note_prepro Faire 
{on selectionne les candidats par note de pré-professionnalisation d'ordre décroissant 
et on les ajoute dans un autre tableau temporaire T_CANDIDAT_TEMP_SELECT} 
Insérer le tableau T_CANDIDAT_TEMP_SELECT 
Sélectionne TOUS 
Depuis le tableau T_CANDIDAT_TEMP 
Ou T_CANDIDAT_TEMP.no_dossier = le_numero_dossier 
Et T_CANDIDAT_TEMP.formation = la_formation 
Et T_CANDIDAT_TEMP.note_prepro = indice_prepro 
Fin Pour 
// On effectue le tri selectif séquentiel par ordre de grandeur 
{tri de la première branche : la note d' enseignement est égale à huit}
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Tri_par_critere_de_selection(note_enseignementOUI,note_peri_educativeOUI, 
note_activite_salarialeOUI) 
Tri_par_critere_de_selection(note_enseignementOUI,note_peri_educativeOUI, 
note_activite_salarialeNON) 
Tri_par_critere_de_selection(note_enseignementOUI,note_peri_educativeNON, 
note_activite_salarialeOUI) 
Tri_par_critere_de_selection(note_enseignementOUI,note_peri_educativeNON, 
note_activite_salarialeNON) 
{tri de la deuxième branche : la note d' enseignement est égale à zéro} 
Tri_par_critere_de_selection(note_enseignementNON,note_peri_educativeOUI, 
note_activite_salarialeOUI) 
Tri_par_critere_de_selection(note_enseignementNON,note_peri_educativeOUI, 
note_activite_salarialeNON) 
Tri_par_critere_de_selection(note_enseignementNON,note_peri_educativeNON, 
note_activite_salarialeOUI) 
Tri_par_critere_de_selection(note_enseignementNON,note_peri_educativeNON, 
note_activite_salarialeNON) 
Page 30 sur 99 
Fin Tri_par_note_de_prepo; 
4.4.7 Description de la sous procédure Tri_par_critere_de_selection 
Dans la table temporaire CANDIDAT_TEMP_SELECT, on départage les égalités persistantes entre chaque 
candidat : pour chaque type de brevet obtenu ou non, on range les candidats par ordre croissant de leur 
date de naissance (du plus jeune au moins jeune). 
Procédure Tri_par_critere_de_selection(Entrée : note_enseigne, 
note_peri_edu, note_sal : caractère) 
Précondition : le tableau temporaire T_CANDIDAT_TEMP_SELECT existe et non vide 
Effet : le tableau T_CANDIDAT_TRIE contiendra les candidats triés par ordre croissant 
des dates de naissances 
Variable auxiliaire : note_brevet : 0..3 { la note de brevet  {0,1,2,3}} 
Début 
Pour note_brevet de 3 à 0 Faire 
Insérer dans tableau T_CANDIDAT_TRIE 
Sélectionne TOUS 
{tableaux contenant les informations dont on a besoin} 
Depuis les tableaux T_CANDIDAT_TEMP_SELECT, T_BAREME_INDIVIDUEL 
{lien pour les items} 
Ou T_CANDIDAT_TEMP_SELECT.no_dossier = 
T_BAREME_INDIVIDUEL.no_dossier 
{renseignement supplémentaire sur l'age de l'étudiant} 
Et T_CANDIDAT_TEMP_SELECT.no_dossier = T_ETUDIANT.no_dossier 
{on précise que l'on s'occupe des PE} 
Et T_BAREME_INDIVIDUEL.code_bareme = "PE97" 
{test la note d'enseignement > 6 mois} 
Et (T_BAREME_INDIVIDUEL.code_critere = 3 ET 
T_BAREME_INDIVIDUEL.choix = note_enseigne) 
{test la note d'activité educative} 
Et (T_BAREME_INDIVIDUEL.code_critere = 5 ET 
T_BAREME_INDIVIDUEL.choix = note_peri_edu) 
{test la note d'activité salariale} 
Et (T_BAREME_INDIVIDUEL.code_critere = 6 ET 
T_BAREME_INDIVIDUEL.choix = note_sal) 
{test la note du ou des brevets obtenus} 
Et (T_BAREME_INDIVIDUEL.code_critere = 8 ET 
T_BAREME_INDIVIDUEL.choix = note_brevet)
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Par Ordre CROISSANT T_ETUDIANT.date_naissance 
Page 31 sur 99 
Fin Pour 
Fin Tri_par_date_de_naissance; 
4.4.8 Description de la procédure Classement_table_trie 
On effectue une mise à jour du rang pour chaque candidat dans la table CANDIDAT_TRIE pour 
effectuer un classement. 
Procédure Classement_table_trie(Entrée: le_numero_dossier : réel, 
la_formation : chaîne de caractère) 
Précondition : le tableau T_CANDIDAT_TRIE est déjà créé et existe 
Effet : le tableau temporaire T_CANDIDAT_TRIE contient tous les candidats qui sont 
finalement triés et filtrés 
Début 
Mise à jour du tableau T_CANDIDAT_TRIE 
De la valeur rang := COMPTEUR(no_dossier) 
Ou T_CANDIDAT_TRIE.no_dossier = le_numero_dossier 
Et T_CANDIDAT_TRIE.formation = la_formation 
Par Ordre DECROISSANT note_de_bareme 
Fin Classement_table_trie; 
4.5 Description de la procédure d'attribution des centres 
Pour effectuer les admissions des candidats dans chaque centre, on a besoin de deux tables : 
CANDIDAT_TRIE et CAPACITE_CENTRE. Des variables témoins seront consultées pour savoir s'il reste de 
la place dans les divers centres, cela permettra de ne pas parcourir la liste des candidats triés en entier 
d'où un gain de temps. Les listes finalisées de chaque centre permettent de visualiser tous les candidats 
admissibles (car ils ne sont pas encore admis) avec tous les renseignements les concernant. 
Procédure Attribution_des_Centres 
Précondition : le tableau T_CANDIDAT_TRIE existe et remplit 
le tableau T_CAPACITE_CENTRE existe et initialisé avant la procédure 
Attribution_des_Centres 
Création des cinq centres d'admission 
Effet : Les tableaux T_ADMIS_ANTONY_VdB, T_ADMIS_CERGY, T_ADMIS_ETIOLLES, T_ADMIS_ST-GERMAIN et 
T_ADMIS_VERSAILLES contiennent des listes de candidats admissibles. 
Chaque quota de centre restant sera mis à jour à la fin de la procédure Attribution_des_Centres 
Variables auxiliaires : 
// renseignement relatif de chaque centre 
{initialisation des quotas pour chaque centre, ce sont des entiers} 
CentreA_quota := T_CAPACITE_CENTRE[ANTONY_VdB].quota_centre_initial 
CentreC_quota := T_CAPACITE_CENTRE[CERGY].quota_centre_initial 
CentreE_quota := T_CAPACITE_CENTRE[ETIOLLES].quota_centre_initial 
CentreS_quota := T_CAPACITE_CENTRE[ST-GERMAIN].quota_centre_initial 
CentreV_quota := T_CAPACITE_CENTRE[VERSAILLES].quota_centre_initial 
{déclaration des tableaux pour les cinq centres} 
Type T_ADMIS_ANTONY_VdB : tableau[1.. CentreA_quota] de ADMIS_ANTONY_VdB 
Type T_ADMIS_CERGY : tableau[1.. CentreC_quota] de ADMIS_CERGY 
Type T_ADMIS_ETIOLLES : tableau[1.. CentreE_quota] de ADMIS_ETIOLLES 
Type T_ADMIS_ST-GERMAIN : tableau[1.. CentreS_quota] de ADMIS_ST-GERMAIN
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Type T_ADMIS_VERSAILLES : tableau[1.. CentreV_quota] de ADMIS_VERSAILLES 
{initialisation des codes de chaque centre, ce sont des chaines de caractères} 
Code_CentreA := T_CAPACITE_CENTRE[ANTONY_VdB].code_centre 
Code_CentreC := T_CAPACITE_CENTRE[CERGY].code_centre 
Code_CentreE := T_CAPACITE_CENTRE[ETIOLLES].code_centre 
Code_CentreS := T_CAPACITE_CENTRE[ST-GERMAIN].code_centre 
Code_CentreV := T_CAPACITE_CENTRE[VERSAILLES].code_centre 
{détermine si le quota de chaque centre n'est pas dépassé, variable booléenne initialisée} 
CentreA_libre := booléen := VRAI 
CentreC_libre := booléen := VRAI 
CentreE_libre := booléen := VRAI 
CentreS_libre := booléen := VRAI 
CentreV_libre := booléen := VRAI 
// renseignement relatif a un département sélectionné 
nom_departement : caractère {contiendra le nom d'un département} 
quota_du_departement : entier {place restante du centre} 
code_du_departement : chaîne de caractère {code du centre} 
attribution : booléen {indiquera si la candidat a trouvé un centre} 
no_departement : 1..5 {indique le numéro de departement du candidat} 
no_candidat : 1..nb_candidat_total {indice du tableau T_CANDIDAT_TRIE} 
Page 32 sur 99 
Début 
// Il faut créer les cinq tables d'admission des centres 
no_candidat := 1 {on commence par traité le 1er candidat par ordre croissant du rang} 
{on va traiter chaque candidat un par un en commençant par la note de barème la plus forte jusqu'à 
la plus faible et on test si il reste de la place dans l'un des cinq centres} 
Tant Que ( ( CentreA_libre ET CentreC_libre ET CentreE_libre ET CentreS_libre 
ET CentreV_libre ) OU ( T_CANDIDAT_TRIE NON vide ) ) Faire 
{test si chaque centre a encore de la place; si il n'y en a plus, le booléen passe à FAUX} 
CentreA_libre := Test_place_Centre(CentreA_quota) 
CentreC_libre := Test_place_Centre(CentreC_quota) 
CentreE_libre := Test_place_Centre(CentreE_quota) 
CentreS_libre := Test_place_Centre(CentreS_quota) 
CentreV_libre := Test_place_Centre(CentreV_quota) 
{initialisation de valeurs} 
attribution := FAUX {le candidat n'a pas de centre} 
no_departement := 1 
{on va traiter les cinq voeux du candidat} 
Pour nom_departement de T_CANDIDAT_TRIE[no_candidat].departement1 à 
T_CANDIDAT_TRIE[no_candidat].departement5 Faire 
{on prend les informations du centre demandé} 
Selection_Information_Centre(nom_departement,quota_du_departement, 
code_du_departement) 
{on attribue un centre si son quota est supérieur à zéro} 
Si ( NON attribution ) Alors 
attribution := Traite_le_Centre(nom_departement, 
no_departement,quota_du_departement, code_du_departement) 
Fin Si 
{passe au numéro de département suivant du candidat} 
no_departement := no_departement + 1 
Fin Pour 
no_candidat := no_candidat + 1 {on traite le candidat suivant} 
Fin Tant Que 
{mise à jour des quotas restants de chaque centre} 
Mise_a_jour_des_Centres 
Fin Attribution_des_Centres; 
4.5.1 Description de la procédure Test_place_Centre 
Elle a pour objet de vérifier le quota du centre sélectionné et indique s'il reste de la place de libre.
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Fonction Test_place Centre(Entrée : le_quota : entier) retourne booléen 
Précondition : le quota du centre est supérieur ou égal à zéro 
Effet : retourne FAUX si il n'y a plus de place dans un centre 
Variables auxiliaires : tel_valeur : booléen := VRAI {on suppose qu'il y a de la place dans 
Page 33 sur 99 
un centre par défaut} 
Début 
Si ( le_quota <= 0 ) Alors tel_valeur := FAUX 
Fin Si 
Retourne tel_valeur 
Fin Test_place Centre; 
4.5.2 Description de la procédure Selection_Information_Centre 
Cette procédure va servir à initialiser les variables ‘quota_du_departement’ et ‘code_du_departement’ 
pour ensuite vérifier si le candidat est admissible dans le centre désigné. 
Procédure Selection_Information_Centre(Entrée : le_nom_departement : caractère, 
Sortie : le_quota_du_departement : entier, 
le_code_du_departement : chaîne de caractère) 
Précondition : le_nom_departement : caractère non vide 
Effet : les variables quota_du_departement et code_du_departement contiennent les 
renseignements sur le centre 
Début 
Si ( le_nom_departement = 'A' ) Alors {Antony} 
quota_du_departement := CentreA_quota 
code_du_departement := Code_CentreA 
Fin Si 
Si ( le_nom_departement = 'C' ) Alors {Cergy} 
quota_du_departement := CentreC_quota 
code_du_departement := Code_CentreC 
Fin Si 
Si ( le_nom_departement = 'E' ) Alors {Etiolles} 
quota_du_departement := CentreE_quota 
code_du_departement := Code_CentreE 
Fin Si 
Si ( le_nom_departement = 'S' ) Alors {St-Germain} 
quota_du_departement := CentreS_quota 
code_du_departement := Code_CentreS 
Fin Si 
Si ( le_nom_departement = 'V' ) Alors {Versailles} 
quota_du_departement := CentreV_quota 
code_du_departement := Code_CentreV 
Fin Si 
Fin Selection_Information_Centre; 
4.5.3 Description de la fonction Traite_le_Centre 
Elle va administrer les cinq centres et ajouter des candidats dans leurs listes. 
Fonction Traite_le_Centre(Entrée : le_nom_departement : caractère, 
le_no_departement : entier,
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
le_code_du_departement : chaîne de caractère, 
Sortie : le_quota_du_departement : entier) 
Précondition : les paramètres de la fonction sont bien initialisés 
Effet : Ajoute un candidat dans la table ADMIS_nom du centre 
Variables auxiliaires : tel_valeur : booléen {indique que l'on peut attribuer le centre} 
tel_nom_du_centre : chaîne de caractère {nom du tableau de 
Page 34 sur 99 
destination} 
Début 
tel_valeur := FAUX 
Donne_nom_du_centre(le_code_du_departement, tel_nom_du_centre) 
Si ( le_quota_du_departement > 0 ) Alors 
Inserer_Candidat_dans_Centre(le_nom_departement, le_no_departement, tel_nom_du_centre) 
le_quota_du_departement := le_quota_du_departement - 1 {on décrémente le quota du centre} 
tel_valeur := VRAI 
Fin Si 
Retourne tel_valeur 
Fin Traite_le_Centre; 
4.5.4 Description de la procédure Donne_nom_du_centre 
Grâce au code du département la procédure donne le nom du tableau sur lequel le candidat veut 
s'inscrire. 
Procédure Donne_nom_du_centre(Entrée : un_code_du_departement : chaîne de caractère, 
Sortie : un_nom_du_centre : chaîne de caractère) 
Précondition : code du departement non vide 
Effet : retourne le nom de la table du departement ayant le même code 
Début 
Si (un_code_du_departement = Code_CentreA ) Alors {Antony} 
un_nom_du_centre = "T_ADMIS_ANTONY_VdB" 
Fin Si 
Si (un_code_du_departement = Code_CentreC ) Alors {Cergy} 
un_nom_du_centre = " T_ADMIS_CERGY" 
Fin Si 
Si (un_code_du_departement = Code_CentreE ) Alors {Etiolles} 
un_nom_du_centre = " T_ADMIS_ETIOLLES" 
Fin Si 
Si (un_code_du_departement = Code_CentreS ) Alors {St-Germain} 
un_nom_du_centre = " T_ADMIS_ST-GERMAIN" 
Fin Si 
Si (un_code_du_departement = Code_CentreV ) Alors {Versailles} 
un_nom_du_centre = " T_ADMIS_VERSAILLES" 
Fin Si 
Fin Donne_nom_du_centre; 
4.5.5 Description de la procédure Inserer_Candidat_dans_Centre 
Elle va remplir la table ADMIS_nom du centre en y ajoutant les renseignements sur le candidat ainsi 
que mettre une étoile dans le numéro de département où est admis le candidat. 
Procédure Inserer_Candidat_dans_Centre(Entrée : the_nom_departement : caractère,
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 35 sur 99 
the_no_departement : entier, 
the_nom_du_centre : chaîne de caractère) 
Précondition : le tableau ADMIS_nom du centre existe 
'no_candidat' indique le candidat sélectionné 
Effet : ajoute un candidat dans le tableau de destination 
Début 
Si (the_no_departement = 1 ) Alors 
the_nom_du_centre[no_candidat].no_departement1 := '*' 
Fin Si 
Si (the_no_departement = 2 ) Alors 
the_nom_du_centre[no_candidat].no_departement2 := '*' 
Fin Si 
Si (the_no_departement = 3 ) Alors 
the_nom_du_centre[no_candidat].no_departement3 := '*' 
Fin Si 
Si (the_no_departement = 4) Alors 
the_nom_du_centre[no_candidat].no_departement4 := '*' 
Fin Si 
Si (the_no_departement = 5 ) Alors 
the_nom_du_centre[no_candidat].no_departement5 := '*' 
Fin Si 
Insérer Dans the_nom_du_centre 
Sélectionner trie.no_dossier, trie.no_candidature, etudiant.nom_usuel, etudiant.prenom, 
etudiant.adresse, etudiant.code_postal, etudiant.ville, formation, departement1, 
departement2, departement3, departement4, departement5, the_nom_departement, 
note_bareme, rang 
Depuis les tableaux T_CANDIDAT_TRIE trie, T_ETUDIANT etudiant 
Ou trie.no_dossier = etudiant.no_dossier 
Fin Inserer_Candidat_dans_Centre; 
4.5.6 Description de la procédure Mise_a_jour_des_Centres 
Elle effectue une mise à jour des places restantes dans les cinq centres. 
Procédure Mise_a_jour_des_Centres 
Précondition : les tableaux ADMIS_nom du centre existent 
Effet : met à jour le champ 'quota_centre_restant' dans chaque tableau 
Début 
{mise à jour du quota restant d'Antony} 
Changer le tableau T_ADMIS_ANTONY_VdB 
La valeur quota_centre_restant := CentreA_quota 
Ou T_ADMIS_ANTONY_VdB.code_centre = Code_CentreA 
{mise à jour du quota restant de Cergy} 
Changer le tableau T_ADMIS_CERGY 
La valeur quota_centre_restant := CentreC_quota 
Ou T_ADMIS_CERGY.code_centre = Code_CentreC 
{mise à jour du quota restant d'Etiolles} 
Changer le tableau T_ADMIS_ETIOLLES 
La valeur quota_centre_restant := CentreE_quota 
Ou T_ADMIS_ETIOLLES.code_centre = Code_CentreE 
{mise à jour du quota restant de Saint-Germain} 
Changer le tableau T_ADMIS_ST-GERMAIN 
La valeur quota_centre_restant := CentreS_quota 
Ou T_ADMIS_ST-GERMAIN.code_centre = Code_CentreS
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
{mise à jour du quota restant de Versailles} 
Changer le tableau T_ADMIS_VERSAILLES 
La valeur quota_centre_restant := CentreV_quota 
Ou T_ADMIS_VERSAILLES.code_centre = Code_CentreV 
Page 36 sur 99 
Fin Mise_a_jour_des_Centres; 
4.6 Description des procédures de mise à jour des atypiques et des dérogataires 
Les atypiques et les dérogataires sont des cas particulier, on les distinguera de chaque centre en y indiquant le 
nombre total de chacun des deux. On peut les différencier facilement : un dérogataire un rang égal à zéro parce 
qu'il ne compte pas dans la hiérarchie des candidats triés alors que l'atypique lui, en plus d'avoir une note de 
barème supérieur ou égale à trente, il doit passer un entretien. 
4.6.1 Description de la procédure Met_le_nombre_de_derogataire 
Elle effectue une mise à jour du champ 'nbre_derogataire' de la table CAPACITE_CENTRE. Les 
dérogataires ont le champ 'rang' de la table CANDIDATURE_TRIE à 0. 
Procédure Met_le_nombre_de_derogataire 
Précondition : les tableaux ADMIS_nom du centre existent 
Effet : met à jour le champ 'nbre_derogataire' de chaque centre 
Début 
{Met le nombre total de dérogataire d'Antony} 
Mise à jour dans le tableau T_CAPACITE_CENTRE 
La valeur nbre_derogataire = nbre_derogataire + 1 
( 
Selectionne no_dossier 
De la table T_ADMIS_ANTONY_VdB 
OU rang = 0 
) 
{Met le nombre total de dérogataire de Cergy } 
Mise à jour dans le tableau T_CAPACITE_CENTRE 
La valeur nbre_derogataire = nbre_derogataire + 1 
( 
Selectionne no_dossier 
De la table T_ADMIS_CERGY 
OU rang = 0 
) 
{Met le nombre total de dérogataire d'Etiolles } 
Mise à jour dans le tableau T_CAPACITE_CENTRE 
La valeur nbre_derogataire = nbre_derogataire + 1 
( 
Selectionne no_dossier 
De la table T_ADMIS_ETIOLLES 
OU rang = 0 
) 
{Met le nombre total de dérogataire de Saint-Germain } 
Mise à jour dans le tableau T_CAPACITE_CENTRE 
La valeur nbre_derogataire = nbre_derogataire + 1 
( 
Selectionne no_dossier 
De la table T_ADMIS_ST-GERMAIN 
OU rang = 0 
) 
{Met le nombre total de dérogataire de Versailles } 
Mise à jour dans le tableau T_CAPACITE_CENTRE
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
La valeur nbre_derogataire = nbre_derogataire + 1 
( 
Selectionne no_dossier 
De la table T_ADMIS_VERSAILLES 
OU rang = 0 
) 
Page 37 sur 99 
Fin Met_le_nombre_de_derogataire; 
4.6.2 Description de la procédure Met_le_nombre_d_atypique 
Elle effectue une mise à jour du champ 'nbre_atypique' de la table CAPACITE_CENTRE. Les atypiques ont le 
champ 'condition_requise' de la table CANDIDATURE à 10 et le champ 'libre10' de la table ETUDIANT à 1. 
Procédure Met_le_nombre_d_atypique 
Précondition : les tableaux ADMIS_nom du centre existent 
Effet : met à jour le champ 'nbre_atypique' de chaque centre 
Début 
{Met le nombre total d'atypique d'Antony} 
Mise à jour dans le tableau T_CAPACITE_CENTRE 
La valeur nbre_atypique = nbre_atypique + 1 
( 
Selectionne no_dossier 
De la table T_ADMIS_ANTONY_VdB, T_ETUDIANT, T_CANDIDATURE 
OU T_ADMIS_ANTONY_VdB.no_dossier = T_ETUDIANT.no_dossier 
AND T_ADMIS_ANTONY_VdB.no_dossier = T_CANDIDATURE.no_dossier 
AND T_ADMIS_ANTONY_VdB.no_candidature = 
T_CANDIDATURE.no_candidatute 
AND T_ETUDIANT.libre10 = 1 
AND T_CANDIDATURE.condidtion_requise = '10' 
) 
{Met le nombre total d'atypique de Cergy } 
Mise à jour dans le tableau T_CAPACITE_CENTRE 
La valeur nbre_atypique = nbre_atypique + 1 
( 
Selectionne no_dossier 
De la table T_ADMIS_CERGY, T_ETUDIANT, T_CANDIDATURE 
OU T_ADMIS_CERGY.no_dossier = T_ETUDIANT.no_dossier 
AND T_ADMIS_CERGY.no_dossier = T_CANDIDATURE.no_dossier 
AND T_ADMIS_CERGY.no_candidature = 
T_CANDIDATURE.no_candidatute 
AND T_ETUDIANT.libre10 = 1 
AND T_CANDIDATURE.condidtion_requise = '10' 
) 
{Met le nombre total d'atypique d'Etiolles } 
Mise à jour dans le tableau T_CAPACITE_CENTRE 
La valeur nbre_atypique = nbre_atypique + 1 
( 
Selectionne no_dossier 
De la table T_ADMIS_ETIOLLES, T_ETUDIANT, T_CANDIDATURE 
OU T_ADMIS_ETIOLLES.no_dossier = T_ETUDIANT.no_dossier 
AND T_ADMIS_ETIOLLES.no_dossier = T_CANDIDATURE.no_dossier 
AND T_ADMIS_ETIOLLES.no_candidature = 
T_CANDIDATURE.no_candidatute 
AND T_ETUDIANT.libre10 = 1 
AND T_CANDIDATURE.condidtion_requise = '10' 
) 
{Met le nombre total d'atypique de Saint-Germain } 
Mise à jour dans le tableau T_CAPACITE_CENTRE
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
La valeur nbre_atypique = nbre_atypique + 1 
( 
Selectionne no_dossier 
De la table T_ADMIS_ST-GERMAIN, T_ETUDIANT, T_CANDIDATURE 
OU T_ADMIS_ST-GERMAIN.no_dossier = T_ETUDIANT.no_dossier 
AND T_ADMIS_ST-GERMAIN.no_dossier = T_CANDIDATURE.no_dossier 
AND T_ADMIS_ST-GERMAIN.no_candidature = 
T_CANDIDATURE.no_candidatute 
AND T_ETUDIANT.libre10 = 1 
AND T_CANDIDATURE.condidtion_requise = '10' 
) 
{Met le nombre total d'atypique de Versailles } 
Mise à jour dans le tableau T_CAPACITE_CENTRE 
La valeur nbre_atypique = nbre_atypique + 1 
( 
Selectionne no_dossier 
De la table T_ADMIS_VERSAILLES, T_ETUDIANT, T_CANDIDATURE 
OU T_ADMIS_VERSAILLES.no_dossier = T_ETUDIANT.no_dossier 
AND T_ADMIS_VERSAILLES.no_dossier = T_CANDIDATURE.no_dossier 
AND T_ADMIS_VERSAILLES.no_candidature = 
T_CANDIDATURE.no_candidatute 
AND T_ETUDIANT.libre10 = 1 
AND T_CANDIDATURE.condidtion_requise = '10' 
) 
Page 38 sur 99 
Fin Met_le_nombre_d_atypique;
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
5 FONCTIONNEMENT 
Pour passer de l’algorithme au programme, certains changements ont été utiles. Une description de chaque 
table est obligatoire pour connaître l’organisation des données traitées, la référence des tables se trouve dans 
les pages suivantes. 
Toutes les tables vont être dans la base de données, pour reconnaître très facilement celles utilisées pour 
l’affectation des PE, le nom des tables commencera par le préfixe « SIG97 ». 
Ainsi la table SIG97_ERREUR_CANDIDAT indiquera très clairement les candidats avec leur numéro de dossier 
que l’on ne prend pas en considération dans le tri, soit qu’il manque des éléments pour la poursuite du tri du 
candidat, soit que c’est un candidat atypique qui n’a pas rempli les conditi ons à l’entretien, soit parce qu’un 
candidat est dérogataire : si il a une note d’entretien égale à 70 on ne l'inclut pas dans le tri car il est prioritaire 
sur les autres, sinon on indique qu’il a eu une note inférieur à 70 voir nulle. 
Page 39 sur 99 
Voici ce que cela peut donner : 
Message 
PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300047, Cond. Req. = 2, Note Ent. = 0 
PAS PRIS EN COMPTE : A-typique numéro 97300121, Condition_Requise = 10, Libre10 = 0 
PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300176, Cond. Req. = 2, Note Ent. = 0 
PAS PRIS EN COMPTE : BON dérogataire numéro 97300177, Condition_Requise = 2, Note_Entretien = 70 
PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300191, Cond. Req. = 2, Note Ent. = 0 
PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300195, Cond. Req. = 2, Note Ent. = 0 
PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300303, Cond. Req. = 2, Note Ent. = 0 
PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300317, Cond. Req. = 2, Note Ent. = 0 
PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300338, Cond. Req. = 2, Note Ent. = 0 
PAS PRIS EN COMPTE : BON dérogataire numéro 97300412, Condition_Requise = 2, Note_Entretien = 70 
PAS PRIS EN COMPTE : BON dérogataire numéro 97300471, Condition_Requise = 2, Note_Entretien = 70 
PAS PRIS EN COMPTE : A-typique numéro 97300496, Condition_Requise = 10, Libre10 = 0 
PAS PRIS EN COMPTE : BON dérogataire numéro 97300530, Condition_Requise = 2, Note_Entretien = 70 
PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300599, Cond. Req. = 2, Note Ent. = 0 
PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300619, Cond. Req. = 2, Note Ent. = 0 
PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300705, Cond. Req. = 2, Note Ent. = 0 
PAS PRIS EN COMPTE : BON dérogataire numéro 97300773, Condition_Requise = 2, Note_Entretien = 70
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
La table SIG97_ COMMENTAIRE_PRG indique très clairement ce que fait le programme, quelle procédure ou 
fonction est terminée, s’il y a eu des erreurs durant le programme tel que la réécriture dans une table. Voici la 
trace d'une table une fois le tri terminé : 
Page 40 sur 99 
Message 
La procédure Initialise_Candidat_Desc est FINIE. 
La procédure Tri_par_note_de_bareme est FINIE. 
La procédure Mise_a_jour_table_TRIE est FINIE. 
La procédure Tri_par_selection est FINIE. 
La procédure Ajout_des_derogataires est FINIE. 
La procédure Met_la_capacite_initiale du centre 92V est FINIE. 
La procédure Met_la_capacite_initiale du centre 95 est FINIE. 
La procédure Met_la_capacite_initiale du centre 91 est FINIE. 
La procédure Met_la_capacite_initiale du centre 78S est FINIE. 
La procédure Met_la_capacite_initiale du centre 78V est FINIE. 
La procédure Mise_a_jour_des_quotas_restant est FINIE. 
La procédure Attribution_des_Centres est FINIE. 
La procédure Met_admission_dans_CANDIDATURE est FINIE. 
La procédure Met_le_Nombre_Atypique est FINIE. 
La procédure Met_le_Nombre_Derogataire est FINIE. 
Regarder la table SIG97_ERREUR_CANDIDAT : candidats qui ne sont pas pris en compte. 
Aucune erreur durant le programme. 
Le booléen « arret_du_programme » est initialisé à FAUX, si une erreur s’est produite au cours du programme, il 
passe à VRAI et le programme n’exécute plus les principales procédures et fonctions qui suivent l’erreur. 
Trois principales exceptions sont traitées : l’un test si une table est déjà remplie (on n'a pas effacé les champs de 
la table), les deux autres indiquent clairement ce qui s’est passé et invite l’utilisateur à lire les scripts pour agir 
en conséquence : les dépassements des extensions de « roll back ». 
Voici une brève explication de chaque procédure et fonction : 
 La procédure Efface_contenu_des_tables : elle permet d’effacer le contenu des tables, très utile lorsque 
l’on veut refaire un tri. 
 La procédure Message_Utilisateur : insère dans la table SIG97_COMMENTAIRE_PRG la chaîne de 
caractère « mon_message ». 
 La procédure Inscrit_Erreur : insère dans la table SIG97_ERREUR_CANDIDAT la chaîne de caractère 
« mon_message ».
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
 La procédure Initialise_Candidat_Desc : on effectue un tri des candidats ou plutôt on « purge » les 
candidats qui ne sont pas pris en compte dans le tri. On prend déjà des renseignements sur les « bons » 
candidats : le numéro de dossier, le numéro de candidature, la formation désirée, les cinq voeux du 
candidat (les départements), la note de barème ainsi que la date de retour du dossier. Chaque 
information prise dans la table CANDIDATURE va être placée dans une table temporaire 
SIG97_CANDIDAT_TMP. 
 La procédure Tri_par_note_de_bareme : elle va chercher la date de naissance du candidat dans la table 
ETUDIANT et sa note de préprofessionnalisation dans la table BAREME_INDIVIDUEL puis des 
informations de la table SIG97_CANDIDAT_TMP pour tout mettre dans la table 
SIG97_CANDIDAT_SELECT_TMP. 
 La procédure Mise_a_jour_table_TRIE : étape importante, c’est là que l’on prend les notes de « 
barémage » pour trier les candidats. On prend les notes d'activité d'enseignement, l’activité éducative et 
salariale puis la note de brevet de la table BAREME_INDIVIDUEL pour les mettre dans la table 
SIG97_CANDIDAT_TRIE_TMP. 
 La procédure Candidature_trie : tri les candidats pour leur attribuer un rang. La fonction 
Test_le_nbre_de_candidat retourne VRAI s’il y a au moins un candidat à trier car cela évite dans la 
procédure Tri_par_selection d’appeler huit fois la procédure Candidature_trie. Bien sur toutes les 
informations recueillies de la table SIG97_CANDIDAT_TRIE_TMP seront mises dans la table 
SIG97_CANDIDAT_TRIE : tous les candidats triés pourront être visualisés ici. 
 La procédure Ajout_des_derogataires : Prend tous les candidats de la table CANDIDATURE qui sont des 
dérogataires. On les met directement dans les centres et on incrémente le quota initial de chaque 
centre par le nombre de dérogataire placé dedans. Pour le quota des centres on utilise la table 
SIG97_CAPACITE_CENTRE. Pour admettre chaque candidat dans les centres, on utilise les tables 
SIG97_ADMIS_nom du centre. Comme on ne peut leur mettre un rang académique, ils auront un rang 
égale à zéro pour indiquer qu'ils ne sont pas classés dans la hiérarchie. Ainsi on pourra mieux les repérer 
dans les listes d'admission de chaque centre. 
 La procédure Met_la_capacite_initiale : permet d’initialiser les variables globales de la procédure 
Page 41 sur 99 
Attribution_centre. 
 La procédure Test_place_centre : retourne VRAI si le quota du centre est supérieur à zéro. 
 La procédure Donne_information_centre : lorsqu’un candidat a sélectionné un département, cette 
procédure donne les informations que l’on a besoin, elles seront traitées dans la fonction 
Traite_le_centre qui va mettre à jour la liste de chaque centre. 
 La procédure Attribution_centre : attribue au candidat un centre dont il a fait le voeu. On prend les 
dernières informations du candidat : son nom, son prénom et son adresse de la table ETUDIANT ainsi 
que celles de SIG97_CANDIDAT_TRIE. 
 La procédure Mise_a_jour_quota_restant : elle est prévue lorsqu’il y a plus de place dans le centre que 
de candidats. Lorsque l'on impose des quotas dit de "surbooking" (c'est le nombre de place total plus le 
nombre de candidat inscrit sur la liste complémentaire), on peut distinguer très nettement les places 
restantes. 
 La procédure Met_admission_dans_candidature : prend les informations de chaque candidat admis 
dans les centres, puis fait une mise à jour des champs indiquant que le candidat est admissible dans la 
table CANDIDATURE. 
 Les procédures Met_le_nombre_atypique et Met_le_nombre_derogataire : mise à jour des champs de 
la table SIG97_CANDIDAT_TRIE pour indiquer le nombre exact de dérogataires et d’atypique de chaque 
centre. 
Voici la table SIG97_CAPACITE_CENTRE lorsque le programme est terminé :
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
code_centre quota_centre_ini tial quota_centre_res tant nbre_atypique nbre_derogata i re nom_du_centre 
92V 767 0 53 3 Antony Val de Bievre 
91 940 0 7 20 Etiolles 
95 902 0 45 18 Cergy 
78S 580 0 16 0 St-Germain en Laye 
78V 245 0 11 3 Versailles 
Les tables qui ont le suffixe « TMP » peuvent être effacées à la fin du programme. Elles ont servis à contenir des 
informations sur les candidats et éviter de créer une table unique et de faire soit la saisie des informations en un 
bloque (très coûteux en temps) ou par une mise à jour avec des « UPDATE » (dépassement de capacité de la 
mémoire et très coûteux en temps). 
Page 42 sur 99 
Table SIG97_CAPACITE_CENTRE 
Nom de la colonne Type Longueur SQL Description 
code_centre chaine de 
caractère 
3 CHAR numéro de code du centre 
quota_centre_initial réel 22 FLOAT quota de place d' entrée du centre initial 
quota_centre_restant réel 22 FLOAT quota de place d' entrée du centre restant 
nbre_atypique réel 22 FLOAT indique le nombre total d'atypique du centre 
nbre_derogataire réel 22 FLOAT indique le nombre total de dérogataire du centre 
nom_du_centre chaine de 
caractère 
25 CHAR nom du centre en entier 
Table SIG97_CANDIDAT_TRIE 
Nom de la colonne Type Longueur SQL Description 
no_dossier chaine de 
caractère 
10 CHAR numéro de dossier du candidat 
no_candidature réel 22 FLOAT numéro de candidature du candidat 
formation chaine de 
caractère 
4 CHAR nom de la formation demandée 
departement1 chaine de 
caractère 
3 CHAR premier voeu du candidat 
departement2 chaine de 
caractère 
3 CHAR deuxième voeu du candidat 
departement3 chaine de 
caractère 
3 CHAR troisième voeu du candidat 
departement4 chaine de 
caractère 
3 CHAR quatrième voeu du candidat
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 43 sur 99 
departement5 chaine de 
caractère 
3 CHAR cinquième voeu du candidat 
note_bareme réel 22 FLOAT note du bareme du candidat 
note_prepo réel 22 FLOAT note de preprofessionalisation 
date_naissance date 7 DATE date de naissance du candidat 
date_retour_dossier date 7 SYSDATE date de retour du dossier 
enseignement caractère 1 CHAR indique si la case est cochée pour 
l'enseignement 
peri_educ_scol caractère 1 CHAR indique si la case est cochée pour l'activité 
éducative 
activite_salarie caractère 1 CHAR indique si la case est cochée pour l'activité de 
salarié 
note_brevet réel 22 FLOAT note totale des brevets obtenus 
rang nombre 22 FLOAT rang attribue au candidat 
Table SIG97_ADMIS_nom du centre 
Nom de la colonne Type Longueur SQL Description 
no_dossier chaine de 
caractère 
10 CHAR numéro de dossier du candidat 
no_candidature réel 22 FLOAT numéro de candidature du candidat 
nom_usuel chaine de 
caractère 
25 CHAR nom usuel du candidat 
prenom chaine de 
caractère 
20 CHAR prénom du candidat 
adresse chaine de 
caractère 
255 CHAR adresse complète du candidat 
code_postal chaine de 
caractère 
5 CHAR code postal du candidat 
ville chaine de 
caractère 
25 CHAR ville du candidat 
departement1 chaine de 
caractère 
3 CHAR premier voeu du candidat 
departement2 chaine de 
caractère 
3 CHAR deuxième voeu du candidat 
departement3 chaine de 
caractère 
3 CHAR troisième voeu du candidat 
departement4 chaine de 
caractère 
3 CHAR quatrième voeu du candidat 
departement5 chaine de 
caractère 
3 CHAR cinquième voeu du candidat 
no_departement1 caractère 1 CHAR repère du premier voeu du candidat
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
no_departement2 caractère 1 CHAR repère du deuxième voeu du candidat 
no_departement3 caractère 1 CHAR repère du troisième voeu du candidat 
no_departement4 caractère 1 CHAR repère du quatrième voeu du candidat 
no_departement5 caractère 1 CHAR repère du cinquième voeu du candidat 
Page 44 sur 99 
departement_choisis chaine de 
caractère 
3 CHAR voeu du candidat où il est admis 
formation chaine de 
caractère 
4 CHAR nom de la formation demandée 
note_bareme réel 22 FLOAT note du bareme du candidat 
rang nombre 22 FLOAT rang attribue au candidat 
Table SIG97_ERREUR_CANDIDAT 
Nom de la colonne Type Longueur SQL Description 
erreur_candidat chaine de 
caractère 
100 CHAR phrase indiquant l' erreur trouvé sur le candidat 
Table SIG97_COMMENTAIRE_PRG 
Nom de la colonne Type Longueur SQL Description 
message chaine de 
caractère 
120 CHAR phrase indiquant le déroulement du programme
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
SQL*Plus: Release 3.2.2.0.1 - Production on Mon Jun 23 11:30:53 1997 
Copyright (c) Oracle Corporation 1979, 1994. All rights reserved. 
Connected to: 
Personal Oracle7 Release 7.2.2.3.1 - 90 day trial license 
To purchase a production license, call 1-800-633-0586 (U.S. only) 
DOC>REM ------------------------------------------------------------------- 
DOC>REM nom du programme : affect97.sql version : 1.26f 
DOC>REM auteur : Frederic SAGEZ date : 20 / 06 / 1997 
DOC>REM description : Affectation des PE 1ère année pour 
DOC>REM l'année scolaire 1997-1998 
DOC>REM ------------------------------------------------------------------- 
DOC>REM REM : 1)lisez les commentaires de la table SIG97_COMMENTAIRE_PRG 
DOC>REM meme si tout c’est bien dérouler !!! 
DOC>REM 2)Penser à créer les tables en lancant le script 
DOC>REM "creat1_0.sql" avant de commencer le PROGRAMME. 
DOC>REM ------------------------------------------------------------------- 
SQL>Voulez-vous effacer toutes les tables (O/N) ? 
Page 45 sur 99 
6 UTILISATION DU PROGRAMME 
6.1 Lancement du script 
Il faut se connecter sur la machine ou se trouve le serveur de bases de données Oracle. 
1. On lance SQL*PLUS sous windows 
Enter password: ******* 
With the distributed and replication options 
PL/SQL Release 2.2.2.3.1 - Production 
SQL> 
2. A l'invite "SQL>" il suffit de mettre un arobase puis le chemin exact ou se trouve le fichier SQL puis son 
nom pour l'exécuter. Ainsi il sera chargé automatiquement dans le buffer 
SQL>@d:iufm_versaillesaffect97 
3. Lire l'invite avec ses recommandations 
4. Voulez-vous effacer les tables pour effectuer un autre tri ? Le 'O' majuscule effacera les tables, sinon il 
faut mettre un autre caractère pour indiquer que l'on ne veut pas les effacer. 
5. L'invite demande quel numéro de dossier à traiter, il suffit simplement d'indiquer le début du numéro 
de dossier et rajouter le caractère '%'.
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
SQL>Quel numéro de dossier voulez-vous traiter 
(Ex : 973% - 4 caractères MAXIMUM autorisés) ? 
6. Il suffit d'indiquer le début du nom de la formation à trier E pour les candidats qui prépare le CAPE 
SQL>Quel formation voulez-vous traiter 
(Ex : E% pour les P.E. - 2 caractères MAXIMUM autorisés) ? 
7. SQL*PLUS nous indique les variables qui ont été modifiées dans le buffer 
old 3: mon_no_dossier CONSTANT CHAR(4) DEFAULT '&invite_no_dossier'; 
new 3: mon_no_dossier CONSTANT CHAR(4) DEFAULT '973%'; 
old 5: ma_formation CONSTANT CHAR(2) DEFAULT '&invite_formation'; 
new 5: ma_formation CONSTANT CHAR(2) DEFAULT 'E%'; 
old1819: IF ( '&invite_efface' = 'O' ) THEN Efface_contenu_des_tables; 
new1819: IF ( 'N' = 'O' ) THEN Efface_contenu_des_tables; 
8. Le programme a fini son traitement et indique que tous c'est bien dérouler 
SQL>PL/SQL procedure successfully completed. 
ERROR at line 53: 
ORA-06550: line 53, column 14: 
PLS-00201: identifier 'SIG97_COMMENTAIRE_PRG' must be declared 
Page 46 sur 99 
6.2 Erreurs 
1. Si à l'étape 8 vous avez ce genre de remarque : 
DELETE FROM sig97_commentaire_prg; 
* 
 Cela signifie que les tables ne sont pas créées, il faut lancer le script "creat1_0.sql". 
2. Si d'autres erreurs apparaissent, il faut se référencer au manuel des messages d'erreurs Oracle pour 
trouver la solution. 
6.3 Vérifications 
1. Pour savoir si le programme c'est bien exécuter il suffit de taper la commande suivante sur SQL*PLUS
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
SQL>MESSAGE 
SQL>-------------------------------------------------------------------- 
SQL>La procédure Initialise_Candidat_Desc est FINI. 
SQL>La procédure Tri_par_note_de_bareme est FINI. 
SQL>La procédure Mise_a_jour_table_TRIE est FINI. 
SQL>La procédure Tri_par_selection est FINI. 
SQL>La procédure Ajout_des_derogataires est FINI. 
SQL>La procédure Met_la_capacite_initiale du centre 92V est FINI. 
SQL>La procédure Met_la_capacite_initiale du centre 95 est FINI. 
SQL>La procédure Met_la_capacite_initiale du centre 91 est FINI. 
SQL>La procédure Met_la_capacite_initiale du centre 78S est FINI. 
SQL>La procédure Met_la_capacite_initiale du centre 78V est FINI. 
SQL>La procédure Mise_a_jour_des_quotas_restant est FINI. 
SQL>La procédure Attribution_des_Centres est FINI. 
SQL>La procédure Met_admission_dans_CANDIDATURE est FINI. 
SQL>La procédure Met_le_Nombre_Atypique est FINI. 
SQL>La procédure Met_le_Nombre_Derogataire est FINI. 
SQL>Regarder la table SIG97_ERREUR_CANDIDAT : candidats qui ne sont pas pris en compte. 
SQL>Aucune erreur durant le programme. 
 Les 3 premières procédures indiquent que la "purge" des candidats s'est bien déroulée. 
 La procédure Tri_par_selection indique que tous les candidats sont bien triés. 
 La procédure Ajout_des_derogataires a bien ajoutés les candidas dérogataires dans les centres. 
 La procédure Attribution_des_Centres indique que tous les candidats ont été affectés dans les 
SQL>MESSAGE 
SQL>----------------------------------------------------------------------- 
SQL>ERREUR dans la procédure Initialise_Candidat_Desc:Effacer le contenu de 
SQL>la table temporaire SIG97_CANDIDAT_TMP. 
SQL>ERREUR dans la procédure Tri_par_note_de_bareme : Effacer le contenu de 
SQL>la table temporaire SIG97_CANDIDAT_SELECT_TMP. 
SQL>ERREUR dans la procédure Mise_a_jour_table_TRIE : Effacer le contenu de 
SQL>la table temporaire SIG97_CANDIDAT_TRIE_TMP. 
SQL>ERREUR dans la procédure Tri_par_selection : Effacer le contenu de la 
SQL>table SIG97_CANDIDAT_TRIE. 
SQL>Erreur(s) durant le programme !!! 
Page 47 sur 99 
centres. 
 La phrase "Regarder la table SIG97_ERREUR_CANDIDAT : candidats qui ne sont pas pris en compte." 
indique que La table sig97_erreur_candidat a reçu des candidats qui ne sont pas inclus dans le tri et 
signifie pourquoi. 
 Si la phrase "Aucune erreur durant le programme." est indiquée, alors le programme s'est exécuté 
correctement. 
2. Si dans la table vous avez des messages comme ceci : 
 C'est que vous n'avez pas effacé les tables et vous effectuer un deuxième tri. 
 Penser toujours à lancer le script "creat1_0.sql" pour réinitialiser le quota de chaque centre tout 
en effaçant et en créant les tables dont on a besoin.
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
6.4 Optimisation 
Le traitement prenant beaucoup de ressources sur le serveur de base de données Oracle . (Machine 
CETAUTOMATIX à base de Pentium 133 du Service Informatique de Gestion) 
Il a fallut optimiser la mémoire et l’espace disque sur la machine afin de pérenniser le traitement jusqu’à la fin 
pour éviter les interruptions brutales. 
Etape 1 
Avant de commencer il faut être déclaré comme utilisateur 'SYSTEM' pour changer les valeurs. 
Taper la requête qui suit pour connaitre l'espace mémoire allouée au système : 
SELECT tablespace_name, -- segment dans l'espace mémoire 
initial_extent, -- 1ère extension d'allocation mémoire 
-- quand un segment est créé 
next_extent, -- taille de la prochaine extension mémoire 
min_extents, -- nombre total d'extension 
-- quand le segment mémoire est créé 
max_extents, -- le maximum d'extension mémoire pour un segment 
pct_increase -- pourcentage d'extension mémoire alloué 
-- pour chaque segment 
FROM system.dba_tablespaces; 
Voici le résultat de la requête : 
TABLESPACE_NAME INITIAL_EXTENT NEXT_EXTENT MIN_EXT MAX_EXT PCT_INCREASE 
--------------- -------------- ----------- ------- ------- ------------ 
SYSTEM 10240 30720 1 121 50 
USER_DATA 10240 30720 1 121 50 
ROLLBACK_DATA 10240 307200 2 121 50 
TEMPORARY_DATA 10240 10240 1 121 50 
USER_INDEX 10240 10240 1 121 50 
Etape 2 
Si vous voulez augmenter de la mémoire pour les rollbacks, taper la requête suivante : 
alter tablespace ROLLBACK_DATA 
default storage 
( 
initial 100K -- valeur initiale par défaut (peut etre augmenter 
next 500k -- on a augmenté la valeur pour plus de mémoire 
minextents 2 -- valeur minimale recommandée pour les rollbacks 
maxextents 121 -- valeur maximale (qui ne change pas) 
pctincrease 60 -- augmente le pourcentage de depassement d'allocation mémoire 
); 
Valider en faisant un 'COMMIT;' et retaper la requête de l'Etape une. 
Page 48 sur 99 
Etape 3 
Affichage de la requête :
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
TABLESPACE_NAME INITIAL_EXTENT NEXT_EXTENT MIN_EXT MAX_ EXT PCT_INCREASE 
--------------- -------------- ----------- ------- ------- ------------ 
SYSTEM 10240 30720 1 121 50 
USER_DATA 10240 30720 1 121 50 
ROLLBACK_DATA 102400 512000 2 121 60 
TEMPORARY_DATA 10240 10240 1 121 50 
USER_INDEX 10240 10240 1 121 50 
On peut constater que la mémoire alloué aux rollbacks a augmentée. On peut ainsi changer les valeurs des 
autres 'TABLESPACE_NAME' en faisant toujours un 'ALTER'. 
Page 49 sur 99 
Le code du programme SQL se trouve en annexe.
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 50 sur 99 
7 JEUX DE TESTS 
7.1 Constations et vérifications du tri des candidats 
Nous avons effectué un tri de test sur 63 candidats (on prend les 100 premiers qui font une demande en P.E.). 
On affiche les informations que l'on a besoin pour vérifier le tri : 
 le numéro de dossier (NO_DOSSIER), 
 la note de barème (NOTE_BAREME), 
 la note de préprofessionnalisation (NOTE_PREPRO), 
 la date de naissance (DATE_NAIS), 
 la note d'enseignement (E), 
 la note peri-éducative (P), 
 la note d'activité salariée (A), 
 la note de brevet (NOTE_BREVET), 
 et le rang (RANG). 
NO_DOSSIER NOTE_BAREME NOTE_PREPRO DATE_NAIS E P A NOTE_BREVET RANG 
---------- ----------- ----------- --------- - - - ----------- --------- 
97300098 48 10 07-OCT-74 N O N 3 1 
97300019 48 0 19-AUG-72 O N O 0 2 
======================== la note de bareme est de 47 =================== 
97300014 47 10 01-MAY-76 N O N 2 3 
97300068 47 10 24-SEP-75 N O N 2 4 
======================== la note de bareme est de 45 =================== 
97300054 45 5 02-JUL-72 O N N 2 5 
======================== la note de bareme est de 44 =================== 
97300042 44 6 25-JUL-76 N O N 3 6 
97300082 44 6 12-APR-75 N O N 3 7 
97300062 44 3 23-JAN-76 N O N 1 8 
======================== la note de bareme est de 43 =================== 
97300024 43 3 13-AUG-75 N O N 3 9 
======================== la note de bareme est de 42 =================== 
97300012 42 5 11-JUN-75 N O N 2 10 <1> 
97300006 42 5 16-JUN-74 N N O 2 11 <2> 
97300088 42 3 15-JUL-73 N O N 2 12 
97300037 42 0 25-NOV-72 N O O 2 13 
97300028 42 0 15-NOV-75 N O N 2 14 
======================== la note de bareme est de 41 =================== 
97300041 41 10 16-APR-76 N N N 1 15 <3> 
97300005 41 10 18-SEP-75 N N N 1 16 <4> 
97300096 41 10 23-MAR-74 N N N 1 17 <5> 
97300007 41 6 16-FEB-77 N O N 0 18 
======================== la note de bareme est de 40 =================== 
97300011 40 10 21-APR-76 N N N 0 19 
97300027 40 10 10-JUN-74 N N N 0 20 
97300023 40 10 14-MAR-74 N N N 0 21 
97300043 40 5 14-SEP-75 N O N 0 22 
97300066 40 5 04-MAR-75 N O N 0 23
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
97300060 40 5 17-SEP-74 N O N 0 24 
97300010 40 5 18-FEB-74 N N O 0 25 
97300083 40 3 06-JUN-75 N O N 2 26 
97300050 40 0 10-APR-75 N O O 0 27 
97300070 40 0 29-OCT-68 N N O 0 28 
======================== la note de bareme est de 39 =================== 
97300051 39 8 31-DEC-75 N N N 1 29 
97300039 39 0 21-NOV-75 N O N 2 30 
======================== la note de bareme est de 38 =================== 
97300032 38 3 10-MAY-73 N N O 0 31 
97300093 38 0 02-APR-76 N O N 3 32 
97300056 38 0 24-JAN-75 N O N 3 33 
======================== la note de bareme est de 37 =================== 
97300075 37 6 12-APR-74 N N N 1 34 
97300048 37 5 23-SEP-75 N N N 0 35 
97300069 37 0 25-MAY-76 N O N 2 36 
97300076 37 0 29-JUN-75 N O N 2 37 
97300035 37 0 08-JUL-72 N O N 2 38 
97300029 37 0 13-APR-75 N N O 2 39 
======================== la note de bareme est de 36 =================== 
97300001 36 0 19-JUL-74 N O N 1 40 
97300089 36 0 29-SEP-72 N O N 1 41 
97300095 36 0 29-JAN-77 N N O 1 42 
======================== la note de bareme est de 35 =================== 
97300059 35 5 25-NOV-76 N N N 0 43 
97300052 35 5 19-JUN-76 N N N 0 44 
97300038 35 5 12-NOV-75 N N N 0 45 
97300085 35 5 11-DEC-74 N N N 0 46 
97300004 35 5 13-APR-74 N N N 0 47 
97300049 35 0 29-AUG-73 N O N 0 48 
97300013 35 0 25-APR-72 N O N 0 49 
97300025 35 0 20-DEC-68 N O N 0 50 
97300002 35 0 25-JUN-74 N N O 0 51 
97300045 35 0 09-FEB-74 N N O 0 52 
97300016 35 0 13-APR-73 N N N 0 53 
97300087 35 0 08-OCT-72 N N N 0 54 
======================== la note de bareme est de 33 =================== 
97300036 33 3 04-JUL-75 N N N 0 55 
97300055 33 3 20-DEC-74 N N N 0 56 
97300078 33 3 16-NOV-73 N N N 0 57 
97300022 33 0 15-MAR-76 N N N 3 58 
97300040 33 0 29-NOV-75 N N N 3 59 
97300071 33 0 21-JUN-73 N N N 3 60 
======================== la note de bareme est de 31 =================== 
97300058 31 0 10-DEC-76 N N N 1 61 
======================== la note de bareme est de 30 =================== 
97300009 30 0 15-SEP-74 N N N 0 62 
97300072 30 0 05-AUG-74 N N N 0 63 
Page 51 sur 99 
Conclusions :
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
1. Aux signets <1> et <2> deux candidats sont départagés malgré la même note de barème ainsi que la même 
Page 52 sur 99 
note de préprofessionnalisation. 
 On peut voir que le candidat numéro 10 qui a des connaissances péri-éducative ou périscolaire 
passe bien avant le candidat numéro 11 qui n'a qu'une expérience d'activité en tant que salarié. 
2. Aux signets <3>, <4> et <5> trois candidats ont tous les mêmes notes, la le tri ne peut plus intervenir : c'est 
la dernière option pour départager les candidats. 
 Seule la date de naissance impose une hiérarchie entre les trois candidats du plus jeune au moins 
jeune. 
7.2 Constations et vérifications sur l’admission des candidats 
On attribue 61 places entre les cinq centres en sachant qu'il y a 63 candidats, voici les quotas exacts de chaque 
centre de la table CAPACITE_CENTRE : 
COD QUOTA_CENTRE_INITIAL QUOTA_CENTRE_RESTANT 
--- -------------------- -------------------- 
92V 8 0 
95 8 0 
91 6 0 
78S 14 0 
78V 25 0 
Voici les résultats obtenus après les affectations des candidats admissibles, on affiche les informations que l'on a 
besoin pour vérifier le tri : 
 le numéro de dossier (NO_DOSSIER), 
 le département1 (DEP), 
 le département2 (DEP), 
 le département3 (DEP), 
 le département4 (DEP), 
 le département5 (DEP), 
 le numéro de département1 (N), 
 le numéro de département2 (N), 
 le numéro de département3 (N), 
 le numéro de département4 (N), 
 le numéro de département5 (N), 
 le département choisi (DEP), 
 la note de barème (NOTE_BAREME), 
 et le rang (RANG). 
a - Listes des candidats admis dans le centre d'Antony Val de Bièvre : 
NO_DOSSIER DEP DEP DEP DEP DEP N N N N N DEP NOTE_BAREME RANG 
---------- --- --- --- --- --- - - - - - --- ----------- --------- 
97300098 A E V S C * - - - - A 48 1 
97300019 A E V S C * - - - - A 48 2 
97300014 A S V C E * - - - - A 47 3 
97300012 A S V C E * - - - - A 42 10 
97300088 A S V C E * - - - - A 42 12
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
97300005 A V E C S * - - - - A 41 16 
97300096 A V S C E * - - - - A 41 17 
97300027 A V E C S * - - - - A 40 20 
Page 53 sur 99 
8 rows selected. 
b - Listes des candidats admis dans le centre de Cergy: 
NO_DOSSIER DEP DEP DEP DEP DEP N N N N N DEP NOTE_BAREME RANG 
---------- --- --- --- --- --- - - - - - --- ----------- --------- 
97300054 C V S E A * - - - - C 45 5 
97300042 C V S E A * - - - - C 44 6 
97300082 C S V E A * - - - - C 44 7 
97300062 C S C V A * - - - - C 44 8 
97300024 C E A S V * - - - - C 43 9 
97300006 C A V S E * - - - - C 42 11 
97300007 C S V A E * - - - - C 41 18 
97300010 C V S A E * - - - - C 40 25 
8 rows selected. 
c - Listes des candidats admis dans le centre d'Etiolles : 
NO_DOSSIER DEP DEP DEP DEP DEP N N N N N DEP NOTE_BAREME RANG 
---------- --- --- --- --- --- - - - - - --- ----------- --------- 
97300037 E A C V S * - - - - E 42 13 
97300011 E S C V A * - - - - E 40 19 
97300023 E A V C S * - - - - E 40 21 
97300043 E A V S C * - - - - E 40 22 
97300039 E A V S C * - - - - E 39 30 
97300032 E S V A C * - - - - E 38 31 
6 rows selected. 
d - Listes des candidats admis dans le centre de Saint Germain : 
NO_DOSSIER DEP DEP DEP DEP DEP N N N N N DEP NOTE_BAREME RANG 
---------- --- --- --- --- --- - - - - - --- ----------- --------- 
97300068 S V A C E * - - - - S 47 4 
97300066 S C V A E * - - - - S 40 23 
97300060 S V C E A * - - - - S 40 24 
97300093 C S V A E - * - - - S 38 32 
97300056 C S V A E - * - - - S 38 33 
97300029 C A E S V - - - * - S 37 39 
97300095 C S E A V - * - - - S 36 42 
97300052 C S V E A - * - - - S 35 44 
97300038 C S V E A - * - - - S 35 45 
97300085 C S V E A - * - - - S 35 46 
97300013 C E A S V - - - * - S 35 49 
97300025 S V A E C * - - - - S 35 50 
97300045 C A S V E - - * - - S 35 52 
97300087 E A S V C - - * - - S 35 54
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 54 sur 99 
14 rows selected. 
e - Listes des candidats admis dans le centre de Versailles : 
NO_DOSSIER DEP DEP DEP DEP DEP N N N N N DEP NOTE_BAREME RANG 
---------- --- --- --- --- --- - - - - - --- ----------- --------- 
97300028 V A E C S * - - - - V 42 14 
97300041 V S C A E * - - - - V 41 15 
97300083 C A V S E - - * - - V 40 26 
97300050 C V S A E - * - - - V 40 27 
97300070 V S A E C * - - - - V 40 28 
97300051 A V S E C - * - - - V 39 29 
97300075 C V S E A - * - - - V 37 34 
97300048 V S A E C * - - - - V 37 35 
97300069 C A E V S - - - * - V 37 36 
97300076 V S A E C * - - - - V 37 37 
97300035 A V S E C - * - - - V 37 38 
97300001 E A V S C - - * - - V 36 40 
97300089 E V C A S - * - - - V 36 41 
97300059 V S E C A * - - - - V 35 43 
97300004 E A V S C - - * - - V 35 47 
97300049 V S A E C * - - - - V 35 48 
97300002 C V S E A - * - - - V 35 51 
97300016 V A S E C * - - - - V 35 53 
97300036 C S V E A - - * - - V 33 55 
97300055 V S C E A * - - - - V 33 56 
97300078 V S A E C * - - - - V 33 57 
97300022 A S V C E - - * - - V 33 58 
97300040 C E V S A - - * - - V 33 59 
97300071 C E A S V - - - - * V 33 60 
97300058 C A E V S - - - * - V 31 61 
25 rows selected. 
Conclusions : 
1. Les candidats ayant le rang 62 et 63 ne sont pas admis dans un centre. Le quota de chaque centre est 
bien respecté. 
2. On vérifie bien que le numéro de centre sélectionné de chaque candidat a bien été validé. 
Par exemple le candidat numéro 97300058 est 61ème, étant presque le dernier de la liste des candidats 
triés, on constate le numéro de département qu'il lui été attribué : 
 Son 1er voeu est (C)ergy : le dernier candidat accepté dans ce centre est le numéro 20 
 il ne peut donc pas être admis dans ce centre. 
 Son 2ème voeu est (A)ntony : le dernier candidat accepté dans ce centre est le numéro 25 
 il ne peut donc toujours pas être admis dans ce centre. 
 Son 3ème voeu est (E)tiolles : le dernier candidat accepté dans ce centre est le numéro 31 
 il ne peut toujours pas être admis dans ce centre. 
 Son 4ème voeu est (V)ersailles : le dernier candidat accepté dans ce centre est le numéro 61 
 il est donc le dernier à être admis dans ce centre.
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Remarque : il avait plus de chance de rentrer dans ce centre car le quota de celui-ci est nettement plus 
grand que les autres. 
Page 55 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
8 CONCLUSION 
Ce stage aura été pour moi l'occasion d'approfondir mes connaissances dans les bases de données. 
Je connaissais ce domaine par l'intermédiaire des cours théoriques et pratiques mais pas à une si grande échelle. 
J'ai surtout appris qu'il ne fallait pas traiter à la légère les bases de données, qu'il faut toujours vérifier les 
résultats obtenus et de ne pas prendre en compte le résultat final. Comme ce programme gère un peu plus de 
3000 candidats triés, il a fallut vérifier si la saisie des dossiers pour chaque candidat soit validée ainsi que son 
admissibilité dans chaque centre car tout dépendait du programme et de sa fiabilité. 
Les responsabilités laissées par Monsieur Eric Vieux-Combes au cours de ce stage m'ont également aidé à mieux 
connaître la gestion des bases de données client - serveur sous Oracle. A travers les initiatives prises à l'I.U.F.M., 
j'ai souvent eu l'occasion de me rendre compte par moi même des problèmes qui se posaient et j'ai dû trouver 
la meilleure solution possible relative à ce genre de problèmes. 
J'ai également pris à travers ce stage la réelle mesure de la place qu'a le service informatique de gestion au sein 
d'un établissement comme une I.U.F.M.. Son rôle ne se limite pas à l'installation ou à la maintenance de logiciels 
et de matériels informatiques dans les différents centres. C'est également auprès de ce service que les 
utilisateurs viennent rendre compte de leurs problèmes face à l'outil informatique, et ils les réso lvent en 
apportant toujours une solution. Ce qui prouve bien l'autonomie de ce service. 
Je tenais à travers cette conclusion remercié tout particulièrement Monsieur Eric Vieux-Combes pour sa 
disponibilité, à la confiance qu'il m'a accordé pour organiser le projet à ma manière, pour son accueil chaleureux 
dans son service et à la collaboration de son équipe composée de Monsieur Christian Balestrieri et de Monsieur 
Jacques Brenterch. 
Enfin je remercie Madame Fremont-Lamouranne, directeur de l'I.U.F.M. de l'académie de Versailles pour 
m'avoir accueilli au sein de son établissement. 
Page 56 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 57 sur 99 
9 ANNEXE 
9.1 Le programme SQL (affect97.sql) 
/* 
REM ------------------------------------------------------------------------------------------------- 
------------- 
REM nom du programme : affect97.sql version : 1.24f 
REM auteur : Frederic SAGEZ date : 16 / 06 / 1997 
REM description : Affectation des PE 1ère année pour l'année scolaire 1997-1998 
REM ------------------------------------------------------------------------------------------------- 
------------- 
REM REMARQUE 1) lisez les commentaires de la table SIG97_COMMENTAIRE_PRG 
REM meme si tout c' est bien dérouler !!! 
REM 2) Penser à créer les tables en lancant le script "creat1_0.sql" 
REM avant de commencer le PROGRAMME. 
REM ------------------------------------------------------------------------------------------------- 
-------------- 
*/ 
/* Déclaration des messages d'invites */ 
-- Invite proposant d'effacer des tables 
PROMPT Voulez-vous effacer toutes les tables (O/N) ? 
ACCEPT invite_efface 
-- Invite proposant de donner les numeros de dossier à traiter 
PROMPT Quel numéro de dossier voulez-vous traiter (Ex : 973% - 4 caractères MAXIMUM autorisés) ? 
ACCEPT invite_no_dossier 
-- Invite proposant de donner la formation demander 
PROMPT Quel formation voulez-vous traiter (Ex : E% pour les P.E. - 2 caractères MAXIMUM autorisés) ? 
ACCEPT invite_formation 
/* #################### Debut des declarations de variables globales #################### */ 
DECLARE 
-- Les numeros de dossiers que l'on veut traiter 
mon_no_dossier CONSTANT CHAR(4) DEFAULT '&invite_no_dossier'; 
-- La formation que l'on veut traiter 
ma_formation CONSTANT CHAR(2) DEFAULT '&invite_formation'; 
-- Les numeros de dossiers que l'on ne veut pas traiter 
refus_no_dossier CONSTANT CHAR(5) DEFAULT '9735%'; 
-- Test si des candidats ne sont pas valident 
erreur_de_saisie BOOLEAN := FALSE; 
-- Test si une erreur s' est produite pendant le programme 
arret_du_programme BOOLEAN DEFAULT FALSE; 
-- Mes exceptions : 
--> table deja remplie 
unique_constraint exception; 
PRAGMA EXCEPTION_INIT(unique_constraint,-00001); 
--> plus d'espace memoire pour les extensions des ROLLBACKs 
extend_rollback_failure exception; 
PRAGMA EXCEPTION_INIT(extend_rollback_failure,-01562); 
--> depassement de capacite pour les extensions 
extend_rollback exception;
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
PRAGMA EXCEPTION_INIT(extend_rollback,-01628); 
/* #################### Fin des declarations de variables globales #################### */ 
/* ######################################################## */ 
/* ### PROCEDURE Efface_contenu_des_tables #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### aucun ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### Effaces le contenu des tables suivantes : ### */ 
/* ### ----------------------------------------- ### */ 
/* ### sig97_commentaire_prg ### */ 
/* ### sig97_erreur_candidat ### */ 
/* ### sig97_candidat_tmp ### */ 
/* ### sig97_candidat_select_tmp ### */ 
/* ### sig97_candidat_trie_tmp ### */ 
/* ### sig97_candidat_trie ### */ 
/* ### sig97_admis_antony_vdb ### */ 
/* ### sig97_admis_cergy ### */ 
/* ### sig97_admis_etiolles ### */ 
/* ### sig97_admis_st_germain ### */ 
/* ### sig97_admis_versailles ### */ 
/* ######################################################## */ 
Page 58 sur 99 
PROCEDURE Efface_contenu_des_tables IS 
BEGIN 
DELETE FROM sig97_commentaire_prg; 
DELETE FROM sig97_erreur_candidat; 
DELETE FROM sig97_candidat_tmp; 
DELETE FROM sig97_candidat_select_tmp; 
DELETE FROM sig97_candidat_trie_tmp; 
DELETE FROM sig97_candidat_trie; 
DELETE FROM sig97_admis_antony_vdb; 
DELETE FROM sig97_admis_cergy; 
DELETE FROM sig97_admis_etiolles; 
DELETE FROM sig97_admis_st_germain; 
DELETE FROM sig97_admis_versailles; 
-- On valide les changements 
COMMIT; 
END Efface_contenu_des_tables; 
/* ######################################################## */ 
/* ### PROCEDURE Message_Utilisateur #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### mon_message : chaine de caractère ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### Inscrit dans la table sig97_commentaire_prg tous ce qui se ### */ 
/* ### passe dans le programme. ### */
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
/* ######################################################## */ 
PROCEDURE Message_Utilisateur( mon_message CHAR ) IS 
Page 59 sur 99 
BEGIN 
INSERT INTO sig97_commentaire_prg VALUES( mon_message ); 
COMMIT; 
END Message_Utilisateur; 
/* ######################################################## */ 
/* ### PROCEDURE Inscrit_Erreur #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### mon_message : chaine de caractère ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### Inscrit dans la table sig97_erreur_candidat le(s) candidat(s) ### */ 
/* ### qui n'ont pas remplis correctement les critères d' inscriptions. ### */ 
/* ######################################################## */ 
PROCEDURE Inscrit_Erreur( mon_message CHAR ) IS 
BEGIN 
INSERT INTO sig97_erreur_candidat VALUES( mon_message ); 
COMMIT; 
END Inscrit_Erreur; 
/* ### Debut des sous procedures et fonctions de la procedure de tri ### */ 
/* ######################################################## */ 
/* ### PROCEDURE Initialise_Candidat_Desc #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### test_erreur : booléen ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### On effectue un premier tri en purgeant les candidats ### */ 
/* ### correspondant a certain critere : ### */ 
/* ### .numero de dossier = mon_no_dossier ### */ 
/* ### .la formation = ma_formation ### */ 
/* ### .date_retour_dossier > 01 JANVIER 1900 ### */ 
/* ### .les numéros de dossier <> refus_no_dossier. ### */ 
/* ### Les atypiques dont les champs condition_requise = 10 et ### */ 
/* ### libre10 = 1. ### */ 
/* ### La table SIG97_ERREUR_CANDIDAT contiendra les ### */ 
/* ### candidats qui ont des erreurs d'inscription. ### */ 
/* ### La table temporaire SIG97_CANDIDAT_TMP contiendra ### */ 
/* ### les candidats dit 'admissibles'. ### */ 
/* ######################################################## */ 
PROCEDURE Initialise_Candidat_Desc(test_erreur IN OUT BOOLEAN) IS
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
-- table temporaire C_DESC : purge les candidats non valident 
CURSOR C_DESC IS 
Page 60 sur 99 
SELECT 
candidature.no_dossier, 
candidature.no_candidature, 
candidature.formation, 
candidature.departement1, 
candidature.departement2, 
candidature.departement3, 
candidature.departement4, 
candidature.departement5, 
candidature.note_bareme, 
candidature.date_retour_dossier, 
candidature.condition_requise, 
etudiant.libre10, 
bareme_individuel.note 
FROM candidature, etudiant, bareme_individuel 
WHERE ( candidature.no_dossier LIKE mon_no_dossier 
AND candidature.no_dossier NOT LIKE refus_no_dossier ) 
AND candidature.formation LIKE ma_formation 
AND candidature.no_dossier = etudiant.no_dossier 
AND candidature.no_dossier = bareme_individuel.no_dossier 
AND candidature.no_candidature = bareme_individuel.no_candidature 
AND bareme_individuel.code_critere = 9 
AND candidature.date_retour_dossier > '01-JAN-00'; 
-- Declaration des variables d'initialisation 
carac_no_dossier candidature.no_dossier%TYPE DEFAULT '##########'; 
carac_no_candidature candidature.no_candidature%TYPE DEFAULT -1; 
carac_formation candidature.formation%TYPE DEFAULT '####'; 
carac_departement candidature.departement1%TYPE DEFAULT '###'; 
carac_note_bareme candidature.note_bareme%TYPE DEFAULT -1; 
carac_date_retour_dossier candidature.date_retour_dossier%TYPE DEFAULT '01-JAN-99'; 
-- Declaration des variables 
C_no_dossier candidature.no_dossier%TYPE; 
C_no_candidature candidature.no_candidature%TYPE; 
C_formation candidature.formation%TYPE; 
C_departement1 candidature.departement1%TYPE; 
C_departement2 candidature.departement2%TYPE; 
C_departement3 candidature.departement3%TYPE; 
C_departement4 candidature.departement4%TYPE; 
C_departement5 candidature.departement5%TYPE; 
C_note_bareme candidature.note_bareme%TYPE; 
C_date_retour_dossier candidature.date_retour_dossier%TYPE; 
-- indiquera qu'un candidat n'a pas tout remplie 
test_candidat BOOLEAN; 
-- et les conditions pour les atypiques 
C_condition_requise candidature.condition_requise%TYPE; 
C_libre10 etudiant.libre10%TYPE; 
mauvais_atypique BOOLEAN; 
-- et les conditions pour les derogataires 
C_note_entretien bareme_individuel.note%TYPE; 
mauvais_derogataire BOOLEAN;
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 61 sur 99 
BEGIN 
OPEN C_DESC; 
LOOP 
-- Initialisation des variables 
C_no_dossier := carac_no_dossier; 
C_no_candidature := carac_no_candidature; 
C_formation := carac_formation; 
C_departement1 := carac_departement; 
C_departement2 := carac_departement; 
C_departement3 := carac_departement; 
C_departement4 := carac_departement; 
C_departement5 := carac_departement; 
C_note_bareme := carac_note_bareme; 
C_date_retour_dossier := carac_date_retour_dossier; 
-- test si candidat à bien remplis son dossier 
test_candidat := FALSE; 
-- test si candidat atypique est correct 
mauvais_atypique := FALSE; 
-- test si candidat derogataire est present 
mauvais_derogataire := FALSE; 
-- Saisie des variables pour chaque candidat 
FETCH C_DESC INTO 
C_no_dossier, 
C_no_candidature, 
C_formation, 
C_departement1, 
C_departement2, 
C_departement3, 
C_departement4, 
C_departement5, 
C_note_bareme, 
C_date_retour_dossier, 
C_condition_requise, 
C_libre10, 
C_note_entretien; 
-- Sort de la boucle quand on a traite tous les candidats 
-- ou si une erreur s'est produite et qui empeche le bon deroulement du 
programme 
EXIT WHEN C_DESC%NOTFOUND OR arret_du_programme; 
-- Traite les erreurs sur les candidats 
IF ( C_no_dossier = carac_no_dossier ) THEN 
Message_Utilisateur('Un candidat n a pas de numéro de dossier ! Arret du 
programme.'); 
arret_du_programme := TRUE; 
END IF; 
IF ( C_no_candidature = carac_no_candidature ) THEN 
Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de numéro de 
candidature.'); 
test_candidat := TRUE; test_erreur := TRUE; 
END IF; 
IF ( C_formation = carac_formation ) THEN 
Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de formation.'); 
test_candidat := TRUE; test_erreur := TRUE;
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
END IF; 
IF ( C_departement1 = carac_departement ) THEN 
Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de 1er voeu.'); 
test_candidat := TRUE; test_erreur := TRUE; 
END IF; 
IF ( C_departement2 = carac_departement ) THEN 
Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de 2eme voeu.'); 
test_candidat := TRUE; test_erreur := TRUE; 
END IF; 
IF ( C_departement3 = carac_departement ) THEN 
Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de 3eme voeu.'); 
test_candidat := TRUE; test_erreur := TRUE; 
END IF; 
IF ( C_departement4 = carac_departement ) THEN 
Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de 4eme voeu.'); 
test_candidat := TRUE; test_erreur := TRUE; 
END IF; 
IF ( C_departement5 = carac_departement ) THEN 
Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de 5eme voeu.'); 
test_candidat := TRUE; test_erreur := TRUE; 
END IF; 
IF ( C_note_bareme = carac_note_bareme ) THEN 
Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de note de 
Page 62 sur 99 
bareme.'); 
test_candidat := TRUE; test_erreur := TRUE; 
END IF; 
IF ( C_date_retour_dossier = carac_date_retour_dossier ) THEN 
Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de date de retour 
de 
dossier.'); 
test_candidat := TRUE; test_erreur := TRUE; 
END IF; 
-- surtout les 'mauvais' atypiques 
IF ( (C_condition_requise = '10') AND (C_libre10 = 0) ) THEN 
mauvais_atypique := TRUE; 
Inscrit_Erreur('PAS PRIS EN COMPTE : A-typique numéro '||C_no_dossier||', 
Condition_Requise = 
'||C_condition_requise||', Libre10 = '||C_libre10); 
test_erreur := TRUE; 
END IF; 
-- surtout les 'bons' derogataires, ils passent en priorite pour les admissions 
IF ( (C_note_entretien = 70) AND ((C_condition_requise = '2') OR 
(C_condition_requise = '3')) ) 
THEN mauvais_derogataire := TRUE; 
Inscrit_Erreur('PAS PRIS EN COMPTE : BON dérogataire numéro '||C_no_dossier||', 
Condition_Requis = 
'||C_condition_requise||',Note_Entretien = '||C_note_entretien); 
test_erreur := TRUE; 
END IF; 
-- et les 'mauvais' derogataires qui ne sont pas venus à l'entretien 
IF ( (C_note_entretien < 70) AND ((C_condition_requise = '2') OR 
(C_condition_requise = '3')) ) THEN mauvais_derogataire 
:= TRUE; 
Inscrit_Erreur('PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 
'||C_no_dossier||', Cond. Req. = 
'||C_condition_requise||', Note Ent. = '||C_note_entretien); 
test_erreur := TRUE; 
END IF;
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
-- On place le candidat dans la table sig97_candidat_tmp si il n'y a pas 
Page 63 sur 99 
d'erreur 
IF (( NOT test_candidat ) AND ( NOT mauvais_atypique ) AND ( NOT 
mauvais_derogataire ))THEN 
INSERT INTO sig97_candidat_tmp VALUES 
( 
C_no_dossier, 
C_no_candidature, 
C_formation, 
C_departement1, 
C_departement2, 
C_departement3, 
C_departement4, 
C_departement5, 
C_note_bareme, 
C_date_retour_dossier 
); 
END IF; 
END LOOP; 
CLOSE C_DESC; 
Message_Utilisateur('La procedure Initialise_Candidat_Desc est FINI.'); 
COMMIT; 
EXCEPTION 
WHEN unique_constraint THEN 
Message_Utilisateur('ERREUR dans la procedure Initialise_Candidat_Desc : Effacer le contenu 
de la table 
temporaire SIG97_CANDIDAT_TMP.'); 
arret_du_programme := TRUE; 
END Initialise_Candidat_Desc; 
/* ######################################################## */ 
/* ### PROCEDURE Tri_par_note_de_bareme #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### aucun ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### Insert dans la table SIG97_CANDIDAT_SELECT_TMP ### */ 
/* ### les informations prisent dans la table SIG97_CAN- ### */ 
/* ### DIDAT_ TMP et on rajoute d'autres informations provenant ### */ 
/* ### de la table ETUDIANT et BAREME_INDIVIDUEL. ### */ 
/* ######################################################## */ 
PROCEDURE Tri_par_note_de_bareme IS 
-- table temporaire C_DATE_NAISSANCE : va chercher la date de naissance du candidat 
CURSOR C_DATE_NAISSANCE( mon_no_dossier CHAR ) IS 
SELECT date_naissance 
FROM etudiant 
WHERE etudiant.no_dossier = mon_no_dossier;
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
-- table temporaire C_LA_NOTE_PREPRO : va chercher la note de prepro du candidat 
CURSOR C_LA_NOTE_PREPRO( mon_no_dossier CHAR, 
mon_no_candidature REAL) IS 
SELECT note 
FROM bareme_individuel 
WHERE bareme_individuel.no_dossier = mon_no_dossier 
AND bareme_individuel.no_candidature = mon_no_candidature 
AND code_critere = 4; 
-- table temporaire C_BAREME : tri par ordre decroissant des notes de baremes 
CURSOR C_BAREME IS 
Page 64 sur 99 
SELECT 
no_dossier, 
no_candidature, 
formation, 
departement1, 
departement2, 
departement3, 
departement4, 
departement5, 
note_bareme, 
date_retour_dossier 
FROM sig97_candidat_tmp 
WHERE sig97_candidat_tmp.no_dossier LIKE mon_no_dossier 
ORDER BY sig97_candidat_tmp.note_bareme DESC; 
-- Declaration des variables 
B_no_dossier candidature.no_dossier%TYPE; 
B_no_candidature candidature.no_candidature%TYPE; 
B_formation candidature.formation%TYPE; 
B_departement1 candidature.departement1%TYPE; 
B_departement2 candidature.departement2%TYPE; 
B_departement3 candidature.departement3%TYPE; 
B_departement4 candidature.departement4%TYPE; 
B_departement5 candidature.departement5%TYPE; 
B_note_bareme candidature.note_bareme%TYPE; 
B_note_prepro bareme_individuel.note%TYPE; 
B_date_naissance etudiant.date_naissance%TYPE; 
B_date_retour_dossier candidature.date_retour_dossier%TYPE; 
-- Constante du rang avec une valeur par défaut 
rang_initial sig97_candidat_select_tmp.rang%TYPE DEFAULT -1; 
BEGIN 
OPEN C_BAREME; 
LOOP 
FETCH C_BAREME INTO 
B_no_dossier, 
B_no_candidature, 
B_formation, 
B_departement1, 
B_departement2, 
B_departement3, 
B_departement4, 
B_departement5, 
B_note_bareme, 
B_date_retour_dossier;
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
-- Sort de la boucle quand on a traite tous les candidats 
EXIT WHEN C_BAREME%NOTFOUND; 
--> Mise à jour de la date de naissance 
FOR la_date_de_naissance IN C_DATE_NAISSANCE( B_no_dossier ) 
LOOP 
B_date_naissance := la_date_de_naissance.date_naissance; 
END LOOP; 
--> Mise à jour de la note de preprofessionnalisation 
FOR la_note_de_prepro IN C_LA_NOTE_PREPRO( B_no_dossier, 
Page 65 sur 99 
B_no_candidature ) 
LOOP 
B_note_prepro := la_note_de_prepro.note; 
END LOOP; 
-- Met les valeurs dans la table sig97_candidat_select_tmp 
INSERT INTO sig97_candidat_select_tmp VALUES 
( 
B_no_dossier, 
B_no_candidature, 
B_formation, 
B_departement1, 
B_departement2, 
B_departement3, 
B_departement4, 
B_departement5, 
B_note_bareme, 
B_note_prepro, 
B_date_naissance, 
B_date_retour_dossier, 
rang_initial 
); 
END LOOP; 
CLOSE C_BAREME; 
Message_Utilisateur('La procedure Tri_par_note_de_bareme est FINI.'); 
COMMIT; 
EXCEPTION 
WHEN unique_constraint THEN 
Message_Utilisateur('ERREUR dans la procedure Tri_par_note_de_bareme : Effacer le contenu 
de la table temporaire 
SIG97_CANDIDAT_SELECT_TMP.'); 
arret_du_programme := TRUE; 
END Tri_par_note_de_bareme; 
/* ######################################################## */ 
/* ### PROCEDURE Mise_a_jour_table_TRIE #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### aucun ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### On rajoute dans la table SIG97_CANDIDAT_TRIE_TMP ### */ 
/* ### les 4 critères de selection (enseignement, peri- educatif ### */
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
/* ### ou scolaire, activite salarial) et la note de brevet du candidat. ### */ 
/* ######################################################## */ 
Page 66 sur 99 
PROCEDURE Mise_a_jour_table_TRIE IS 
-- table temporaire C_ INDIVIDUEL_CHOIX : prend les valeurs des 3 critères 
CURSOR C_INDIVIDUEL_CHOIX ( mon_no_dossier CHAR, 
mon_no_candidature REAL, 
mon_critere NUMBER) IS 
SELECT choix 
FROM bareme_individuel 
WHERE bareme_individuel.no_dossier = mon_no_dossier 
AND bareme_individuel.no_candidature = mon_no_candidature 
AND bareme_individuel.code_critere = mon_critere; 
-- table temporaire C_ INDIVIDUEL_CHOIX : prend la note de brevet 
CURSOR C_INDIVIDUEL_NOTE_BREVET ( mon_no_dossier CHAR, 
mon_no_candidature REAL, 
mon_critere NUMBER) IS 
SELECT note FROM bareme_individuel 
WHERE bareme_individuel.no_dossier = mon_no_dossier 
AND bareme_individuel.no_candidature = mon_no_candidature 
AND bareme_individuel.code_critere = mon_critere; 
-- table temporaire C_TRI_PAR_NOTE : prend les valeurs de la table sig97_candidat_select_tmp 
CURSOR C_TRI_PAR_NOTE IS 
SELECT 
no_dossier, 
no_candidature, 
formation, 
departement1, 
departement2, 
departement3, 
departement4, 
departement5, 
note_bareme, 
note_prepro, 
date_naissance, 
date_retour_dossier 
FROM sig97_candidat_select_tmp 
WHERE no_dossier LIKE mon_no_dossier; 
-- Declaration des variables 
T_no_dossier sig97_candidat_select_tmp.no_dossier%TYPE; 
T_no_candidature sig97_candidat_select_tmp.no_candidature%TYPE; 
T_formation sig97_candidat_select_tmp.formation%TYPE; 
T_departement1 sig97_candidat_select_tmp.departement1%TYPE; 
T_departement2 sig97_candidat_select_tmp.departement2%TYPE; 
T_departement3 sig97_candidat_select_tmp.departement3%TYPE; 
T_departement4 sig97_candidat_select_tmp.departement4%TYPE; 
T_departement5 sig97_candidat_select_tmp.departement5%TYPE; 
T_note_bareme sig97_candidat_select_tmp.note_bareme%TYPE; 
T_note_prepro sig97_candidat_select_tmp.note_prepro%TYPE; 
T_date_naissance sig97_candidat_select_tmp.date_naissance%TYPE; 
T_date_retour_dossier sig97_candidat_select_tmp.date_retour_dossier%TYPE; 
I_mois_enseignement bareme_individuel.choix%TYPE;
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
I_peri_educ_ou_scol bareme_individuel.choix%TYPE; 
I_activite_de_salarie bareme_individuel.choix%TYPE; 
I_total_brevet bareme_individuel.note%TYPE; 
-- Initialise par défaut le rang init_du_rang 
init_du_rang sig97_candidat_select_tmp.rang%TYPE DEFAULT -1; 
Page 67 sur 99 
BEGIN 
OPEN C_TRI_PAR_NOTE; 
LOOP 
FETCH C_TRI_PAR_NOTE INTO 
T_no_dossier, 
T_no_candidature, 
T_formation, 
T_departement1, 
T_departement2, 
T_departement3, 
T_departement4, 
T_departement5, 
T_note_bareme, 
T_note_prepro, 
T_date_naissance, 
T_date_retour_dossier; 
-- On sort lorsqu'il n'y a plus de candidat à traiter 
EXIT WHEN C_TRI_PAR_NOTE%NOTFOUND; 
--> Mise à jour de l'activité d'enseignement 
FOR le_choix IN C_INDIVIDUEL_CHOIX ( T_no_dossier, T_no_candidature, 3 ) 
LOOP 
I_mois_enseignement := le_choix.choix; 
END LOOP; 
--> Mise à jour de l'activité d'education 
FOR le_choix IN C_INDIVIDUEL_CHOIX ( T_no_dossier, T_no_candidature, 5 ) 
LOOP 
I_peri_educ_ou_scol := le_choix.choix; 
END LOOP; 
--> Mise à jour de l'activité salariée > 6 mois 
FOR le_choix IN C_INDIVIDUEL_CHOIX ( T_no_dossier, T_no_candidature, 6 ) 
LOOP 
I_activite_de_salarie := le_choix.choix; 
END LOOP; 
--> Mise à jour de la note totale des brevets obtenus 
FOR le_choix IN C_INDIVIDUEL_NOTE_BREVET ( T_no_dossier, 
T_no_candidature, 8 ) 
LOOP 
I_total_brevet := le_choix.note; 
END LOOP; 
-- Met les valeurs dans la table sig97_candidat_trie_tmp 
INSERT INTO sig97_candidat_trie_tmp VALUES 
( 
T_no_dossier, 
T_no_candidature, 
T_formation, 
T_departement1, 
T_departement2,
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 68 sur 99 
T_departement3, 
T_departement4, 
T_departement5, 
T_note_bareme, 
T_note_prepro, 
T_date_naissance, 
T_date_retour_dossier, 
I_mois_enseignement, 
I_peri_educ_ou_scol, 
I_activite_de_salarie, 
I_total_brevet, 
init_du_rang 
); 
END LOOP; 
CLOSE C_TRI_PAR_NOTE; 
Message_Utilisateur('La procedure Mise_a_jour_table_TRIE est FINI.'); 
COMMIT; 
EXCEPTION 
WHEN unique_constraint THEN 
Message_Utilisateur('ERREUR dans la procedure Mise_a_jour_table_TRIE : Effacer le contenu 
de la table 
temporaire SIG97_CANDIDAT_TRIE_TMP.'); 
arret_du_programme := TRUE; 
END Mise_a_jour_table_TRIE; 
/* ######################################################## */ 
/* ### PROCEDURE Candidature_Trie #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### la_note_bareme : réel ######## */ 
/* ######### la_note_prepro : réel ######## */ 
/* ######### la_note_enseigne : caractère ######## */ 
/* ######### la_note_peri_educ_scol : caractère ######## */ 
/* ######### la_note_activite : caractère ######## */ 
/* ######### l_indice_du_rang : réel ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### Selectionne les candidats ayant la note de bareme, la note de ### */ 
/* ### prepro, la note d'enseignement, la note peri-educative ou ### */ 
/* ### péri-scolaire, la note d'activite salariale passés en parametre ### */ 
/* ### et les inserent dans la table SIG97_CANDIDAT_TRIE ### */ 
/* ### par ordre décroissant de la note de bareme et de l'age tout ### */ 
/* ### en leur mettant un rang. ### */ 
/* ######################################################## */ 
PROCEDURE Candidature_Trie(la_note_bareme REAL, la_note_prepro REAL, 
la_note_enseigne CHAR, la_note_peri_educ_scol CHAR, 
la_note_activite CHAR, l_indice_du_rang IN OUT REAL) IS 
-- table temporaire C_TRIAGE : le tri par critere ranger par ordre croissant 
-- des notes de brevet et de l'age 
CURSOR C_TRIAGE (
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
ma_note_bareme REAL, 
ma_note_prepro REAL, 
ma_note_enseigne CHAR, 
ma_note_peri_educ_scol CHAR, 
ma_note_activite CHAR 
Page 69 sur 99 
) IS 
SELECT 
no_dossier, 
no_candidature, 
formation, 
departement1, 
departement2, 
departement3, 
departement4, 
departement5, 
note_bareme, 
note_prepro, 
date_naissance, 
date_retour_dossier, 
enseignement, 
peri_educ_scol, 
activite_salarie, 
note_brevet, 
rang 
FROM sig97_candidat_trie_tmp 
WHERE no_dossier LIKE mon_no_dossier 
AND sig97_candidat_trie_tmp.note_bareme LIKE ma_note_bareme 
AND sig97_candidat_trie_tmp.note_prepro LIKE ma_note_prepro 
AND sig97_candidat_trie_tmp.enseignement LIKE ma_note_enseigne 
AND sig97_candidat_trie_tmp.peri_educ_scol LIKE ma_note_peri_educ_scol 
AND sig97_candidat_trie_tmp.activite_salarie LIKE ma_note_activite 
ORDER BY note_brevet DESC,date_naissance DESC; 
BEGIN 
FOR candidat IN C_TRIAGE(la_note_bareme,la_note_prepro, 
la_note_enseigne,la_note_peri_educ_scol,la_note_activite) 
LOOP 
INSERT INTO sig97_candidat_trie VALUES 
( 
candidat.no_dossier, 
candidat.no_candidature, 
candidat.formation, 
candidat.departement1, 
candidat.departement2, 
candidat.departement3, 
candidat.departement4, 
candidat.departement5, 
candidat.note_bareme, 
candidat.note_prepro, 
candidat.date_naissance, 
candidat.date_retour_dossier, 
candidat.enseignement, 
candidat.peri_educ_scol, 
candidat.activite_salarie, 
candidat.note_brevet, 
l_indice_du_rang 
);
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
l_indice_du_rang := l_indice_du_rang + 1; 
Page 70 sur 99 
END LOOP; 
END Candidature_Trie; 
/* ######################################################## */ 
/* ### FUNCTION Test_le_Nbre_de_Candidat #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### la_note_bareme : réel ######## */ 
/* ######### la_note_prepro : réel ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### La fonction retourne VRAI si il y a plus d'un candidat ayant la### */ 
/* ### meme note de bareme et la meme note de prepro et retourne ### */ 
/* ### FAUX si il y en a aucun. ### */ 
/* ######################################################## */ 
FUNCTION Test_le_Nbre_de_Candidat(la_note_bareme REAL, la_note_prepro REAL ) RETURN BOOLEAN IS 
-- table temporaire C_TRIAGE : le tri par critere 
CURSOR C_VERIFIE_NBRE( ma_note_bareme REAL, ma_note_prepro REAL ) IS 
SELECT no_dossier 
FROM sig97_candidat_trie_tmp 
WHERE no_dossier LIKE mon_no_dossier 
AND sig97_candidat_trie_tmp.note_bareme LIKE ma_note_bareme 
AND sig97_candidat_trie_tmp.note_prepro LIKE ma_note_prepro; 
-- variables locales 
compteur_test REAL DEFAULT 0; -- contient le nombre total de candidat selectionnés 
la_verite BOOLEAN DEFAULT FALSE; -- indique que l'on peut effectuer le traitement 
BEGIN 
-- Compte le nombre total de candidat 
FOR le_nombre IN C_VERIFIE_NBRE(la_note_bareme, la_note_prepro) 
LOOP 
compteur_test := compteur_test + 1; 
END LOOP; 
-- Test si il y a plus d'un candidat est retourne VRAI 
IF ( compteur_test > 0 ) THEN la_verite := TRUE; END IF; 
RETURN la_verite; 
END Test_le_Nbre_de_Candidat; 
/* ######################################################## */ 
/* ### PROCEDURE Tri_par_selection #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### aucun ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### On va trier les candidats de la table SIG97_CANDI DAT_ ### */ 
/* ### TRIE_TMP dont leur note de bareme sera incluse entre ### */ 
/* ### 30 et 69 (les derogataires ont une note > 70 mais on ne les ### */ 
/* ### comptent pas), puis pour chaque note de prepro(0,3,5,6,8,10)### */
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
/* ### on va les trier par ordre de critère. ### */ 
/* ######################################################## */ 
Page 71 sur 99 
PROCEDURE Tri_par_selection IS 
-- Variables constantes de critère 
enseigneMAX CONSTANT CHAR(1) DEFAULT 'O'; 
enseigneMIN CONSTANT CHAR(1) DEFAULT 'N'; 
peri_educMAX CONSTANT CHAR(1) DEFAULT 'O'; 
peri_educMIN CONSTANT CHAR(1) DEFAULT 'N'; 
activiteMAX CONSTANT CHAR(1) DEFAULT 'O'; 
activiteMIN CONSTANT CHAR(1) DEFAULT 'N'; 
-- Les indices pour la note de bareme et de prepro 
ind_bareme REAL; 
ind_prepro REAL; 
-- Indice pour mettre le rang 
ind_rang REAL DEFAULT 1; 
BEGIN 
-- On ne prend pas les derogataires 
FOR ind_bareme IN REVERSE 30..69 
LOOP 
FOR ind_prepro IN REVERSE 0..10 
LOOP 
-- Test si il y a des candidats a triés 
IF ( Test_le_Nbre_de_Candidat(ind_bareme,ind_prepro) ) THEN 
Candidature_Trie(ind_bareme,ind_prepro,enseigneMAX,peri_educMAX,activiteMAX,ind_rang); 
Candidature_Trie(ind_bareme,ind_prepro,enseigneMAX,peri_educMAX,activiteMIN,ind_rang); 
Candidature_Trie(ind_bareme,ind_prepro,enseigneMAX,peri_educMIN,activiteMAX,ind_rang); 
Candidature_Trie(ind_bareme,ind_prepro,enseigneMAX,peri_educMIN,activiteMIN,ind_rang); 
Candidature_Trie(ind_bareme,ind_prepro,enseigneMIN,peri_educMAX,activiteMAX,ind_rang); 
Candidature_Trie(ind_bareme,ind_prepro,enseigneMIN,peri_educMAX,activiteMIN,ind_rang); 
Candidature_Trie(ind_bareme,ind_prepro,enseigneMIN,peri_educMIN,activiteMAX,ind_rang); 
Candidature_Trie(ind_bareme,ind_prepro,enseigneMIN,peri_educMIN,activiteMIN,ind_rang) 
END IF; 
END LOOP; 
END LOOP; 
Message_Utilisateur('La procedure Tri_par_selection est FINI.'); 
COMMIT; 
EXCEPTION 
WHEN unique_constraint THEN 
Message_Utilisateur('ERREUR dans la procedure Tri_par_selection : Effacer le contenu de la 
table SIG97_CANDIDAT_TRIE.'); 
arret_du_programme := TRUE; 
END Tri_par_selection; 
/* #### Fin des sous procedures et fonctions de la procedure de tri #### */ 
/* {{{{{{{{{{{{{{{{{{{{{{{{{{ Debut de la procedure de tri {{{{{{{{{{{{{{{{{{{{{{{{{{ */ 
PROCEDURE Tri_des_Candidats(affiche_erreur IN OUT BOOLEAN) IS
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 72 sur 99 
BEGIN 
-- Saisie des candidats admissiblent et verifications 
Initialise_Candidat_Desc(affiche_erreur); 
-- prend des donnees supplementaires 
Tri_par_note_de_bareme; 
-- prend des donnees supplementaires 
Mise_a_jour_table_TRIE; 
-- On tri les candidats selon les critères de préférences 
Tri_par_selection; 
-- On valide les changements 
COMMIT; 
END Tri_des_Candidats; 
/* }}}}}}}}}}}}}}}}}}}}}}}}}}} Fin de la procedure de tri }}}}}}}}}}}}}}}}}}}}}}}}}}} */ 
/* ######################################################## */ 
/* ### PROCEDURE Ajout_des_derogataires #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### aucun ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### Ajoute les derogataires (note de bareme > 69) dans la table ### */ 
/* ### SIG97_CANDIDAT_TRIE en leur mettant un rang de zéro ### */ 
/* ### car ils sont proritaires sur les autres candidats. ### */ 
/* ### On change les capacités initiales de chaque centre lorsque l'on### */ 
/* ### insère un dérogataire dans l'un de ces cinq centres. ### */ 
/* ######################################################## */ 
PROCEDURE Ajout_des_derogataires IS 
-- La note de bareme minimum 
la_note_de_baremeMIN CONSTANT candidature.note_bareme%TYPE DEFAULT 69; 
-- table temporaire C_DEROGATAIRE : on verifie que se sont bien des derogataires 
-- et qu'ils valident bien toutes les conditions 
CURSOR C_DEROGATAIRE IS 
SELECT 
candidature.no_dossier, 
candidature.no_candidature, 
candidature.formation, 
etudiant.nom_usuel, 
etudiant.prenom, 
etudiant.adresse, 
etudiant.code_postal, 
etudiant.ville, 
candidature.departement1, 
candidature.departement2, 
candidature.departement3, 
candidature.departement4, 
candidature.departement5, 
candidature.note_bareme, 
etudiant.date_naissance, 
candidature.date_retour_dossier 
FROM candidature, etudiant
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
WHERE (candidature.no_dossier LIKE mon_no_dossier 
AND candidature.no_dossier NOT LIKE refus_no_dossier ) 
AND candidature.formation LIKE ma_formation 
AND candidature.no_dossier = etudiant.no_dossier 
AND candidature.note_bareme > la_note_de_baremeMIN 
AND candidature.date_retour_dossier > '01-JAN-00' 
AND (candidature.condition_requise = '2' OR candidature.condition_requise = '3'); 
-- table temporaire C_DERO_INDIVIDUEL_NOTE : prend la note du brevet et d'entretien (8,9) 
CURSOR C_DERO_INDIVIDUEL_NOTE( mon_no_dossier CHAR, 
mon_no_candidature REAL, 
Page 73 sur 99 
mon_critere NUMBER) IS 
SELECT note FROM bareme_individuel 
WHERE bareme_individuel.no_dossier = mon_no_dossier 
AND bareme_individuel.no_candidature = mon_no_candidature 
AND bareme_individuel.code_critere = mon_critere; 
-- Declaration des variables 
DERO_no_dossier candidature.no_dossier%TYPE; 
DERO_no_candidature candidature.no_candidature%TYPE; 
DERO_formation candidature.formation%TYPE; 
DERO_departement1 candidature.departement1%TYPE; 
DERO_departement2 candidature.departement2%TYPE; 
DERO_departement3 candidature.departement3%TYPE; 
DERO_departement4 candidature.departement4%TYPE; 
DERO_departement5 candidature.departement5%TYPE; 
DERO_note_bareme candidature.note_bareme%TYPE; 
DERO_date_naissance etudiant.date_naissance%TYPE; 
DERO_date_retour_dossier candidature.date_retour_dossier%TYPE; 
-- Autres renseignement sur le candidat 
DERO_nom_usuel etudiant.nom_usuel%TYPE; 
DERO_prenom etudiant.prenom%TYPE; 
DERO_adresse etudiant.adresse%TYPE; 
DERO_code_postal etudiant.code_postal%TYPE; 
DERO_ville etudiant.ville%TYPE; 
DERO_I_entretien bareme_individuel.note%TYPE; 
-- Initialise le rang definitif des derogataires 
rang_derogataire sig97_candidat_trie.rang%TYPE DEFAULT 0; 
-- variables indiquant le numero du departement ou est admis le candidat 
-- en sachant que c'est le premier departement qui est choisi comme voeu 
numero_departement1 sig97_admis_cergy.no_departement1%TYPE DEFAULT '*'; 
numero_departement2 sig97_admis_cergy.no_departement2%TYPE DEFAULT '-'; 
numero_departement3 sig97_admis_cergy.no_departement3%TYPE DEFAULT '-'; 
numero_departement4 sig97_admis_cergy.no_departement4%TYPE DEFAULT '-'; 
numero_departement5 sig97_admis_cergy.no_departement5%TYPE DEFAULT '-'; 
BEGIN 
OPEN C_DEROGATAIRE; 
LOOP 
FETCH C_DEROGATAIRE INTO 
DERO_no_dossier, 
DERO_no_candidature, 
DERO_formation, 
DERO_nom_usuel,
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
DERO_prenom, 
DERO_adresse, 
DERO_code_postal, 
DERO_ville, 
DERO_departement1, 
DERO_departement2, 
DERO_departement3, 
DERO_departement4, 
DERO_departement5, 
DERO_note_bareme, 
DERO_date_naissance, 
DERO_date_retour_dossier; 
-- Sort de la boucle si il n'y a plus de candidat 
EXIT WHEN C_DEROGATAIRE%NOTFOUND; 
--> Prend la note d'entretien du candidat derogataire 
FOR le_choix IN C_DERO_INDIVIDUEL_NOTE( DERO_no_dossier, 
Page 74 sur 99 
DERO_no_candidature, 9 ) 
LOOP 
DERO_I_entretien := le_choix.note; 
END LOOP; 
-- Verifie la note d'entretien 70 et insere le candidat dans 
-- la table sig97_admis_nom du centre 
IF ( DERO_I_entretien = 70 ) THEN 
IF ( DERO_departement1 = 'A' ) THEN 
INSERT INTO sig97_admis_antony_vdb VALUES 
( 
DERO_no_dossier, 
DERO_no_candidature, 
DERO_nom_usuel, 
DERO_prenom, 
DERO_adresse, 
DERO_code_postal, 
DERO_ville, 
DERO_departement1, 
DERO_departement2, 
DERO_departement3, 
DERO_departement4, 
DERO_departement5, 
numero_departement1, 
numero_departement2, 
numero_departement3, 
numero_departement4, 
numero_departement5, 
DERO_departement1, 
DERO_formation, 
DERO_note_bareme, 
rang_derogataire 
); 
-- Decremente ICI le quota du centre initial d'Antony 
UPDATE sig97_capacite_centre 
SET quota_centre_initial = quota_centre_initial - 1 
WHERE code_centre = '92V'; 
END IF; 
-- Insere le candidat dans la liste des admis de Cergy
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
IF ( DERO_departement1 = 'C' ) THEN 
INSERT INTO sig97_admis_cergy VALUES 
( 
DERO_no_dossier, 
DERO_no_candidature, 
DERO_nom_usuel, 
DERO_prenom, 
DERO_adresse, 
DERO_code_postal, 
DERO_ville, 
DERO_departement1, 
DERO_departement2, 
DERO_departement3, 
DERO_departement4, 
DERO_departement5, 
numero_departement1, 
numero_departement2, 
numero_departement3, 
numero_departement4, 
numero_departement5, 
DERO_departement1, 
DERO_formation, 
DERO_note_bareme, 
rang_derogataire 
); 
-- Decremente ICI le quota du centre initial de Cergy 
UPDATE sig97_capacite_centre 
SET quota_centre_initial = quota_centre_initial - 1 
WHERE code_centre = '95'; 
END IF; 
-- Insere le candidat dans la liste des admis d'Etiolles 
IF ( DERO_departement1 = 'E' ) THEN 
INSERT INTO sig97_admis_etiolles VALUES 
( 
DERO_no_dossier, 
DERO_no_candidature, 
DERO_nom_usuel, 
DERO_prenom, 
DERO_adresse, 
DERO_code_postal, 
DERO_ville, 
DERO_departement1, 
DERO_departement2, 
DERO_departement3, 
DERO_departement4, 
DERO_departement5, 
numero_departement1, 
numero_departement2, 
numero_departement3, 
numero_departement4, 
numero_departement5, 
DERO_departement1, 
DERO_formation, 
DERO_note_bareme, 
rang_derogataire 
); 
-- Decremente ICI le quota du centre initial d'Etiolles 
Page 75 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
UPDATE sig97_capacite_centre 
SET quota_centre_initial = quota_centre_initial - 1 
WHERE code_centre = '91'; 
END IF; 
-- Insere le candidat dans la liste des admis de St Germain 
IF ( DERO_departement1 = 'S' ) THEN 
INSERT INTO sig97_admis_st_germain VALUES 
( 
DERO_no_dossier, 
DERO_no_candidature, 
DERO_nom_usuel, 
DERO_prenom, 
DERO_adresse, 
DERO_code_postal, 
DERO_ville, 
DERO_departement1, 
DERO_departement2, 
DERO_departement3, 
DERO_departement4, 
DERO_departement5, 
numero_departement1, 
numero_departement2, 
numero_departement3, 
numero_departement4, 
numero_departement5, 
DERO_departement1, 
DERO_formation, 
DERO_note_bareme, 
rang_derogataire 
); 
-- Decremente ICI le quota du centre initial de St Germain 
UPDATE sig97_capacite_centre 
SET quota_centre_initial = quota_centre_initial - 1 
WHERE code_centre = '78S'; 
END IF; 
-- Insere le candidat dans la liste des admis de Versaiiles 
IF ( DERO_departement1 = 'V' ) THEN 
INSERT INTO sig97_admis_versailles VALUES 
( 
DERO_no_dossier, 
DERO_no_candidature, 
DERO_nom_usuel, 
DERO_prenom, 
DERO_adresse, 
DERO_code_postal, 
DERO_ville, 
DERO_departement1, 
DERO_departement2, 
DERO_departement3, 
DERO_departement4, 
DERO_departement5, 
numero_departement1, 
numero_departement2, 
numero_departement3, 
numero_departement4, 
numero_departement5, 
DERO_departement1, 
Page 76 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
DERO_formation, 
DERO_note_bareme, 
rang_derogataire 
); 
-- Decremente ICI le quota du centre initial de Versailles 
UPDATE sig97_capacite_centre 
SET quota_centre_initial = quota_centre_initial - 1 
WHERE code_centre = '78V'; 
Page 77 sur 99 
END IF; 
ELSE 
Inscrit_Erreur('PAS PRIS EN COMPTE : Dérogataire numéro '||DERO_no_dossier||',Note 
Entretien = 
'||DERO_I_entretien||', Note de bareme = '||DERO_note_bareme); 
END IF; 
END LOOP; 
CLOSE C_DEROGATAIRE; 
Message_Utilisateur('La procedure Ajout_des_derogataires est FINI.'); 
COMMIT; 
EXCEPTION 
WHEN unique_constraint THEN 
Message_Utilisateur('ERREUR dans la procedure Ajout_des_derogataires : Effacer le contenu 
des tables 
SIG97_ADMIS_nom du centre.'); 
arret_du_programme := TRUE; 
END Ajout_des_derogataires; 
/* ### Debut des sous procedures et fonctions de la procedure d'attribution ### */ 
/* ######################################################## */ 
/* ### PROCEDURE Met_la_capacite_initiale #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### le_code_du_centre : caractère ######## */ 
/* ######### le_quota_du_centre : réel ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### Prends les capacités de chaque centre dans la table ### */ 
/* ### SIG97_CAPACITE_CENTRE. ### */ 
/* ######################################################## */ 
PROCEDURE Met_la_capacite_initiale( le_code_du_centre CHAR, 
le_quota_du_centre IN OUT REAL ) IS 
-- Table temporaire : prend la capacite initial des centres 
CURSOR C_CAPACITE_CENTRE( mon_code_centre CHAR ) IS 
SELECT quota_centre_initial 
FROM sig97_capacite_centre 
WHERE code_centre = mon_code_centre; 
BEGIN 
FOR le_code IN C_CAPACITE_CENTRE( le_code_du_centre ) 
LOOP
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
le_quota_du_centre := le_code.quota_centre_initial; 
END LOOP; 
Message_Utilisateur('La procedure Met_la_capacite_initiale du centre 
Page 78 sur 99 
'||le_code_du_centre||' est FINI.'); 
COMMIT; 
END Met_la_capacite_initiale; 
/* ######################################################## */ 
/* ### FUNCTION Test_place_Centre #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### le_quota_du_centre : réel ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### La fonction retourne VRAI si il reste de la place sinon FAUX.### */ 
/* ######################################################## */ 
FUNCTION Test_place_Centre( le_quota_du_centre REAL ) RETURN BOOLEAN IS 
-- Indique si il reste de la place ou pas 
test_quota BOOLEAN DEFAULT TRUE; 
BEGIN 
IF ( le_quota_du_centre <= 0 ) THEN test_quota := FALSE; -- plus de place 
END IF; 
RETURN test_quota; 
END Test_place_Centre; 
/* ### Fin des sous procedures et fonctions de la procedure d'attribution ### */ 
/* ######################################################## */ 
/* ### PROCEDURE Attribution_des_Centres #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### aucun ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### Effectue les attributions de chaque candidat dans le centre ### */ 
/* ### qu'il a designé par ordre de preference tout en regardant la ### */ 
/* ### place disponible dans le centre. ### */ 
/* ### L' attribution s'arrete lorsqu'il n'y a plus de place dans ### */ 
/* ### les cinq centres. ### */ 
/* ### On rajoute les dernieres informations concernant ### */ 
/* ### le candidat : le nom, le prenom et l'adresse complete. ### */ 
/* ######################################################## */ 
PROCEDURE Attribution_des_Centres IS 
-- Table temporaire : prend les informations de chaque candidat 
-- en commencant par le 1er jusqu'au dernier 
CURSOR C_CANDIDAT_TRIE IS 
SELECT 
sig97_candidat_trie.no_dossier,
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
sig97_candidat_trie.no_candidature, 
sig97_candidat_trie.formation, 
etudiant.nom_usuel, 
etudiant.prenom, 
etudiant.adresse, 
etudiant.code_postal, 
etudiant.ville, 
sig97_candidat_trie.departement1, 
sig97_candidat_trie.departement2, 
sig97_candidat_trie.departement3, 
sig97_candidat_trie.departement4, 
sig97_candidat_trie.departement5, 
sig97_candidat_trie.note_bareme, 
sig97_candidat_trie.rang 
FROM sig97_candidat_trie, etudiant 
WHERE sig97_candidat_trie.no_dossier LIKE mon_no_dossier 
AND sig97_candidat_trie.no_dossier = etudiant.no_dossier 
ORDER BY rang ASC; 
-- Capacité de chaque centre 
CentreA_quota REAL DEFAULT 0; 
CentreC_quota REAL DEFAULT 0; 
CentreE_quota REAL DEFAULT 0; 
CentreS_quota REAL DEFAULT 0; 
CentreV_quota REAL DEFAULT 0; 
-- Code de chaque centre 
Code_CentreA sig97_capacite_centre.code_centre%TYPE DEFAULT '92V'; 
Code_CentreC sig97_capacite_centre.code_centre%TYPE DEFAULT '95'; 
Code_CentreE sig97_capacite_centre.code_centre%TYPE DEFAULT '91'; 
Code_CentreS sig97_capacite_centre.code_centre%TYPE DEFAULT '78S'; 
Code_CentreV sig97_capacite_centre.code_centre%TYPE DEFAULT '78V'; 
-- indique si il reste de la place dans un centre 
CentreA_libre BOOLEAN DEFAULT TRUE; 
CentreC_libre BOOLEAN DEFAULT TRUE; 
CentreE_libre BOOLEAN DEFAULT TRUE; 
CentreS_libre BOOLEAN DEFAULT TRUE; 
CentreV_libre BOOLEAN DEFAULT TRUE; 
-- Les variables locales 
CAND_no_dossier sig97_candidat_trie.no_dossier%TYPE; 
CAND_no_candidature sig97_candidat_trie.no_candidature%TYPE; 
CAND_formation sig97_candidat_trie.formation%TYPE; 
CAND_nom_usuel etudiant.nom_usuel%TYPE; 
CAND_prenom etudiant.prenom%TYPE; 
CAND_adresse etudiant.adresse%TYPE; 
CAND_code_postal etudiant.code_postal%TYPE; 
CAND_ville etudiant.ville%TYPE; 
CAND_departement1 sig97_candidat_trie.departement1%TYPE; 
CAND_departement2 sig97_candidat_trie.departement2%TYPE; 
CAND_departement3 sig97_candidat_trie.departement3%TYPE; 
CAND_departement4 sig97_candidat_trie.departement4%TYPE; 
CAND_departement5 sig97_candidat_trie.departement5%TYPE; 
CAND_note_bareme sig97_candidat_trie.note_bareme%TYPE; 
CAND_rang sig97_candidat_trie.rang%TYPE; 
Page 79 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
-- Variables concernant le candidat selectionné 
nom_du_departement sig97_candidat_trie.departement1%TYPE; 
quota_du_departement sig97_capacite_centre.quota_centre_initial%TYPE; 
code_du_departement sig97_capacite_centre.code_centre%TYPE; 
numero_du_departement REAL; 
attribution_du_centre BOOLEAN; 
/* ######################################################## */ 
/* ### PROCEDURE Donne_Information_Centre #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### le_nom_du_departement : caractère ######## */ 
/* ######### le_quota_du_departement : réel ######## */ 
/* ######### le_code_du_departement : caractère ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### Indique le code du departement ainsi que son quota pour ### */ 
/* ### chaque demande dans un centre. ### */ 
/* ######################################################## */ 
PROCEDURE Donne_Information_Centre(le_nom_du_departement CHAR, 
le_quota_du_departement IN OUT REAL, 
le_code_du_departement IN OUT CHAR ) IS 
Page 80 sur 99 
BEGIN 
-- Renseignement sur le centre d'Antony Val de Bievres 
IF ( le_nom_du_departement = 'A' ) THEN 
le_quota_du_departement := CentreA_quota; 
le_code_du_departement := Code_CentreA; 
END IF; 
-- Renseignement sur le centre de Cergy 
IF ( le_nom_du_departement = 'C' ) THEN 
le_quota_du_departement := CentreC_quota; 
le_code_du_departement := Code_CentreC; 
END IF; 
-- Renseignement sur le centre d'Etiolles 
IF ( le_nom_du_departement = 'E' ) THEN 
le_quota_du_departement := CentreE_quota; 
le_code_du_departement := Code_CentreE; 
END IF; 
-- Renseignement sur le centre de St Germain 
IF ( le_nom_du_departement = 'S' ) THEN 
le_quota_du_departement := CentreS_quota; 
le_code_du_departement := Code_CentreS; 
END IF; 
-- Renseignement sur le centre de Versailles 
IF ( le_nom_du_departement = 'V' ) THEN 
le_quota_du_departement := CentreV_quota; 
le_code_du_departement := Code_CentreV; 
END IF; 
END Donne_Information_Centre; 
/* ######################################################## */ 
/* ### FUNCTION Traite_le_centre #### */ 
/* ######################################################## */
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### le_nom_du_departement : caractère ######## */ 
/* ######### le_quota_du_departement : réel ######## */ 
/* ######### le_code_du_departement : caractère ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### Insere dans chaque table SIG97_ADMIS_<le nom du centre> ### */ 
/* ### les informations du candidat qui est admissible dans le centre ### */ 
/* ### selectionné. ### */ 
/* ### La fonction retourne VRAI si le candidat a bien été admis ### */ 
/* ### dans le centre demandé. ### */ 
/* ######################################################## */ 
FUNCTION Traite_le_centre(le_nom_du_departement CHAR, 
le_quota_du_departement IN OUT REAL, 
le_numero_de_departement REAL ) RETURN BOOLEAN IS 
-- Test si le candidat a bien ete admis dans un centre 
tel_valeur BOOLEAN DEFAULT FALSE; 
-- variables indiquant le numero du departement ou est admis le candidat 
numero_departement1 sig97_admis_cergy.no_departement1%TYPE DEFAULT '-'; 
numero_departement2 sig97_admis_cergy.no_departement2%TYPE DEFAULT '-'; 
numero_departement3 sig97_admis_cergy.no_departement3%TYPE DEFAULT '-'; 
numero_departement4 sig97_admis_cergy.no_departement4%TYPE DEFAULT '-'; 
numero_departement5 sig97_admis_cergy.no_departement5%TYPE DEFAULT '-'; 
Page 81 sur 99 
BEGIN 
-- Test si il y a de la place 
IF ( le_quota_du_departement > 0 )THEN 
-- Selectionne le numero de departement et met une etoile 
IF ( le_numero_de_departement = 1 ) THEN numero_departement1 := '*'; 
END IF; 
IF ( le_numero_de_departement = 2 ) THEN numero_departement2 := '*'; 
END IF; 
IF ( le_numero_de_departement = 3 ) THEN numero_departement3 := '*'; 
END IF; 
IF ( le_numero_de_departement = 4 ) THEN numero_departement4 := '*'; 
END IF; 
IF ( le_numero_de_departement = 5 ) THEN numero_departement5 := '*'; 
END IF; 
-- Insere le candidat dans la liste des admis d'Antony 
IF ( le_nom_du_departement = 'A' ) THEN 
INSERT INTO sig97_admis_antony_vdb VALUES 
( 
CAND_no_dossier, 
CAND_no_candidature, 
CAND_nom_usuel, 
CAND_prenom, 
CAND_adresse, 
CAND_code_postal, 
CAND_ville, 
CAND_departement1, 
CAND_departement2, 
CAND_departement3,
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
CAND_departement4, 
CAND_departement5, 
numero_departement1, 
numero_departement2, 
numero_departement3, 
numero_departement4, 
numero_departement5, 
le_nom_du_departement, 
CAND_formation, 
CAND_note_bareme, 
CAND_rang 
); 
-- Decremente ICI le quota du centre 
CentreA_quota := CentreA_quota - 1; 
END IF; 
-- Insere le candidat dans la liste des admis de Cergy 
IF ( le_nom_du_departement = 'C' ) THEN 
INSERT INTO sig97_admis_cergy VALUES 
( 
CAND_no_dossier, 
CAND_no_candidature, 
CAND_nom_usuel, 
CAND_prenom, 
CAND_adresse, 
CAND_code_postal, 
CAND_ville, 
CAND_departement1, 
CAND_departement2, 
CAND_departement3, 
CAND_departement4, 
CAND_departement5, 
numero_departement1, 
numero_departement2, 
numero_departement3, 
numero_departement4, 
numero_departement5, 
le_nom_du_departement, 
CAND_formation, 
CAND_note_bareme, 
CAND_rang 
); 
-- Decremente ICI le quota du centre 
CentreC_quota := CentreC_quota - 1; 
END IF; 
-- Insere le candidat dans la liste des admis d'Etiolles 
IF ( le_nom_du_departement = 'E' ) THEN 
INSERT INTO sig97_admis_etiolles VALUES 
( 
CAND_no_dossier, 
CAND_no_candidature, 
CAND_nom_usuel, 
CAND_prenom, 
CAND_adresse, 
CAND_code_postal, 
CAND_ville, 
CAND_departement1, 
CAND_departement2, 
Page 82 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
CAND_departement3, 
CAND_departement4, 
CAND_departement5, 
numero_departement1, 
numero_departement2, 
numero_departement3, 
numero_departement4, 
numero_departement5, 
le_nom_du_departement, 
CAND_formation, 
CAND_note_bareme, 
CAND_rang 
); 
-- Decremente ICI le quota du centre 
CentreE_quota := CentreE_quota - 1; 
END IF; 
-- Insere le candidat dans la liste des admis de St Germain 
IF ( le_nom_du_departement = 'S' ) THEN 
INSERT INTO sig97_admis_st_germain VALUES 
( 
CAND_no_dossier, 
CAND_no_candidature, 
CAND_nom_usuel, 
CAND_prenom, 
CAND_adresse, 
CAND_code_postal, 
CAND_ville, 
CAND_departement1, 
CAND_departement2, 
CAND_departement3, 
CAND_departement4, 
CAND_departement5, 
numero_departement1, 
numero_departement2, 
numero_departement3, 
numero_departement4, 
numero_departement5, 
le_nom_du_departement, 
CAND_formation, 
CAND_note_bareme, 
CAND_rang 
); 
-- Decremente ICI le quota du centre 
CentreS_quota := CentreS_quota - 1; 
END IF; 
-- Insere le candidat dans la liste des admis de Versaiiles 
IF ( le_nom_du_departement = 'V' ) THEN 
INSERT INTO sig97_admis_versailles VALUES 
( 
CAND_no_dossier, 
CAND_no_candidature, 
CAND_nom_usuel, 
CAND_prenom, 
CAND_adresse, 
CAND_code_postal, 
CAND_ville, 
CAND_departement1, 
Page 83 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
CAND_departement2, 
CAND_departement3, 
CAND_departement4, 
CAND_departement5, 
numero_departement1, 
numero_departement2, 
numero_departement3, 
numero_departement4, 
numero_departement5, 
le_nom_du_departement, 
CAND_formation, 
CAND_note_bareme, 
CAND_rang 
); 
-- Decremente ICI le quota du centre 
CentreV_quota := CentreV_quota - 1; 
END IF; 
-- Le candidat a bien ete admis dans un centre 
tel_valeur := TRUE; 
Page 84 sur 99 
END IF; 
RETURN tel_valeur; 
END Traite_le_centre; 
/* ######################################################## */ 
/* ### PROCEDURE Mise_a_jour_des_quotas_restant #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### aucun ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### Met à jour les quotas restant dans la table SIG97_capacite_ ### */ 
/* ### centre. (au cas ou il y aurait encore de la place dans un centre)### */ 
/* ######################################################## */ 
PROCEDURE Mise_a_jour_des_quotas_restant IS 
BEGIN 
-- Mise à jour du centre d'Antony 
UPDATE sig97_capacite_centre 
SET quota_centre_restant = CentreA_quota 
WHERE code_centre = Code_CentreA; 
-- Mise à jour du centre de Cergy 
UPDATE sig97_capacite_centre 
SET quota_centre_restant = CentreC_quota 
WHERE code_centre = Code_CentreC; 
-- Mise à jour du centre d'Etiolles 
UPDATE sig97_capacite_centre 
SET quota_centre_restant = CentreE_quota 
WHERE code_centre = Code_CentreE; 
-- Mise à jour du centre de St Germain 
UPDATE sig97_capacite_centre 
SET quota_centre_restant = CentreS_quota 
WHERE code_centre = Code_CentreS; 
-- Mise à jour du centre de Versailles
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
UPDATE sig97_capacite_centre 
SET quota_centre_restant = CentreV_quota 
WHERE code_centre = Code_CentreV; 
-- On valise la mise à jour 
Message_Utilisateur('La procedure Mise_a_jour_des_quotas_restant est FINI.'); 
COMMIT; 
Page 85 sur 99 
END Mise_a_jour_des_quotas_restant; 
/* {{{{{{{{{{{{{{{{{{{{{{{{{{ Debut de la procedure d'attribution {{{{{{{{{{{{{{{{{{{{{{{{{{ */ 
BEGIN 
OPEN C_CANDIDAT_TRIE; 
-- On prend la capacite initial de chaque centre 
Met_la_capacite_initiale( Code_CentreA, CentreA_quota ); 
Met_la_capacite_initiale( Code_CentreC, CentreC_quota ); 
Met_la_capacite_initiale( Code_CentreE, CentreE_quota ); 
Met_la_capacite_initiale( Code_CentreS, CentreS_quota ); 
Met_la_capacite_initiale( Code_CentreV, CentreV_quota ); 
-- Tant qu'il y a de la place on attribue des candidats aux centres 
WHILE ( (CentreA_libre AND CentreC_libre AND CentreE_libre AND CentreS_libre AND 
CentreV_libre) OR C_CANDIDAT_TRIE%FOUND ) LOOP 
-- On regarde si il y a encore de la place dans les centres 
CentreA_libre := Test_place_Centre( CentreA_quota ); 
CentreC_libre := Test_place_Centre( CentreC_quota ); 
CentreE_libre := Test_place_Centre( CentreE_quota ); 
CentreS_libre := Test_place_Centre( CentreS_quota ); 
CentreV_libre := Test_place_Centre( CentreV_quota ); 
FETCH C_CANDIDAT_TRIE INTO 
CAND_no_dossier, 
CAND_no_candidature, 
CAND_formation, 
CAND_nom_usuel, 
CAND_prenom, 
CAND_adresse, 
CAND_code_postal, 
CAND_ville, 
CAND_departement1, 
CAND_departement2, 
CAND_departement3, 
CAND_departement4, 
CAND_departement5, 
CAND_note_bareme, 
CAND_rang; 
-- Au cas qu'il y aurait plus de place que de candidats 
EXIT WHEN C_CANDIDAT_TRIE%NOTFOUND; 
-- on traite les 5 voeux du candidat 
-- initialise mes valeurs de départ 
numero_du_departement := 1; 
attribution_du_centre := FALSE; 
LOOP 
-- condition de sortie de la boucle : on ne traite que 5 departements 
-- mais aussi quand le candidat a été accepté dans un centre 
EXIT WHEN ( numero_du_departement > 5 ) OR attribution_du_centre; 
-- Selectionne le departement à traiter
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
IF ( numero_du_departement = 1 ) THEN 
nom_du_departement := CAND_departement1; 
END IF; 
IF ( numero_du_departement = 2 ) THEN 
nom_du_departement := CAND_departement2; 
END IF; 
IF ( numero_du_departement = 3 ) THEN 
nom_du_departement := CAND_departement3; 
END IF; 
IF ( numero_du_departement = 4 ) THEN 
nom_du_departement := CAND_departement4; 
END IF; 
IF ( numero_du_departement = 5 ) THEN 
nom_du_departement := CAND_departement5; 
END IF; 
-- On prend le quota et le code du centre selectionne 
Donne_Information_Centre(nom_du_departement, quota_du_departement, 
Page 86 sur 99 
code_du_departement); 
IF ( NOT attribution_du_centre ) THEN 
attribution_du_centre := Traite_le_centre(nom_du_departement, 
quota_du_departement, numero_du_departement); 
END IF; 
-- passe au département suivant 
numero_du_departement := numero_du_departement + 1; 
END LOOP; -- fin du LOOP 
END LOOP; -- fin du WHILE 
CLOSE C_CANDIDAT_TRIE; 
Mise_a_jour_des_quotas_restant; 
Message_Utilisateur('La procedure Attribution_des_Centres est FINI.'); 
COMMIT; 
END Attribution_des_Centres; 
/* ######################################################## */ 
/* ### PROCEDURE Met_admission_dans_CANDIDATURE #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### aucun ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### Met à jour le champ 'ADMISSION', 'FORMATION' et ### */ 
/* ### 'DOSSIER_RECEVABLE de la table CANDIDATURE ### */ 
/* ### lorsque le candidat a été admis dans un centre. ### */ 
/* ######################################################## */ 
-- tables temporaires des cinq centres 
CURSOR C_CANDIDAT_ADMIS_ANTONY IS 
SELECT sig97_admis_antony_vdb.no_dossier, sig97_admis_antony_vdb.no_candidature 
FROM sig97_admis_antony_vdb; 
CURSOR C_CANDIDAT_ADMIS_CERGY IS 
SELECT sig97_admis_cergy.no_dossier, sig97_admis_cergy.no_candidature 
FROM sig97_admis_cergy; 
CURSOR C_CANDIDAT_ADMIS_ETIOLLES IS 
SELECT sig97_admis_etiolles.no_dossier, sig97_admis_etiolles.no_candidature
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 87 sur 99 
FROM sig97_admis_etiolles; 
CURSOR C_CANDIDAT_ADMIS_ST_GERMAIN IS 
SELECT sig97_admis_st_germain.no_dossier, sig97_admis_st_germain.no_candidature 
FROM sig97_admis_st_germain; 
CURSOR C_CANDIDAT_ADMIS_VERSAILLES IS 
SELECT sig97_admis_versailles.no_dossier, sig97_admis_versailles.no_candidature 
FROM sig97_admis_versailles; 
-- Variables locales 
le_numero_de_dossier candidature.no_dossier%TYPE; 
le_numero_de_candidature candidature.no_candidature%TYPE; 
la_formation candidature.formation%TYPE; 
constante_OUI CONSTANT candidature.admission%TYPE DEFAULT 'O'; 
constante_NON CONSTANT candidature.admission%TYPE DEFAULT 'N'; 
BEGIN 
-- Mise à jour des candidats admissiblent dans le centre de Antony Val de Bievre 
OPEN C_CANDIDAT_ADMIS_ANTONY; 
LOOP 
FETCH C_CANDIDAT_ADMIS_ANTONY INTO le_numero_de_dossier,le_numero_de_candidature; 
EXIT WHEN C_CANDIDAT_ADMIS_ANTONY%NOTFOUND; 
UPDATE candidature 
SET admission = constante_OUI, 
formation = 'E92V', 
dossier_recevable = constante_OUI 
WHERE candidature.no_dossier = le_numero_de_dossier 
AND candidature.no_candidature = le_numero_de_candidature; 
END LOOP; 
CLOSE C_CANDIDAT_ADMIS_ANTONY; 
-- Mise à jour des candidats admissiblent dans le centre de Cergy 
OPEN C_CANDIDAT_ADMIS_CERGY; 
LOOP 
FETCH C_CANDIDAT_ADMIS_CERGY INTO 
le_numero_de_dossier,le_numero_de_candidature; 
EXIT WHEN C_CANDIDAT_ADMIS_CERGY%NOTFOUND; 
UPDATE candidature 
SET admission = constante_OUI, 
formation = 'E95', 
dossier_recevable = constante_OUI 
WHERE candidature.no_dossier = le_numero_de_dossier 
AND candidature.no_candidature = le_numero_de_candidature; 
END LOOP; 
CLOSE C_CANDIDAT_ADMIS_CERGY; 
-- Mise à jour des candidats admissiblent dans le centre de Etiolles 
OPEN C_CANDIDAT_ADMIS_ETIOLLES; 
LOOP 
FETCH C_CANDIDAT_ADMIS_ETIOLLES INTO le_numero_de_dossier,le_numero_de_candidature; 
EXIT WHEN C_CANDIDAT_ADMIS_ETIOLLES%NOTFOUND; 
UPDATE candidature
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
SET admission = constante_OUI, 
formation = 'E91', 
dossier_recevable = constante_OUI 
WHERE candidature.no_dossier = le_numero_de_dossier 
AND candidature.no_candidature = le_numero_de_candidature; 
END LOOP; 
CLOSE C_CANDIDAT_ADMIS_ETIOLLES; 
-- Mise à jour des candidats admissiblent dans le centre de St Germain 
OPEN C_CANDIDAT_ADMIS_ST_GERMAIN; 
LOOP 
FETCH C_CANDIDAT_ADMIS_ST_GERMAIN INTO le_numero_de_dossier,le_numero_de_candidature; 
EXIT WHEN C_CANDIDAT_ADMIS_ST_GERMAIN%NOTFOUND; 
UPDATE candidature 
SET admission = constante_OUI, 
formation = 'E78S', 
dossier_recevable = constante_OUI 
WHERE candidature.no_dossier = le_numero_de_dossier 
AND candidature.no_candidature = le_numero_de_candidature; 
END LOOP; 
CLOSE C_CANDIDAT_ADMIS_ST_GERMAIN; 
-- Mise à jour des candidats admissiblent dans le centre de Versailles 
OPEN C_CANDIDAT_ADMIS_VERSAILLES; 
LOOP 
FETCH C_CANDIDAT_ADMIS_VERSAILLES INTO le_numero_de_dossier,le_numero_de_candidature; 
EXIT WHEN C_CANDIDAT_ADMIS_VERSAILLES%NOTFOUND; 
UPDATE candidature 
SET admission = constante_OUI, 
formation = 'E78V', 
dossier_recevable = constante_OUI 
WHERE candidature.no_dossier = le_numero_de_dossier 
AND candidature.no_candidature = le_numero_de_candidature; 
END LOOP; 
CLOSE C_CANDIDAT_ADMIS_VERSAILLES; 
-- On valide les changements 
Message_Utilisateur('La procedure Met_admission_dans_CANDIDATURE est FINI.'); 
COMMIT; 
Page 88 sur 99 
END Met_admission_dans_CANDIDATURE; 
/* ######################################################## */ 
/* ### PROCEDURE Met_le_Nombre_Atypique #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### aucun ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */ 
/* ### Met dans le champ <nbre_atypique> le nombre total ### */ 
/* ### d'atypique dans les tables SIG97_ADMIS_ nom du centre. ### */ 
/* ######################################################## */ 
PROCEDURE Met_le_Nombre_Atypique IS
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
-- table temporaire C_ADMIS_ANTONY_VDB : compte le nombre de candidat atypique 
-- dans la table sig97_admis_antony_vdb 
CURSOR C_ADMIS_ANTONY_VDB( ma_condition_requise CHAR, mon_champ_libre10 REAL ) IS 
SELECT sig97_admis_antony_vdb.no_dossier 
FROM sig97_admis_antony_vdb, etudiant, candidature 
WHERE sig97_admis_antony_vdb.no_dossier LIKE mon_no_dossier 
AND sig97_admis_antony_vdb.formation LIKE ma_formation 
AND sig97_admis_antony_vdb.no_dossier = etudiant.no_dossier 
AND sig97_admis_antony_vdb.no_dossier = candidature.no_dossier 
AND candidature.condition_requise = ma_condition_requise 
AND etudiant.libre10 = mon_champ_libre10; 
-- table temporaire C_ADMIS_CERGY : compte le nombre de candidat atypique 
-- dans la table sig97_admis_cergy 
CURSOR C_ADMIS_CERGY( ma_condition_requise CHAR, mon_champ_libre10 REAL ) IS 
SELECT sig97_admis_cergy.no_dossier 
FROM sig97_admis_cergy, etudiant, candidature 
WHERE sig97_admis_cergy.no_dossier LIKE mon_no_dossier 
AND sig97_admis_cergy.formation LIKE ma_formation 
AND sig97_admis_cergy.no_dossier = etudiant.no_dossier 
AND sig97_admis_cergy.no_dossier = candidature.no_dossier 
AND candidature.condition_requise = ma_condition_requise 
AND etudiant.libre10 = mon_champ_libre10; 
-- table temporaire C_ADMIS_ETIOLLES : compte le nombre de candidat atypique 
-- dans la table sig97_admis_etiolles 
CURSOR C_ADMIS_ETIOLLES( ma_condition_requise CHAR, mon_champ_libre10 REAL ) IS 
SELECT sig97_admis_etiolles.no_dossier 
FROM sig97_admis_etiolles, etudiant, candidature 
WHERE sig97_admis_etiolles.no_dossier LIKE mon_no_dossier 
AND sig97_admis_etiolles.formation LIKE ma_formation 
AND sig97_admis_etiolles.no_dossier = etudiant.no_dossier 
AND sig97_admis_etiolles.no_dossier = candidature.no_dossier 
AND candidature.condition_requise = ma_condition_requise 
AND etudiant.libre10 = mon_champ_libre10; 
-- table temporaire C_ADMIS_ST_GERMAIN : compte le nombre de candidat atypique 
-- dans la table sig97_admis_st_germain 
CURSOR C_ADMIS_ST_GERMAIN( ma_condition_requise CHAR, mon_champ_libre10 REAL ) IS 
SELECT sig97_admis_st_germain.no_dossier 
FROM sig97_admis_st_germain, etudiant, candidature 
WHERE sig97_admis_st_germain.no_dossier LIKE mon_no_dossier 
AND sig97_admis_st_germain.formation LIKE ma_formation 
AND sig97_admis_st_germain.no_dossier = etudiant.no_dossier 
AND sig97_admis_st_germain.no_dossier = candidature.no_dossier 
AND candidature.condition_requise = ma_condition_requise 
AND etudiant.libre10 = mon_champ_libre10; 
-- table temporaire C_ADMIS_VERSAILLES : compte le nombre de candidat atypique 
-- dans la table sig97_admis_versailles 
CURSOR C_ADMIS_VERSAILLES( ma_condition_requise CHAR, mon_champ_libre10 REAL ) IS 
SELECT sig97_admis_versailles.no_dossier 
FROM sig97_admis_versailles, etudiant, candidature 
WHERE sig97_admis_versailles.no_dossier LIKE mon_no_dossier 
AND sig97_admis_versailles.formation LIKE ma_formation 
AND sig97_admis_versailles.no_dossier = etudiant.no_dossier 
AND sig97_admis_versailles.no_dossier = candidature.no_dossier 
Page 89 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
AND candidature.condition_requise = ma_condition_requise 
AND etudiant.libre10 = mon_champ_libre10; 
-- Les condidtions pour etre atypique 
la_condition_requise candidature.condition_requise%TYPE DEFAULT '10'; 
le_champ_libre10 etudiant.libre10%TYPE DEFAULT 1; 
Page 90 sur 99 
BEGIN 
-- Compte le nombre de candidat à Antony 
FOR le_centre IN C_ADMIS_ANTONY_VDB( la_condition_requise, le_champ_libre10 ) 
LOOP 
UPDATE sig97_capacite_centre 
SET nbre_atypique = nbre_atypique + 1 
WHERE code_centre = '92V'; 
END LOOP; 
-- Compte le nombre de candidat à Cergy 
FOR le_centre IN C_ADMIS_CERGY( la_condition_requise, le_champ_libre10 ) 
LOOP 
UPDATE sig97_capacite_centre 
SET nbre_atypique = nbre_atypique + 1 
WHERE code_centre = '95'; 
END LOOP; 
-- Compte le nombre de candidat à Etiolles 
FOR le_centre IN C_ADMIS_ETIOLLES( la_condition_requise, le_champ_libre10 ) 
LOOP 
UPDATE sig97_capacite_centre 
SET nbre_atypique = nbre_atypique + 1 
WHERE code_centre = '91'; 
END LOOP; 
-- Compte le nombre de candidat à St Germain 
FOR le_centre IN C_ADMIS_ST_GERMAIN( la_condition_requise, le_champ_libre10 ) 
LOOP 
UPDATE sig97_capacite_centre 
SET nbre_atypique = nbre_atypique + 1 
WHERE code_centre = '78S'; 
END LOOP; 
-- Compte le nombre de candidat à Versailles 
FOR le_centre IN C_ADMIS_VERSAILLES( la_condition_requise, le_champ_libre10 ) 
LOOP 
UPDATE sig97_capacite_centre 
SET nbre_atypique = nbre_atypique + 1 
WHERE code_centre = '78V'; 
END LOOP; 
-- On valide les changements 
Message_Utilisateur('La procedure Met_le_Nombre_Atypique est FINI.'); 
COMMIT; 
END Met_le_Nombre_Atypique; 
/* ######################################################## */ 
/* ### PROCEDURE Met_le_Nombre_Derogataire #### */ 
/* ######################################################## */ 
/* #################### Parametre(s) ###################### */ 
/* ######################################################## */ 
/* ######### aucun ######## */ 
/* ######################################################## */ 
/* ################### Commentaire(s) ##################### */ 
/* ######################################################## */
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
/* ### Met dans le champ <nbre_derogataire> le nombre total de ### */ 
/* ### derogataire dans les tables SIG97_ADMIS_ nom du centre. ### */ 
/* ######################################################## */ 
Page 91 sur 99 
PROCEDURE Met_le_Nombre_Derogataire IS 
-- table temporaire C_ADMIS_ANTONY_VDB : compte le nombre de candidat derogataire 
-- dans la table sig97_admis_antony_vdb 
CURSOR C_ADMIS_ANTONY_VDB( mon_rang REAL ) IS 
SELECT sig97_admis_antony_vdb.no_dossier 
FROM sig97_admis_antony_vdb 
WHERE sig97_admis_antony_vdb.rang = mon_rang; 
-- table temporaire C_ADMIS_CERGY : compte le nombre de candidat derogataire 
-- dans la table sig97_admis_cergy 
CURSOR C_ADMIS_CERGY( mon_rang REAL ) IS 
SELECT sig97_admis_cergy.no_dossier 
FROM sig97_admis_cergy 
WHERE sig97_admis_cergy.rang = mon_rang; 
-- table temporaire C_ADMIS_ETIOLLES : compte le nombre de candidat derogataire 
-- dans la table sig97_admis_etiolles 
CURSOR C_ADMIS_ETIOLLES( mon_rang REAL ) IS 
SELECT sig97_admis_etiolles.no_dossier 
FROM sig97_admis_etiolles 
WHERE sig97_admis_etiolles.rang = mon_rang; 
-- table temporaire C_ADMIS_ST_GERMAIN : compte le nombre de candidat derogataire 
-- dans la table sig97_admis_st_germain 
CURSOR C_ADMIS_ST_GERMAIN( mon_rang REAL ) IS 
SELECT sig97_admis_st_germain.no_dossier 
FROM sig97_admis_st_germain 
WHERE sig97_admis_st_germain.rang = mon_rang; 
-- table temporaire C_ADMIS_VERSAILLES : compte le nombre de candidat derogataire 
-- dans la table sig97_admis_versailles 
CURSOR C_ADMIS_VERSAILLES( mon_rang REAL ) IS 
SELECT sig97_admis_versailles.no_dossier 
FROM sig97_admis_versailles 
WHERE sig97_admis_versailles.rang = mon_rang; 
-- Les condidtions pour etre derogataire 
le_rang_derogataire sig97_candidat_trie.rang%TYPE DEFAULT 0; 
BEGIN 
-- Compte le nombre de candidat à Antony 
FOR le_centre IN C_ADMIS_ANTONY_VDB( le_rang_derogataire ) 
LOOP 
UPDATE sig97_capacite_centre 
SET nbre_derogataire = nbre_derogataire + 1 
WHERE code_centre = '92V'; 
END LOOP; 
-- Compte le nombre de candidat à Cergy 
FOR le_centre IN C_ADMIS_CERGY( le_rang_derogataire ) 
LOOP 
UPDATE sig97_capacite_centre 
SET nbre_derogataire = nbre_derogataire + 1
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
WHERE code_centre = '95'; 
END LOOP; 
-- Compte le nombre de candidat à Etiolles 
FOR le_centre IN C_ADMIS_ETIOLLES( le_rang_derogataire ) 
LOOP 
UPDATE sig97_capacite_centre 
SET nbre_derogataire = nbre_derogataire + 1 
WHERE code_centre = '91'; 
END LOOP; 
-- Compte le nombre de candidat à St Germain 
FOR le_centre IN C_ADMIS_ST_GERMAIN( le_rang_derogataire ) 
LOOP 
UPDATE sig97_capacite_centre 
SET nbre_derogataire = nbre_derogataire + 1 
WHERE code_centre = '78S'; 
END LOOP; 
-- Compte le nombre de candidat à Versailles 
FOR le_centre IN C_ADMIS_VERSAILLES( le_rang_derogataire ) 
LOOP 
UPDATE sig97_capacite_centre 
SET nbre_derogataire = nbre_derogataire + 1 
WHERE code_centre = '78V'; 
END LOOP; 
-- On valide les changements 
Message_Utilisateur('La procedure Met_le_Nombre_Derogataire est FINI.'); 
COMMIT; 
Page 92 sur 99 
END Met_le_Nombre_Derogataire; 
/* }}}}}}}}}}}}}}}}}}}}}}}}}}} Fin de la procedure d'attribution }}}}}}}}}}}}}}}}}}}}}}}}}}} */ 
BEGIN /* ==> Debut du programme principal <== */ 
--> Efface le contenu des tables selectionnées dans la procedure 
IF ( '&invite_efface' = 'O' ) THEN Efface_contenu_des_tables; 
END IF; 
--> Tri des candidats pour les mettres dans la table SIG97_CANDIDAT_TRIE 
Tri_des_Candidats( erreur_de_saisie ); 
--> Rajoute les derogataires dans la table SIG97_CANDIDAT_TRIE 
IF ( NOT arret_du_programme ) THEN Ajout_des_derogataires; END IF; 
--> On attribue les candidats dans chaque centre 
IF ( NOT arret_du_programme ) THEN Attribution_des_Centres; END IF; 
--> Mise à jour de la table candidature 
IF ( NOT arret_du_programme ) THEN Met_admission_dans_CANDIDATURE; END IF; 
--> Mise à jour du champ NBRE_ATYPIQUE de la table sig97_capacite_centre 
IF ( NOT arret_du_programme ) THEN Met_le_Nombre_Atypique; END IF; 
--> Mise à jour du champ NBRE_DEROGATAIRE de la table sig97_capacite_centre 
IF ( NOT arret_du_programme ) THEN Met_le_Nombre_Derogataire; END IF; 
--> Une ou des erreurs se sont produites : on le signal 
IF ( erreur_de_saisie ) THEN
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Message_Utilisateur( 'Regarder la table SIG97_ERREUR_CANDIDAT : candidats qui ne 
Page 93 sur 99 
sont pas pris en compte.' ); 
END IF; 
IF ( arret_du_programme ) THEN 
Message_Utilisateur( 'Erreur(s) durant le programme !!!' ); 
ELSE 
Message_Utilisateur( 'Aucune erreur durant le programme.' ); 
END IF; 
COMMIT; 
EXCEPTION 
WHEN extend_rollback_failure THEN 
Message_Utilisateur('ERREUR dans le programme : Faire un SHUTDOWN de la base et liser le 
script "space1.sql"'); 
arret_du_programme := TRUE; 
WHEN extend_rollback THEN 
Message_Utilisateur('ERREUR dans le programme : Lancer le script "space2.sql" et augmenter 
les 
valeurs <maxextents> et <pctincrease>.'); 
arret_du_programme := TRUE; 
END; /* ==> fin du programme principal <== */ 
/ 
9.2 Création des tables sous Oracle (creat1_0.sql) 
/* 
REM ------------------------------------------------------------------------- 
REM nom du script : creat1_0.sql version : 1.0 
REM auteur : Frederic SAGEZ date : 16 / 06 / 1997 
REM description : Efface et créé les tables pour le programme Affect97.sql 
REM ------------------------------------------------------------------------- 
*/ 
/* 
REM -- On supprime les tables si elles existent deja 
*/ 
DROP TABLE sig97_commentaire_prg; 
DROP TABLE sig97_erreur_candidat; 
DROP TABLE sig97_candidat_tmp; 
DROP TABLE sig97_candidat_select_tmp; 
DROP TABLE sig97_candidat_trie_tmp; 
DROP TABLE sig97_candidat_trie; 
DROP TABLE SIG97_CAPACITE_CENTRE; 
DROP TABLE sig97_admis_antony_vdb; 
DROP TABLE sig97_admis_cergy; 
DROP TABLE sig97_admis_etiolles; 
DROP TABLE sig97_admis_st_germain; 
DROP TABLE sig97_admis_versailles; 
COMMIT; 
-- commentaire sur le programme 
CREATE TABLE system.sig97_commentaire_prg 
( 
message CHAR(120)
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
); 
-- remplis de candidats non valident 
CREATE TABLE system.sig97_erreur_candidat 
( 
message CHAR(100) 
); 
-- prend les bons candidats : la 'purge' 
CREATE TABLE system.sig97_candidat_tmp 
( 
NO_DOSSIER CHAR(10) PRIMARY KEY, 
NO_CANDIDATURE FLOAT(126), 
FORMATION CHAR(4), 
DEPARTEMENT1 CHAR(3), 
DEPARTEMENT2 CHAR(3), 
DEPARTEMENT3 CHAR(3), 
DEPARTEMENT4 CHAR(3), 
DEPARTEMENT5 CHAR(3), 
NOTE_BAREME FLOAT(126), 
DATE_RETOUR_DOSSIER DATE 
); 
-- prend des informations complementaire 
CREATE TABLE system.sig97_candidat_select_tmp 
( 
NO_DOSSIER CHAR(10) PRIMARY KEY, 
NO_CANDIDATURE FLOAT(126), 
FORMATION CHAR(4), 
DEPARTEMENT1 CHAR(3), 
DEPARTEMENT2 CHAR(3), 
DEPARTEMENT3 CHAR(3), 
DEPARTEMENT4 CHAR(3), 
DEPARTEMENT5 CHAR(3), 
NOTE_BAREME FLOAT(126), 
NOTE_PREPRO FLOAT(126), 
DATE_NAISSANCE DATE, 
DATE_RETOUR_DOSSIER DATE, 
RANG FLOAT(126) 
); 
-- prend des informations complementaire 
CREATE TABLE system.sig97_candidat_trie_tmp 
( 
NO_DOSSIER CHAR(10) PRIMARY KEY, 
NO_CANDIDATURE FLOAT(126), 
FORMATION CHAR(4), 
DEPARTEMENT1 CHAR(3), 
DEPARTEMENT2 CHAR(3), 
DEPARTEMENT3 CHAR(3), 
DEPARTEMENT4 CHAR(3), 
DEPARTEMENT5 CHAR(3), 
NOTE_BAREME FLOAT(126), 
NOTE_PREPRO FLOAT(126), 
DATE_NAISSANCE DATE, 
DATE_RETOUR_DOSSIER DATE, 
ENSEIGNEMENT CHAR(1), -- activite d'enseignement > 6 mois 
PERI_EDUC_SCOL CHAR(1), -- activite d'education > 6 semaines 
ACTIVITE_SALARIE CHAR(1), -- activite salariee > 6 mois P.T. 
NOTE_BREVET FLOAT(126), -- note totale de tous les brevets 
RANG FLOAT(126) 
Page 94 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
) 
PCTFREE 10 
PCTUSED 50 
TABLESPACE ROLLBACK_DATA STORAGE -- on prevoit de l'espace memoire 
( 
initial 100k 
next 300k 
minextents 2 
maxextents 121 
pctincrease 40 
); 
-- table finalisée 
CREATE TABLE system.sig97_candidat_trie 
( 
NO_DOSSIER CHAR(10) PRIMARY KEY, 
NO_CANDIDATURE FLOAT(126), 
FORMATION CHAR(4), 
DEPARTEMENT1 CHAR(3), 
DEPARTEMENT2 CHAR(3), 
DEPARTEMENT3 CHAR(3), 
DEPARTEMENT4 CHAR(3), 
DEPARTEMENT5 CHAR(3), 
NOTE_BAREME FLOAT(126), 
NOTE_PREPRO FLOAT(126), 
DATE_NAISSANCE DATE, 
DATE_RETOUR_DOSSIER DATE, 
ENSEIGNEMENT CHAR(1), -- activite d'enseignement > 6 mois 
PERI_EDUC_SCOL CHAR(1), -- activite d'education > 6 semaines 
ACTIVITE_SALARIE CHAR(1), -- activite salariee > 6 mois P.T. 
NOTE_BREVET FLOAT(126), -- note totale de tous les brevets : 1,2,3 
RANG FLOAT(126) 
) 
PCTFREE 10 
PCTUSED 50 
TABLESPACE ROLLBACK_DATA STORAGE -- on prevoit de l'espace memoire 
( 
initial 100k 
next 300k 
minextents 2 
maxextents 121 
pctincrease 40 
); 
/* 
REM -- Creation de la table des capacites des centres 
*/ 
CREATE TABLE system.SIG97_CAPACITE_CENTRE 
( 
CODE_CENTRE CHAR(3), 
QUOTA_CENTRE_INITIAL FLOAT(126), 
QUOTA_CENTRE_RESTANT FLOAT(126), 
NBRE_ATYPIQUE FLOAT(126), 
NBRE_DEROGATAIRE FLOAT(126), 
NOM_DU_CENTRE CHAR(25) 
); 
/* 
REM -- Quotas de chaque centres avec les valeurs du 'surbooking' 
Page 95 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
*/ 
-- Antony Val de Bievre 
INSERT INTO SIG97_CAPACITE_CENTRE VALUES('92V', 770, 770, 0, 0, 'Antony Val de Bievre'); 
-- Etiolles 
INSERT INTO SIG97_CAPACITE_CENTRE VALUES('91', 960, 960, 0, 0, 'Etiolles'); 
-- Cergy 
INSERT INTO SIG97_CAPACITE_CENTRE VALUES('95', 920, 920, 0, 0, 'Cergy'); 
-- St Germain en Laye 
INSERT INTO SIG97_CAPACITE_CENTRE VALUES('78S', 580, 580, 0, 0, 'St-Germain en Laye'); 
-- Versailles 
INSERT INTO SIG97_CAPACITE_CENTRE VALUES('78V', 248, 248, 0, 0, 'Versailles'); 
Page 96 sur 99 
-- On regarde en verifiant les valeurs 
SELECT * FROM SIG97_CAPACITE_CENTRE; 
/* 
REM -- Creation des tables de chaque centre 
*/ 
-- Creation de la liste du centre de Cergy 
CREATE TABLE system.SIG97_ADMIS_CERGY 
( 
NO_DOSSIER CHAR(10) PRIMARY KEY, 
NO_CANDIDATURE FLOAT(126), 
NOM_USUEL CHAR(25), 
PRENOM CHAR(20), 
ADRESSE VARCHAR2(255), 
CODE_POSTAL CHAR(5), 
VILLE CHAR(25), 
DEPARTEMENT1 CHAR(3), 
DEPARTEMENT2 CHAR(3), 
DEPARTEMENT3 CHAR(3), 
DEPARTEMENT4 CHAR(3), 
DEPARTEMENT5 CHAR(3), 
NO_DEPARTEMENT1 CHAR(1), 
NO_DEPARTEMENT2 CHAR(1), 
NO_DEPARTEMENT3 CHAR(1), 
NO_DEPARTEMENT4 CHAR(1), 
NO_DEPARTEMENT5 CHAR(1), 
DEPARTEMENT_CHOISI CHAR(3), 
FORMATION CHAR(4), 
NOTE_BAREME FLOAT(126), 
RANG FLOAT(126) 
); 
-- Creation de la liste du centre d'Antony Val de Bievre 
CREATE TABLE system.SIG97_ADMIS_ANTONY_VdB 
( 
NO_DOSSIER CHAR(10) PRIMARY KEY, 
NO_CANDIDATURE FLOAT(126), 
NOM_USUEL CHAR(25), 
PRENOM CHAR(20), 
ADRESSE VARCHAR2(255), 
CODE_POSTAL CHAR(5), 
VILLE CHAR(25), 
DEPARTEMENT1 CHAR(3), 
DEPARTEMENT2 CHAR(3), 
DEPARTEMENT3 CHAR(3), 
DEPARTEMENT4 CHAR(3),
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
DEPARTEMENT5 CHAR(3), 
NO_DEPARTEMENT1 CHAR(1), 
NO_DEPARTEMENT2 CHAR(1), 
NO_DEPARTEMENT3 CHAR(1), 
NO_DEPARTEMENT4 CHAR(1), 
NO_DEPARTEMENT5 CHAR(1), 
DEPARTEMENT_CHOISI CHAR(3), 
FORMATION CHAR(4), 
NOTE_BAREME FLOAT(126), 
RANG FLOAT(126) 
); 
-- Creation de la liste du centre de St Germain 
CREATE TABLE system.SIG97_ADMIS_ST_GERMAIN 
( 
NO_DOSSIER CHAR(10) PRIMARY KEY, 
NO_CANDIDATURE FLOAT(126), 
NOM_USUEL CHAR(25), 
PRENOM CHAR(20), 
ADRESSE VARCHAR2(255), 
CODE_POSTAL CHAR(5), 
VILLE CHAR(25), 
DEPARTEMENT1 CHAR(3), 
DEPARTEMENT2 CHAR(3), 
DEPARTEMENT3 CHAR(3), 
DEPARTEMENT4 CHAR(3), 
DEPARTEMENT5 CHAR(3), 
NO_DEPARTEMENT1 CHAR(1), 
NO_DEPARTEMENT2 CHAR(1), 
NO_DEPARTEMENT3 CHAR(1), 
NO_DEPARTEMENT4 CHAR(1), 
NO_DEPARTEMENT5 CHAR(1), 
DEPARTEMENT_CHOISI CHAR(3), 
FORMATION CHAR(4), 
NOTE_BAREME FLOAT(126), 
RANG FLOAT(126) 
); 
-- Creation de la liste du centre de Versailles 
CREATE TABLE system.SIG97_ADMIS_VERSAILLES 
( 
NO_DOSSIER CHAR(10) PRIMARY KEY, 
NO_CANDIDATURE FLOAT(126), 
NOM_USUEL CHAR(25), 
PRENOM CHAR(20), 
ADRESSE VARCHAR2(255), 
CODE_POSTAL CHAR(5), 
VILLE CHAR(25), 
DEPARTEMENT1 CHAR(3), 
DEPARTEMENT2 CHAR(3), 
DEPARTEMENT3 CHAR(3), 
DEPARTEMENT4 CHAR(3), 
DEPARTEMENT5 CHAR(3), 
NO_DEPARTEMENT1 CHAR(1), 
NO_DEPARTEMENT2 CHAR(1), 
NO_DEPARTEMENT3 CHAR(1), 
NO_DEPARTEMENT4 CHAR(1), 
NO_DEPARTEMENT5 CHAR(1), 
DEPARTEMENT_CHOISI CHAR(3), 
Page 97 sur 99
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 98 sur 99 
FORMATION CHAR(4), 
NOTE_BAREME FLOAT(126), 
RANG FLOAT(126) 
); 
-- Creation de la liste du centre d'Etiolles 
CREATE TABLE system.SIG97_ADMIS_ETIOLLES 
( 
NO_DOSSIER CHAR(10) PRIMARY KEY, 
NO_CANDIDATURE FLOAT(126), 
NOM_USUEL CHAR(25), 
PRENOM CHAR(20), 
ADRESSE VARCHAR2(255), 
CODE_POSTAL CHAR(5), 
VILLE CHAR(25), 
DEPARTEMENT1 CHAR(3), 
DEPARTEMENT2 CHAR(3), 
DEPARTEMENT3 CHAR(3), 
DEPARTEMENT4 CHAR(3), 
DEPARTEMENT5 CHAR(3), 
NO_DEPARTEMENT1 CHAR(1), 
NO_DEPARTEMENT2 CHAR(1), 
NO_DEPARTEMENT3 CHAR(1), 
NO_DEPARTEMENT4 CHAR(1), 
NO_DEPARTEMENT5 CHAR(1), 
DEPARTEMENT_CHOISI CHAR(3), 
FORMATION CHAR(4), 
NOTE_BAREME FLOAT(126), 
RANG FLOAT(126) 
); 
-- On valide le tout 
COMMIT; 
9.3 Gestion de la mémoire (space2.sql) 
/* 
REM ------------------------------------------------------------------------- 
REM nom du script : space2.sql version : 1.0 
REM auteur : Frederic SAGEZ date : 16 / 06 / 1997 
REM description : Probleme avec les ROLLBACKS 
REM : Augmente la capacité d'allocation mémoire de la table 
REM SIG97_CANDIDAT_TRIE 
REM ------------------------------------------------------------------------- 
REM Remarque : La table SIG97_CANDIDAT_TRIE est déja créée. 
REM ------------------------------------------------------------------------- 
-- Description de la table SIG97_CANDIDAT_TRIE 
-- avec ses valeurs initiales 
CREATE TABLE system.sig97_candidat_trie 
( 
NO_DOSSIER CHAR(10) PRIMARY KEY, 
... 
RANG FLOAT(126) 
) 
PCTFREE 10 
PCTUSED 50 
TABLESPACE ROLLBACK_DATA STORAGE
Rapport de stage à l’IUFM de Versailles Frédéric Sagez 
Page 99 sur 99 
( 
initial 100k 
next 300k 
minextents 2 
maxextents 121 
pctincrease 40 
); 
*/ 
-- Demande des informations 
PROMPT Donner la valeur 'next' pour les prochains segments : 
ACCEPT le_next 
PROMPT Donner la valeur minimale 'min' des extensions de segment mémoire : 
ACCEPT le_minextent 
PROMPT Donner la valeur maximale 'max' des extensions de segment mémoire : 
ACCEPT le_maxextent 
PROMPT Donner le pourcentage 'pctincrease' des extensions de mémoires : 
ACCEPT le_pctincrease 
-- scenario 1 : Beaucoup d'activité incluant des 'INSERT', 'UPDATE', ... 
ALTER TABLE sig97_candidat_trie 
PCTFREE = 5 
PCTUSED = 60 
/* 
-- scenario 2 : pour augmenter les performances des 'UPDATE' 
ALTER TABLE sig97_candidat_trie 
PCTFREE = 20 
PCTUSED = 40 
*/ 
/* 
-- Table très large, on s'occupe principalement de l'espace mémoire 
ALTER TABLE sig97_candidat_trie 
PCTFREE = 5 
PCTUSED = 90 
*/ 
ALTER TABLE sig97_candidat_trie 
STORAGE 
( 
next &le_next 
minextents &le_minextent 
maxextents &le_maxextent 
pctincrease &le_pctincrease 
); 
-- Les changements sont validés 
COMMIT;

Contenu connexe

PDF
Rapport de stage
PDF
Rapport pfe Conceptionet Developpement d'une Application web et Mobile
PDF
Rapport Projet de fin d'etude sur le parc informatique
PDF
Medical openerp
PDF
Projet Fin D'étude Application Mobile
PDF
Rapport PFE
DOCX
Rapport pfa
DOCX
Rapport de stage exchange
Rapport de stage
Rapport pfe Conceptionet Developpement d'une Application web et Mobile
Rapport Projet de fin d'etude sur le parc informatique
Medical openerp
Projet Fin D'étude Application Mobile
Rapport PFE
Rapport pfa
Rapport de stage exchange

Tendances (20)

PDF
Soutenance de Mon PFE de Stage (DUT)
DOCX
PFE :: Application de gestion des dus d'enseignement
PDF
Rapport PFE réalisation d’un Framework Kinect
PDF
Rapport de pfe gestion de parc informatique et Helpdesk
PDF
Rapport pfe talan_2018_donia_hammami
PDF
Rapport de stage de fin d'etudes du DUT
PDF
Rapport PFE BIAT Conception et mise en place d’une plate-forme de gestion des...
PDF
Rapport interface terminal
PDF
rapport-finale-ZoubairWassim.pdf
PDF
Conception et réalisation d'une application de gestion intégrée au sein de la...
PDF
Rapport de stage
PDF
Conception et réalisation d’un Système d’information des étudiants du départe...
PDF
RAPPORT DE PROJET DE FIN D’ETUDES
PDF
Application mobile bancaire sous la plateforme Android
PDF
Pfe conception et réalisation d'une application de gestion des processus d'ac...
PDF
Contribution a la_realisation_dune_plate_forme_de_suivi_de_colis (1)
PDF
Rapport de stage - gestion commerciale @REC MEDIA
PPTX
GUIDE DE PRÉSENTATION DU STAGE D’INITIATION
PDF
rapport de projet de fin d'étude_PFE
PPTX
Presentation pfe
Soutenance de Mon PFE de Stage (DUT)
PFE :: Application de gestion des dus d'enseignement
Rapport PFE réalisation d’un Framework Kinect
Rapport de pfe gestion de parc informatique et Helpdesk
Rapport pfe talan_2018_donia_hammami
Rapport de stage de fin d'etudes du DUT
Rapport PFE BIAT Conception et mise en place d’une plate-forme de gestion des...
Rapport interface terminal
rapport-finale-ZoubairWassim.pdf
Conception et réalisation d'une application de gestion intégrée au sein de la...
Rapport de stage
Conception et réalisation d’un Système d’information des étudiants du départe...
RAPPORT DE PROJET DE FIN D’ETUDES
Application mobile bancaire sous la plateforme Android
Pfe conception et réalisation d'une application de gestion des processus d'ac...
Contribution a la_realisation_dune_plate_forme_de_suivi_de_colis (1)
Rapport de stage - gestion commerciale @REC MEDIA
GUIDE DE PRÉSENTATION DU STAGE D’INITIATION
rapport de projet de fin d'étude_PFE
Presentation pfe
Publicité

En vedette (20)

PPT
Réseau local sous windows 2003 server
PDF
Mise en place d'un serveur de mail complet linux server wiki
PDF
Services IP
DOCX
Ecole ESMA : Rapport de stage - Agence Achamiya Voyages
PDF
Virtuals LAN
PPT
Les outils de diagnostic en maintenance
PDF
JunOS - Fondamentaux
PPT
Lire les tables de routage
PPS
La Maintenance1
PDF
Network Simulation - Prague 2015
PPTX
Maintenance et dépannage d'un ordinateur
DOCX
Rapport projet
PPT
Soutenance Finale
PDF
Rapport simo issam
PDF
Les commandes CISCO (routeur)
PDF
vpn-site-a-site-avec-des-routeurs-cisco
PPTX
Prise en Main des équipements JUNIPER
PPTX
Présentation Projet de fin d'études
PPS
Bibliotheque numérique et le web 2.0
PDF
Cisco ASA
Réseau local sous windows 2003 server
Mise en place d'un serveur de mail complet linux server wiki
Services IP
Ecole ESMA : Rapport de stage - Agence Achamiya Voyages
Virtuals LAN
Les outils de diagnostic en maintenance
JunOS - Fondamentaux
Lire les tables de routage
La Maintenance1
Network Simulation - Prague 2015
Maintenance et dépannage d'un ordinateur
Rapport projet
Soutenance Finale
Rapport simo issam
Les commandes CISCO (routeur)
vpn-site-a-site-avec-des-routeurs-cisco
Prise en Main des équipements JUNIPER
Présentation Projet de fin d'études
Bibliotheque numérique et le web 2.0
Cisco ASA
Publicité

Similaire à Rapport de stage à l’IUFM de Versailles (20)

PDF
Rapport de stage PFE ( DUT) chez Synthèse Conseil - Jaiti Mohammed
PDF
Application du modèle de prévision météorologique WRF au Vietnam
PDF
Rapport de cadrage sap casp - resins4 you
PDF
vanderpypendaniel_msc
PDF
application-de-gestion-de-cong-zehouani-fatma-767_compress (1).pdf
PDF
These hec -_ecole_des_mines_sur_le_tableau_de_bord_prospectif
PDF
rapport
PDF
Rapport PFE: PIM (Product Information Management) - A graduation project repo...
PDF
POO en C++
PDF
TD1.pdf
PDF
Rapport de stage d'initiation 2015 Mahmoudi Mohamed Amine
PDF
Rapport PFE | Remitec | Automatisation d'une installation de production des e...
PDF
Conception et réalisation d'une application web pour le support et la gestion...
PDF
La VoIP, une solution d'avenir pour les entreprises... mais pas seulement !
PDF
La VoIP, une solution d'avenir pour les entreprises... mais pas seulement !
PDF
939a864fc3c5089f327861787d72b476 08-lebras (1)
PDF
Rapport de stage du fin d'étude
PDF
Rapport de Stage PFE - Développement d'un Projet ALTEN MAROC Concernant le Sy...
PDF
Conception et développement d'une application de gestion de stock SAATSA TEZO...
Rapport de stage PFE ( DUT) chez Synthèse Conseil - Jaiti Mohammed
Application du modèle de prévision météorologique WRF au Vietnam
Rapport de cadrage sap casp - resins4 you
vanderpypendaniel_msc
application-de-gestion-de-cong-zehouani-fatma-767_compress (1).pdf
These hec -_ecole_des_mines_sur_le_tableau_de_bord_prospectif
rapport
Rapport PFE: PIM (Product Information Management) - A graduation project repo...
POO en C++
TD1.pdf
Rapport de stage d'initiation 2015 Mahmoudi Mohamed Amine
Rapport PFE | Remitec | Automatisation d'une installation de production des e...
Conception et réalisation d'une application web pour le support et la gestion...
La VoIP, une solution d'avenir pour les entreprises... mais pas seulement !
La VoIP, une solution d'avenir pour les entreprises... mais pas seulement !
939a864fc3c5089f327861787d72b476 08-lebras (1)
Rapport de stage du fin d'étude
Rapport de Stage PFE - Développement d'un Projet ALTEN MAROC Concernant le Sy...
Conception et développement d'une application de gestion de stock SAATSA TEZO...

Plus de Frédéric Sagez (17)

PPTX
Threat Modelling and managed risks for medical devices
PPTX
E-SYNERGIE - Présentation des outils du nouveau Plan Qualité Projet
PPTX
Atari ST : Histoire de l'OS
PPTX
HOPEX V2R1 : Database maintenance tasks
PPTX
Atari ST - History of The OS
PPTX
AFUP - Mini conférences PHP - Les LOGs
PPTX
J&Cie - Présentation de la Task Force
PPT
J&Cie - Focus du Projet
PPTX
Présentation de l'Architecture de Développement du projet TRANS@ctions
PPTX
ASFA - Architecture cible du projet COLSA
PPT
Présentation de Planete Presse.ppt
DOCX
ASFA - Méthodologie - AGILE
DOCX
ASFA - Méthodologie - Domain Driven Design
PPTX
ASFA - Organisation et Méthodologie du projet COLSA
DOCX
Planète presse : recommandations du futur réseau
PPTX
Projet COLSA - Story-board v1
PPT
Concept de l’Intégration Continue
Threat Modelling and managed risks for medical devices
E-SYNERGIE - Présentation des outils du nouveau Plan Qualité Projet
Atari ST : Histoire de l'OS
HOPEX V2R1 : Database maintenance tasks
Atari ST - History of The OS
AFUP - Mini conférences PHP - Les LOGs
J&Cie - Présentation de la Task Force
J&Cie - Focus du Projet
Présentation de l'Architecture de Développement du projet TRANS@ctions
ASFA - Architecture cible du projet COLSA
Présentation de Planete Presse.ppt
ASFA - Méthodologie - AGILE
ASFA - Méthodologie - Domain Driven Design
ASFA - Organisation et Méthodologie du projet COLSA
Planète presse : recommandations du futur réseau
Projet COLSA - Story-board v1
Concept de l’Intégration Continue

Dernier (16)

PPTX
mon_expose_de_geophysique_disposotif_de_wener.pptx
PPTX
UMAPON Cours de traitement des minerais 2.pptx
PDF
Arouna Toure - Senior Ingénieur Logiciel Et Chef De Produit
PDF
FAQ_FORAGE_EAU_SUNRISE_ENGINEERING_GROUP_SARL2025.pdf
PPTX
Introduction aux Systèmes temps réel.pptx
PPTX
A Recurrent Neural Network (RNN)s a type of artificial neural network
PDF
TP de La Masse Volumique apparente et absolue
PPTX
Lirrigation-et-le-drainage-en-agriculture-Principes-et-Pratiques.pptx
PPTX
CH1-RMELLOULI-Données des problèmes d'ordonnancement de la production.pptx
PDF
Visite de chantier – Projet de Polyclinique à Laghouat
PDF
TP L’analyse granulométrique par tamisage
PDF
CHAPITRE 3 Typologie des réseaux [Enregistrement automatique] 4.pdf
PDF
Expansion du Réseau de Gazoducs de Gaz Naturel au Brésil _ Analyse Technique ...
PPTX
FormationFormation e pFormationour HC .pptx
PPTX
COURS DE PROSPECTION MINIERE UTMSIRI - Copie.pptx
PPTX
Logique séquentielle : les fondamentaux
mon_expose_de_geophysique_disposotif_de_wener.pptx
UMAPON Cours de traitement des minerais 2.pptx
Arouna Toure - Senior Ingénieur Logiciel Et Chef De Produit
FAQ_FORAGE_EAU_SUNRISE_ENGINEERING_GROUP_SARL2025.pdf
Introduction aux Systèmes temps réel.pptx
A Recurrent Neural Network (RNN)s a type of artificial neural network
TP de La Masse Volumique apparente et absolue
Lirrigation-et-le-drainage-en-agriculture-Principes-et-Pratiques.pptx
CH1-RMELLOULI-Données des problèmes d'ordonnancement de la production.pptx
Visite de chantier – Projet de Polyclinique à Laghouat
TP L’analyse granulométrique par tamisage
CHAPITRE 3 Typologie des réseaux [Enregistrement automatique] 4.pdf
Expansion du Réseau de Gazoducs de Gaz Naturel au Brésil _ Analyse Technique ...
FormationFormation e pFormationour HC .pptx
COURS DE PROSPECTION MINIERE UTMSIRI - Copie.pptx
Logique séquentielle : les fondamentaux

Rapport de stage à l’IUFM de Versailles

  • 1. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Frédéric Sagez D.U.T. Informatique Institut Universitaire Technologique de Vélizy Années 1995-1997 RAPPORT DE STAGE Page 1 sur 99
  • 2. Rapport de stage à l’IUFM de Versailles Frédéric Sagez J'ai effectué du 5 mai au 30 juin 1997 un stage au Service Informatique de Gestion de l'Institut Universitaire de Formation des Maîtres de l'académie de Versailles. La tâche qui m'a été confiée pendant cette période a été de faire un programme écrit en PL/SQL s ur un serveur de base de données Oracle. Ce programme consiste à effectuer les admissions des candidats qui s'inscrivent en première année pour devenir professeur d'écoles (inscription au C.A.P.E.). La première étape du stage a été de faire un cahier des charges afin de définir les besoins des différents utilisateurs. A partir de celui-ci, j'ai conçu, réalisé et testé un programme qui répond à tous les critères demandés. Mais pour comprendre à quoi va servir le programme, le chapitre I présente l'I.U.F.M. de Versailles ainsi que la structure ou j'ai effectué mon stage. Le chapitre II défini très clairement tous les objectifs qui m'ont été demandés. Les autres chapitres comme le chapitre IV est la plus grosse partie de ce rapport, il explique la méthodologie employée pour concevoir le programme en PL/SQL ainsi que toutes les données et informations supplémentaires qui m'ont été apportés. Page 2 sur 99
  • 3. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Sommaire 1 I.U.F.M. : Institut universitaire de formation des maîtres..............................................................................5 1.1 Origine des I.U.F.M. ......................................................................................................................................................................... 5 1.2 La structure des I.U.F.M. ................................................................................................................................................................ 5 1.3 Les fonctions de l'I.U.F.M. .............................................................................................................................................................. 6 1.4 Les différents services ..................................................................................................................................................................... 6 2 Les objectifs............................................................................................................................................. 10 3 Le Cahier des charges............................................................................................................................... 13 3.1 Introduction ....................................................................................................................................................................................13 3.2 Analyse de l’existant......................................................................................................................................................................13 3.2.1 Le matériel ..........................................................................................................................................................................14 3.3 Etude du système ..........................................................................................................................................................................14 3.3.1 Analyse des besoins non-fonctionnels ..........................................................................................................................14 3.3.2 Analyse des besoins fonctionnels...................................................................................................................................15 3.4 Evolution du programme..............................................................................................................................................................17 4 Le programme ......................................................................................................................................... 19 4.1 Principe de fonctionnement ........................................................................................................................................................19 4.2 Les structures..................................................................................................................................................................................20 4.2.1 La table des candidats triés .............................................................................................................................................20 4.2.2 La table des capacités des centres .................................................................................................................................20 4.2.3 La table des erreurs sur les candidats ...........................................................................................................................21 4.2.4 La table des admissions dans les centres......................................................................................................................22 4.3 Le programme principal................................................................................................................................................................23 4.4 Description de la procédure de tri des candidats ....................................................................................................................24 4.4.1 Description de la procédure Initialise_T_CANDIDAT_DESC ......................................................................................25 4.4.2 Description de la sous procédure Inscrit_Erreur .........................................................................................................27 4.4.3 Description de la procédure Tri_par_note_de_bareme ............................................................................................28 4.4.4 Description de la fonction Nombre_de_candidat_par_note_de_bareme .............................................................28 4.4.5 Description de la procédure Selectionne_Candidat_pour_table_temporaire.......................................................28 4.4.6 Description de la procédure Tri_par_note_de_prepo ................................................................................................29 4.4.7 Description de la sous procédure Tri_par_critere_de_selection .............................................................................30 4.4.8 Description de la procédure Classement_table_trie ..................................................................................................31 4.5 Description de la procédure d'attribution des centres ...........................................................................................................31 4.5.1 Description de la procédure Test_place_Centre .........................................................................................................32 4.5.2 Description de la procédure Selection_Information_Centre ....................................................................................33 4.5.3 Description de la fonction Traite_le_Centre ................................................................................................................33 4.5.4 Description de la procédure Donne_nom_du_centre................................................................................................34 4.5.5 Description de la procédure Inserer_Candidat_dans_Centre...................................................................................34 4.5.6 Description de la procédure Mise_a_jour_des_Centres ............................................................................................35 4.6 Description des procédures de mise à jour des atypiques et des dérogataires .................................................................36 4.6.1 Description de la procédure Met_le_nombre_de_derogataire ...............................................................................36 4.6.2 Description de la procédure Met_le_nombre_d_atypique.......................................................................................37 5 Fonctionnement ...................................................................................................................................... 39 6 Utilisation du programme......................................................................................................................... 45 6.1 Lancement du script ......................................................................................................................................................................45 6.2 Erreurs..............................................................................................................................................................................................46 6.3 Vérifications ....................................................................................................................................................................................46 6.4 Optimisation ...................................................................................................................................................................................48 7 Jeux de tests ............................................................................................................................................ 50 7.1 Constations et vérifications du tri des candidats .....................................................................................................................50 7.2 Constations et vérifications sur l’admission des candidats....................................................................................................52 8 Conclusion............................................................................................................................................... 56 Page 3 sur 99
  • 4. Rapport de stage à l’IUFM de Versailles Frédéric Sagez 9 Annexe.................................................................................................................................................... 57 9.1 Le programme SQL (affect97.sql) ...............................................................................................................................................57 9.2 Création des tables sous Oracle (creat1_0.sql) ........................................................................................................................93 9.3 Gestion de la mémoire (space2.sql) ...........................................................................................................................................98 Page 4 sur 99
  • 5. Rapport de stage à l’IUFM de Versailles Frédéric Sagez 1 I.U.F.M. : INSTITUT UNIVERSITAIRE DE FORMATION DES MAITRES 1.1 Origine des I.U.F.M. Les Instituts Universitaire de Formation des Maitres ont été créées par la loi d'orientation sur l'éducation n° 89- 486 du 10 Juillet 1989. Les I.U.F.M. sont des établissements d'enseignement supérieur et, à ce titre, bénéficient de l'autonomie pédagogique et administrative : ce sont des établissements publics administratifs. Les I.U.F.M. sont rattachées aux universités des différentes académies. Des conventions sont signées ent re le président de l'établissement de rattachement et le directeur de l'institut après avis des conseils d'administration des deux établissements. De part ce changement de statut des établissements de formation des enseignants, la profession a été revalorisée et le recrutement ne s'effectue plus au même niveau. Au mois de Septembre 1991, les I.U.F.M. ont ouverts leurs portes, en remplacement des Ecoles Normales qui existaient par le passé car elles étaient gérées au niveau départemental (il en existait une pour chaque département). Désormais il n'existe plus qu'un I.U.F.M. par académie, ainsi leur création a entraîné le regroupement d'entités distinctes au sein d'un même établissement. 1.2 La structure des I.U.F.M. Chaque I.U.F.M. a hérité au moment de sa création des locaux et du matériel des Ecoles Normales dont il est le successeur. Page 5 sur 99 Présentation de l'organisation d'un I.U.F.M. : Il y a un siège qui est le centre de direction et de gestion de l'ensemble de l'établissement dont le rôle est de répartir les ressources entre les différents centres éparpillés à l'intérieur de l'académie selon leurs besoins. Au siège il y a un directeur qui a la charge de l'ensemble de l'institut, il est assisté par un secrétaire général et d'un agent comptable qui ont pour mission la gestion et la répartition du budget de l'I.U.F.M. Il y a des centres de formation dont le rôle est d'assurer la préparation des étudiants au concours de l'Education Nationale, la formation des professeurs stagiaires pendant leur deuxième année. Ces centres de formation sont répartis à travers l'académie administrée par l'I.U.F.M. Chaque centre a un directeur qui est responsable avec son équipe des orientations pédagogiques suivis par l'établissement ainsi que de son administration. Dans l'académie de Versailles, il y a 6 centres de formations :  Versailles (au même endroit que le siège),  Antony Jouhaux,
  • 6. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 6 sur 99  Antony Val de Bièvre,  Cergy,  Etiolles,  Saint Germain en Laye. 1.3 Les fonctions de l'I.U.F.M. La fonction essentielle de l'I.U.F.M. est la sélection et la formation des futurs enseignants de l'éducation nationale. Cette fonction s'exerce dans les centres de formation qui ont chacun leurs spécificités :  Le centre d'Antony Jouhaux forme les futurs enseignants technologiques dans les lycées et collèges, on y prépare le Certificat d'Aptitude au Professorat Technologique (CAPET) ainsi que des enseignants pour les Lycées Professionnels (LP) en y préparant le Certificat d'Aptitude au Professorat des Lycées Professionnels.  Les centres d'Antony Val de Bièvre, Cergy et Etiolles accueillent les candidats pour la préparation du Certificat d'Aptitude au Professorat des Ecoles (CAPE ou PE), de l'Enseignement Secondaire (CAPES) ainsi que l'Education Physique et Sportive (CAPEPS).  Les centres de Saint Germain en Laye et Versailles quant à eux sont chargés de préparer les CAPE ou le CAPES. La personne désirant s'inscrire dans l'une des branches doit avoir obligatoirement une licence sauf pour les CAPE ou l'on peut s'inscrire avec un diplôme équivalent au BAC+3 comme par exemple le Diplôme National Technique Supérieur après un Diplôme Universitaire Technologique. L'étudiant fait d'abord une démarche de préinscription. Son dossier passe alors devant une commission d'admission qui sélectionne les personnes qui vont disposer d'une place à l'I.U.F.M. Après son admission, l'étudiant passe une année dans un centre de l'I.U.F.M. pour préparer le concours auquel il est candidat. A l'issue de cette première année d'enseignement pédagogique, le candidat passe son concours. S’il l'obtient, le candidat entre en deuxième année en qualité de professeur stagiaire, sinon il peut redoubler sa première année s’il a eu l'avis favorable de ses professeurs. Durant la deuxième année, le professeur stagiaire est formé sur le "terrain" dans des classes. A la fin de son année, il passe devant une commission de validation du stage qui propose sa titularisation. Si la commission de titularisation lui donne un avis favorable alors le candidat deviendra professeur titulaire avec un poste d'enseignement à vie comme fonctionnaire, sinon il peut redoubler en renouvelant son stage. Chaque année, l'académie de Versailles enregistre sur l'ensemble de ses centres, plus de 15 000 demandes de dossier de préinscription à l'I.U.F.M. Sur ces 15 000 demandes de dossier, environ 12 000 seront soumises à la commission d'étude qui est chargée de les valider. Parmi ces dossiers, moins de 4 000 candidats pourront suivre une formation de CAPE en première année pour l'année scolaire 1997-1998. 1.4 Les différents services Pour coordonner ses diverses formations et assurer le bon fonctionnement de l'I.U.F.M., il y a au siège de l'I.U.F.M. à Versailles des services administratifs. Leur principal travail est de donner aux centres de formation les moyens matériels pour former les personnes inscrites à l'I.U.F.M.
  • 7. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 7 sur 99 Ces services sont au nombre de quatre : 1. Le service comptable qui a la responsabilité du budget de l'I.U.F.M., sa mission est la gestion et la redistribution des ressources de l'établissement, 2. Le service scolarité qui gère les préinscriptions, le suivi des dossiers inscrits à l'I.U.F.M. ainsi que le versement des allocations aux étudiants de première et de deuxième année, 3. Le service du personnel et des moyens qui assure la gestion du personnel administrat if et enseignant de l'I.U.F.M., des moyens nécessaires à la pédagogie et à l'enseignement dans les centres. 4. Le service informatique de gestion qui est chargé de donner aux trois autres services les moyens informatiques (logiciels et matériels) ainsi que dans chaque centre, ses principales activités sont :  La maintenance des réseaux (il y en à trois, voir le chapitre V),  L'installation et la maintenance du matériel informatique,  L'installation et la maintenance des logiciels informatiques,  La formation du personnel des centres sur des progiciels,  Le traitement et la maintenance des bases de données,  L'achat de matériel informatique (ils ont leur propre budget). La particularité de ce service est qu'il est autonome vis-à-vis des autres services et ne dépend que de la direction générale. On peut le voir sur le schéma hiérarchique de la page suivante (numéro six).
  • 8. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Equipe de Direction Siège de Versailles Service Comptable Service du Personnel et des Moyens Service Scolarité Service Informatique Page 8 sur 99 Directeur de Centre Service administratif et Financier Administration Centre d'Antony Jouhaux V ) Les différents réseaux Pédagogie Directeur de Centre Service administratif et Financier Administration Pédagogie Directeur de Centre Service administratif et Financier Administration Pédagogie Centre d'Etiolles Directeur de Centre Service administratif et Financier Administration Pédagogie Centre de St Germain en Laye Centre d'Antony Val de Bièvre Directeur de Centre Service administratif et Financier Administration Pédagogie Centre de Versailles Directeur de Centre Service administratif et Financier Administration Pédagogie Centre de Cergy Bien sur l'équipe de direction est en relation directe avec le directeur de chaque centre ainsi que les autres services du siège qui sont en rapport avec le chef du service administratif et financier de chaque centre. Le service informatique agit surtout dans les services administratifs et pédagogiques des six centres.
  • 9. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Il existe trois réseaux pour chaque centre de l'I.U.F.M. de Versailles, les serveurs se trouvent au siège et pour chaque service se trouve un réseau spécifique :  Le service scolarité a un réseau qui s'appuie sur une base de donnée placée dans chaque centre de l'I.U.F.M. La base de donnée "Prothée" contient les étudiants actuellement inscrits dans ces centres mais aussi ceux qui ont déposés leurs dossiers d'inscription pour cette année. Le nom du serveur est "Bécassine" sous Windows NT et cette base de données est administrée sous Oracle. Le logiciel qui gère les inscriptions s'appelle lui aussi "Prothée", et c'est à partir de ce logiciel que le personnel du service informatique et administratif de chaque centre va gérer toutes les informations sur les candidats qui préparent un certificat dans un centre I.U.F.M.  Le service du personnel et des moyens est équipé d'un réseau pour l'administration de son personnel administratif et enseignant. Ce réseau fonctionne sous une application nommée "G2i" et ne peut être utilisé que sur des ordinateurs de type Macintosh. Malheureusement ce réseau va être abandonné car il y a eu trop de maintenance à faire.  Le service comptable s'est vu imposé une comptabilité centralisée depuis l'intervention du ministère de l'éducation nationale en 1994. Elle a donc son propre réseau de type client/serveur dont le serveur se trouve au siège. L'application "Gérico" utilise le système de base de données relationnel Oracle sous Unix. La particularité de ce réseau est que les ordinateurs clients fonctionnent en émulation de terminal VT220. Chaque opérateur dans les centres saisisse leurs dépenses sur leurs postes et la comptabilité générale du siège de l'I.U.F.M. engage le paiement des factures. Page 9 sur 99
  • 10. Rapport de stage à l’IUFM de Versailles Frédéric Sagez 2 LES OBJECTIFS Avant d’expliquer comment j’ai procédé à l’élaboration du cahier des charges, je vais expliquer où j’interviens dans le cycle des préinscriptions au C.A.P.E. des candidats. Depuis que les I.U.F.M. existent, les inscriptions se font par dossier ou par concours. Comme l’I.U.F.M. de Versailles doit gérer les candidats de l’académie de Versailles, il y a beaucoup de demandes. Depuis l’ année dernière, les préinscriptions se font par « Minitel ». Chaque candidat s’inscrit en donnant des informations diverses comme par exemple les diplômes qu’il a obtenus, et à partir de ces informations, le centre de Cergy va générer un fichier et l’envoyer au siège à Versailles. Le service informatique va transformer ce fichier et l’importer dans la base de données « Prothée » en pratiquant quelques routines de vérification (dé doublonnage, saisie de dossier non valide, ...). A partir des données recueillies, le service scolarité prépare un dossier pour le candidat et l’envoie par la poste en fixant un rendez -vous dans un centre pour valider le dossier dûment rempli. Le jour ou le candidat se présente à un centre d’I.U.F.M., une personne du service scolarité va saisir les informations sur le dossier que le candidat a rapporté ainsi qu’un justificatif des pièces demandées (diplôme certifié, une fiche de salaire indiquant que le candidat à travailler, etc. ...). Pendant la saisie du dossier, le candidat peut voir les informations qui sont mises par le biais d’un moniteur, un autre étant à la disposition de la personne qui inscrit le candidat sur un logiciel nommé « Prothée » qui a été conçus pour la saisie des préinscriptions. La saisie étant finie, ses données sont directement validées dans la base de données. Lorsque la date d’inscription est dépassée et que chaque centre à valider tous les candidats, le service informatique va trier tous ces candidats selon des critères de « barémage ». Une fois les candidats triés, le service va gérer les admissions dans les centres d’après un quota de place pour chacun d’entre eux, puis des listes de chaque centre vont être imprimées ainsi que des statistiques pour la direction du siège. Tous les candidats admissibles seron t traités par une commission de validation et recevront une lettre indiquant que leur candidature a été acceptée ou refusée. L'objectif du stage à l'I.U.F.M. de Versailles dans le service informatique est de reprendre le programme du tri et des admissions des candidats inscrits pour la préparation au C.A.P.E. de l'année 1996 en vue de l'améliorer. Le programme "voeu.sql" dont le script se trouve au chapitre III (les scripts) ne convenait plus pour cette année car le barémage et les voeux ont changé ainsi que les critères de sélection des différents candidats. Donc à la demande de Monsieur Vieux-Combe, un cahier des charges 'Affect97' a été établi pour spécifier les demandes, d'une part pour l'utilisateur du service informatique et d'autre part pour celui du service scolarité. Le nouveau programme demandé sera écrit en PL/SQL pour être lancé sur l'outil SQL*PLUS d'Oracle. L'un des directeurs assistants du centre de Versailles, Madame Quittet, a proposé un tri de chaque candidat très poussé pour éviter les égalités entre eux, de plus un rang académique leur sera affecté pour les classer hiérarchiquement. Le principe du tri des candidats ne concerne que les inscrits qui ont une note de barème supérieur ou égale à trente et vérifie bien si les candidats atypiques sont inclus et qu'ils ont bien obtenu une note d'entretien différent de zéro. Page 10 sur 99
  • 11. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Les candidats "dérogataires" quant à eux sont gérés directement par une procédure qui les affectent dans les centres demandés, car ils sont bien entendus prioritaire sur les autres candidats. La première étape du stage à été de faire un planning des différentes étapes de conception du programme :  Le cahier des charges pour spécifier les besoins des utilisateurs,  La conception du programme en faisant des algorithmes,  La réalisation du programme et les divers tests de vérification,  Et la validation du programme : mise en place du programme sur le serveur NT ainsi que son Mai Juin mercredi 7 au jeudi 22 au jeudi 29 au mardi 17 au mercredi 21 mercredi 28 lundi 16 jeudi 19 PLANNIFICATION du projet 'Affect97'. Cahier des charges (spécifications et besoins) (algorithmes) Réalisation et Tests (codage du programme) (utilisation) TOTAL en jour * : 29 9 5 13 2 Page 11 sur 99 exécution. Voici la première version du diagramme de GANT du projet : Conception Validation Mais suite à des modifications de critères pendant le projet et suite aux enjeux des jalons finaux, voici la dernière version :
  • 12. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Pour mieux distinguer les différentes étapes de conception, voici le cycle de vie : Du 12/05 au 21/05 Du 17/06 au 19/06 Du 22/05 au 16/06 Page 12 sur 99 Spécification - Etudes des besoins Cahier des charges Validation Mise en place du Programme Conception Algorithmes Tests Jeux de tests Réalisation Codage en PL/SQL
  • 13. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 13 sur 99 3 LE CAHIER DES CHARGES 3.1 Introduction L’Institut Universitaire de Formation des Maîtres de l’Académie de Versailles est le centre de direction et de gestion des différentes formations des futurs enseignants. Le siège de l’I.U.F.M. de Versailles gère six centres de formation : Cergy, Versailles, Antony Val de Bièvre, Etiolles, Saint Germain en Laye et Antony Jouhaux qui préparent la formation au Certificat d’Aptitude de Professorat d’Enseignement Secondaire. Leur rôle est d’assurer la préparation des étudiants au concours de l’Educa tion National des professeurs d’écoles. Des candidats s’inscrivent sur le Minitel pour préparer leur propre formation de professeur avant la fin du mois de Mai. Les informations recueillies seront retranscrites dans une base de données appelée « Prothée ». Le service scolarité du siège de Versailles qui gère les admissions demande au service informatique d’écrire un programme concernant les candidats de première année pour les postes de professeurs d’écoles. Le programme devra trier par ordre décroissant chaque candidat suivant une note de barème (un étudiant est « barèmé » suivant les diplômes obtenus et les différents stages qu’il a effectués). Des critères de sélection supplémentaires sont ajoutés pour traiter les égalités entre les différentes personnes, dans un premier temps on comparera les notes obtenues à la préprofessionnalisation (un second tri sera effectué par ordre de grandeur : de la note la plus forte à la plus faible), si on n'arrive toujours pas à les départager dans un deuxième temps on se basera sur les critères suivants dans cet ordre : si le candidat a fait au moins six mois de service d'enseignement ou de surveillance ou périscolaire dans un établissement scolaire ou d'activité périscolaire; si il a eu une activité péri - éducative ou périscolaire dans le cadre d'une institution (établissement scolaire, municipalité ou association) avec au moins deux expériences distinctes pendant une durée de six semaines cumulées ou de soixante heures de soutien scolaire; si il a eu une activité salariée de six mois à temps plein autre que l'enseignement; et dans l'ordre si il a obtenu le Brevet d'Aptitude à la Formation de Directeur de centre ou le Brevet d'Aptitude à la Formation d'Animateur de centre, ou le Brevet d'Education Sportive ou le Brevet National de Secourisme. Si on n'arrive toujours pas à les départager, le dernier critère sera l’âge du candidat tout en favorisant les plus jeunes (un troisième tri sera effectué toujours par ordre de grandeur : du plus jeune au plus vieux), puis on attribuera un rang pour chaque candidat. Une fois le tri fini, il ne reste plus qu’à affecter un centre pour chaque candidat suivant le nom de département sélectionné (le candidat avait choisi les cinq départements par ordre de préférence), ensuite le programme décrémentera le nombre d’inscription possible du centre où il est inscrit provisoirement. A la fin du programme, les meilleurs élèves retenues dans les cinq départements seront mis dans une liste à la disposition du service scolarité. 3.2 Analyse de l’existant
  • 14. Rapport de stage à l’IUFM de Versailles Frédéric Sagez 3.2.1 Le matériel L’utilisation du programme se fera sur le serveur Windows NT appelé « Bécassine » qui a un accès direct sur la base de données. Voici sa configuration actuelle :  C'est un ordinateur de type P.C. équipé de 2 processeurs Pentium 100 et qui est muni Page 14 sur 99 d’un moniteur,  Une mémoire vive (RAM) de 64 Méga Octets,  Un disque dur d’une capacité de 2,1 Giga Octets pour disposer des différents logiciels,  Une carte réseau Ethernet (LAN) de type 3COM. 3.2.1.1 Les logiciels L’ordinateur P.C. est muni du système d’exploitation DOS version 6.22 avec Windows NT version 3.5.1. L’application PL/SQL sur la base de données fonctionnera sous ORACLE version 7 avec ses outils de développements pour Windows (on aura surtout besoin du logiciel SQL*PLUS). 3.3 Etude du système 3.3.1 Analyse des besoins non-fonctionnels 3.3.1.1 Le développement Le développement du logiciel s’effectuera sur un ordinateur P.C. de type Pentium 200 avec 32 Méga Octets de mémoire vive connecté qui est au réseau sur la base de données, un disque dur de 2,1 Giga Octets servira de support permettant ainsi d’effectuer des tests sur des bases fictives afin de déboguer le programme avant son utilisation finale. Cela permettra aussi au développeur de mesurer la place mémoire requise pour les données stockées ainsi que la place disponible pour le support de fichier. Cette évaluation servira entre autres à l’examen des capacités d’adaptation du logiciel (par exemple la création de tables temporaires). 3.3.1.2 L’utilisateur Il doit se trouver sous Oracle dans la base de données « Prothée » pour lancer le programme écrit en PL/SQL qui portera le nom de « affect97.sql ». Le programme demandera des informations à l’utilisateur afin d’optimiser le tri des candidats, selon des critères de choix sur les différentes formations à traiter. Des messages indiquant des erreurs à la fin du tri ou exceptionnellement pendant celui-ci seront répertoriés dans une table. Il se terminera par l’affichage d’informations indiquant à l’utilisateur que le tri est fini, ensuite il pourra visualiser le résultat final.
  • 15. Rapport de stage à l’IUFM de Versailles Frédéric Sagez 3.3.2 Analyse des besoins fonctionnels 3.3.2.1 Services offerts à l’utilisateur du service informatique La première étape du programme lors de son exécution sera de sélectionner les candidats dont le numéro de dossier commencera par l’année en cours (exemple ‘97’) ainsi que le nom de la formation (par exemple on peut demander la première lettre : ‘E’ pour PE, signifiant Professeur d’Ecole) ce qui permettra à l’utilisateur de traiter les différents types de formation. Le programme n’est plus interrompu lorsqu'il est lancé sauf erreur grave, par exemple aucun moyen d’accès à une table. Pour chaque candidat un rang lui sera attribué, donc les affectations se feront par ordre décroissant des notes de barème obtenues par celui-ci. Pour chaque note de barème (inclus entre 30 et 69), on va traiter les égalités entre les candidats par des critères de sélections (le tri se fait séquentiellement) :  1er critère : on repartit chaque candidat par note de préprofessionnalisation (il y en a six Page 15 sur 99 : 0, 3, 5, 6, 8, 10),  2ème critère : pour chaque note de préprofessionnalisation on répartira les candidats en deux blocs : ceux qui ont fait six mois d'enseignement ou non,  3ème critère : puis de ces deux blocs on repartitionnera ceux qui ont eu une expérience péri-éducative (ou périscolaire) ou pas,  4ème critère : puis de ces deux blocs on repartitionnera ceux qui ont eu une expérience de salariée ou non,  5ème critère : pour départager définitivement les candidats, on regarde si ils ont obtenu un ou plusieurs brevets (valeur possible : 1, 2, 3) et on les départage dans quatre blocs différents (0 : pas de brevet, 1 : B.A.F.D. 2 : B.A.F.A. ou B.E.S. 3 : B.N.S.)  Le dernier critère triera les candidats suivant leur âge tout en favorisant les plus jeunes dans chaque bloc. Puis on ajoutera tous ces derniers blocs triés dans la table des candidats admissibles.
  • 16. Rapport de stage à l’IUFM de Versailles Frédéric Sagez 8 10 0 Note préprofessionalisation candidat déjà trié : note de barème compris entre 47 et 69. Tous les candidats triés : note de barème égale à 46. Voici un exemple de répartition du tri séquentiel par critère de sélection Page 16 sur 99 30 31 ... 46 ... 69 70 3 5 6 0 8 0 5 0 5 Table C A NDIDATURE Note d'enseignement A ctiv ité péri-éducativ e 0 5 0 5 0 5 0 5 activ ité de salariée 0 1 2 3 0 1 2 3 note des brev ets tri de chaque bloc par ordre croissant de l'âge des candidats. on rajoute tous les bloques à la table des candidats triés.
  • 17. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 17 sur 99 D'autres conditions ont été rajoutées :  Les candidats atypiques (personne qui a un diplôme de plus de cinq ans et qui veut préparer le concours de professeur des écoles) sont inclus dans le tri, il suffira tout simplement de vérifier un champ d'une table pour savoir s’il a passé un entretien. Bien entendu il faudra qu'il ait une note de barème supérieur ou égale à trente.  Les candidats dérogataires (mère de trois enfants et plus ou sportif de haut niveau) vont directement être admis dans les centres qu'ils ont souhaités à la condition d'avoir obtenu une note d'entretien égale à soixante dix. Si des erreurs sont constatées pendant le tri alors elles seront rapportées dans une table qui sera créée à cet effet. L’utilisateur pourra donc les regarder pendant le programme sans perturbation du tri. Un scénario sera remis à la disposition de l’utilisateur afin de le guider dans les différentes étapes possibles du programme. 3.3.2.2 Services offerts à l’utilisateur du service scolarité Une liste finalisée sera mise à la disposition pour le service scolarité, elle comportera les informations du candidat admissible de la façon suivante :  Le numéro de dossier,  Le numéro de candidature,  Le nom du candidat,  Le prénom du candidat,  L’adresse du candidat,  Les 5 départements qu’il a sélectionnés par ordre de préférence,  Le nom du département où il a été admis,  La formation souhaitée,  La note de barème,  Le rang définitif du candidat. A la visualisation, l’utilisateur pourra remarquer que le nom du département qui a été attribué au candidat est suivis d’une étoile, on pourra ainsi connaître lequel de ses voeux a été sélectionné. 3.4 Evolution du programme Le programme sera modulaire, ainsi l’utilisateur pourra le modifier sans gêner le coeur du programme principal car le PL/SQL est un langage procédure, on peut ainsi ajouter des fonctions ou des procédures.
  • 18. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Des commentaires seront implantés dans le programme pour aider l’utilisateur à changer la configuration du programme, ainsi des petits modules d’exemples seront rajoutés afin de faciliter la compréhension. Certaines erreurs seront gérées par des exceptions, ceci permettra de les répertorier dans une table en donnant la solution. On peut demander d'autre renseignement lors du lancement du programme. Page 18 sur 99
  • 19. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 19 sur 99 4 LE PROGRAMME 4.1 Principe de fonctionnement Nous travaillons sur une base de données avec des tables. Comme le programme est écrit en PL/SQL et que c'est un langage procédural nous pouvons modulariser celui-ci avec des procédures ou des fonctions. Afin de faciliter la compréhension des algorithmes, chaque table sera représentée par un tableau contenant une structure du type de la table employé à chaque case. Pour aller dans les cases et récupérer les informations il suffira d'un indice alors qu'avec le langage SQL il faut tout simplement faire un 'SELECT'. Le programme va trier les candidats par critère, dans la base on a besoin des tables qui détiennent les informations dont on a besoin :  La table CANDIDATURE contient le numéro de dossier et de candidature, la formation souhaitée, les cinq départements rangés par ordre de préférence ou souhaite étudier le candidat (les voeux) ainsi que la note de barème,  La table ETUDIANT contient le nom usuel, le prénom, la date de naissance et l'adresse complète du candidat,  La table BAREME_INDIVIDUEL contient la note de préprofessionnalisation, sensibilisation ainsi que la note du brevet obtenu ou encore la note d'entretien pour les dérogataires. On peut savoir si des "items" ont été cochés : si le candidat à six mois d'enseignement, une activité péri -éducative ou périscolaire, une activité salariée de plus de six mois. A partir de ces tables, le programme va en créer d'autres :  La table CANDIDAT_TRIE : tous les candidats validés seront triés par ordre croissant du rang avec une note de barème compris entre 30 et 69,  La table ERREUR_CANDIDAT : elle reportera les erreurs rencontrées sur des candidats comme par exemple l'oublie de mettre un cinquième département dans les voeux (on ne sait jamais),  Les tables ADMIS_ANTONY_VdB, ADMIS_CERGY, ADMIS_ETIOLLES, ADMIS_ST-GERMAIN et ADMIS_VERSAILLES contiendront les informations relatives aux candidats qui sont admissibles dans ces centres, elles formeront chacune une liste qui sera traitée par une autre personne du service informatique, Remarque : la table CAPACITE_CENTRE sera créée avant le programme. Elle renfermera toutes les informations concernant les cinq centres où seront admis les candidats. Le programme aura surtout besoin du quota de chaque centre pour y placer chaque candidat. A la fin du programme, une mise à jour sera effectuée dans la table CANDIDATURE pour y valider le champ 'formation' qui contiendra le nom de la formation que le candidat a souhaité, 'dossier_recevable' et 'admission' s'il a bien été admis dans un centre (O pour oui et N pour Non). La table CAPACITE_CENTRE a un champ 'quota_centre_restant' dont la valeur finale sera attribuée par le programme.
  • 20. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 20 sur 99 4.2 Les structures 4.2.1 La table des candidats triés // STRUCTURE Type CANDIDAT_TRIE : Article {renseignement relatif au candidat} no_dossier : chaîne de caractère, no_candidature : réel, formation : caractère, {les cinq départements choisis par le candidat} departement1 : chaîne de caractère, departement2 : chaîne de caractère, departement3 : chaîne de caractère, departement4 : chaîne de caractère, departement5 : chaîne de caractère, {les critères de sélection} note_bareme : réel, { note de barème  [30..69] } preprofessionnalisation : caractère, { la note de prepro.  {0,3,5,6,8,10} } date_naissance : date, { sous la forme DD-MM-YY } date_retour_dossier : date, {le candidat est valide si la date > 01-01-1900} { renseignement complémentaire sur ses autres notes obtenu par le candidat} enseignement : caractére { 'O' pour oui ou 'N' pour non } peri_educ_scol : caractére { 'O' pour oui ou 'N' pour non } activite_salarie : caractére { 'O' pour oui ou 'N' pour non } note_brevet : réel { note compris entre 0,1,2,3 } {chaque candidat sera classé par la note de barème la plus forte à la plus faible} rang : entier; // TABLEAU Type T_CANDIDAT_TRIE : tableau[1..nb_candidat] de CANDIDAT_TRIE Chaque case du tableau T_CANDIDAT_TRIE contient la structure CANDIDAT_TRIE concernant un candidat. Pour aller d'un candidat à un autre, il suffit de prendre un indice inclus entre un et le nombre total de candidats inscrits dans la table. 4.2.2 La table des capacités des centres // STRUCTURE Type CAPACITE_CENTRE : Article
  • 21. Rapport de stage à l’IUFM de Versailles Frédéric Sagez { le code du centre est égal au nom du département pour faciliter la recherche } code_centre : chaîne de caractère, { place totale dans un centre } quota_centre_initial : réel, { place restante dans un centre } quota_centre_restant : réel, { nombre total de candidat atypique dans chaque centre } nbre_atypique : réel, { nombre total de candidat derogataire dans chaque centre } nbre_derogataire : réel, { nom du centre en entier } nom_du_centre : chaîne de caractère; // TABLEAU { type énumération } T_indice_centre = ( ANTONY_VdB, CERGY, ETIOLLES, ST-GERMAIN, VERSAILLES ) Type T_ CAPACITE_CENTRE : tableau[T_indice_centre] de CAPACITE_CENTRE Chaque centre a son propre quota de place de candidat admissible. Le quota restant du centre sera mis à jour lorsque tous les candidats auront été admis, donc à la fin des attributions le résultat devra être égal à zéro. Le code pour chaque centre est :  ANTONY_VdB : "92V" (Antony Val de Bièvres)  CERGY : "95"  ETIOLLES : "91"  ST-GERMAIN : "78S" (Saint Germain en Laye)  VERSAILLES : "78V" Page 21 sur 99 4.2.3 La table des erreurs sur les candidats // STRUCTURE Type ERREUR_CANDIDAT : Article message : chaîne de caractère; // TABLEAU Type T_ ERREUR_CANDIDAT : tableau[1..nb_erreur] de ERREUR_CANDIDAT Le tableau contiendra toutes les erreurs rencontrées lors du tri des candidats. Par exemple un candidat a oublié de mettre un cinquième département, le message d'erreur indiquera la position du candidat dans la table CANDIDATURE est le type d'erreur lui concernant : département numéro cinq manquant.
  • 22. Rapport de stage à l’IUFM de Versailles Frédéric Sagez 4.2.4 La table des admissions dans les centres Page 22 sur 99 // STRUCTURE Type ADMIS_nom du centre : Article {renseignement relatif au candidat} no_dossier : chaîne de caractère, no_candidature : réel, nom_usuel : chaîne de caractère, prénom : chaîne de caractère, adresse : chaîne de caractère, code_postal : chaîne de caractère, ville : chaîne de caractère, {les cinq départements choisis par le candidat} departement1 : chaîne de caractère, departement2 : chaîne de caractère, departement3 : chaîne de caractère, departement4 : chaîne de caractère, departement5 : chaîne de caractère, {détermine quel numéro de département où le candidat est affecté par une étoile} no_departement1 : caractère, no_departement2 : caractère, no_departement3 : caractère, no_departement4 : caractère, no_departement5 : caractère, {indique le nom du département où le candidat est admis} departement_choisis : chaîne de caractère, { le nom de la formation souhaitée par le candidat } formation : caractère, { on inclus les dérogataires qui ont une note de bareme > 69 } note_bareme : réel, { note de barème  [30..90] } {chaque candidat sera classé par ordre croissant du rang} rang : entier; // TABLEAU Type T_ ADMIS_nom du centre : tableau[1..nb_candidat_par_centre] de ADMIS_nom du centre  Il y aura cinq tableaux correspondant aux centres d'ANTONY Val de Bièvre, CERGY, ETIOLLES,
  • 23. Rapport de stage à l’IUFM de Versailles Frédéric Sagez ST-GERMAIN et VERSAILLES (nom du centre). Chaque centre a un nombre maximum de candidat (représenté par 'nb_candidat_par_centre'), par exemple le centre de Cergy avait une capacité de 800 places l'année dernière. La structure donne plus de renseignements sur le candidat admissible, cela facilitera le travail de la personne qui gérera les admissions pour chaque centre. Le programme SQL pour créer les tables se trouve en annexe. Affichage d'un message d'invite avec demande d'information Saisis des valeurs demandées à l'affichage {On va se servir des tables CANDIDATURE, ETUDIANT et BAREME_INDIVIDUEL pour prendre les informations de chaque candidat} Appel de la procédure de tri des candidats {la table CANDIDAT_TRIE est créée contenant les candidats valides à l'admission} {une table ERREUR_CANDIDAT sera créée s'il y a eu une ou des erreurs sur les candidats inscrits} {on ajoute les dérogataires dans les centres en leur mettant un rang égal à zéro} Appel de la procédure d'ajout des dérogataires {les cinq tables pour les centres seront créées} Appel de la procédure d'attribution des centres {les cinq tables pour les centres sont remplies} {les champs 'formation', 'dossier_recevable' et 'admission' de la table CANDIDATURE seront modifiés par l'utilisateur du service informatique} Mise à jour des candidats admissibles {met à jour le nombre total de dérogatiare et d'atypique dans chaque centre} Appel de la procédure Met_le_nombre_de_derogataire Appel de la procédure Met_le_nombre_d_atypique Page 23 sur 99 4.3 Le programme principal Le programme principal fonctionnera de la façon suivante : DECLARATION des variables globales. DEBUT FIN Comme on peut le constater, le programme suit des étapes. Les principales sont le tri des candidats et l'attribution de candidats dans chaque centre. L'utilisateur peut ainsi en ajouter d'autres comme par exemple l'affichage de table entre les diverses procédures pour vérifier que tous c’est bien déroulé. Ou sinon, il peut effectuer un tri dans un premier temps et plus tard, relancer le programme en ne faisant que les admissions. Le programme SQL du programme principal se trouve en annexe.
  • 24. Rapport de stage à l’IUFM de Versailles Frédéric Sagez 4.4 Description de la procédure de tri des candidats Cette procédure va trier tous les candidats inscrits qui se trouvent dans la table CANDIDATURE par ordre décroissant des notes de barème selon les critères suivant :  La note de barème compris entre 30 et 69,  La date de retour de dossier supérieur au 01-01-1900,  Tous les renseignements que le programme a besoin sur le candidat sont biens mis,  On traite les égalités entre chaque candidat par la note de préprofessionnalisation, les critères de sélection ainsi que de l'âge en cas d'égalité persistante. Page 24 sur 99 Procédure TRI_CANDIDAT( affiche_erreur : booléen ) Précondition : le tableau T_CANDIDATURE existe et remplit avec au moins un candidat la saisie du numéro de dossier ainsi que de la formation doit être validé Effet : le tableau T_CANDIDAT_TRIE est créée et remplit selon des critères de sélection si des erreurs sont rencontrées alors affiche_erreur prendra la valeur VRAI pour indiquer qu'il y a eu des erreurs sur certain candidat Variables auxiliaires : indice : 1..nb_candidat {nombre total de candidat inscrit} indice_note_bareme : 30..69 {la note de barème doit être >= 30} test_erreur : booléen {indique que des erreurs existent} {variable indiquant le nombre total de candidat valide pour l'admission} nb_candidat_total : nb_candidat - nb_candidat_non_valide {variable indiquant le nombre total de candidat qui ont la même note de barème} nb_candidat_par_note_de_bareme : entier indice_DESC : 1..nb_candidat_total {nombre total de candidat inscrit} {Le tableau contient tous les candidats valident pour l'admission} Type T_CANDIDAT_DESC : tableau[1..nb_candidat_total] de CANDIDAT_TRIE {Le tableau contient tous les candidats qui ont la même note de barème pour effectuer des opérations de tri sur les égalités} Type T_CANDIDAT_TEMP : tableau[1..nb_candidat_par_note_de_bareme] de CANDIDAT_TRIE Début // Ici création de la table temporaire CANDIDAT_DESC test_erreur := FAUX {aucune erreur avant de commencer le traitement} indice_DESC := 0 {initialise l'indice du tableau destination} Pour indice de 1 à nb_candidat Faire {on traite tous les candidats et test si il n'y a pas d'erreur} Initialise_T_CANDIDAT_DESC(indice, saisie_numero_dossier, saisie_formation,test_erreur, indice_DESC) Fin Pour {on tri chaque candidat par sa note de barème par ordre décroissant dans le tableau T_CANDIDAT_DESC } Tri_par_note_de_bareme(saisie_numero_dossier, saisie_formation) {on commence le tri par la note de barème la plus grande du tableau T_CANDIDAT_DESC jusqu'à la plus petite} Pour indice_note_bareme de 69 à 30 Faire {il faut au moins un candidat sinon on ne traite pas} Si ( Nombre_de_candidat_par_note_de_bareme(indice_note_bareme) ) Alors // Ici création de la table temporaire CANDIDAT_TEMP {on sélectionne tous les candidats qui ont la même note de barème et on les range dans le tableau T_CANDIDAT_TEMP} Selectionne_Candidat_pour_table_temporaire(indice_note_bareme, saisie_numero_dossier, saisie_formation)
  • 25. Rapport de stage à l’IUFM de Versailles Frédéric Sagez {tri les candidats dans le tableau T_CANDIDAT_TEMP par la note de Page 25 sur 99 preprofessionnalisation} Tri_par_note_de_prepo(saisie_numero_dossier, saisie_formation) // on supprime ici la table temporaire CANDIDAT_TEMP Fin Si Fin Pour {affecte un rang pour chaque candidat} Classement_table_trie(saisie_numero_dossier, saisie_formation) {si il s'est produit une erreur lors de l'appel de la procédure Initialise_T_CANDIDAT_DESC, 'affiche_erreur' aura la valeur 'VRAI' } affiche_erreur := test_erreur // On supprime ici la table temporaire CANDIDAT_DESC Fin TRI_CANDIDAT; L'objectif de cette procédure et d'épurer tous les candidats non valident et de les rangés par ordre de classement. Comme le nombre de candidat est grand (plus de 9000), l'algorithme est optimisé pour ne pas perdre de temps, par exemple il ne traite que les candidats qui ont une note de barème supérieur ou égale à trente (c’est le minimum pour s'inscrire en 1ère année de P.E. car trente points équivaut à une licence). Remarque: les variables 'saisie_numero_dossier' et 'saisie_formation' sont des variables globales du programme principal, on les appels dans la procédure TRI_CANDIDAT afin d'optimiser la recherche des candidats. 4.4.1 Description de la procédure Initialise_T_CANDIDAT_DESC Elle va trier chaque candidat de la table CANDIDATURE et les mettre dans la table CANDIDAT_TRIE : on effectue un premier tri des candidats admissibles. S'il y a des erreurs sur un candidat alors on indiquera sa position exacte dans la table CANDIDATURE et les types d'erreurs rencontrées. Procédure Initialise_T_CANDIDAT_DESC(Entrée : l_indice : 1..nb_candidat, le_numero_dossier : réel, la_formation : chaîne de caractère, Sortie : test_l_erreur : booléen, Entrée/Sortie : mon_indice : 1..nb_candidat_total) Précondition : le début du numéro de dossier <> 0,0 le début du nom de la formation <> d'une chaîne vide mon_indice > 0 Effet : le candidat valide se trouve dans le tableau T_CANDIDAT_DESC si une erreur existe alors la procédure renvoie 'VRAI' pour indiquer au programme principal qu'il devra afficher le contenu du tableau T_ERREUR_CANDIDAT lorsque le programme est fini. Variables auxiliaires : verifie : booléen {test si il y a eu une erreur pour ne pas incrementer le compteur 'mon_indice' du tableau T_CANDIDAT_DESC qui reçoit les valeurs} {il faut initialiser les variables avant de les affecter pour déterminer une erreur} Constante carac_no_dossier : chaîne de caractère := "##########" carac_no_candidature : réel := 0.0 carac_formation : chaîne de caractère := "####" carac_departement : chaîne de caractère := "###" carac_note_bareme : réel := 0.0 carac_note_prepo : caractère := '#' carac_date_naissance : chaîne de caractère := "##-##-##" carac_date_retour_dossier : chaîne de caractère := "##-##-##"
  • 26. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 26 sur 99 Début verifie := FAUX {aucune erreur avant de commencer le traitement} {initialise mes variables qui vont recevoir les données} T_CANDIDAT_DESC[mon_indice].no_dossier := carac_no_dossier T_CANDIDAT_DESC[mon_indice].no_candidature := carac_no_candidature T_CANDIDAT_DESC[mon_indice].formation := carac_formation T_CANDIDAT_DESC[mon_indice].departement1 := carac_departement T_CANDIDAT_DESC[mon_indice].departement2 := carac_departement T_CANDIDAT_DESC[mon_indice].departement3 := carac_departement T_CANDIDAT_DESC[mon_indice].departement4 := carac_departement T_CANDIDAT_DESC[mon_indice].departement5 := carac_departement T_CANDIDAT_DESC[mon_indice].note_bareme := carac_note_bareme T_CANDIDAT_DESC[mon_indice].note_prepo := carac_note_prepo T_CANDIDAT_DESC[mon_indice].date_naissance := carac_date_naissance T_CANDIDAT_DESC[mon_indice].date_retour_dossier := carac_date_retour_dossier {traite le bon candidat et vérifie si il a bien retourné son dossier rempli} Si ( T_CANDIDATURE [l_indice].no_dossier = le_numero_dossier ET T_CANDIDATURE [l_indice].formation = la_formation ET T_CANDIDATURE[l_indice].date_retour_dossier > '01-01-1900' ) Alors T_CANDIDAT_DESC[mon_indice].no_dossier := T_CANDIDATURE [l_indice].no_dossier T_CANDIDAT_DESC[mon_indice].no_candidature := T_CANDIDATURE [l_indice].no_candidature T_CANDIDAT_DESC[mon_indice].formation := T_CANDIDATURE [l_indice].formation T_CANDIDAT_DESC[mon_indice].departement1 := T_CANDIDATURE [l_indice].departement1 T_CANDIDAT_DESC[mon_indice].departement2 := T_CANDIDATURE [l_indice].departement2 T_CANDIDAT_DESC[mon_indice].departement3 := T_CANDIDATURE [l_indice].departement3 T_CANDIDAT_DESC[mon_indice].departement4 := T_CANDIDATURE [l_indice].departement4 T_CANDIDAT_DESC[mon_indice].departement5 := T_CANDIDATURE [l_indice].departement5 T_CANDIDAT_DESC[mon_indice].note_bareme := T_CANDIDATURE [l_indice].note_bareme T_CANDIDAT_DESC[mon_indice].note_prepo := T_CANDIDATURE [l_indice].note_prepo T_CANDIDAT_DESC[mon_indice].date_naissance := T_CANDIDATURE [l_indice].date_naissance T_CANDIDAT_DESC[mon_indice].date_retour_dossier := T_CANDIDATURE [l_indice].date_retour_dossier // On test les erreurs une par une d'un candidat si il y en a {indique une erreur sur le numéro de dossier d'un candidat} Si (T_CANDIDAT_DESC[mon_indice].no_dossier = carac_ no_dossier ) Alors {indique le n ième candidat de la table pour verifier ses données} Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de numéro de dossier"); verifie := VRAI Fin Si {indique une erreur sur le numéro de candidature d'un candidat} Si (T_CANDIDAT_DESC[mon_indice].no_candidature = carac_ no_candidature ) Alors Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de numéro de candidature"); verifie := VRAI Fin Si {indique une erreur sur la formation d'un candidat} Si (T_CANDIDAT_DESC[mon_indice].formation = carac_ formation ) Alors Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de formation ") verifie := VRAI Fin Si {indique une erreur sur le 1er departement d'un candidat} Si (T_CANDIDAT_DESC[mon_indice]. departement1 = carac_ departement ) Alors Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de 1er voeu") verifie := VRAI Fin Si {indique une erreur sur le 2ème departement d'un candidat} Si (T_CANDIDAT_DESC[mon_indice]. departement2 = carac_ departement ) Alors Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de 2eme voeu") verifie := VRAI Fin Si {indique une erreur sur le 3ème departement d'un candidat} Si (T_CANDIDAT_DESC[mon_indice]. departement3 = carac_ departement ) Alors Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de 3eme voeu")
  • 27. Rapport de stage à l’IUFM de Versailles Frédéric Sagez verifie := VRAI Fin Si {indique une erreur sur le 4ème departement d'un candidat} Si (T_CANDIDAT_DESC[mon_indice]. departement4 = carac_ departement ) Alors Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de 4ème voeu") verifie := VRAI Fin Si {indique une erreur sur le 5ème departement d'un candidat} Si (T_CANDIDAT_DESC[mon_indice]. departement5 = carac_ departement ) Alors Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de 5ème voeu") verifie := VRAI Fin Si {indique une erreur sur la note de barème d'un candidat} Si (T_CANDIDAT_DESC[mon_indice].note_bareme = carac_note_bareme ) Alors Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de note de Page 27 sur 99 barème ") verifie := VRAI Fin Si {indique une erreur sur la note de prepro. d'un candidat} Si (T_CANDIDAT_DESC[mon_indice].note_prepo = carac_note_prepo ) Alors Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de note de preprofessionnalisation "); verifie := VRAI Fin Si {indique une erreur sur la date de naissance d'un candidat} Si (T_CANDIDAT_DESC[mon_indice].date_naissance = carac_date_naissance ) Alors Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de date de naissance "); verifie := VRAI Fin Si {indique une erreur sur la date de retour du dossier d'un candidat} Si (T_CANDIDAT_DESC[mon_indice].date_retour_dossier = carac_date_retour_dossier Alors Inscrit_Erreur("Le candidat numéro "+ l_indice+" n'a pas de date de retour de dossier "); verifie := VRAI Fin Si Fin Si Si ( verifie ) Alors test_l_erreur := VRAI {erreur(s) de saisie sur un candidat} Sinon mon_indice := mon_indice + 1 {le candidat est enregistré dans le tableau} Fin Si Fin Initialise_T_CANDIDAT_DESC; 4.4.2 Description de la sous procédure Inscrit_Erreur La procédure Inscrit_Erreur est une sous procédure. Elle est appelée lorsque l'on a besoin d'écrire une ou des erreurs relatives à un candidat dans le tableau T_ERREUR_CANDIDAT. Procédure Inscrit_Erreur(Entrée: message : chaîne de caractère) Précondition : message : chaîne de caractère non vide Effet : met dans le tableau T_ERREUR_CANDIDAT le message d'erreur rencontré sur un candidat Variable auxiliaire : ind : 0..nb_erreur {indice du tableau} Début T_ERREUR_CANDIDAT[ind + 1].erreur_candidat := message Fin Inscrit_Erreur;
  • 28. Rapport de stage à l’IUFM de Versailles Frédéric Sagez 4.4.3 Description de la procédure Tri_par_note_de_bareme Dans un premier temps, on tri chaque candidat par ordre décroissant des notes de barèmes obtenues par celui-ci. Procédure Tri_par_note_de_bareme(Entrée : le_numero_dossier : réel, la_formation : chaîne de caractère) Précondition : le tableau T_CANDIDAT_DESC existe avec au moins 1 candidat Effet : le tableau T_CANDIDAT_DESC est triée par ordre décroissant des notes de barème Page 28 sur 99 Début Sélectionner TOUS Depuis le tableau T_CANDIDAT_DESC Ou T_CANDIDAT_DESC.no_dossier = le_numero_dossier Et T_CANDIDAT_DESC.formation = la_formation Par Ordre DECROISSANT note_de_bareme Fin Tri_par_note_de_bareme; 4.4.4 Description de la fonction Nombre_de_candidat_par_note_de_bareme Ensuite on regarde s’il existe bien des candidats avec la note de barème demandée, cela évite de faire des traitements inutiles. Fonction Nombre_de_candidat_par_note_de_bareme(Entrée: l_indice_note_bareme : 30..69) retourne booléen Précondition : 30 < la note de barème <69 le tableau T_CANDIDAT_DESC existe Effet : retourne la valeur VRAI si il y a bien des candidats à la note de barème indicée sinon elle retourne FAUX Variables auxiliaires : test_bareme : booléen {va indiquer le nombre total de candidat dans le tableau T_CANDIDAT_DESC} compteur : entier := 0 Début Sélectionne compteur := compteur + 1 Depuis le tableau T_CANDIDAT_DESC Ou note_bareme = l_indice_note_bareme Si ( compteur = 0 ) Alors test_bareme := FAUX {aucun candidat} Sinon test_bareme := VRAI {au moins un candidat} Fin Si Retourne test_bareme Fin Nombre_de_candidat_par_note_de_bareme; 4.4.5 Description de la procédure Selectionne_Candidat_pour_table_temporaire Chaque candidat avec la même note de barème vont être mis dans une table temporaire CANDIDAT_TEMP pour effectuer un autre tri plus sélectif. Procédure Selectionne_Candidat_pour_table_temporaire(Entrée: l_indice_note_bareme : 30..69, le_numero_dossier : réel, la_formation : chaîne de caractère)
  • 29. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Précondition : le tableau temporaire T_CANDIDAT_TEMP doit être créé Effet : le tableau temporaire T_CANDIDAT_TEMP contient que les candidats qui ont tous la même note de barème provenant du tableau T_CANDIDAT_DESC Page 29 sur 99 Début Insérer dans le tableau T_CANDIDAT_TEMP Sélectionne TOUS Depuis le tableau T_CANDIDAT_DESC Ou T_CANDIDAT_DESC.no_dossier = le_numero_dossier Et T_CANDIDAT_DESC.formation = la_formation Et note_bareme = l_indice_note_bareme Fin Selectionne_Candidat_pour_table_temporaire; 4.4.6 Description de la procédure Tri_par_note_de_prepo Dans cette table temporaire CANDIDAT_TEMP on départage les égalités en rajoutant un critère : la note de préprofessionnalisation, on range les candidats par ordre décroissant. Procédure Tri_par_note_de_prepo(Entrée : le_numero_dossier : réel, la_formation : chaîne de caractère) Précondition : le tableau temporaire T_CANDIDAT_TEMP existe et non vide Effet : le tableau temporaire T_CANDIDAT_TEMP contient les candidats triés qui ont la meme note de bareme le tableau temporaire T_CANDIDAT_TEMP_SELECT contient les candidats triés qui ont la meme note de préprofessionnalisation Ce tableau une fois trié, ses valeurs seront ajoutées à la suite du tableau T_CANDIDAT_TRIE Variables auxiliaires : // Ce sont des caractères qui vérifient si la case est cochée 'O'ui ou 'N'on dans la table BAREME_INDIVIDUEL (leurs notes ne varient pas) Constantes {deux valeurs possibles du critère d'enseignement} note_enseignementOUI : caractère := 'O' note_enseignementNON : caractère := 'N' {deux valeurs possibles du critère de l'activité éducative} note_peri_educativeOUI : caractère := 'O' note_peri_educativeNON : caractère := 'N' {deux valeurs possibles du critère d'activité salariée} note_activite_salarialeOUI : caractère := 'O' note_activite_salarialeNON : caractère := 'N' enum_note_prepro : entier  {0,3,5,6,8,10} Début //on selctionne ce que l'on a besoin dans un curseur que l'on créait Pour indice_prepro inclus dans enum_note_prepro Faire {on selectionne les candidats par note de pré-professionnalisation d'ordre décroissant et on les ajoute dans un autre tableau temporaire T_CANDIDAT_TEMP_SELECT} Insérer le tableau T_CANDIDAT_TEMP_SELECT Sélectionne TOUS Depuis le tableau T_CANDIDAT_TEMP Ou T_CANDIDAT_TEMP.no_dossier = le_numero_dossier Et T_CANDIDAT_TEMP.formation = la_formation Et T_CANDIDAT_TEMP.note_prepro = indice_prepro Fin Pour // On effectue le tri selectif séquentiel par ordre de grandeur {tri de la première branche : la note d' enseignement est égale à huit}
  • 30. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Tri_par_critere_de_selection(note_enseignementOUI,note_peri_educativeOUI, note_activite_salarialeOUI) Tri_par_critere_de_selection(note_enseignementOUI,note_peri_educativeOUI, note_activite_salarialeNON) Tri_par_critere_de_selection(note_enseignementOUI,note_peri_educativeNON, note_activite_salarialeOUI) Tri_par_critere_de_selection(note_enseignementOUI,note_peri_educativeNON, note_activite_salarialeNON) {tri de la deuxième branche : la note d' enseignement est égale à zéro} Tri_par_critere_de_selection(note_enseignementNON,note_peri_educativeOUI, note_activite_salarialeOUI) Tri_par_critere_de_selection(note_enseignementNON,note_peri_educativeOUI, note_activite_salarialeNON) Tri_par_critere_de_selection(note_enseignementNON,note_peri_educativeNON, note_activite_salarialeOUI) Tri_par_critere_de_selection(note_enseignementNON,note_peri_educativeNON, note_activite_salarialeNON) Page 30 sur 99 Fin Tri_par_note_de_prepo; 4.4.7 Description de la sous procédure Tri_par_critere_de_selection Dans la table temporaire CANDIDAT_TEMP_SELECT, on départage les égalités persistantes entre chaque candidat : pour chaque type de brevet obtenu ou non, on range les candidats par ordre croissant de leur date de naissance (du plus jeune au moins jeune). Procédure Tri_par_critere_de_selection(Entrée : note_enseigne, note_peri_edu, note_sal : caractère) Précondition : le tableau temporaire T_CANDIDAT_TEMP_SELECT existe et non vide Effet : le tableau T_CANDIDAT_TRIE contiendra les candidats triés par ordre croissant des dates de naissances Variable auxiliaire : note_brevet : 0..3 { la note de brevet  {0,1,2,3}} Début Pour note_brevet de 3 à 0 Faire Insérer dans tableau T_CANDIDAT_TRIE Sélectionne TOUS {tableaux contenant les informations dont on a besoin} Depuis les tableaux T_CANDIDAT_TEMP_SELECT, T_BAREME_INDIVIDUEL {lien pour les items} Ou T_CANDIDAT_TEMP_SELECT.no_dossier = T_BAREME_INDIVIDUEL.no_dossier {renseignement supplémentaire sur l'age de l'étudiant} Et T_CANDIDAT_TEMP_SELECT.no_dossier = T_ETUDIANT.no_dossier {on précise que l'on s'occupe des PE} Et T_BAREME_INDIVIDUEL.code_bareme = "PE97" {test la note d'enseignement > 6 mois} Et (T_BAREME_INDIVIDUEL.code_critere = 3 ET T_BAREME_INDIVIDUEL.choix = note_enseigne) {test la note d'activité educative} Et (T_BAREME_INDIVIDUEL.code_critere = 5 ET T_BAREME_INDIVIDUEL.choix = note_peri_edu) {test la note d'activité salariale} Et (T_BAREME_INDIVIDUEL.code_critere = 6 ET T_BAREME_INDIVIDUEL.choix = note_sal) {test la note du ou des brevets obtenus} Et (T_BAREME_INDIVIDUEL.code_critere = 8 ET T_BAREME_INDIVIDUEL.choix = note_brevet)
  • 31. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Par Ordre CROISSANT T_ETUDIANT.date_naissance Page 31 sur 99 Fin Pour Fin Tri_par_date_de_naissance; 4.4.8 Description de la procédure Classement_table_trie On effectue une mise à jour du rang pour chaque candidat dans la table CANDIDAT_TRIE pour effectuer un classement. Procédure Classement_table_trie(Entrée: le_numero_dossier : réel, la_formation : chaîne de caractère) Précondition : le tableau T_CANDIDAT_TRIE est déjà créé et existe Effet : le tableau temporaire T_CANDIDAT_TRIE contient tous les candidats qui sont finalement triés et filtrés Début Mise à jour du tableau T_CANDIDAT_TRIE De la valeur rang := COMPTEUR(no_dossier) Ou T_CANDIDAT_TRIE.no_dossier = le_numero_dossier Et T_CANDIDAT_TRIE.formation = la_formation Par Ordre DECROISSANT note_de_bareme Fin Classement_table_trie; 4.5 Description de la procédure d'attribution des centres Pour effectuer les admissions des candidats dans chaque centre, on a besoin de deux tables : CANDIDAT_TRIE et CAPACITE_CENTRE. Des variables témoins seront consultées pour savoir s'il reste de la place dans les divers centres, cela permettra de ne pas parcourir la liste des candidats triés en entier d'où un gain de temps. Les listes finalisées de chaque centre permettent de visualiser tous les candidats admissibles (car ils ne sont pas encore admis) avec tous les renseignements les concernant. Procédure Attribution_des_Centres Précondition : le tableau T_CANDIDAT_TRIE existe et remplit le tableau T_CAPACITE_CENTRE existe et initialisé avant la procédure Attribution_des_Centres Création des cinq centres d'admission Effet : Les tableaux T_ADMIS_ANTONY_VdB, T_ADMIS_CERGY, T_ADMIS_ETIOLLES, T_ADMIS_ST-GERMAIN et T_ADMIS_VERSAILLES contiennent des listes de candidats admissibles. Chaque quota de centre restant sera mis à jour à la fin de la procédure Attribution_des_Centres Variables auxiliaires : // renseignement relatif de chaque centre {initialisation des quotas pour chaque centre, ce sont des entiers} CentreA_quota := T_CAPACITE_CENTRE[ANTONY_VdB].quota_centre_initial CentreC_quota := T_CAPACITE_CENTRE[CERGY].quota_centre_initial CentreE_quota := T_CAPACITE_CENTRE[ETIOLLES].quota_centre_initial CentreS_quota := T_CAPACITE_CENTRE[ST-GERMAIN].quota_centre_initial CentreV_quota := T_CAPACITE_CENTRE[VERSAILLES].quota_centre_initial {déclaration des tableaux pour les cinq centres} Type T_ADMIS_ANTONY_VdB : tableau[1.. CentreA_quota] de ADMIS_ANTONY_VdB Type T_ADMIS_CERGY : tableau[1.. CentreC_quota] de ADMIS_CERGY Type T_ADMIS_ETIOLLES : tableau[1.. CentreE_quota] de ADMIS_ETIOLLES Type T_ADMIS_ST-GERMAIN : tableau[1.. CentreS_quota] de ADMIS_ST-GERMAIN
  • 32. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Type T_ADMIS_VERSAILLES : tableau[1.. CentreV_quota] de ADMIS_VERSAILLES {initialisation des codes de chaque centre, ce sont des chaines de caractères} Code_CentreA := T_CAPACITE_CENTRE[ANTONY_VdB].code_centre Code_CentreC := T_CAPACITE_CENTRE[CERGY].code_centre Code_CentreE := T_CAPACITE_CENTRE[ETIOLLES].code_centre Code_CentreS := T_CAPACITE_CENTRE[ST-GERMAIN].code_centre Code_CentreV := T_CAPACITE_CENTRE[VERSAILLES].code_centre {détermine si le quota de chaque centre n'est pas dépassé, variable booléenne initialisée} CentreA_libre := booléen := VRAI CentreC_libre := booléen := VRAI CentreE_libre := booléen := VRAI CentreS_libre := booléen := VRAI CentreV_libre := booléen := VRAI // renseignement relatif a un département sélectionné nom_departement : caractère {contiendra le nom d'un département} quota_du_departement : entier {place restante du centre} code_du_departement : chaîne de caractère {code du centre} attribution : booléen {indiquera si la candidat a trouvé un centre} no_departement : 1..5 {indique le numéro de departement du candidat} no_candidat : 1..nb_candidat_total {indice du tableau T_CANDIDAT_TRIE} Page 32 sur 99 Début // Il faut créer les cinq tables d'admission des centres no_candidat := 1 {on commence par traité le 1er candidat par ordre croissant du rang} {on va traiter chaque candidat un par un en commençant par la note de barème la plus forte jusqu'à la plus faible et on test si il reste de la place dans l'un des cinq centres} Tant Que ( ( CentreA_libre ET CentreC_libre ET CentreE_libre ET CentreS_libre ET CentreV_libre ) OU ( T_CANDIDAT_TRIE NON vide ) ) Faire {test si chaque centre a encore de la place; si il n'y en a plus, le booléen passe à FAUX} CentreA_libre := Test_place_Centre(CentreA_quota) CentreC_libre := Test_place_Centre(CentreC_quota) CentreE_libre := Test_place_Centre(CentreE_quota) CentreS_libre := Test_place_Centre(CentreS_quota) CentreV_libre := Test_place_Centre(CentreV_quota) {initialisation de valeurs} attribution := FAUX {le candidat n'a pas de centre} no_departement := 1 {on va traiter les cinq voeux du candidat} Pour nom_departement de T_CANDIDAT_TRIE[no_candidat].departement1 à T_CANDIDAT_TRIE[no_candidat].departement5 Faire {on prend les informations du centre demandé} Selection_Information_Centre(nom_departement,quota_du_departement, code_du_departement) {on attribue un centre si son quota est supérieur à zéro} Si ( NON attribution ) Alors attribution := Traite_le_Centre(nom_departement, no_departement,quota_du_departement, code_du_departement) Fin Si {passe au numéro de département suivant du candidat} no_departement := no_departement + 1 Fin Pour no_candidat := no_candidat + 1 {on traite le candidat suivant} Fin Tant Que {mise à jour des quotas restants de chaque centre} Mise_a_jour_des_Centres Fin Attribution_des_Centres; 4.5.1 Description de la procédure Test_place_Centre Elle a pour objet de vérifier le quota du centre sélectionné et indique s'il reste de la place de libre.
  • 33. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Fonction Test_place Centre(Entrée : le_quota : entier) retourne booléen Précondition : le quota du centre est supérieur ou égal à zéro Effet : retourne FAUX si il n'y a plus de place dans un centre Variables auxiliaires : tel_valeur : booléen := VRAI {on suppose qu'il y a de la place dans Page 33 sur 99 un centre par défaut} Début Si ( le_quota <= 0 ) Alors tel_valeur := FAUX Fin Si Retourne tel_valeur Fin Test_place Centre; 4.5.2 Description de la procédure Selection_Information_Centre Cette procédure va servir à initialiser les variables ‘quota_du_departement’ et ‘code_du_departement’ pour ensuite vérifier si le candidat est admissible dans le centre désigné. Procédure Selection_Information_Centre(Entrée : le_nom_departement : caractère, Sortie : le_quota_du_departement : entier, le_code_du_departement : chaîne de caractère) Précondition : le_nom_departement : caractère non vide Effet : les variables quota_du_departement et code_du_departement contiennent les renseignements sur le centre Début Si ( le_nom_departement = 'A' ) Alors {Antony} quota_du_departement := CentreA_quota code_du_departement := Code_CentreA Fin Si Si ( le_nom_departement = 'C' ) Alors {Cergy} quota_du_departement := CentreC_quota code_du_departement := Code_CentreC Fin Si Si ( le_nom_departement = 'E' ) Alors {Etiolles} quota_du_departement := CentreE_quota code_du_departement := Code_CentreE Fin Si Si ( le_nom_departement = 'S' ) Alors {St-Germain} quota_du_departement := CentreS_quota code_du_departement := Code_CentreS Fin Si Si ( le_nom_departement = 'V' ) Alors {Versailles} quota_du_departement := CentreV_quota code_du_departement := Code_CentreV Fin Si Fin Selection_Information_Centre; 4.5.3 Description de la fonction Traite_le_Centre Elle va administrer les cinq centres et ajouter des candidats dans leurs listes. Fonction Traite_le_Centre(Entrée : le_nom_departement : caractère, le_no_departement : entier,
  • 34. Rapport de stage à l’IUFM de Versailles Frédéric Sagez le_code_du_departement : chaîne de caractère, Sortie : le_quota_du_departement : entier) Précondition : les paramètres de la fonction sont bien initialisés Effet : Ajoute un candidat dans la table ADMIS_nom du centre Variables auxiliaires : tel_valeur : booléen {indique que l'on peut attribuer le centre} tel_nom_du_centre : chaîne de caractère {nom du tableau de Page 34 sur 99 destination} Début tel_valeur := FAUX Donne_nom_du_centre(le_code_du_departement, tel_nom_du_centre) Si ( le_quota_du_departement > 0 ) Alors Inserer_Candidat_dans_Centre(le_nom_departement, le_no_departement, tel_nom_du_centre) le_quota_du_departement := le_quota_du_departement - 1 {on décrémente le quota du centre} tel_valeur := VRAI Fin Si Retourne tel_valeur Fin Traite_le_Centre; 4.5.4 Description de la procédure Donne_nom_du_centre Grâce au code du département la procédure donne le nom du tableau sur lequel le candidat veut s'inscrire. Procédure Donne_nom_du_centre(Entrée : un_code_du_departement : chaîne de caractère, Sortie : un_nom_du_centre : chaîne de caractère) Précondition : code du departement non vide Effet : retourne le nom de la table du departement ayant le même code Début Si (un_code_du_departement = Code_CentreA ) Alors {Antony} un_nom_du_centre = "T_ADMIS_ANTONY_VdB" Fin Si Si (un_code_du_departement = Code_CentreC ) Alors {Cergy} un_nom_du_centre = " T_ADMIS_CERGY" Fin Si Si (un_code_du_departement = Code_CentreE ) Alors {Etiolles} un_nom_du_centre = " T_ADMIS_ETIOLLES" Fin Si Si (un_code_du_departement = Code_CentreS ) Alors {St-Germain} un_nom_du_centre = " T_ADMIS_ST-GERMAIN" Fin Si Si (un_code_du_departement = Code_CentreV ) Alors {Versailles} un_nom_du_centre = " T_ADMIS_VERSAILLES" Fin Si Fin Donne_nom_du_centre; 4.5.5 Description de la procédure Inserer_Candidat_dans_Centre Elle va remplir la table ADMIS_nom du centre en y ajoutant les renseignements sur le candidat ainsi que mettre une étoile dans le numéro de département où est admis le candidat. Procédure Inserer_Candidat_dans_Centre(Entrée : the_nom_departement : caractère,
  • 35. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 35 sur 99 the_no_departement : entier, the_nom_du_centre : chaîne de caractère) Précondition : le tableau ADMIS_nom du centre existe 'no_candidat' indique le candidat sélectionné Effet : ajoute un candidat dans le tableau de destination Début Si (the_no_departement = 1 ) Alors the_nom_du_centre[no_candidat].no_departement1 := '*' Fin Si Si (the_no_departement = 2 ) Alors the_nom_du_centre[no_candidat].no_departement2 := '*' Fin Si Si (the_no_departement = 3 ) Alors the_nom_du_centre[no_candidat].no_departement3 := '*' Fin Si Si (the_no_departement = 4) Alors the_nom_du_centre[no_candidat].no_departement4 := '*' Fin Si Si (the_no_departement = 5 ) Alors the_nom_du_centre[no_candidat].no_departement5 := '*' Fin Si Insérer Dans the_nom_du_centre Sélectionner trie.no_dossier, trie.no_candidature, etudiant.nom_usuel, etudiant.prenom, etudiant.adresse, etudiant.code_postal, etudiant.ville, formation, departement1, departement2, departement3, departement4, departement5, the_nom_departement, note_bareme, rang Depuis les tableaux T_CANDIDAT_TRIE trie, T_ETUDIANT etudiant Ou trie.no_dossier = etudiant.no_dossier Fin Inserer_Candidat_dans_Centre; 4.5.6 Description de la procédure Mise_a_jour_des_Centres Elle effectue une mise à jour des places restantes dans les cinq centres. Procédure Mise_a_jour_des_Centres Précondition : les tableaux ADMIS_nom du centre existent Effet : met à jour le champ 'quota_centre_restant' dans chaque tableau Début {mise à jour du quota restant d'Antony} Changer le tableau T_ADMIS_ANTONY_VdB La valeur quota_centre_restant := CentreA_quota Ou T_ADMIS_ANTONY_VdB.code_centre = Code_CentreA {mise à jour du quota restant de Cergy} Changer le tableau T_ADMIS_CERGY La valeur quota_centre_restant := CentreC_quota Ou T_ADMIS_CERGY.code_centre = Code_CentreC {mise à jour du quota restant d'Etiolles} Changer le tableau T_ADMIS_ETIOLLES La valeur quota_centre_restant := CentreE_quota Ou T_ADMIS_ETIOLLES.code_centre = Code_CentreE {mise à jour du quota restant de Saint-Germain} Changer le tableau T_ADMIS_ST-GERMAIN La valeur quota_centre_restant := CentreS_quota Ou T_ADMIS_ST-GERMAIN.code_centre = Code_CentreS
  • 36. Rapport de stage à l’IUFM de Versailles Frédéric Sagez {mise à jour du quota restant de Versailles} Changer le tableau T_ADMIS_VERSAILLES La valeur quota_centre_restant := CentreV_quota Ou T_ADMIS_VERSAILLES.code_centre = Code_CentreV Page 36 sur 99 Fin Mise_a_jour_des_Centres; 4.6 Description des procédures de mise à jour des atypiques et des dérogataires Les atypiques et les dérogataires sont des cas particulier, on les distinguera de chaque centre en y indiquant le nombre total de chacun des deux. On peut les différencier facilement : un dérogataire un rang égal à zéro parce qu'il ne compte pas dans la hiérarchie des candidats triés alors que l'atypique lui, en plus d'avoir une note de barème supérieur ou égale à trente, il doit passer un entretien. 4.6.1 Description de la procédure Met_le_nombre_de_derogataire Elle effectue une mise à jour du champ 'nbre_derogataire' de la table CAPACITE_CENTRE. Les dérogataires ont le champ 'rang' de la table CANDIDATURE_TRIE à 0. Procédure Met_le_nombre_de_derogataire Précondition : les tableaux ADMIS_nom du centre existent Effet : met à jour le champ 'nbre_derogataire' de chaque centre Début {Met le nombre total de dérogataire d'Antony} Mise à jour dans le tableau T_CAPACITE_CENTRE La valeur nbre_derogataire = nbre_derogataire + 1 ( Selectionne no_dossier De la table T_ADMIS_ANTONY_VdB OU rang = 0 ) {Met le nombre total de dérogataire de Cergy } Mise à jour dans le tableau T_CAPACITE_CENTRE La valeur nbre_derogataire = nbre_derogataire + 1 ( Selectionne no_dossier De la table T_ADMIS_CERGY OU rang = 0 ) {Met le nombre total de dérogataire d'Etiolles } Mise à jour dans le tableau T_CAPACITE_CENTRE La valeur nbre_derogataire = nbre_derogataire + 1 ( Selectionne no_dossier De la table T_ADMIS_ETIOLLES OU rang = 0 ) {Met le nombre total de dérogataire de Saint-Germain } Mise à jour dans le tableau T_CAPACITE_CENTRE La valeur nbre_derogataire = nbre_derogataire + 1 ( Selectionne no_dossier De la table T_ADMIS_ST-GERMAIN OU rang = 0 ) {Met le nombre total de dérogataire de Versailles } Mise à jour dans le tableau T_CAPACITE_CENTRE
  • 37. Rapport de stage à l’IUFM de Versailles Frédéric Sagez La valeur nbre_derogataire = nbre_derogataire + 1 ( Selectionne no_dossier De la table T_ADMIS_VERSAILLES OU rang = 0 ) Page 37 sur 99 Fin Met_le_nombre_de_derogataire; 4.6.2 Description de la procédure Met_le_nombre_d_atypique Elle effectue une mise à jour du champ 'nbre_atypique' de la table CAPACITE_CENTRE. Les atypiques ont le champ 'condition_requise' de la table CANDIDATURE à 10 et le champ 'libre10' de la table ETUDIANT à 1. Procédure Met_le_nombre_d_atypique Précondition : les tableaux ADMIS_nom du centre existent Effet : met à jour le champ 'nbre_atypique' de chaque centre Début {Met le nombre total d'atypique d'Antony} Mise à jour dans le tableau T_CAPACITE_CENTRE La valeur nbre_atypique = nbre_atypique + 1 ( Selectionne no_dossier De la table T_ADMIS_ANTONY_VdB, T_ETUDIANT, T_CANDIDATURE OU T_ADMIS_ANTONY_VdB.no_dossier = T_ETUDIANT.no_dossier AND T_ADMIS_ANTONY_VdB.no_dossier = T_CANDIDATURE.no_dossier AND T_ADMIS_ANTONY_VdB.no_candidature = T_CANDIDATURE.no_candidatute AND T_ETUDIANT.libre10 = 1 AND T_CANDIDATURE.condidtion_requise = '10' ) {Met le nombre total d'atypique de Cergy } Mise à jour dans le tableau T_CAPACITE_CENTRE La valeur nbre_atypique = nbre_atypique + 1 ( Selectionne no_dossier De la table T_ADMIS_CERGY, T_ETUDIANT, T_CANDIDATURE OU T_ADMIS_CERGY.no_dossier = T_ETUDIANT.no_dossier AND T_ADMIS_CERGY.no_dossier = T_CANDIDATURE.no_dossier AND T_ADMIS_CERGY.no_candidature = T_CANDIDATURE.no_candidatute AND T_ETUDIANT.libre10 = 1 AND T_CANDIDATURE.condidtion_requise = '10' ) {Met le nombre total d'atypique d'Etiolles } Mise à jour dans le tableau T_CAPACITE_CENTRE La valeur nbre_atypique = nbre_atypique + 1 ( Selectionne no_dossier De la table T_ADMIS_ETIOLLES, T_ETUDIANT, T_CANDIDATURE OU T_ADMIS_ETIOLLES.no_dossier = T_ETUDIANT.no_dossier AND T_ADMIS_ETIOLLES.no_dossier = T_CANDIDATURE.no_dossier AND T_ADMIS_ETIOLLES.no_candidature = T_CANDIDATURE.no_candidatute AND T_ETUDIANT.libre10 = 1 AND T_CANDIDATURE.condidtion_requise = '10' ) {Met le nombre total d'atypique de Saint-Germain } Mise à jour dans le tableau T_CAPACITE_CENTRE
  • 38. Rapport de stage à l’IUFM de Versailles Frédéric Sagez La valeur nbre_atypique = nbre_atypique + 1 ( Selectionne no_dossier De la table T_ADMIS_ST-GERMAIN, T_ETUDIANT, T_CANDIDATURE OU T_ADMIS_ST-GERMAIN.no_dossier = T_ETUDIANT.no_dossier AND T_ADMIS_ST-GERMAIN.no_dossier = T_CANDIDATURE.no_dossier AND T_ADMIS_ST-GERMAIN.no_candidature = T_CANDIDATURE.no_candidatute AND T_ETUDIANT.libre10 = 1 AND T_CANDIDATURE.condidtion_requise = '10' ) {Met le nombre total d'atypique de Versailles } Mise à jour dans le tableau T_CAPACITE_CENTRE La valeur nbre_atypique = nbre_atypique + 1 ( Selectionne no_dossier De la table T_ADMIS_VERSAILLES, T_ETUDIANT, T_CANDIDATURE OU T_ADMIS_VERSAILLES.no_dossier = T_ETUDIANT.no_dossier AND T_ADMIS_VERSAILLES.no_dossier = T_CANDIDATURE.no_dossier AND T_ADMIS_VERSAILLES.no_candidature = T_CANDIDATURE.no_candidatute AND T_ETUDIANT.libre10 = 1 AND T_CANDIDATURE.condidtion_requise = '10' ) Page 38 sur 99 Fin Met_le_nombre_d_atypique;
  • 39. Rapport de stage à l’IUFM de Versailles Frédéric Sagez 5 FONCTIONNEMENT Pour passer de l’algorithme au programme, certains changements ont été utiles. Une description de chaque table est obligatoire pour connaître l’organisation des données traitées, la référence des tables se trouve dans les pages suivantes. Toutes les tables vont être dans la base de données, pour reconnaître très facilement celles utilisées pour l’affectation des PE, le nom des tables commencera par le préfixe « SIG97 ». Ainsi la table SIG97_ERREUR_CANDIDAT indiquera très clairement les candidats avec leur numéro de dossier que l’on ne prend pas en considération dans le tri, soit qu’il manque des éléments pour la poursuite du tri du candidat, soit que c’est un candidat atypique qui n’a pas rempli les conditi ons à l’entretien, soit parce qu’un candidat est dérogataire : si il a une note d’entretien égale à 70 on ne l'inclut pas dans le tri car il est prioritaire sur les autres, sinon on indique qu’il a eu une note inférieur à 70 voir nulle. Page 39 sur 99 Voici ce que cela peut donner : Message PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300047, Cond. Req. = 2, Note Ent. = 0 PAS PRIS EN COMPTE : A-typique numéro 97300121, Condition_Requise = 10, Libre10 = 0 PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300176, Cond. Req. = 2, Note Ent. = 0 PAS PRIS EN COMPTE : BON dérogataire numéro 97300177, Condition_Requise = 2, Note_Entretien = 70 PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300191, Cond. Req. = 2, Note Ent. = 0 PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300195, Cond. Req. = 2, Note Ent. = 0 PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300303, Cond. Req. = 2, Note Ent. = 0 PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300317, Cond. Req. = 2, Note Ent. = 0 PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300338, Cond. Req. = 2, Note Ent. = 0 PAS PRIS EN COMPTE : BON dérogataire numéro 97300412, Condition_Requise = 2, Note_Entretien = 70 PAS PRIS EN COMPTE : BON dérogataire numéro 97300471, Condition_Requise = 2, Note_Entretien = 70 PAS PRIS EN COMPTE : A-typique numéro 97300496, Condition_Requise = 10, Libre10 = 0 PAS PRIS EN COMPTE : BON dérogataire numéro 97300530, Condition_Requise = 2, Note_Entretien = 70 PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300599, Cond. Req. = 2, Note Ent. = 0 PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300619, Cond. Req. = 2, Note Ent. = 0 PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro 97300705, Cond. Req. = 2, Note Ent. = 0 PAS PRIS EN COMPTE : BON dérogataire numéro 97300773, Condition_Requise = 2, Note_Entretien = 70
  • 40. Rapport de stage à l’IUFM de Versailles Frédéric Sagez La table SIG97_ COMMENTAIRE_PRG indique très clairement ce que fait le programme, quelle procédure ou fonction est terminée, s’il y a eu des erreurs durant le programme tel que la réécriture dans une table. Voici la trace d'une table une fois le tri terminé : Page 40 sur 99 Message La procédure Initialise_Candidat_Desc est FINIE. La procédure Tri_par_note_de_bareme est FINIE. La procédure Mise_a_jour_table_TRIE est FINIE. La procédure Tri_par_selection est FINIE. La procédure Ajout_des_derogataires est FINIE. La procédure Met_la_capacite_initiale du centre 92V est FINIE. La procédure Met_la_capacite_initiale du centre 95 est FINIE. La procédure Met_la_capacite_initiale du centre 91 est FINIE. La procédure Met_la_capacite_initiale du centre 78S est FINIE. La procédure Met_la_capacite_initiale du centre 78V est FINIE. La procédure Mise_a_jour_des_quotas_restant est FINIE. La procédure Attribution_des_Centres est FINIE. La procédure Met_admission_dans_CANDIDATURE est FINIE. La procédure Met_le_Nombre_Atypique est FINIE. La procédure Met_le_Nombre_Derogataire est FINIE. Regarder la table SIG97_ERREUR_CANDIDAT : candidats qui ne sont pas pris en compte. Aucune erreur durant le programme. Le booléen « arret_du_programme » est initialisé à FAUX, si une erreur s’est produite au cours du programme, il passe à VRAI et le programme n’exécute plus les principales procédures et fonctions qui suivent l’erreur. Trois principales exceptions sont traitées : l’un test si une table est déjà remplie (on n'a pas effacé les champs de la table), les deux autres indiquent clairement ce qui s’est passé et invite l’utilisateur à lire les scripts pour agir en conséquence : les dépassements des extensions de « roll back ». Voici une brève explication de chaque procédure et fonction :  La procédure Efface_contenu_des_tables : elle permet d’effacer le contenu des tables, très utile lorsque l’on veut refaire un tri.  La procédure Message_Utilisateur : insère dans la table SIG97_COMMENTAIRE_PRG la chaîne de caractère « mon_message ».  La procédure Inscrit_Erreur : insère dans la table SIG97_ERREUR_CANDIDAT la chaîne de caractère « mon_message ».
  • 41. Rapport de stage à l’IUFM de Versailles Frédéric Sagez  La procédure Initialise_Candidat_Desc : on effectue un tri des candidats ou plutôt on « purge » les candidats qui ne sont pas pris en compte dans le tri. On prend déjà des renseignements sur les « bons » candidats : le numéro de dossier, le numéro de candidature, la formation désirée, les cinq voeux du candidat (les départements), la note de barème ainsi que la date de retour du dossier. Chaque information prise dans la table CANDIDATURE va être placée dans une table temporaire SIG97_CANDIDAT_TMP.  La procédure Tri_par_note_de_bareme : elle va chercher la date de naissance du candidat dans la table ETUDIANT et sa note de préprofessionnalisation dans la table BAREME_INDIVIDUEL puis des informations de la table SIG97_CANDIDAT_TMP pour tout mettre dans la table SIG97_CANDIDAT_SELECT_TMP.  La procédure Mise_a_jour_table_TRIE : étape importante, c’est là que l’on prend les notes de « barémage » pour trier les candidats. On prend les notes d'activité d'enseignement, l’activité éducative et salariale puis la note de brevet de la table BAREME_INDIVIDUEL pour les mettre dans la table SIG97_CANDIDAT_TRIE_TMP.  La procédure Candidature_trie : tri les candidats pour leur attribuer un rang. La fonction Test_le_nbre_de_candidat retourne VRAI s’il y a au moins un candidat à trier car cela évite dans la procédure Tri_par_selection d’appeler huit fois la procédure Candidature_trie. Bien sur toutes les informations recueillies de la table SIG97_CANDIDAT_TRIE_TMP seront mises dans la table SIG97_CANDIDAT_TRIE : tous les candidats triés pourront être visualisés ici.  La procédure Ajout_des_derogataires : Prend tous les candidats de la table CANDIDATURE qui sont des dérogataires. On les met directement dans les centres et on incrémente le quota initial de chaque centre par le nombre de dérogataire placé dedans. Pour le quota des centres on utilise la table SIG97_CAPACITE_CENTRE. Pour admettre chaque candidat dans les centres, on utilise les tables SIG97_ADMIS_nom du centre. Comme on ne peut leur mettre un rang académique, ils auront un rang égale à zéro pour indiquer qu'ils ne sont pas classés dans la hiérarchie. Ainsi on pourra mieux les repérer dans les listes d'admission de chaque centre.  La procédure Met_la_capacite_initiale : permet d’initialiser les variables globales de la procédure Page 41 sur 99 Attribution_centre.  La procédure Test_place_centre : retourne VRAI si le quota du centre est supérieur à zéro.  La procédure Donne_information_centre : lorsqu’un candidat a sélectionné un département, cette procédure donne les informations que l’on a besoin, elles seront traitées dans la fonction Traite_le_centre qui va mettre à jour la liste de chaque centre.  La procédure Attribution_centre : attribue au candidat un centre dont il a fait le voeu. On prend les dernières informations du candidat : son nom, son prénom et son adresse de la table ETUDIANT ainsi que celles de SIG97_CANDIDAT_TRIE.  La procédure Mise_a_jour_quota_restant : elle est prévue lorsqu’il y a plus de place dans le centre que de candidats. Lorsque l'on impose des quotas dit de "surbooking" (c'est le nombre de place total plus le nombre de candidat inscrit sur la liste complémentaire), on peut distinguer très nettement les places restantes.  La procédure Met_admission_dans_candidature : prend les informations de chaque candidat admis dans les centres, puis fait une mise à jour des champs indiquant que le candidat est admissible dans la table CANDIDATURE.  Les procédures Met_le_nombre_atypique et Met_le_nombre_derogataire : mise à jour des champs de la table SIG97_CANDIDAT_TRIE pour indiquer le nombre exact de dérogataires et d’atypique de chaque centre. Voici la table SIG97_CAPACITE_CENTRE lorsque le programme est terminé :
  • 42. Rapport de stage à l’IUFM de Versailles Frédéric Sagez code_centre quota_centre_ini tial quota_centre_res tant nbre_atypique nbre_derogata i re nom_du_centre 92V 767 0 53 3 Antony Val de Bievre 91 940 0 7 20 Etiolles 95 902 0 45 18 Cergy 78S 580 0 16 0 St-Germain en Laye 78V 245 0 11 3 Versailles Les tables qui ont le suffixe « TMP » peuvent être effacées à la fin du programme. Elles ont servis à contenir des informations sur les candidats et éviter de créer une table unique et de faire soit la saisie des informations en un bloque (très coûteux en temps) ou par une mise à jour avec des « UPDATE » (dépassement de capacité de la mémoire et très coûteux en temps). Page 42 sur 99 Table SIG97_CAPACITE_CENTRE Nom de la colonne Type Longueur SQL Description code_centre chaine de caractère 3 CHAR numéro de code du centre quota_centre_initial réel 22 FLOAT quota de place d' entrée du centre initial quota_centre_restant réel 22 FLOAT quota de place d' entrée du centre restant nbre_atypique réel 22 FLOAT indique le nombre total d'atypique du centre nbre_derogataire réel 22 FLOAT indique le nombre total de dérogataire du centre nom_du_centre chaine de caractère 25 CHAR nom du centre en entier Table SIG97_CANDIDAT_TRIE Nom de la colonne Type Longueur SQL Description no_dossier chaine de caractère 10 CHAR numéro de dossier du candidat no_candidature réel 22 FLOAT numéro de candidature du candidat formation chaine de caractère 4 CHAR nom de la formation demandée departement1 chaine de caractère 3 CHAR premier voeu du candidat departement2 chaine de caractère 3 CHAR deuxième voeu du candidat departement3 chaine de caractère 3 CHAR troisième voeu du candidat departement4 chaine de caractère 3 CHAR quatrième voeu du candidat
  • 43. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 43 sur 99 departement5 chaine de caractère 3 CHAR cinquième voeu du candidat note_bareme réel 22 FLOAT note du bareme du candidat note_prepo réel 22 FLOAT note de preprofessionalisation date_naissance date 7 DATE date de naissance du candidat date_retour_dossier date 7 SYSDATE date de retour du dossier enseignement caractère 1 CHAR indique si la case est cochée pour l'enseignement peri_educ_scol caractère 1 CHAR indique si la case est cochée pour l'activité éducative activite_salarie caractère 1 CHAR indique si la case est cochée pour l'activité de salarié note_brevet réel 22 FLOAT note totale des brevets obtenus rang nombre 22 FLOAT rang attribue au candidat Table SIG97_ADMIS_nom du centre Nom de la colonne Type Longueur SQL Description no_dossier chaine de caractère 10 CHAR numéro de dossier du candidat no_candidature réel 22 FLOAT numéro de candidature du candidat nom_usuel chaine de caractère 25 CHAR nom usuel du candidat prenom chaine de caractère 20 CHAR prénom du candidat adresse chaine de caractère 255 CHAR adresse complète du candidat code_postal chaine de caractère 5 CHAR code postal du candidat ville chaine de caractère 25 CHAR ville du candidat departement1 chaine de caractère 3 CHAR premier voeu du candidat departement2 chaine de caractère 3 CHAR deuxième voeu du candidat departement3 chaine de caractère 3 CHAR troisième voeu du candidat departement4 chaine de caractère 3 CHAR quatrième voeu du candidat departement5 chaine de caractère 3 CHAR cinquième voeu du candidat no_departement1 caractère 1 CHAR repère du premier voeu du candidat
  • 44. Rapport de stage à l’IUFM de Versailles Frédéric Sagez no_departement2 caractère 1 CHAR repère du deuxième voeu du candidat no_departement3 caractère 1 CHAR repère du troisième voeu du candidat no_departement4 caractère 1 CHAR repère du quatrième voeu du candidat no_departement5 caractère 1 CHAR repère du cinquième voeu du candidat Page 44 sur 99 departement_choisis chaine de caractère 3 CHAR voeu du candidat où il est admis formation chaine de caractère 4 CHAR nom de la formation demandée note_bareme réel 22 FLOAT note du bareme du candidat rang nombre 22 FLOAT rang attribue au candidat Table SIG97_ERREUR_CANDIDAT Nom de la colonne Type Longueur SQL Description erreur_candidat chaine de caractère 100 CHAR phrase indiquant l' erreur trouvé sur le candidat Table SIG97_COMMENTAIRE_PRG Nom de la colonne Type Longueur SQL Description message chaine de caractère 120 CHAR phrase indiquant le déroulement du programme
  • 45. Rapport de stage à l’IUFM de Versailles Frédéric Sagez SQL*Plus: Release 3.2.2.0.1 - Production on Mon Jun 23 11:30:53 1997 Copyright (c) Oracle Corporation 1979, 1994. All rights reserved. Connected to: Personal Oracle7 Release 7.2.2.3.1 - 90 day trial license To purchase a production license, call 1-800-633-0586 (U.S. only) DOC>REM ------------------------------------------------------------------- DOC>REM nom du programme : affect97.sql version : 1.26f DOC>REM auteur : Frederic SAGEZ date : 20 / 06 / 1997 DOC>REM description : Affectation des PE 1ère année pour DOC>REM l'année scolaire 1997-1998 DOC>REM ------------------------------------------------------------------- DOC>REM REM : 1)lisez les commentaires de la table SIG97_COMMENTAIRE_PRG DOC>REM meme si tout c’est bien dérouler !!! DOC>REM 2)Penser à créer les tables en lancant le script DOC>REM "creat1_0.sql" avant de commencer le PROGRAMME. DOC>REM ------------------------------------------------------------------- SQL>Voulez-vous effacer toutes les tables (O/N) ? Page 45 sur 99 6 UTILISATION DU PROGRAMME 6.1 Lancement du script Il faut se connecter sur la machine ou se trouve le serveur de bases de données Oracle. 1. On lance SQL*PLUS sous windows Enter password: ******* With the distributed and replication options PL/SQL Release 2.2.2.3.1 - Production SQL> 2. A l'invite "SQL>" il suffit de mettre un arobase puis le chemin exact ou se trouve le fichier SQL puis son nom pour l'exécuter. Ainsi il sera chargé automatiquement dans le buffer SQL>@d:iufm_versaillesaffect97 3. Lire l'invite avec ses recommandations 4. Voulez-vous effacer les tables pour effectuer un autre tri ? Le 'O' majuscule effacera les tables, sinon il faut mettre un autre caractère pour indiquer que l'on ne veut pas les effacer. 5. L'invite demande quel numéro de dossier à traiter, il suffit simplement d'indiquer le début du numéro de dossier et rajouter le caractère '%'.
  • 46. Rapport de stage à l’IUFM de Versailles Frédéric Sagez SQL>Quel numéro de dossier voulez-vous traiter (Ex : 973% - 4 caractères MAXIMUM autorisés) ? 6. Il suffit d'indiquer le début du nom de la formation à trier E pour les candidats qui prépare le CAPE SQL>Quel formation voulez-vous traiter (Ex : E% pour les P.E. - 2 caractères MAXIMUM autorisés) ? 7. SQL*PLUS nous indique les variables qui ont été modifiées dans le buffer old 3: mon_no_dossier CONSTANT CHAR(4) DEFAULT '&invite_no_dossier'; new 3: mon_no_dossier CONSTANT CHAR(4) DEFAULT '973%'; old 5: ma_formation CONSTANT CHAR(2) DEFAULT '&invite_formation'; new 5: ma_formation CONSTANT CHAR(2) DEFAULT 'E%'; old1819: IF ( '&invite_efface' = 'O' ) THEN Efface_contenu_des_tables; new1819: IF ( 'N' = 'O' ) THEN Efface_contenu_des_tables; 8. Le programme a fini son traitement et indique que tous c'est bien dérouler SQL>PL/SQL procedure successfully completed. ERROR at line 53: ORA-06550: line 53, column 14: PLS-00201: identifier 'SIG97_COMMENTAIRE_PRG' must be declared Page 46 sur 99 6.2 Erreurs 1. Si à l'étape 8 vous avez ce genre de remarque : DELETE FROM sig97_commentaire_prg; *  Cela signifie que les tables ne sont pas créées, il faut lancer le script "creat1_0.sql". 2. Si d'autres erreurs apparaissent, il faut se référencer au manuel des messages d'erreurs Oracle pour trouver la solution. 6.3 Vérifications 1. Pour savoir si le programme c'est bien exécuter il suffit de taper la commande suivante sur SQL*PLUS
  • 47. Rapport de stage à l’IUFM de Versailles Frédéric Sagez SQL>MESSAGE SQL>-------------------------------------------------------------------- SQL>La procédure Initialise_Candidat_Desc est FINI. SQL>La procédure Tri_par_note_de_bareme est FINI. SQL>La procédure Mise_a_jour_table_TRIE est FINI. SQL>La procédure Tri_par_selection est FINI. SQL>La procédure Ajout_des_derogataires est FINI. SQL>La procédure Met_la_capacite_initiale du centre 92V est FINI. SQL>La procédure Met_la_capacite_initiale du centre 95 est FINI. SQL>La procédure Met_la_capacite_initiale du centre 91 est FINI. SQL>La procédure Met_la_capacite_initiale du centre 78S est FINI. SQL>La procédure Met_la_capacite_initiale du centre 78V est FINI. SQL>La procédure Mise_a_jour_des_quotas_restant est FINI. SQL>La procédure Attribution_des_Centres est FINI. SQL>La procédure Met_admission_dans_CANDIDATURE est FINI. SQL>La procédure Met_le_Nombre_Atypique est FINI. SQL>La procédure Met_le_Nombre_Derogataire est FINI. SQL>Regarder la table SIG97_ERREUR_CANDIDAT : candidats qui ne sont pas pris en compte. SQL>Aucune erreur durant le programme.  Les 3 premières procédures indiquent que la "purge" des candidats s'est bien déroulée.  La procédure Tri_par_selection indique que tous les candidats sont bien triés.  La procédure Ajout_des_derogataires a bien ajoutés les candidas dérogataires dans les centres.  La procédure Attribution_des_Centres indique que tous les candidats ont été affectés dans les SQL>MESSAGE SQL>----------------------------------------------------------------------- SQL>ERREUR dans la procédure Initialise_Candidat_Desc:Effacer le contenu de SQL>la table temporaire SIG97_CANDIDAT_TMP. SQL>ERREUR dans la procédure Tri_par_note_de_bareme : Effacer le contenu de SQL>la table temporaire SIG97_CANDIDAT_SELECT_TMP. SQL>ERREUR dans la procédure Mise_a_jour_table_TRIE : Effacer le contenu de SQL>la table temporaire SIG97_CANDIDAT_TRIE_TMP. SQL>ERREUR dans la procédure Tri_par_selection : Effacer le contenu de la SQL>table SIG97_CANDIDAT_TRIE. SQL>Erreur(s) durant le programme !!! Page 47 sur 99 centres.  La phrase "Regarder la table SIG97_ERREUR_CANDIDAT : candidats qui ne sont pas pris en compte." indique que La table sig97_erreur_candidat a reçu des candidats qui ne sont pas inclus dans le tri et signifie pourquoi.  Si la phrase "Aucune erreur durant le programme." est indiquée, alors le programme s'est exécuté correctement. 2. Si dans la table vous avez des messages comme ceci :  C'est que vous n'avez pas effacé les tables et vous effectuer un deuxième tri.  Penser toujours à lancer le script "creat1_0.sql" pour réinitialiser le quota de chaque centre tout en effaçant et en créant les tables dont on a besoin.
  • 48. Rapport de stage à l’IUFM de Versailles Frédéric Sagez 6.4 Optimisation Le traitement prenant beaucoup de ressources sur le serveur de base de données Oracle . (Machine CETAUTOMATIX à base de Pentium 133 du Service Informatique de Gestion) Il a fallut optimiser la mémoire et l’espace disque sur la machine afin de pérenniser le traitement jusqu’à la fin pour éviter les interruptions brutales. Etape 1 Avant de commencer il faut être déclaré comme utilisateur 'SYSTEM' pour changer les valeurs. Taper la requête qui suit pour connaitre l'espace mémoire allouée au système : SELECT tablespace_name, -- segment dans l'espace mémoire initial_extent, -- 1ère extension d'allocation mémoire -- quand un segment est créé next_extent, -- taille de la prochaine extension mémoire min_extents, -- nombre total d'extension -- quand le segment mémoire est créé max_extents, -- le maximum d'extension mémoire pour un segment pct_increase -- pourcentage d'extension mémoire alloué -- pour chaque segment FROM system.dba_tablespaces; Voici le résultat de la requête : TABLESPACE_NAME INITIAL_EXTENT NEXT_EXTENT MIN_EXT MAX_EXT PCT_INCREASE --------------- -------------- ----------- ------- ------- ------------ SYSTEM 10240 30720 1 121 50 USER_DATA 10240 30720 1 121 50 ROLLBACK_DATA 10240 307200 2 121 50 TEMPORARY_DATA 10240 10240 1 121 50 USER_INDEX 10240 10240 1 121 50 Etape 2 Si vous voulez augmenter de la mémoire pour les rollbacks, taper la requête suivante : alter tablespace ROLLBACK_DATA default storage ( initial 100K -- valeur initiale par défaut (peut etre augmenter next 500k -- on a augmenté la valeur pour plus de mémoire minextents 2 -- valeur minimale recommandée pour les rollbacks maxextents 121 -- valeur maximale (qui ne change pas) pctincrease 60 -- augmente le pourcentage de depassement d'allocation mémoire ); Valider en faisant un 'COMMIT;' et retaper la requête de l'Etape une. Page 48 sur 99 Etape 3 Affichage de la requête :
  • 49. Rapport de stage à l’IUFM de Versailles Frédéric Sagez TABLESPACE_NAME INITIAL_EXTENT NEXT_EXTENT MIN_EXT MAX_ EXT PCT_INCREASE --------------- -------------- ----------- ------- ------- ------------ SYSTEM 10240 30720 1 121 50 USER_DATA 10240 30720 1 121 50 ROLLBACK_DATA 102400 512000 2 121 60 TEMPORARY_DATA 10240 10240 1 121 50 USER_INDEX 10240 10240 1 121 50 On peut constater que la mémoire alloué aux rollbacks a augmentée. On peut ainsi changer les valeurs des autres 'TABLESPACE_NAME' en faisant toujours un 'ALTER'. Page 49 sur 99 Le code du programme SQL se trouve en annexe.
  • 50. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 50 sur 99 7 JEUX DE TESTS 7.1 Constations et vérifications du tri des candidats Nous avons effectué un tri de test sur 63 candidats (on prend les 100 premiers qui font une demande en P.E.). On affiche les informations que l'on a besoin pour vérifier le tri :  le numéro de dossier (NO_DOSSIER),  la note de barème (NOTE_BAREME),  la note de préprofessionnalisation (NOTE_PREPRO),  la date de naissance (DATE_NAIS),  la note d'enseignement (E),  la note peri-éducative (P),  la note d'activité salariée (A),  la note de brevet (NOTE_BREVET),  et le rang (RANG). NO_DOSSIER NOTE_BAREME NOTE_PREPRO DATE_NAIS E P A NOTE_BREVET RANG ---------- ----------- ----------- --------- - - - ----------- --------- 97300098 48 10 07-OCT-74 N O N 3 1 97300019 48 0 19-AUG-72 O N O 0 2 ======================== la note de bareme est de 47 =================== 97300014 47 10 01-MAY-76 N O N 2 3 97300068 47 10 24-SEP-75 N O N 2 4 ======================== la note de bareme est de 45 =================== 97300054 45 5 02-JUL-72 O N N 2 5 ======================== la note de bareme est de 44 =================== 97300042 44 6 25-JUL-76 N O N 3 6 97300082 44 6 12-APR-75 N O N 3 7 97300062 44 3 23-JAN-76 N O N 1 8 ======================== la note de bareme est de 43 =================== 97300024 43 3 13-AUG-75 N O N 3 9 ======================== la note de bareme est de 42 =================== 97300012 42 5 11-JUN-75 N O N 2 10 <1> 97300006 42 5 16-JUN-74 N N O 2 11 <2> 97300088 42 3 15-JUL-73 N O N 2 12 97300037 42 0 25-NOV-72 N O O 2 13 97300028 42 0 15-NOV-75 N O N 2 14 ======================== la note de bareme est de 41 =================== 97300041 41 10 16-APR-76 N N N 1 15 <3> 97300005 41 10 18-SEP-75 N N N 1 16 <4> 97300096 41 10 23-MAR-74 N N N 1 17 <5> 97300007 41 6 16-FEB-77 N O N 0 18 ======================== la note de bareme est de 40 =================== 97300011 40 10 21-APR-76 N N N 0 19 97300027 40 10 10-JUN-74 N N N 0 20 97300023 40 10 14-MAR-74 N N N 0 21 97300043 40 5 14-SEP-75 N O N 0 22 97300066 40 5 04-MAR-75 N O N 0 23
  • 51. Rapport de stage à l’IUFM de Versailles Frédéric Sagez 97300060 40 5 17-SEP-74 N O N 0 24 97300010 40 5 18-FEB-74 N N O 0 25 97300083 40 3 06-JUN-75 N O N 2 26 97300050 40 0 10-APR-75 N O O 0 27 97300070 40 0 29-OCT-68 N N O 0 28 ======================== la note de bareme est de 39 =================== 97300051 39 8 31-DEC-75 N N N 1 29 97300039 39 0 21-NOV-75 N O N 2 30 ======================== la note de bareme est de 38 =================== 97300032 38 3 10-MAY-73 N N O 0 31 97300093 38 0 02-APR-76 N O N 3 32 97300056 38 0 24-JAN-75 N O N 3 33 ======================== la note de bareme est de 37 =================== 97300075 37 6 12-APR-74 N N N 1 34 97300048 37 5 23-SEP-75 N N N 0 35 97300069 37 0 25-MAY-76 N O N 2 36 97300076 37 0 29-JUN-75 N O N 2 37 97300035 37 0 08-JUL-72 N O N 2 38 97300029 37 0 13-APR-75 N N O 2 39 ======================== la note de bareme est de 36 =================== 97300001 36 0 19-JUL-74 N O N 1 40 97300089 36 0 29-SEP-72 N O N 1 41 97300095 36 0 29-JAN-77 N N O 1 42 ======================== la note de bareme est de 35 =================== 97300059 35 5 25-NOV-76 N N N 0 43 97300052 35 5 19-JUN-76 N N N 0 44 97300038 35 5 12-NOV-75 N N N 0 45 97300085 35 5 11-DEC-74 N N N 0 46 97300004 35 5 13-APR-74 N N N 0 47 97300049 35 0 29-AUG-73 N O N 0 48 97300013 35 0 25-APR-72 N O N 0 49 97300025 35 0 20-DEC-68 N O N 0 50 97300002 35 0 25-JUN-74 N N O 0 51 97300045 35 0 09-FEB-74 N N O 0 52 97300016 35 0 13-APR-73 N N N 0 53 97300087 35 0 08-OCT-72 N N N 0 54 ======================== la note de bareme est de 33 =================== 97300036 33 3 04-JUL-75 N N N 0 55 97300055 33 3 20-DEC-74 N N N 0 56 97300078 33 3 16-NOV-73 N N N 0 57 97300022 33 0 15-MAR-76 N N N 3 58 97300040 33 0 29-NOV-75 N N N 3 59 97300071 33 0 21-JUN-73 N N N 3 60 ======================== la note de bareme est de 31 =================== 97300058 31 0 10-DEC-76 N N N 1 61 ======================== la note de bareme est de 30 =================== 97300009 30 0 15-SEP-74 N N N 0 62 97300072 30 0 05-AUG-74 N N N 0 63 Page 51 sur 99 Conclusions :
  • 52. Rapport de stage à l’IUFM de Versailles Frédéric Sagez 1. Aux signets <1> et <2> deux candidats sont départagés malgré la même note de barème ainsi que la même Page 52 sur 99 note de préprofessionnalisation.  On peut voir que le candidat numéro 10 qui a des connaissances péri-éducative ou périscolaire passe bien avant le candidat numéro 11 qui n'a qu'une expérience d'activité en tant que salarié. 2. Aux signets <3>, <4> et <5> trois candidats ont tous les mêmes notes, la le tri ne peut plus intervenir : c'est la dernière option pour départager les candidats.  Seule la date de naissance impose une hiérarchie entre les trois candidats du plus jeune au moins jeune. 7.2 Constations et vérifications sur l’admission des candidats On attribue 61 places entre les cinq centres en sachant qu'il y a 63 candidats, voici les quotas exacts de chaque centre de la table CAPACITE_CENTRE : COD QUOTA_CENTRE_INITIAL QUOTA_CENTRE_RESTANT --- -------------------- -------------------- 92V 8 0 95 8 0 91 6 0 78S 14 0 78V 25 0 Voici les résultats obtenus après les affectations des candidats admissibles, on affiche les informations que l'on a besoin pour vérifier le tri :  le numéro de dossier (NO_DOSSIER),  le département1 (DEP),  le département2 (DEP),  le département3 (DEP),  le département4 (DEP),  le département5 (DEP),  le numéro de département1 (N),  le numéro de département2 (N),  le numéro de département3 (N),  le numéro de département4 (N),  le numéro de département5 (N),  le département choisi (DEP),  la note de barème (NOTE_BAREME),  et le rang (RANG). a - Listes des candidats admis dans le centre d'Antony Val de Bièvre : NO_DOSSIER DEP DEP DEP DEP DEP N N N N N DEP NOTE_BAREME RANG ---------- --- --- --- --- --- - - - - - --- ----------- --------- 97300098 A E V S C * - - - - A 48 1 97300019 A E V S C * - - - - A 48 2 97300014 A S V C E * - - - - A 47 3 97300012 A S V C E * - - - - A 42 10 97300088 A S V C E * - - - - A 42 12
  • 53. Rapport de stage à l’IUFM de Versailles Frédéric Sagez 97300005 A V E C S * - - - - A 41 16 97300096 A V S C E * - - - - A 41 17 97300027 A V E C S * - - - - A 40 20 Page 53 sur 99 8 rows selected. b - Listes des candidats admis dans le centre de Cergy: NO_DOSSIER DEP DEP DEP DEP DEP N N N N N DEP NOTE_BAREME RANG ---------- --- --- --- --- --- - - - - - --- ----------- --------- 97300054 C V S E A * - - - - C 45 5 97300042 C V S E A * - - - - C 44 6 97300082 C S V E A * - - - - C 44 7 97300062 C S C V A * - - - - C 44 8 97300024 C E A S V * - - - - C 43 9 97300006 C A V S E * - - - - C 42 11 97300007 C S V A E * - - - - C 41 18 97300010 C V S A E * - - - - C 40 25 8 rows selected. c - Listes des candidats admis dans le centre d'Etiolles : NO_DOSSIER DEP DEP DEP DEP DEP N N N N N DEP NOTE_BAREME RANG ---------- --- --- --- --- --- - - - - - --- ----------- --------- 97300037 E A C V S * - - - - E 42 13 97300011 E S C V A * - - - - E 40 19 97300023 E A V C S * - - - - E 40 21 97300043 E A V S C * - - - - E 40 22 97300039 E A V S C * - - - - E 39 30 97300032 E S V A C * - - - - E 38 31 6 rows selected. d - Listes des candidats admis dans le centre de Saint Germain : NO_DOSSIER DEP DEP DEP DEP DEP N N N N N DEP NOTE_BAREME RANG ---------- --- --- --- --- --- - - - - - --- ----------- --------- 97300068 S V A C E * - - - - S 47 4 97300066 S C V A E * - - - - S 40 23 97300060 S V C E A * - - - - S 40 24 97300093 C S V A E - * - - - S 38 32 97300056 C S V A E - * - - - S 38 33 97300029 C A E S V - - - * - S 37 39 97300095 C S E A V - * - - - S 36 42 97300052 C S V E A - * - - - S 35 44 97300038 C S V E A - * - - - S 35 45 97300085 C S V E A - * - - - S 35 46 97300013 C E A S V - - - * - S 35 49 97300025 S V A E C * - - - - S 35 50 97300045 C A S V E - - * - - S 35 52 97300087 E A S V C - - * - - S 35 54
  • 54. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 54 sur 99 14 rows selected. e - Listes des candidats admis dans le centre de Versailles : NO_DOSSIER DEP DEP DEP DEP DEP N N N N N DEP NOTE_BAREME RANG ---------- --- --- --- --- --- - - - - - --- ----------- --------- 97300028 V A E C S * - - - - V 42 14 97300041 V S C A E * - - - - V 41 15 97300083 C A V S E - - * - - V 40 26 97300050 C V S A E - * - - - V 40 27 97300070 V S A E C * - - - - V 40 28 97300051 A V S E C - * - - - V 39 29 97300075 C V S E A - * - - - V 37 34 97300048 V S A E C * - - - - V 37 35 97300069 C A E V S - - - * - V 37 36 97300076 V S A E C * - - - - V 37 37 97300035 A V S E C - * - - - V 37 38 97300001 E A V S C - - * - - V 36 40 97300089 E V C A S - * - - - V 36 41 97300059 V S E C A * - - - - V 35 43 97300004 E A V S C - - * - - V 35 47 97300049 V S A E C * - - - - V 35 48 97300002 C V S E A - * - - - V 35 51 97300016 V A S E C * - - - - V 35 53 97300036 C S V E A - - * - - V 33 55 97300055 V S C E A * - - - - V 33 56 97300078 V S A E C * - - - - V 33 57 97300022 A S V C E - - * - - V 33 58 97300040 C E V S A - - * - - V 33 59 97300071 C E A S V - - - - * V 33 60 97300058 C A E V S - - - * - V 31 61 25 rows selected. Conclusions : 1. Les candidats ayant le rang 62 et 63 ne sont pas admis dans un centre. Le quota de chaque centre est bien respecté. 2. On vérifie bien que le numéro de centre sélectionné de chaque candidat a bien été validé. Par exemple le candidat numéro 97300058 est 61ème, étant presque le dernier de la liste des candidats triés, on constate le numéro de département qu'il lui été attribué :  Son 1er voeu est (C)ergy : le dernier candidat accepté dans ce centre est le numéro 20  il ne peut donc pas être admis dans ce centre.  Son 2ème voeu est (A)ntony : le dernier candidat accepté dans ce centre est le numéro 25  il ne peut donc toujours pas être admis dans ce centre.  Son 3ème voeu est (E)tiolles : le dernier candidat accepté dans ce centre est le numéro 31  il ne peut toujours pas être admis dans ce centre.  Son 4ème voeu est (V)ersailles : le dernier candidat accepté dans ce centre est le numéro 61  il est donc le dernier à être admis dans ce centre.
  • 55. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Remarque : il avait plus de chance de rentrer dans ce centre car le quota de celui-ci est nettement plus grand que les autres. Page 55 sur 99
  • 56. Rapport de stage à l’IUFM de Versailles Frédéric Sagez 8 CONCLUSION Ce stage aura été pour moi l'occasion d'approfondir mes connaissances dans les bases de données. Je connaissais ce domaine par l'intermédiaire des cours théoriques et pratiques mais pas à une si grande échelle. J'ai surtout appris qu'il ne fallait pas traiter à la légère les bases de données, qu'il faut toujours vérifier les résultats obtenus et de ne pas prendre en compte le résultat final. Comme ce programme gère un peu plus de 3000 candidats triés, il a fallut vérifier si la saisie des dossiers pour chaque candidat soit validée ainsi que son admissibilité dans chaque centre car tout dépendait du programme et de sa fiabilité. Les responsabilités laissées par Monsieur Eric Vieux-Combes au cours de ce stage m'ont également aidé à mieux connaître la gestion des bases de données client - serveur sous Oracle. A travers les initiatives prises à l'I.U.F.M., j'ai souvent eu l'occasion de me rendre compte par moi même des problèmes qui se posaient et j'ai dû trouver la meilleure solution possible relative à ce genre de problèmes. J'ai également pris à travers ce stage la réelle mesure de la place qu'a le service informatique de gestion au sein d'un établissement comme une I.U.F.M.. Son rôle ne se limite pas à l'installation ou à la maintenance de logiciels et de matériels informatiques dans les différents centres. C'est également auprès de ce service que les utilisateurs viennent rendre compte de leurs problèmes face à l'outil informatique, et ils les réso lvent en apportant toujours une solution. Ce qui prouve bien l'autonomie de ce service. Je tenais à travers cette conclusion remercié tout particulièrement Monsieur Eric Vieux-Combes pour sa disponibilité, à la confiance qu'il m'a accordé pour organiser le projet à ma manière, pour son accueil chaleureux dans son service et à la collaboration de son équipe composée de Monsieur Christian Balestrieri et de Monsieur Jacques Brenterch. Enfin je remercie Madame Fremont-Lamouranne, directeur de l'I.U.F.M. de l'académie de Versailles pour m'avoir accueilli au sein de son établissement. Page 56 sur 99
  • 57. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 57 sur 99 9 ANNEXE 9.1 Le programme SQL (affect97.sql) /* REM ------------------------------------------------------------------------------------------------- ------------- REM nom du programme : affect97.sql version : 1.24f REM auteur : Frederic SAGEZ date : 16 / 06 / 1997 REM description : Affectation des PE 1ère année pour l'année scolaire 1997-1998 REM ------------------------------------------------------------------------------------------------- ------------- REM REMARQUE 1) lisez les commentaires de la table SIG97_COMMENTAIRE_PRG REM meme si tout c' est bien dérouler !!! REM 2) Penser à créer les tables en lancant le script "creat1_0.sql" REM avant de commencer le PROGRAMME. REM ------------------------------------------------------------------------------------------------- -------------- */ /* Déclaration des messages d'invites */ -- Invite proposant d'effacer des tables PROMPT Voulez-vous effacer toutes les tables (O/N) ? ACCEPT invite_efface -- Invite proposant de donner les numeros de dossier à traiter PROMPT Quel numéro de dossier voulez-vous traiter (Ex : 973% - 4 caractères MAXIMUM autorisés) ? ACCEPT invite_no_dossier -- Invite proposant de donner la formation demander PROMPT Quel formation voulez-vous traiter (Ex : E% pour les P.E. - 2 caractères MAXIMUM autorisés) ? ACCEPT invite_formation /* #################### Debut des declarations de variables globales #################### */ DECLARE -- Les numeros de dossiers que l'on veut traiter mon_no_dossier CONSTANT CHAR(4) DEFAULT '&invite_no_dossier'; -- La formation que l'on veut traiter ma_formation CONSTANT CHAR(2) DEFAULT '&invite_formation'; -- Les numeros de dossiers que l'on ne veut pas traiter refus_no_dossier CONSTANT CHAR(5) DEFAULT '9735%'; -- Test si des candidats ne sont pas valident erreur_de_saisie BOOLEAN := FALSE; -- Test si une erreur s' est produite pendant le programme arret_du_programme BOOLEAN DEFAULT FALSE; -- Mes exceptions : --> table deja remplie unique_constraint exception; PRAGMA EXCEPTION_INIT(unique_constraint,-00001); --> plus d'espace memoire pour les extensions des ROLLBACKs extend_rollback_failure exception; PRAGMA EXCEPTION_INIT(extend_rollback_failure,-01562); --> depassement de capacite pour les extensions extend_rollback exception;
  • 58. Rapport de stage à l’IUFM de Versailles Frédéric Sagez PRAGMA EXCEPTION_INIT(extend_rollback,-01628); /* #################### Fin des declarations de variables globales #################### */ /* ######################################################## */ /* ### PROCEDURE Efface_contenu_des_tables #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### aucun ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### Effaces le contenu des tables suivantes : ### */ /* ### ----------------------------------------- ### */ /* ### sig97_commentaire_prg ### */ /* ### sig97_erreur_candidat ### */ /* ### sig97_candidat_tmp ### */ /* ### sig97_candidat_select_tmp ### */ /* ### sig97_candidat_trie_tmp ### */ /* ### sig97_candidat_trie ### */ /* ### sig97_admis_antony_vdb ### */ /* ### sig97_admis_cergy ### */ /* ### sig97_admis_etiolles ### */ /* ### sig97_admis_st_germain ### */ /* ### sig97_admis_versailles ### */ /* ######################################################## */ Page 58 sur 99 PROCEDURE Efface_contenu_des_tables IS BEGIN DELETE FROM sig97_commentaire_prg; DELETE FROM sig97_erreur_candidat; DELETE FROM sig97_candidat_tmp; DELETE FROM sig97_candidat_select_tmp; DELETE FROM sig97_candidat_trie_tmp; DELETE FROM sig97_candidat_trie; DELETE FROM sig97_admis_antony_vdb; DELETE FROM sig97_admis_cergy; DELETE FROM sig97_admis_etiolles; DELETE FROM sig97_admis_st_germain; DELETE FROM sig97_admis_versailles; -- On valide les changements COMMIT; END Efface_contenu_des_tables; /* ######################################################## */ /* ### PROCEDURE Message_Utilisateur #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### mon_message : chaine de caractère ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### Inscrit dans la table sig97_commentaire_prg tous ce qui se ### */ /* ### passe dans le programme. ### */
  • 59. Rapport de stage à l’IUFM de Versailles Frédéric Sagez /* ######################################################## */ PROCEDURE Message_Utilisateur( mon_message CHAR ) IS Page 59 sur 99 BEGIN INSERT INTO sig97_commentaire_prg VALUES( mon_message ); COMMIT; END Message_Utilisateur; /* ######################################################## */ /* ### PROCEDURE Inscrit_Erreur #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### mon_message : chaine de caractère ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### Inscrit dans la table sig97_erreur_candidat le(s) candidat(s) ### */ /* ### qui n'ont pas remplis correctement les critères d' inscriptions. ### */ /* ######################################################## */ PROCEDURE Inscrit_Erreur( mon_message CHAR ) IS BEGIN INSERT INTO sig97_erreur_candidat VALUES( mon_message ); COMMIT; END Inscrit_Erreur; /* ### Debut des sous procedures et fonctions de la procedure de tri ### */ /* ######################################################## */ /* ### PROCEDURE Initialise_Candidat_Desc #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### test_erreur : booléen ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### On effectue un premier tri en purgeant les candidats ### */ /* ### correspondant a certain critere : ### */ /* ### .numero de dossier = mon_no_dossier ### */ /* ### .la formation = ma_formation ### */ /* ### .date_retour_dossier > 01 JANVIER 1900 ### */ /* ### .les numéros de dossier <> refus_no_dossier. ### */ /* ### Les atypiques dont les champs condition_requise = 10 et ### */ /* ### libre10 = 1. ### */ /* ### La table SIG97_ERREUR_CANDIDAT contiendra les ### */ /* ### candidats qui ont des erreurs d'inscription. ### */ /* ### La table temporaire SIG97_CANDIDAT_TMP contiendra ### */ /* ### les candidats dit 'admissibles'. ### */ /* ######################################################## */ PROCEDURE Initialise_Candidat_Desc(test_erreur IN OUT BOOLEAN) IS
  • 60. Rapport de stage à l’IUFM de Versailles Frédéric Sagez -- table temporaire C_DESC : purge les candidats non valident CURSOR C_DESC IS Page 60 sur 99 SELECT candidature.no_dossier, candidature.no_candidature, candidature.formation, candidature.departement1, candidature.departement2, candidature.departement3, candidature.departement4, candidature.departement5, candidature.note_bareme, candidature.date_retour_dossier, candidature.condition_requise, etudiant.libre10, bareme_individuel.note FROM candidature, etudiant, bareme_individuel WHERE ( candidature.no_dossier LIKE mon_no_dossier AND candidature.no_dossier NOT LIKE refus_no_dossier ) AND candidature.formation LIKE ma_formation AND candidature.no_dossier = etudiant.no_dossier AND candidature.no_dossier = bareme_individuel.no_dossier AND candidature.no_candidature = bareme_individuel.no_candidature AND bareme_individuel.code_critere = 9 AND candidature.date_retour_dossier > '01-JAN-00'; -- Declaration des variables d'initialisation carac_no_dossier candidature.no_dossier%TYPE DEFAULT '##########'; carac_no_candidature candidature.no_candidature%TYPE DEFAULT -1; carac_formation candidature.formation%TYPE DEFAULT '####'; carac_departement candidature.departement1%TYPE DEFAULT '###'; carac_note_bareme candidature.note_bareme%TYPE DEFAULT -1; carac_date_retour_dossier candidature.date_retour_dossier%TYPE DEFAULT '01-JAN-99'; -- Declaration des variables C_no_dossier candidature.no_dossier%TYPE; C_no_candidature candidature.no_candidature%TYPE; C_formation candidature.formation%TYPE; C_departement1 candidature.departement1%TYPE; C_departement2 candidature.departement2%TYPE; C_departement3 candidature.departement3%TYPE; C_departement4 candidature.departement4%TYPE; C_departement5 candidature.departement5%TYPE; C_note_bareme candidature.note_bareme%TYPE; C_date_retour_dossier candidature.date_retour_dossier%TYPE; -- indiquera qu'un candidat n'a pas tout remplie test_candidat BOOLEAN; -- et les conditions pour les atypiques C_condition_requise candidature.condition_requise%TYPE; C_libre10 etudiant.libre10%TYPE; mauvais_atypique BOOLEAN; -- et les conditions pour les derogataires C_note_entretien bareme_individuel.note%TYPE; mauvais_derogataire BOOLEAN;
  • 61. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 61 sur 99 BEGIN OPEN C_DESC; LOOP -- Initialisation des variables C_no_dossier := carac_no_dossier; C_no_candidature := carac_no_candidature; C_formation := carac_formation; C_departement1 := carac_departement; C_departement2 := carac_departement; C_departement3 := carac_departement; C_departement4 := carac_departement; C_departement5 := carac_departement; C_note_bareme := carac_note_bareme; C_date_retour_dossier := carac_date_retour_dossier; -- test si candidat à bien remplis son dossier test_candidat := FALSE; -- test si candidat atypique est correct mauvais_atypique := FALSE; -- test si candidat derogataire est present mauvais_derogataire := FALSE; -- Saisie des variables pour chaque candidat FETCH C_DESC INTO C_no_dossier, C_no_candidature, C_formation, C_departement1, C_departement2, C_departement3, C_departement4, C_departement5, C_note_bareme, C_date_retour_dossier, C_condition_requise, C_libre10, C_note_entretien; -- Sort de la boucle quand on a traite tous les candidats -- ou si une erreur s'est produite et qui empeche le bon deroulement du programme EXIT WHEN C_DESC%NOTFOUND OR arret_du_programme; -- Traite les erreurs sur les candidats IF ( C_no_dossier = carac_no_dossier ) THEN Message_Utilisateur('Un candidat n a pas de numéro de dossier ! Arret du programme.'); arret_du_programme := TRUE; END IF; IF ( C_no_candidature = carac_no_candidature ) THEN Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de numéro de candidature.'); test_candidat := TRUE; test_erreur := TRUE; END IF; IF ( C_formation = carac_formation ) THEN Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de formation.'); test_candidat := TRUE; test_erreur := TRUE;
  • 62. Rapport de stage à l’IUFM de Versailles Frédéric Sagez END IF; IF ( C_departement1 = carac_departement ) THEN Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de 1er voeu.'); test_candidat := TRUE; test_erreur := TRUE; END IF; IF ( C_departement2 = carac_departement ) THEN Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de 2eme voeu.'); test_candidat := TRUE; test_erreur := TRUE; END IF; IF ( C_departement3 = carac_departement ) THEN Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de 3eme voeu.'); test_candidat := TRUE; test_erreur := TRUE; END IF; IF ( C_departement4 = carac_departement ) THEN Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de 4eme voeu.'); test_candidat := TRUE; test_erreur := TRUE; END IF; IF ( C_departement5 = carac_departement ) THEN Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de 5eme voeu.'); test_candidat := TRUE; test_erreur := TRUE; END IF; IF ( C_note_bareme = carac_note_bareme ) THEN Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de note de Page 62 sur 99 bareme.'); test_candidat := TRUE; test_erreur := TRUE; END IF; IF ( C_date_retour_dossier = carac_date_retour_dossier ) THEN Inscrit_Erreur('Le candidat numéro '||C_no_dossier||' n a pas de date de retour de dossier.'); test_candidat := TRUE; test_erreur := TRUE; END IF; -- surtout les 'mauvais' atypiques IF ( (C_condition_requise = '10') AND (C_libre10 = 0) ) THEN mauvais_atypique := TRUE; Inscrit_Erreur('PAS PRIS EN COMPTE : A-typique numéro '||C_no_dossier||', Condition_Requise = '||C_condition_requise||', Libre10 = '||C_libre10); test_erreur := TRUE; END IF; -- surtout les 'bons' derogataires, ils passent en priorite pour les admissions IF ( (C_note_entretien = 70) AND ((C_condition_requise = '2') OR (C_condition_requise = '3')) ) THEN mauvais_derogataire := TRUE; Inscrit_Erreur('PAS PRIS EN COMPTE : BON dérogataire numéro '||C_no_dossier||', Condition_Requis = '||C_condition_requise||',Note_Entretien = '||C_note_entretien); test_erreur := TRUE; END IF; -- et les 'mauvais' derogataires qui ne sont pas venus à l'entretien IF ( (C_note_entretien < 70) AND ((C_condition_requise = '2') OR (C_condition_requise = '3')) ) THEN mauvais_derogataire := TRUE; Inscrit_Erreur('PAS PRIS EN COMPTE : MAUVAIS dérogataire numéro '||C_no_dossier||', Cond. Req. = '||C_condition_requise||', Note Ent. = '||C_note_entretien); test_erreur := TRUE; END IF;
  • 63. Rapport de stage à l’IUFM de Versailles Frédéric Sagez -- On place le candidat dans la table sig97_candidat_tmp si il n'y a pas Page 63 sur 99 d'erreur IF (( NOT test_candidat ) AND ( NOT mauvais_atypique ) AND ( NOT mauvais_derogataire ))THEN INSERT INTO sig97_candidat_tmp VALUES ( C_no_dossier, C_no_candidature, C_formation, C_departement1, C_departement2, C_departement3, C_departement4, C_departement5, C_note_bareme, C_date_retour_dossier ); END IF; END LOOP; CLOSE C_DESC; Message_Utilisateur('La procedure Initialise_Candidat_Desc est FINI.'); COMMIT; EXCEPTION WHEN unique_constraint THEN Message_Utilisateur('ERREUR dans la procedure Initialise_Candidat_Desc : Effacer le contenu de la table temporaire SIG97_CANDIDAT_TMP.'); arret_du_programme := TRUE; END Initialise_Candidat_Desc; /* ######################################################## */ /* ### PROCEDURE Tri_par_note_de_bareme #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### aucun ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### Insert dans la table SIG97_CANDIDAT_SELECT_TMP ### */ /* ### les informations prisent dans la table SIG97_CAN- ### */ /* ### DIDAT_ TMP et on rajoute d'autres informations provenant ### */ /* ### de la table ETUDIANT et BAREME_INDIVIDUEL. ### */ /* ######################################################## */ PROCEDURE Tri_par_note_de_bareme IS -- table temporaire C_DATE_NAISSANCE : va chercher la date de naissance du candidat CURSOR C_DATE_NAISSANCE( mon_no_dossier CHAR ) IS SELECT date_naissance FROM etudiant WHERE etudiant.no_dossier = mon_no_dossier;
  • 64. Rapport de stage à l’IUFM de Versailles Frédéric Sagez -- table temporaire C_LA_NOTE_PREPRO : va chercher la note de prepro du candidat CURSOR C_LA_NOTE_PREPRO( mon_no_dossier CHAR, mon_no_candidature REAL) IS SELECT note FROM bareme_individuel WHERE bareme_individuel.no_dossier = mon_no_dossier AND bareme_individuel.no_candidature = mon_no_candidature AND code_critere = 4; -- table temporaire C_BAREME : tri par ordre decroissant des notes de baremes CURSOR C_BAREME IS Page 64 sur 99 SELECT no_dossier, no_candidature, formation, departement1, departement2, departement3, departement4, departement5, note_bareme, date_retour_dossier FROM sig97_candidat_tmp WHERE sig97_candidat_tmp.no_dossier LIKE mon_no_dossier ORDER BY sig97_candidat_tmp.note_bareme DESC; -- Declaration des variables B_no_dossier candidature.no_dossier%TYPE; B_no_candidature candidature.no_candidature%TYPE; B_formation candidature.formation%TYPE; B_departement1 candidature.departement1%TYPE; B_departement2 candidature.departement2%TYPE; B_departement3 candidature.departement3%TYPE; B_departement4 candidature.departement4%TYPE; B_departement5 candidature.departement5%TYPE; B_note_bareme candidature.note_bareme%TYPE; B_note_prepro bareme_individuel.note%TYPE; B_date_naissance etudiant.date_naissance%TYPE; B_date_retour_dossier candidature.date_retour_dossier%TYPE; -- Constante du rang avec une valeur par défaut rang_initial sig97_candidat_select_tmp.rang%TYPE DEFAULT -1; BEGIN OPEN C_BAREME; LOOP FETCH C_BAREME INTO B_no_dossier, B_no_candidature, B_formation, B_departement1, B_departement2, B_departement3, B_departement4, B_departement5, B_note_bareme, B_date_retour_dossier;
  • 65. Rapport de stage à l’IUFM de Versailles Frédéric Sagez -- Sort de la boucle quand on a traite tous les candidats EXIT WHEN C_BAREME%NOTFOUND; --> Mise à jour de la date de naissance FOR la_date_de_naissance IN C_DATE_NAISSANCE( B_no_dossier ) LOOP B_date_naissance := la_date_de_naissance.date_naissance; END LOOP; --> Mise à jour de la note de preprofessionnalisation FOR la_note_de_prepro IN C_LA_NOTE_PREPRO( B_no_dossier, Page 65 sur 99 B_no_candidature ) LOOP B_note_prepro := la_note_de_prepro.note; END LOOP; -- Met les valeurs dans la table sig97_candidat_select_tmp INSERT INTO sig97_candidat_select_tmp VALUES ( B_no_dossier, B_no_candidature, B_formation, B_departement1, B_departement2, B_departement3, B_departement4, B_departement5, B_note_bareme, B_note_prepro, B_date_naissance, B_date_retour_dossier, rang_initial ); END LOOP; CLOSE C_BAREME; Message_Utilisateur('La procedure Tri_par_note_de_bareme est FINI.'); COMMIT; EXCEPTION WHEN unique_constraint THEN Message_Utilisateur('ERREUR dans la procedure Tri_par_note_de_bareme : Effacer le contenu de la table temporaire SIG97_CANDIDAT_SELECT_TMP.'); arret_du_programme := TRUE; END Tri_par_note_de_bareme; /* ######################################################## */ /* ### PROCEDURE Mise_a_jour_table_TRIE #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### aucun ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### On rajoute dans la table SIG97_CANDIDAT_TRIE_TMP ### */ /* ### les 4 critères de selection (enseignement, peri- educatif ### */
  • 66. Rapport de stage à l’IUFM de Versailles Frédéric Sagez /* ### ou scolaire, activite salarial) et la note de brevet du candidat. ### */ /* ######################################################## */ Page 66 sur 99 PROCEDURE Mise_a_jour_table_TRIE IS -- table temporaire C_ INDIVIDUEL_CHOIX : prend les valeurs des 3 critères CURSOR C_INDIVIDUEL_CHOIX ( mon_no_dossier CHAR, mon_no_candidature REAL, mon_critere NUMBER) IS SELECT choix FROM bareme_individuel WHERE bareme_individuel.no_dossier = mon_no_dossier AND bareme_individuel.no_candidature = mon_no_candidature AND bareme_individuel.code_critere = mon_critere; -- table temporaire C_ INDIVIDUEL_CHOIX : prend la note de brevet CURSOR C_INDIVIDUEL_NOTE_BREVET ( mon_no_dossier CHAR, mon_no_candidature REAL, mon_critere NUMBER) IS SELECT note FROM bareme_individuel WHERE bareme_individuel.no_dossier = mon_no_dossier AND bareme_individuel.no_candidature = mon_no_candidature AND bareme_individuel.code_critere = mon_critere; -- table temporaire C_TRI_PAR_NOTE : prend les valeurs de la table sig97_candidat_select_tmp CURSOR C_TRI_PAR_NOTE IS SELECT no_dossier, no_candidature, formation, departement1, departement2, departement3, departement4, departement5, note_bareme, note_prepro, date_naissance, date_retour_dossier FROM sig97_candidat_select_tmp WHERE no_dossier LIKE mon_no_dossier; -- Declaration des variables T_no_dossier sig97_candidat_select_tmp.no_dossier%TYPE; T_no_candidature sig97_candidat_select_tmp.no_candidature%TYPE; T_formation sig97_candidat_select_tmp.formation%TYPE; T_departement1 sig97_candidat_select_tmp.departement1%TYPE; T_departement2 sig97_candidat_select_tmp.departement2%TYPE; T_departement3 sig97_candidat_select_tmp.departement3%TYPE; T_departement4 sig97_candidat_select_tmp.departement4%TYPE; T_departement5 sig97_candidat_select_tmp.departement5%TYPE; T_note_bareme sig97_candidat_select_tmp.note_bareme%TYPE; T_note_prepro sig97_candidat_select_tmp.note_prepro%TYPE; T_date_naissance sig97_candidat_select_tmp.date_naissance%TYPE; T_date_retour_dossier sig97_candidat_select_tmp.date_retour_dossier%TYPE; I_mois_enseignement bareme_individuel.choix%TYPE;
  • 67. Rapport de stage à l’IUFM de Versailles Frédéric Sagez I_peri_educ_ou_scol bareme_individuel.choix%TYPE; I_activite_de_salarie bareme_individuel.choix%TYPE; I_total_brevet bareme_individuel.note%TYPE; -- Initialise par défaut le rang init_du_rang init_du_rang sig97_candidat_select_tmp.rang%TYPE DEFAULT -1; Page 67 sur 99 BEGIN OPEN C_TRI_PAR_NOTE; LOOP FETCH C_TRI_PAR_NOTE INTO T_no_dossier, T_no_candidature, T_formation, T_departement1, T_departement2, T_departement3, T_departement4, T_departement5, T_note_bareme, T_note_prepro, T_date_naissance, T_date_retour_dossier; -- On sort lorsqu'il n'y a plus de candidat à traiter EXIT WHEN C_TRI_PAR_NOTE%NOTFOUND; --> Mise à jour de l'activité d'enseignement FOR le_choix IN C_INDIVIDUEL_CHOIX ( T_no_dossier, T_no_candidature, 3 ) LOOP I_mois_enseignement := le_choix.choix; END LOOP; --> Mise à jour de l'activité d'education FOR le_choix IN C_INDIVIDUEL_CHOIX ( T_no_dossier, T_no_candidature, 5 ) LOOP I_peri_educ_ou_scol := le_choix.choix; END LOOP; --> Mise à jour de l'activité salariée > 6 mois FOR le_choix IN C_INDIVIDUEL_CHOIX ( T_no_dossier, T_no_candidature, 6 ) LOOP I_activite_de_salarie := le_choix.choix; END LOOP; --> Mise à jour de la note totale des brevets obtenus FOR le_choix IN C_INDIVIDUEL_NOTE_BREVET ( T_no_dossier, T_no_candidature, 8 ) LOOP I_total_brevet := le_choix.note; END LOOP; -- Met les valeurs dans la table sig97_candidat_trie_tmp INSERT INTO sig97_candidat_trie_tmp VALUES ( T_no_dossier, T_no_candidature, T_formation, T_departement1, T_departement2,
  • 68. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 68 sur 99 T_departement3, T_departement4, T_departement5, T_note_bareme, T_note_prepro, T_date_naissance, T_date_retour_dossier, I_mois_enseignement, I_peri_educ_ou_scol, I_activite_de_salarie, I_total_brevet, init_du_rang ); END LOOP; CLOSE C_TRI_PAR_NOTE; Message_Utilisateur('La procedure Mise_a_jour_table_TRIE est FINI.'); COMMIT; EXCEPTION WHEN unique_constraint THEN Message_Utilisateur('ERREUR dans la procedure Mise_a_jour_table_TRIE : Effacer le contenu de la table temporaire SIG97_CANDIDAT_TRIE_TMP.'); arret_du_programme := TRUE; END Mise_a_jour_table_TRIE; /* ######################################################## */ /* ### PROCEDURE Candidature_Trie #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### la_note_bareme : réel ######## */ /* ######### la_note_prepro : réel ######## */ /* ######### la_note_enseigne : caractère ######## */ /* ######### la_note_peri_educ_scol : caractère ######## */ /* ######### la_note_activite : caractère ######## */ /* ######### l_indice_du_rang : réel ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### Selectionne les candidats ayant la note de bareme, la note de ### */ /* ### prepro, la note d'enseignement, la note peri-educative ou ### */ /* ### péri-scolaire, la note d'activite salariale passés en parametre ### */ /* ### et les inserent dans la table SIG97_CANDIDAT_TRIE ### */ /* ### par ordre décroissant de la note de bareme et de l'age tout ### */ /* ### en leur mettant un rang. ### */ /* ######################################################## */ PROCEDURE Candidature_Trie(la_note_bareme REAL, la_note_prepro REAL, la_note_enseigne CHAR, la_note_peri_educ_scol CHAR, la_note_activite CHAR, l_indice_du_rang IN OUT REAL) IS -- table temporaire C_TRIAGE : le tri par critere ranger par ordre croissant -- des notes de brevet et de l'age CURSOR C_TRIAGE (
  • 69. Rapport de stage à l’IUFM de Versailles Frédéric Sagez ma_note_bareme REAL, ma_note_prepro REAL, ma_note_enseigne CHAR, ma_note_peri_educ_scol CHAR, ma_note_activite CHAR Page 69 sur 99 ) IS SELECT no_dossier, no_candidature, formation, departement1, departement2, departement3, departement4, departement5, note_bareme, note_prepro, date_naissance, date_retour_dossier, enseignement, peri_educ_scol, activite_salarie, note_brevet, rang FROM sig97_candidat_trie_tmp WHERE no_dossier LIKE mon_no_dossier AND sig97_candidat_trie_tmp.note_bareme LIKE ma_note_bareme AND sig97_candidat_trie_tmp.note_prepro LIKE ma_note_prepro AND sig97_candidat_trie_tmp.enseignement LIKE ma_note_enseigne AND sig97_candidat_trie_tmp.peri_educ_scol LIKE ma_note_peri_educ_scol AND sig97_candidat_trie_tmp.activite_salarie LIKE ma_note_activite ORDER BY note_brevet DESC,date_naissance DESC; BEGIN FOR candidat IN C_TRIAGE(la_note_bareme,la_note_prepro, la_note_enseigne,la_note_peri_educ_scol,la_note_activite) LOOP INSERT INTO sig97_candidat_trie VALUES ( candidat.no_dossier, candidat.no_candidature, candidat.formation, candidat.departement1, candidat.departement2, candidat.departement3, candidat.departement4, candidat.departement5, candidat.note_bareme, candidat.note_prepro, candidat.date_naissance, candidat.date_retour_dossier, candidat.enseignement, candidat.peri_educ_scol, candidat.activite_salarie, candidat.note_brevet, l_indice_du_rang );
  • 70. Rapport de stage à l’IUFM de Versailles Frédéric Sagez l_indice_du_rang := l_indice_du_rang + 1; Page 70 sur 99 END LOOP; END Candidature_Trie; /* ######################################################## */ /* ### FUNCTION Test_le_Nbre_de_Candidat #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### la_note_bareme : réel ######## */ /* ######### la_note_prepro : réel ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### La fonction retourne VRAI si il y a plus d'un candidat ayant la### */ /* ### meme note de bareme et la meme note de prepro et retourne ### */ /* ### FAUX si il y en a aucun. ### */ /* ######################################################## */ FUNCTION Test_le_Nbre_de_Candidat(la_note_bareme REAL, la_note_prepro REAL ) RETURN BOOLEAN IS -- table temporaire C_TRIAGE : le tri par critere CURSOR C_VERIFIE_NBRE( ma_note_bareme REAL, ma_note_prepro REAL ) IS SELECT no_dossier FROM sig97_candidat_trie_tmp WHERE no_dossier LIKE mon_no_dossier AND sig97_candidat_trie_tmp.note_bareme LIKE ma_note_bareme AND sig97_candidat_trie_tmp.note_prepro LIKE ma_note_prepro; -- variables locales compteur_test REAL DEFAULT 0; -- contient le nombre total de candidat selectionnés la_verite BOOLEAN DEFAULT FALSE; -- indique que l'on peut effectuer le traitement BEGIN -- Compte le nombre total de candidat FOR le_nombre IN C_VERIFIE_NBRE(la_note_bareme, la_note_prepro) LOOP compteur_test := compteur_test + 1; END LOOP; -- Test si il y a plus d'un candidat est retourne VRAI IF ( compteur_test > 0 ) THEN la_verite := TRUE; END IF; RETURN la_verite; END Test_le_Nbre_de_Candidat; /* ######################################################## */ /* ### PROCEDURE Tri_par_selection #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### aucun ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### On va trier les candidats de la table SIG97_CANDI DAT_ ### */ /* ### TRIE_TMP dont leur note de bareme sera incluse entre ### */ /* ### 30 et 69 (les derogataires ont une note > 70 mais on ne les ### */ /* ### comptent pas), puis pour chaque note de prepro(0,3,5,6,8,10)### */
  • 71. Rapport de stage à l’IUFM de Versailles Frédéric Sagez /* ### on va les trier par ordre de critère. ### */ /* ######################################################## */ Page 71 sur 99 PROCEDURE Tri_par_selection IS -- Variables constantes de critère enseigneMAX CONSTANT CHAR(1) DEFAULT 'O'; enseigneMIN CONSTANT CHAR(1) DEFAULT 'N'; peri_educMAX CONSTANT CHAR(1) DEFAULT 'O'; peri_educMIN CONSTANT CHAR(1) DEFAULT 'N'; activiteMAX CONSTANT CHAR(1) DEFAULT 'O'; activiteMIN CONSTANT CHAR(1) DEFAULT 'N'; -- Les indices pour la note de bareme et de prepro ind_bareme REAL; ind_prepro REAL; -- Indice pour mettre le rang ind_rang REAL DEFAULT 1; BEGIN -- On ne prend pas les derogataires FOR ind_bareme IN REVERSE 30..69 LOOP FOR ind_prepro IN REVERSE 0..10 LOOP -- Test si il y a des candidats a triés IF ( Test_le_Nbre_de_Candidat(ind_bareme,ind_prepro) ) THEN Candidature_Trie(ind_bareme,ind_prepro,enseigneMAX,peri_educMAX,activiteMAX,ind_rang); Candidature_Trie(ind_bareme,ind_prepro,enseigneMAX,peri_educMAX,activiteMIN,ind_rang); Candidature_Trie(ind_bareme,ind_prepro,enseigneMAX,peri_educMIN,activiteMAX,ind_rang); Candidature_Trie(ind_bareme,ind_prepro,enseigneMAX,peri_educMIN,activiteMIN,ind_rang); Candidature_Trie(ind_bareme,ind_prepro,enseigneMIN,peri_educMAX,activiteMAX,ind_rang); Candidature_Trie(ind_bareme,ind_prepro,enseigneMIN,peri_educMAX,activiteMIN,ind_rang); Candidature_Trie(ind_bareme,ind_prepro,enseigneMIN,peri_educMIN,activiteMAX,ind_rang); Candidature_Trie(ind_bareme,ind_prepro,enseigneMIN,peri_educMIN,activiteMIN,ind_rang) END IF; END LOOP; END LOOP; Message_Utilisateur('La procedure Tri_par_selection est FINI.'); COMMIT; EXCEPTION WHEN unique_constraint THEN Message_Utilisateur('ERREUR dans la procedure Tri_par_selection : Effacer le contenu de la table SIG97_CANDIDAT_TRIE.'); arret_du_programme := TRUE; END Tri_par_selection; /* #### Fin des sous procedures et fonctions de la procedure de tri #### */ /* {{{{{{{{{{{{{{{{{{{{{{{{{{ Debut de la procedure de tri {{{{{{{{{{{{{{{{{{{{{{{{{{ */ PROCEDURE Tri_des_Candidats(affiche_erreur IN OUT BOOLEAN) IS
  • 72. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 72 sur 99 BEGIN -- Saisie des candidats admissiblent et verifications Initialise_Candidat_Desc(affiche_erreur); -- prend des donnees supplementaires Tri_par_note_de_bareme; -- prend des donnees supplementaires Mise_a_jour_table_TRIE; -- On tri les candidats selon les critères de préférences Tri_par_selection; -- On valide les changements COMMIT; END Tri_des_Candidats; /* }}}}}}}}}}}}}}}}}}}}}}}}}}} Fin de la procedure de tri }}}}}}}}}}}}}}}}}}}}}}}}}}} */ /* ######################################################## */ /* ### PROCEDURE Ajout_des_derogataires #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### aucun ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### Ajoute les derogataires (note de bareme > 69) dans la table ### */ /* ### SIG97_CANDIDAT_TRIE en leur mettant un rang de zéro ### */ /* ### car ils sont proritaires sur les autres candidats. ### */ /* ### On change les capacités initiales de chaque centre lorsque l'on### */ /* ### insère un dérogataire dans l'un de ces cinq centres. ### */ /* ######################################################## */ PROCEDURE Ajout_des_derogataires IS -- La note de bareme minimum la_note_de_baremeMIN CONSTANT candidature.note_bareme%TYPE DEFAULT 69; -- table temporaire C_DEROGATAIRE : on verifie que se sont bien des derogataires -- et qu'ils valident bien toutes les conditions CURSOR C_DEROGATAIRE IS SELECT candidature.no_dossier, candidature.no_candidature, candidature.formation, etudiant.nom_usuel, etudiant.prenom, etudiant.adresse, etudiant.code_postal, etudiant.ville, candidature.departement1, candidature.departement2, candidature.departement3, candidature.departement4, candidature.departement5, candidature.note_bareme, etudiant.date_naissance, candidature.date_retour_dossier FROM candidature, etudiant
  • 73. Rapport de stage à l’IUFM de Versailles Frédéric Sagez WHERE (candidature.no_dossier LIKE mon_no_dossier AND candidature.no_dossier NOT LIKE refus_no_dossier ) AND candidature.formation LIKE ma_formation AND candidature.no_dossier = etudiant.no_dossier AND candidature.note_bareme > la_note_de_baremeMIN AND candidature.date_retour_dossier > '01-JAN-00' AND (candidature.condition_requise = '2' OR candidature.condition_requise = '3'); -- table temporaire C_DERO_INDIVIDUEL_NOTE : prend la note du brevet et d'entretien (8,9) CURSOR C_DERO_INDIVIDUEL_NOTE( mon_no_dossier CHAR, mon_no_candidature REAL, Page 73 sur 99 mon_critere NUMBER) IS SELECT note FROM bareme_individuel WHERE bareme_individuel.no_dossier = mon_no_dossier AND bareme_individuel.no_candidature = mon_no_candidature AND bareme_individuel.code_critere = mon_critere; -- Declaration des variables DERO_no_dossier candidature.no_dossier%TYPE; DERO_no_candidature candidature.no_candidature%TYPE; DERO_formation candidature.formation%TYPE; DERO_departement1 candidature.departement1%TYPE; DERO_departement2 candidature.departement2%TYPE; DERO_departement3 candidature.departement3%TYPE; DERO_departement4 candidature.departement4%TYPE; DERO_departement5 candidature.departement5%TYPE; DERO_note_bareme candidature.note_bareme%TYPE; DERO_date_naissance etudiant.date_naissance%TYPE; DERO_date_retour_dossier candidature.date_retour_dossier%TYPE; -- Autres renseignement sur le candidat DERO_nom_usuel etudiant.nom_usuel%TYPE; DERO_prenom etudiant.prenom%TYPE; DERO_adresse etudiant.adresse%TYPE; DERO_code_postal etudiant.code_postal%TYPE; DERO_ville etudiant.ville%TYPE; DERO_I_entretien bareme_individuel.note%TYPE; -- Initialise le rang definitif des derogataires rang_derogataire sig97_candidat_trie.rang%TYPE DEFAULT 0; -- variables indiquant le numero du departement ou est admis le candidat -- en sachant que c'est le premier departement qui est choisi comme voeu numero_departement1 sig97_admis_cergy.no_departement1%TYPE DEFAULT '*'; numero_departement2 sig97_admis_cergy.no_departement2%TYPE DEFAULT '-'; numero_departement3 sig97_admis_cergy.no_departement3%TYPE DEFAULT '-'; numero_departement4 sig97_admis_cergy.no_departement4%TYPE DEFAULT '-'; numero_departement5 sig97_admis_cergy.no_departement5%TYPE DEFAULT '-'; BEGIN OPEN C_DEROGATAIRE; LOOP FETCH C_DEROGATAIRE INTO DERO_no_dossier, DERO_no_candidature, DERO_formation, DERO_nom_usuel,
  • 74. Rapport de stage à l’IUFM de Versailles Frédéric Sagez DERO_prenom, DERO_adresse, DERO_code_postal, DERO_ville, DERO_departement1, DERO_departement2, DERO_departement3, DERO_departement4, DERO_departement5, DERO_note_bareme, DERO_date_naissance, DERO_date_retour_dossier; -- Sort de la boucle si il n'y a plus de candidat EXIT WHEN C_DEROGATAIRE%NOTFOUND; --> Prend la note d'entretien du candidat derogataire FOR le_choix IN C_DERO_INDIVIDUEL_NOTE( DERO_no_dossier, Page 74 sur 99 DERO_no_candidature, 9 ) LOOP DERO_I_entretien := le_choix.note; END LOOP; -- Verifie la note d'entretien 70 et insere le candidat dans -- la table sig97_admis_nom du centre IF ( DERO_I_entretien = 70 ) THEN IF ( DERO_departement1 = 'A' ) THEN INSERT INTO sig97_admis_antony_vdb VALUES ( DERO_no_dossier, DERO_no_candidature, DERO_nom_usuel, DERO_prenom, DERO_adresse, DERO_code_postal, DERO_ville, DERO_departement1, DERO_departement2, DERO_departement3, DERO_departement4, DERO_departement5, numero_departement1, numero_departement2, numero_departement3, numero_departement4, numero_departement5, DERO_departement1, DERO_formation, DERO_note_bareme, rang_derogataire ); -- Decremente ICI le quota du centre initial d'Antony UPDATE sig97_capacite_centre SET quota_centre_initial = quota_centre_initial - 1 WHERE code_centre = '92V'; END IF; -- Insere le candidat dans la liste des admis de Cergy
  • 75. Rapport de stage à l’IUFM de Versailles Frédéric Sagez IF ( DERO_departement1 = 'C' ) THEN INSERT INTO sig97_admis_cergy VALUES ( DERO_no_dossier, DERO_no_candidature, DERO_nom_usuel, DERO_prenom, DERO_adresse, DERO_code_postal, DERO_ville, DERO_departement1, DERO_departement2, DERO_departement3, DERO_departement4, DERO_departement5, numero_departement1, numero_departement2, numero_departement3, numero_departement4, numero_departement5, DERO_departement1, DERO_formation, DERO_note_bareme, rang_derogataire ); -- Decremente ICI le quota du centre initial de Cergy UPDATE sig97_capacite_centre SET quota_centre_initial = quota_centre_initial - 1 WHERE code_centre = '95'; END IF; -- Insere le candidat dans la liste des admis d'Etiolles IF ( DERO_departement1 = 'E' ) THEN INSERT INTO sig97_admis_etiolles VALUES ( DERO_no_dossier, DERO_no_candidature, DERO_nom_usuel, DERO_prenom, DERO_adresse, DERO_code_postal, DERO_ville, DERO_departement1, DERO_departement2, DERO_departement3, DERO_departement4, DERO_departement5, numero_departement1, numero_departement2, numero_departement3, numero_departement4, numero_departement5, DERO_departement1, DERO_formation, DERO_note_bareme, rang_derogataire ); -- Decremente ICI le quota du centre initial d'Etiolles Page 75 sur 99
  • 76. Rapport de stage à l’IUFM de Versailles Frédéric Sagez UPDATE sig97_capacite_centre SET quota_centre_initial = quota_centre_initial - 1 WHERE code_centre = '91'; END IF; -- Insere le candidat dans la liste des admis de St Germain IF ( DERO_departement1 = 'S' ) THEN INSERT INTO sig97_admis_st_germain VALUES ( DERO_no_dossier, DERO_no_candidature, DERO_nom_usuel, DERO_prenom, DERO_adresse, DERO_code_postal, DERO_ville, DERO_departement1, DERO_departement2, DERO_departement3, DERO_departement4, DERO_departement5, numero_departement1, numero_departement2, numero_departement3, numero_departement4, numero_departement5, DERO_departement1, DERO_formation, DERO_note_bareme, rang_derogataire ); -- Decremente ICI le quota du centre initial de St Germain UPDATE sig97_capacite_centre SET quota_centre_initial = quota_centre_initial - 1 WHERE code_centre = '78S'; END IF; -- Insere le candidat dans la liste des admis de Versaiiles IF ( DERO_departement1 = 'V' ) THEN INSERT INTO sig97_admis_versailles VALUES ( DERO_no_dossier, DERO_no_candidature, DERO_nom_usuel, DERO_prenom, DERO_adresse, DERO_code_postal, DERO_ville, DERO_departement1, DERO_departement2, DERO_departement3, DERO_departement4, DERO_departement5, numero_departement1, numero_departement2, numero_departement3, numero_departement4, numero_departement5, DERO_departement1, Page 76 sur 99
  • 77. Rapport de stage à l’IUFM de Versailles Frédéric Sagez DERO_formation, DERO_note_bareme, rang_derogataire ); -- Decremente ICI le quota du centre initial de Versailles UPDATE sig97_capacite_centre SET quota_centre_initial = quota_centre_initial - 1 WHERE code_centre = '78V'; Page 77 sur 99 END IF; ELSE Inscrit_Erreur('PAS PRIS EN COMPTE : Dérogataire numéro '||DERO_no_dossier||',Note Entretien = '||DERO_I_entretien||', Note de bareme = '||DERO_note_bareme); END IF; END LOOP; CLOSE C_DEROGATAIRE; Message_Utilisateur('La procedure Ajout_des_derogataires est FINI.'); COMMIT; EXCEPTION WHEN unique_constraint THEN Message_Utilisateur('ERREUR dans la procedure Ajout_des_derogataires : Effacer le contenu des tables SIG97_ADMIS_nom du centre.'); arret_du_programme := TRUE; END Ajout_des_derogataires; /* ### Debut des sous procedures et fonctions de la procedure d'attribution ### */ /* ######################################################## */ /* ### PROCEDURE Met_la_capacite_initiale #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### le_code_du_centre : caractère ######## */ /* ######### le_quota_du_centre : réel ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### Prends les capacités de chaque centre dans la table ### */ /* ### SIG97_CAPACITE_CENTRE. ### */ /* ######################################################## */ PROCEDURE Met_la_capacite_initiale( le_code_du_centre CHAR, le_quota_du_centre IN OUT REAL ) IS -- Table temporaire : prend la capacite initial des centres CURSOR C_CAPACITE_CENTRE( mon_code_centre CHAR ) IS SELECT quota_centre_initial FROM sig97_capacite_centre WHERE code_centre = mon_code_centre; BEGIN FOR le_code IN C_CAPACITE_CENTRE( le_code_du_centre ) LOOP
  • 78. Rapport de stage à l’IUFM de Versailles Frédéric Sagez le_quota_du_centre := le_code.quota_centre_initial; END LOOP; Message_Utilisateur('La procedure Met_la_capacite_initiale du centre Page 78 sur 99 '||le_code_du_centre||' est FINI.'); COMMIT; END Met_la_capacite_initiale; /* ######################################################## */ /* ### FUNCTION Test_place_Centre #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### le_quota_du_centre : réel ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### La fonction retourne VRAI si il reste de la place sinon FAUX.### */ /* ######################################################## */ FUNCTION Test_place_Centre( le_quota_du_centre REAL ) RETURN BOOLEAN IS -- Indique si il reste de la place ou pas test_quota BOOLEAN DEFAULT TRUE; BEGIN IF ( le_quota_du_centre <= 0 ) THEN test_quota := FALSE; -- plus de place END IF; RETURN test_quota; END Test_place_Centre; /* ### Fin des sous procedures et fonctions de la procedure d'attribution ### */ /* ######################################################## */ /* ### PROCEDURE Attribution_des_Centres #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### aucun ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### Effectue les attributions de chaque candidat dans le centre ### */ /* ### qu'il a designé par ordre de preference tout en regardant la ### */ /* ### place disponible dans le centre. ### */ /* ### L' attribution s'arrete lorsqu'il n'y a plus de place dans ### */ /* ### les cinq centres. ### */ /* ### On rajoute les dernieres informations concernant ### */ /* ### le candidat : le nom, le prenom et l'adresse complete. ### */ /* ######################################################## */ PROCEDURE Attribution_des_Centres IS -- Table temporaire : prend les informations de chaque candidat -- en commencant par le 1er jusqu'au dernier CURSOR C_CANDIDAT_TRIE IS SELECT sig97_candidat_trie.no_dossier,
  • 79. Rapport de stage à l’IUFM de Versailles Frédéric Sagez sig97_candidat_trie.no_candidature, sig97_candidat_trie.formation, etudiant.nom_usuel, etudiant.prenom, etudiant.adresse, etudiant.code_postal, etudiant.ville, sig97_candidat_trie.departement1, sig97_candidat_trie.departement2, sig97_candidat_trie.departement3, sig97_candidat_trie.departement4, sig97_candidat_trie.departement5, sig97_candidat_trie.note_bareme, sig97_candidat_trie.rang FROM sig97_candidat_trie, etudiant WHERE sig97_candidat_trie.no_dossier LIKE mon_no_dossier AND sig97_candidat_trie.no_dossier = etudiant.no_dossier ORDER BY rang ASC; -- Capacité de chaque centre CentreA_quota REAL DEFAULT 0; CentreC_quota REAL DEFAULT 0; CentreE_quota REAL DEFAULT 0; CentreS_quota REAL DEFAULT 0; CentreV_quota REAL DEFAULT 0; -- Code de chaque centre Code_CentreA sig97_capacite_centre.code_centre%TYPE DEFAULT '92V'; Code_CentreC sig97_capacite_centre.code_centre%TYPE DEFAULT '95'; Code_CentreE sig97_capacite_centre.code_centre%TYPE DEFAULT '91'; Code_CentreS sig97_capacite_centre.code_centre%TYPE DEFAULT '78S'; Code_CentreV sig97_capacite_centre.code_centre%TYPE DEFAULT '78V'; -- indique si il reste de la place dans un centre CentreA_libre BOOLEAN DEFAULT TRUE; CentreC_libre BOOLEAN DEFAULT TRUE; CentreE_libre BOOLEAN DEFAULT TRUE; CentreS_libre BOOLEAN DEFAULT TRUE; CentreV_libre BOOLEAN DEFAULT TRUE; -- Les variables locales CAND_no_dossier sig97_candidat_trie.no_dossier%TYPE; CAND_no_candidature sig97_candidat_trie.no_candidature%TYPE; CAND_formation sig97_candidat_trie.formation%TYPE; CAND_nom_usuel etudiant.nom_usuel%TYPE; CAND_prenom etudiant.prenom%TYPE; CAND_adresse etudiant.adresse%TYPE; CAND_code_postal etudiant.code_postal%TYPE; CAND_ville etudiant.ville%TYPE; CAND_departement1 sig97_candidat_trie.departement1%TYPE; CAND_departement2 sig97_candidat_trie.departement2%TYPE; CAND_departement3 sig97_candidat_trie.departement3%TYPE; CAND_departement4 sig97_candidat_trie.departement4%TYPE; CAND_departement5 sig97_candidat_trie.departement5%TYPE; CAND_note_bareme sig97_candidat_trie.note_bareme%TYPE; CAND_rang sig97_candidat_trie.rang%TYPE; Page 79 sur 99
  • 80. Rapport de stage à l’IUFM de Versailles Frédéric Sagez -- Variables concernant le candidat selectionné nom_du_departement sig97_candidat_trie.departement1%TYPE; quota_du_departement sig97_capacite_centre.quota_centre_initial%TYPE; code_du_departement sig97_capacite_centre.code_centre%TYPE; numero_du_departement REAL; attribution_du_centre BOOLEAN; /* ######################################################## */ /* ### PROCEDURE Donne_Information_Centre #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### le_nom_du_departement : caractère ######## */ /* ######### le_quota_du_departement : réel ######## */ /* ######### le_code_du_departement : caractère ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### Indique le code du departement ainsi que son quota pour ### */ /* ### chaque demande dans un centre. ### */ /* ######################################################## */ PROCEDURE Donne_Information_Centre(le_nom_du_departement CHAR, le_quota_du_departement IN OUT REAL, le_code_du_departement IN OUT CHAR ) IS Page 80 sur 99 BEGIN -- Renseignement sur le centre d'Antony Val de Bievres IF ( le_nom_du_departement = 'A' ) THEN le_quota_du_departement := CentreA_quota; le_code_du_departement := Code_CentreA; END IF; -- Renseignement sur le centre de Cergy IF ( le_nom_du_departement = 'C' ) THEN le_quota_du_departement := CentreC_quota; le_code_du_departement := Code_CentreC; END IF; -- Renseignement sur le centre d'Etiolles IF ( le_nom_du_departement = 'E' ) THEN le_quota_du_departement := CentreE_quota; le_code_du_departement := Code_CentreE; END IF; -- Renseignement sur le centre de St Germain IF ( le_nom_du_departement = 'S' ) THEN le_quota_du_departement := CentreS_quota; le_code_du_departement := Code_CentreS; END IF; -- Renseignement sur le centre de Versailles IF ( le_nom_du_departement = 'V' ) THEN le_quota_du_departement := CentreV_quota; le_code_du_departement := Code_CentreV; END IF; END Donne_Information_Centre; /* ######################################################## */ /* ### FUNCTION Traite_le_centre #### */ /* ######################################################## */
  • 81. Rapport de stage à l’IUFM de Versailles Frédéric Sagez /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### le_nom_du_departement : caractère ######## */ /* ######### le_quota_du_departement : réel ######## */ /* ######### le_code_du_departement : caractère ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### Insere dans chaque table SIG97_ADMIS_<le nom du centre> ### */ /* ### les informations du candidat qui est admissible dans le centre ### */ /* ### selectionné. ### */ /* ### La fonction retourne VRAI si le candidat a bien été admis ### */ /* ### dans le centre demandé. ### */ /* ######################################################## */ FUNCTION Traite_le_centre(le_nom_du_departement CHAR, le_quota_du_departement IN OUT REAL, le_numero_de_departement REAL ) RETURN BOOLEAN IS -- Test si le candidat a bien ete admis dans un centre tel_valeur BOOLEAN DEFAULT FALSE; -- variables indiquant le numero du departement ou est admis le candidat numero_departement1 sig97_admis_cergy.no_departement1%TYPE DEFAULT '-'; numero_departement2 sig97_admis_cergy.no_departement2%TYPE DEFAULT '-'; numero_departement3 sig97_admis_cergy.no_departement3%TYPE DEFAULT '-'; numero_departement4 sig97_admis_cergy.no_departement4%TYPE DEFAULT '-'; numero_departement5 sig97_admis_cergy.no_departement5%TYPE DEFAULT '-'; Page 81 sur 99 BEGIN -- Test si il y a de la place IF ( le_quota_du_departement > 0 )THEN -- Selectionne le numero de departement et met une etoile IF ( le_numero_de_departement = 1 ) THEN numero_departement1 := '*'; END IF; IF ( le_numero_de_departement = 2 ) THEN numero_departement2 := '*'; END IF; IF ( le_numero_de_departement = 3 ) THEN numero_departement3 := '*'; END IF; IF ( le_numero_de_departement = 4 ) THEN numero_departement4 := '*'; END IF; IF ( le_numero_de_departement = 5 ) THEN numero_departement5 := '*'; END IF; -- Insere le candidat dans la liste des admis d'Antony IF ( le_nom_du_departement = 'A' ) THEN INSERT INTO sig97_admis_antony_vdb VALUES ( CAND_no_dossier, CAND_no_candidature, CAND_nom_usuel, CAND_prenom, CAND_adresse, CAND_code_postal, CAND_ville, CAND_departement1, CAND_departement2, CAND_departement3,
  • 82. Rapport de stage à l’IUFM de Versailles Frédéric Sagez CAND_departement4, CAND_departement5, numero_departement1, numero_departement2, numero_departement3, numero_departement4, numero_departement5, le_nom_du_departement, CAND_formation, CAND_note_bareme, CAND_rang ); -- Decremente ICI le quota du centre CentreA_quota := CentreA_quota - 1; END IF; -- Insere le candidat dans la liste des admis de Cergy IF ( le_nom_du_departement = 'C' ) THEN INSERT INTO sig97_admis_cergy VALUES ( CAND_no_dossier, CAND_no_candidature, CAND_nom_usuel, CAND_prenom, CAND_adresse, CAND_code_postal, CAND_ville, CAND_departement1, CAND_departement2, CAND_departement3, CAND_departement4, CAND_departement5, numero_departement1, numero_departement2, numero_departement3, numero_departement4, numero_departement5, le_nom_du_departement, CAND_formation, CAND_note_bareme, CAND_rang ); -- Decremente ICI le quota du centre CentreC_quota := CentreC_quota - 1; END IF; -- Insere le candidat dans la liste des admis d'Etiolles IF ( le_nom_du_departement = 'E' ) THEN INSERT INTO sig97_admis_etiolles VALUES ( CAND_no_dossier, CAND_no_candidature, CAND_nom_usuel, CAND_prenom, CAND_adresse, CAND_code_postal, CAND_ville, CAND_departement1, CAND_departement2, Page 82 sur 99
  • 83. Rapport de stage à l’IUFM de Versailles Frédéric Sagez CAND_departement3, CAND_departement4, CAND_departement5, numero_departement1, numero_departement2, numero_departement3, numero_departement4, numero_departement5, le_nom_du_departement, CAND_formation, CAND_note_bareme, CAND_rang ); -- Decremente ICI le quota du centre CentreE_quota := CentreE_quota - 1; END IF; -- Insere le candidat dans la liste des admis de St Germain IF ( le_nom_du_departement = 'S' ) THEN INSERT INTO sig97_admis_st_germain VALUES ( CAND_no_dossier, CAND_no_candidature, CAND_nom_usuel, CAND_prenom, CAND_adresse, CAND_code_postal, CAND_ville, CAND_departement1, CAND_departement2, CAND_departement3, CAND_departement4, CAND_departement5, numero_departement1, numero_departement2, numero_departement3, numero_departement4, numero_departement5, le_nom_du_departement, CAND_formation, CAND_note_bareme, CAND_rang ); -- Decremente ICI le quota du centre CentreS_quota := CentreS_quota - 1; END IF; -- Insere le candidat dans la liste des admis de Versaiiles IF ( le_nom_du_departement = 'V' ) THEN INSERT INTO sig97_admis_versailles VALUES ( CAND_no_dossier, CAND_no_candidature, CAND_nom_usuel, CAND_prenom, CAND_adresse, CAND_code_postal, CAND_ville, CAND_departement1, Page 83 sur 99
  • 84. Rapport de stage à l’IUFM de Versailles Frédéric Sagez CAND_departement2, CAND_departement3, CAND_departement4, CAND_departement5, numero_departement1, numero_departement2, numero_departement3, numero_departement4, numero_departement5, le_nom_du_departement, CAND_formation, CAND_note_bareme, CAND_rang ); -- Decremente ICI le quota du centre CentreV_quota := CentreV_quota - 1; END IF; -- Le candidat a bien ete admis dans un centre tel_valeur := TRUE; Page 84 sur 99 END IF; RETURN tel_valeur; END Traite_le_centre; /* ######################################################## */ /* ### PROCEDURE Mise_a_jour_des_quotas_restant #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### aucun ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### Met à jour les quotas restant dans la table SIG97_capacite_ ### */ /* ### centre. (au cas ou il y aurait encore de la place dans un centre)### */ /* ######################################################## */ PROCEDURE Mise_a_jour_des_quotas_restant IS BEGIN -- Mise à jour du centre d'Antony UPDATE sig97_capacite_centre SET quota_centre_restant = CentreA_quota WHERE code_centre = Code_CentreA; -- Mise à jour du centre de Cergy UPDATE sig97_capacite_centre SET quota_centre_restant = CentreC_quota WHERE code_centre = Code_CentreC; -- Mise à jour du centre d'Etiolles UPDATE sig97_capacite_centre SET quota_centre_restant = CentreE_quota WHERE code_centre = Code_CentreE; -- Mise à jour du centre de St Germain UPDATE sig97_capacite_centre SET quota_centre_restant = CentreS_quota WHERE code_centre = Code_CentreS; -- Mise à jour du centre de Versailles
  • 85. Rapport de stage à l’IUFM de Versailles Frédéric Sagez UPDATE sig97_capacite_centre SET quota_centre_restant = CentreV_quota WHERE code_centre = Code_CentreV; -- On valise la mise à jour Message_Utilisateur('La procedure Mise_a_jour_des_quotas_restant est FINI.'); COMMIT; Page 85 sur 99 END Mise_a_jour_des_quotas_restant; /* {{{{{{{{{{{{{{{{{{{{{{{{{{ Debut de la procedure d'attribution {{{{{{{{{{{{{{{{{{{{{{{{{{ */ BEGIN OPEN C_CANDIDAT_TRIE; -- On prend la capacite initial de chaque centre Met_la_capacite_initiale( Code_CentreA, CentreA_quota ); Met_la_capacite_initiale( Code_CentreC, CentreC_quota ); Met_la_capacite_initiale( Code_CentreE, CentreE_quota ); Met_la_capacite_initiale( Code_CentreS, CentreS_quota ); Met_la_capacite_initiale( Code_CentreV, CentreV_quota ); -- Tant qu'il y a de la place on attribue des candidats aux centres WHILE ( (CentreA_libre AND CentreC_libre AND CentreE_libre AND CentreS_libre AND CentreV_libre) OR C_CANDIDAT_TRIE%FOUND ) LOOP -- On regarde si il y a encore de la place dans les centres CentreA_libre := Test_place_Centre( CentreA_quota ); CentreC_libre := Test_place_Centre( CentreC_quota ); CentreE_libre := Test_place_Centre( CentreE_quota ); CentreS_libre := Test_place_Centre( CentreS_quota ); CentreV_libre := Test_place_Centre( CentreV_quota ); FETCH C_CANDIDAT_TRIE INTO CAND_no_dossier, CAND_no_candidature, CAND_formation, CAND_nom_usuel, CAND_prenom, CAND_adresse, CAND_code_postal, CAND_ville, CAND_departement1, CAND_departement2, CAND_departement3, CAND_departement4, CAND_departement5, CAND_note_bareme, CAND_rang; -- Au cas qu'il y aurait plus de place que de candidats EXIT WHEN C_CANDIDAT_TRIE%NOTFOUND; -- on traite les 5 voeux du candidat -- initialise mes valeurs de départ numero_du_departement := 1; attribution_du_centre := FALSE; LOOP -- condition de sortie de la boucle : on ne traite que 5 departements -- mais aussi quand le candidat a été accepté dans un centre EXIT WHEN ( numero_du_departement > 5 ) OR attribution_du_centre; -- Selectionne le departement à traiter
  • 86. Rapport de stage à l’IUFM de Versailles Frédéric Sagez IF ( numero_du_departement = 1 ) THEN nom_du_departement := CAND_departement1; END IF; IF ( numero_du_departement = 2 ) THEN nom_du_departement := CAND_departement2; END IF; IF ( numero_du_departement = 3 ) THEN nom_du_departement := CAND_departement3; END IF; IF ( numero_du_departement = 4 ) THEN nom_du_departement := CAND_departement4; END IF; IF ( numero_du_departement = 5 ) THEN nom_du_departement := CAND_departement5; END IF; -- On prend le quota et le code du centre selectionne Donne_Information_Centre(nom_du_departement, quota_du_departement, Page 86 sur 99 code_du_departement); IF ( NOT attribution_du_centre ) THEN attribution_du_centre := Traite_le_centre(nom_du_departement, quota_du_departement, numero_du_departement); END IF; -- passe au département suivant numero_du_departement := numero_du_departement + 1; END LOOP; -- fin du LOOP END LOOP; -- fin du WHILE CLOSE C_CANDIDAT_TRIE; Mise_a_jour_des_quotas_restant; Message_Utilisateur('La procedure Attribution_des_Centres est FINI.'); COMMIT; END Attribution_des_Centres; /* ######################################################## */ /* ### PROCEDURE Met_admission_dans_CANDIDATURE #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### aucun ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### Met à jour le champ 'ADMISSION', 'FORMATION' et ### */ /* ### 'DOSSIER_RECEVABLE de la table CANDIDATURE ### */ /* ### lorsque le candidat a été admis dans un centre. ### */ /* ######################################################## */ -- tables temporaires des cinq centres CURSOR C_CANDIDAT_ADMIS_ANTONY IS SELECT sig97_admis_antony_vdb.no_dossier, sig97_admis_antony_vdb.no_candidature FROM sig97_admis_antony_vdb; CURSOR C_CANDIDAT_ADMIS_CERGY IS SELECT sig97_admis_cergy.no_dossier, sig97_admis_cergy.no_candidature FROM sig97_admis_cergy; CURSOR C_CANDIDAT_ADMIS_ETIOLLES IS SELECT sig97_admis_etiolles.no_dossier, sig97_admis_etiolles.no_candidature
  • 87. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 87 sur 99 FROM sig97_admis_etiolles; CURSOR C_CANDIDAT_ADMIS_ST_GERMAIN IS SELECT sig97_admis_st_germain.no_dossier, sig97_admis_st_germain.no_candidature FROM sig97_admis_st_germain; CURSOR C_CANDIDAT_ADMIS_VERSAILLES IS SELECT sig97_admis_versailles.no_dossier, sig97_admis_versailles.no_candidature FROM sig97_admis_versailles; -- Variables locales le_numero_de_dossier candidature.no_dossier%TYPE; le_numero_de_candidature candidature.no_candidature%TYPE; la_formation candidature.formation%TYPE; constante_OUI CONSTANT candidature.admission%TYPE DEFAULT 'O'; constante_NON CONSTANT candidature.admission%TYPE DEFAULT 'N'; BEGIN -- Mise à jour des candidats admissiblent dans le centre de Antony Val de Bievre OPEN C_CANDIDAT_ADMIS_ANTONY; LOOP FETCH C_CANDIDAT_ADMIS_ANTONY INTO le_numero_de_dossier,le_numero_de_candidature; EXIT WHEN C_CANDIDAT_ADMIS_ANTONY%NOTFOUND; UPDATE candidature SET admission = constante_OUI, formation = 'E92V', dossier_recevable = constante_OUI WHERE candidature.no_dossier = le_numero_de_dossier AND candidature.no_candidature = le_numero_de_candidature; END LOOP; CLOSE C_CANDIDAT_ADMIS_ANTONY; -- Mise à jour des candidats admissiblent dans le centre de Cergy OPEN C_CANDIDAT_ADMIS_CERGY; LOOP FETCH C_CANDIDAT_ADMIS_CERGY INTO le_numero_de_dossier,le_numero_de_candidature; EXIT WHEN C_CANDIDAT_ADMIS_CERGY%NOTFOUND; UPDATE candidature SET admission = constante_OUI, formation = 'E95', dossier_recevable = constante_OUI WHERE candidature.no_dossier = le_numero_de_dossier AND candidature.no_candidature = le_numero_de_candidature; END LOOP; CLOSE C_CANDIDAT_ADMIS_CERGY; -- Mise à jour des candidats admissiblent dans le centre de Etiolles OPEN C_CANDIDAT_ADMIS_ETIOLLES; LOOP FETCH C_CANDIDAT_ADMIS_ETIOLLES INTO le_numero_de_dossier,le_numero_de_candidature; EXIT WHEN C_CANDIDAT_ADMIS_ETIOLLES%NOTFOUND; UPDATE candidature
  • 88. Rapport de stage à l’IUFM de Versailles Frédéric Sagez SET admission = constante_OUI, formation = 'E91', dossier_recevable = constante_OUI WHERE candidature.no_dossier = le_numero_de_dossier AND candidature.no_candidature = le_numero_de_candidature; END LOOP; CLOSE C_CANDIDAT_ADMIS_ETIOLLES; -- Mise à jour des candidats admissiblent dans le centre de St Germain OPEN C_CANDIDAT_ADMIS_ST_GERMAIN; LOOP FETCH C_CANDIDAT_ADMIS_ST_GERMAIN INTO le_numero_de_dossier,le_numero_de_candidature; EXIT WHEN C_CANDIDAT_ADMIS_ST_GERMAIN%NOTFOUND; UPDATE candidature SET admission = constante_OUI, formation = 'E78S', dossier_recevable = constante_OUI WHERE candidature.no_dossier = le_numero_de_dossier AND candidature.no_candidature = le_numero_de_candidature; END LOOP; CLOSE C_CANDIDAT_ADMIS_ST_GERMAIN; -- Mise à jour des candidats admissiblent dans le centre de Versailles OPEN C_CANDIDAT_ADMIS_VERSAILLES; LOOP FETCH C_CANDIDAT_ADMIS_VERSAILLES INTO le_numero_de_dossier,le_numero_de_candidature; EXIT WHEN C_CANDIDAT_ADMIS_VERSAILLES%NOTFOUND; UPDATE candidature SET admission = constante_OUI, formation = 'E78V', dossier_recevable = constante_OUI WHERE candidature.no_dossier = le_numero_de_dossier AND candidature.no_candidature = le_numero_de_candidature; END LOOP; CLOSE C_CANDIDAT_ADMIS_VERSAILLES; -- On valide les changements Message_Utilisateur('La procedure Met_admission_dans_CANDIDATURE est FINI.'); COMMIT; Page 88 sur 99 END Met_admission_dans_CANDIDATURE; /* ######################################################## */ /* ### PROCEDURE Met_le_Nombre_Atypique #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### aucun ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */ /* ### Met dans le champ <nbre_atypique> le nombre total ### */ /* ### d'atypique dans les tables SIG97_ADMIS_ nom du centre. ### */ /* ######################################################## */ PROCEDURE Met_le_Nombre_Atypique IS
  • 89. Rapport de stage à l’IUFM de Versailles Frédéric Sagez -- table temporaire C_ADMIS_ANTONY_VDB : compte le nombre de candidat atypique -- dans la table sig97_admis_antony_vdb CURSOR C_ADMIS_ANTONY_VDB( ma_condition_requise CHAR, mon_champ_libre10 REAL ) IS SELECT sig97_admis_antony_vdb.no_dossier FROM sig97_admis_antony_vdb, etudiant, candidature WHERE sig97_admis_antony_vdb.no_dossier LIKE mon_no_dossier AND sig97_admis_antony_vdb.formation LIKE ma_formation AND sig97_admis_antony_vdb.no_dossier = etudiant.no_dossier AND sig97_admis_antony_vdb.no_dossier = candidature.no_dossier AND candidature.condition_requise = ma_condition_requise AND etudiant.libre10 = mon_champ_libre10; -- table temporaire C_ADMIS_CERGY : compte le nombre de candidat atypique -- dans la table sig97_admis_cergy CURSOR C_ADMIS_CERGY( ma_condition_requise CHAR, mon_champ_libre10 REAL ) IS SELECT sig97_admis_cergy.no_dossier FROM sig97_admis_cergy, etudiant, candidature WHERE sig97_admis_cergy.no_dossier LIKE mon_no_dossier AND sig97_admis_cergy.formation LIKE ma_formation AND sig97_admis_cergy.no_dossier = etudiant.no_dossier AND sig97_admis_cergy.no_dossier = candidature.no_dossier AND candidature.condition_requise = ma_condition_requise AND etudiant.libre10 = mon_champ_libre10; -- table temporaire C_ADMIS_ETIOLLES : compte le nombre de candidat atypique -- dans la table sig97_admis_etiolles CURSOR C_ADMIS_ETIOLLES( ma_condition_requise CHAR, mon_champ_libre10 REAL ) IS SELECT sig97_admis_etiolles.no_dossier FROM sig97_admis_etiolles, etudiant, candidature WHERE sig97_admis_etiolles.no_dossier LIKE mon_no_dossier AND sig97_admis_etiolles.formation LIKE ma_formation AND sig97_admis_etiolles.no_dossier = etudiant.no_dossier AND sig97_admis_etiolles.no_dossier = candidature.no_dossier AND candidature.condition_requise = ma_condition_requise AND etudiant.libre10 = mon_champ_libre10; -- table temporaire C_ADMIS_ST_GERMAIN : compte le nombre de candidat atypique -- dans la table sig97_admis_st_germain CURSOR C_ADMIS_ST_GERMAIN( ma_condition_requise CHAR, mon_champ_libre10 REAL ) IS SELECT sig97_admis_st_germain.no_dossier FROM sig97_admis_st_germain, etudiant, candidature WHERE sig97_admis_st_germain.no_dossier LIKE mon_no_dossier AND sig97_admis_st_germain.formation LIKE ma_formation AND sig97_admis_st_germain.no_dossier = etudiant.no_dossier AND sig97_admis_st_germain.no_dossier = candidature.no_dossier AND candidature.condition_requise = ma_condition_requise AND etudiant.libre10 = mon_champ_libre10; -- table temporaire C_ADMIS_VERSAILLES : compte le nombre de candidat atypique -- dans la table sig97_admis_versailles CURSOR C_ADMIS_VERSAILLES( ma_condition_requise CHAR, mon_champ_libre10 REAL ) IS SELECT sig97_admis_versailles.no_dossier FROM sig97_admis_versailles, etudiant, candidature WHERE sig97_admis_versailles.no_dossier LIKE mon_no_dossier AND sig97_admis_versailles.formation LIKE ma_formation AND sig97_admis_versailles.no_dossier = etudiant.no_dossier AND sig97_admis_versailles.no_dossier = candidature.no_dossier Page 89 sur 99
  • 90. Rapport de stage à l’IUFM de Versailles Frédéric Sagez AND candidature.condition_requise = ma_condition_requise AND etudiant.libre10 = mon_champ_libre10; -- Les condidtions pour etre atypique la_condition_requise candidature.condition_requise%TYPE DEFAULT '10'; le_champ_libre10 etudiant.libre10%TYPE DEFAULT 1; Page 90 sur 99 BEGIN -- Compte le nombre de candidat à Antony FOR le_centre IN C_ADMIS_ANTONY_VDB( la_condition_requise, le_champ_libre10 ) LOOP UPDATE sig97_capacite_centre SET nbre_atypique = nbre_atypique + 1 WHERE code_centre = '92V'; END LOOP; -- Compte le nombre de candidat à Cergy FOR le_centre IN C_ADMIS_CERGY( la_condition_requise, le_champ_libre10 ) LOOP UPDATE sig97_capacite_centre SET nbre_atypique = nbre_atypique + 1 WHERE code_centre = '95'; END LOOP; -- Compte le nombre de candidat à Etiolles FOR le_centre IN C_ADMIS_ETIOLLES( la_condition_requise, le_champ_libre10 ) LOOP UPDATE sig97_capacite_centre SET nbre_atypique = nbre_atypique + 1 WHERE code_centre = '91'; END LOOP; -- Compte le nombre de candidat à St Germain FOR le_centre IN C_ADMIS_ST_GERMAIN( la_condition_requise, le_champ_libre10 ) LOOP UPDATE sig97_capacite_centre SET nbre_atypique = nbre_atypique + 1 WHERE code_centre = '78S'; END LOOP; -- Compte le nombre de candidat à Versailles FOR le_centre IN C_ADMIS_VERSAILLES( la_condition_requise, le_champ_libre10 ) LOOP UPDATE sig97_capacite_centre SET nbre_atypique = nbre_atypique + 1 WHERE code_centre = '78V'; END LOOP; -- On valide les changements Message_Utilisateur('La procedure Met_le_Nombre_Atypique est FINI.'); COMMIT; END Met_le_Nombre_Atypique; /* ######################################################## */ /* ### PROCEDURE Met_le_Nombre_Derogataire #### */ /* ######################################################## */ /* #################### Parametre(s) ###################### */ /* ######################################################## */ /* ######### aucun ######## */ /* ######################################################## */ /* ################### Commentaire(s) ##################### */ /* ######################################################## */
  • 91. Rapport de stage à l’IUFM de Versailles Frédéric Sagez /* ### Met dans le champ <nbre_derogataire> le nombre total de ### */ /* ### derogataire dans les tables SIG97_ADMIS_ nom du centre. ### */ /* ######################################################## */ Page 91 sur 99 PROCEDURE Met_le_Nombre_Derogataire IS -- table temporaire C_ADMIS_ANTONY_VDB : compte le nombre de candidat derogataire -- dans la table sig97_admis_antony_vdb CURSOR C_ADMIS_ANTONY_VDB( mon_rang REAL ) IS SELECT sig97_admis_antony_vdb.no_dossier FROM sig97_admis_antony_vdb WHERE sig97_admis_antony_vdb.rang = mon_rang; -- table temporaire C_ADMIS_CERGY : compte le nombre de candidat derogataire -- dans la table sig97_admis_cergy CURSOR C_ADMIS_CERGY( mon_rang REAL ) IS SELECT sig97_admis_cergy.no_dossier FROM sig97_admis_cergy WHERE sig97_admis_cergy.rang = mon_rang; -- table temporaire C_ADMIS_ETIOLLES : compte le nombre de candidat derogataire -- dans la table sig97_admis_etiolles CURSOR C_ADMIS_ETIOLLES( mon_rang REAL ) IS SELECT sig97_admis_etiolles.no_dossier FROM sig97_admis_etiolles WHERE sig97_admis_etiolles.rang = mon_rang; -- table temporaire C_ADMIS_ST_GERMAIN : compte le nombre de candidat derogataire -- dans la table sig97_admis_st_germain CURSOR C_ADMIS_ST_GERMAIN( mon_rang REAL ) IS SELECT sig97_admis_st_germain.no_dossier FROM sig97_admis_st_germain WHERE sig97_admis_st_germain.rang = mon_rang; -- table temporaire C_ADMIS_VERSAILLES : compte le nombre de candidat derogataire -- dans la table sig97_admis_versailles CURSOR C_ADMIS_VERSAILLES( mon_rang REAL ) IS SELECT sig97_admis_versailles.no_dossier FROM sig97_admis_versailles WHERE sig97_admis_versailles.rang = mon_rang; -- Les condidtions pour etre derogataire le_rang_derogataire sig97_candidat_trie.rang%TYPE DEFAULT 0; BEGIN -- Compte le nombre de candidat à Antony FOR le_centre IN C_ADMIS_ANTONY_VDB( le_rang_derogataire ) LOOP UPDATE sig97_capacite_centre SET nbre_derogataire = nbre_derogataire + 1 WHERE code_centre = '92V'; END LOOP; -- Compte le nombre de candidat à Cergy FOR le_centre IN C_ADMIS_CERGY( le_rang_derogataire ) LOOP UPDATE sig97_capacite_centre SET nbre_derogataire = nbre_derogataire + 1
  • 92. Rapport de stage à l’IUFM de Versailles Frédéric Sagez WHERE code_centre = '95'; END LOOP; -- Compte le nombre de candidat à Etiolles FOR le_centre IN C_ADMIS_ETIOLLES( le_rang_derogataire ) LOOP UPDATE sig97_capacite_centre SET nbre_derogataire = nbre_derogataire + 1 WHERE code_centre = '91'; END LOOP; -- Compte le nombre de candidat à St Germain FOR le_centre IN C_ADMIS_ST_GERMAIN( le_rang_derogataire ) LOOP UPDATE sig97_capacite_centre SET nbre_derogataire = nbre_derogataire + 1 WHERE code_centre = '78S'; END LOOP; -- Compte le nombre de candidat à Versailles FOR le_centre IN C_ADMIS_VERSAILLES( le_rang_derogataire ) LOOP UPDATE sig97_capacite_centre SET nbre_derogataire = nbre_derogataire + 1 WHERE code_centre = '78V'; END LOOP; -- On valide les changements Message_Utilisateur('La procedure Met_le_Nombre_Derogataire est FINI.'); COMMIT; Page 92 sur 99 END Met_le_Nombre_Derogataire; /* }}}}}}}}}}}}}}}}}}}}}}}}}}} Fin de la procedure d'attribution }}}}}}}}}}}}}}}}}}}}}}}}}}} */ BEGIN /* ==> Debut du programme principal <== */ --> Efface le contenu des tables selectionnées dans la procedure IF ( '&invite_efface' = 'O' ) THEN Efface_contenu_des_tables; END IF; --> Tri des candidats pour les mettres dans la table SIG97_CANDIDAT_TRIE Tri_des_Candidats( erreur_de_saisie ); --> Rajoute les derogataires dans la table SIG97_CANDIDAT_TRIE IF ( NOT arret_du_programme ) THEN Ajout_des_derogataires; END IF; --> On attribue les candidats dans chaque centre IF ( NOT arret_du_programme ) THEN Attribution_des_Centres; END IF; --> Mise à jour de la table candidature IF ( NOT arret_du_programme ) THEN Met_admission_dans_CANDIDATURE; END IF; --> Mise à jour du champ NBRE_ATYPIQUE de la table sig97_capacite_centre IF ( NOT arret_du_programme ) THEN Met_le_Nombre_Atypique; END IF; --> Mise à jour du champ NBRE_DEROGATAIRE de la table sig97_capacite_centre IF ( NOT arret_du_programme ) THEN Met_le_Nombre_Derogataire; END IF; --> Une ou des erreurs se sont produites : on le signal IF ( erreur_de_saisie ) THEN
  • 93. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Message_Utilisateur( 'Regarder la table SIG97_ERREUR_CANDIDAT : candidats qui ne Page 93 sur 99 sont pas pris en compte.' ); END IF; IF ( arret_du_programme ) THEN Message_Utilisateur( 'Erreur(s) durant le programme !!!' ); ELSE Message_Utilisateur( 'Aucune erreur durant le programme.' ); END IF; COMMIT; EXCEPTION WHEN extend_rollback_failure THEN Message_Utilisateur('ERREUR dans le programme : Faire un SHUTDOWN de la base et liser le script "space1.sql"'); arret_du_programme := TRUE; WHEN extend_rollback THEN Message_Utilisateur('ERREUR dans le programme : Lancer le script "space2.sql" et augmenter les valeurs <maxextents> et <pctincrease>.'); arret_du_programme := TRUE; END; /* ==> fin du programme principal <== */ / 9.2 Création des tables sous Oracle (creat1_0.sql) /* REM ------------------------------------------------------------------------- REM nom du script : creat1_0.sql version : 1.0 REM auteur : Frederic SAGEZ date : 16 / 06 / 1997 REM description : Efface et créé les tables pour le programme Affect97.sql REM ------------------------------------------------------------------------- */ /* REM -- On supprime les tables si elles existent deja */ DROP TABLE sig97_commentaire_prg; DROP TABLE sig97_erreur_candidat; DROP TABLE sig97_candidat_tmp; DROP TABLE sig97_candidat_select_tmp; DROP TABLE sig97_candidat_trie_tmp; DROP TABLE sig97_candidat_trie; DROP TABLE SIG97_CAPACITE_CENTRE; DROP TABLE sig97_admis_antony_vdb; DROP TABLE sig97_admis_cergy; DROP TABLE sig97_admis_etiolles; DROP TABLE sig97_admis_st_germain; DROP TABLE sig97_admis_versailles; COMMIT; -- commentaire sur le programme CREATE TABLE system.sig97_commentaire_prg ( message CHAR(120)
  • 94. Rapport de stage à l’IUFM de Versailles Frédéric Sagez ); -- remplis de candidats non valident CREATE TABLE system.sig97_erreur_candidat ( message CHAR(100) ); -- prend les bons candidats : la 'purge' CREATE TABLE system.sig97_candidat_tmp ( NO_DOSSIER CHAR(10) PRIMARY KEY, NO_CANDIDATURE FLOAT(126), FORMATION CHAR(4), DEPARTEMENT1 CHAR(3), DEPARTEMENT2 CHAR(3), DEPARTEMENT3 CHAR(3), DEPARTEMENT4 CHAR(3), DEPARTEMENT5 CHAR(3), NOTE_BAREME FLOAT(126), DATE_RETOUR_DOSSIER DATE ); -- prend des informations complementaire CREATE TABLE system.sig97_candidat_select_tmp ( NO_DOSSIER CHAR(10) PRIMARY KEY, NO_CANDIDATURE FLOAT(126), FORMATION CHAR(4), DEPARTEMENT1 CHAR(3), DEPARTEMENT2 CHAR(3), DEPARTEMENT3 CHAR(3), DEPARTEMENT4 CHAR(3), DEPARTEMENT5 CHAR(3), NOTE_BAREME FLOAT(126), NOTE_PREPRO FLOAT(126), DATE_NAISSANCE DATE, DATE_RETOUR_DOSSIER DATE, RANG FLOAT(126) ); -- prend des informations complementaire CREATE TABLE system.sig97_candidat_trie_tmp ( NO_DOSSIER CHAR(10) PRIMARY KEY, NO_CANDIDATURE FLOAT(126), FORMATION CHAR(4), DEPARTEMENT1 CHAR(3), DEPARTEMENT2 CHAR(3), DEPARTEMENT3 CHAR(3), DEPARTEMENT4 CHAR(3), DEPARTEMENT5 CHAR(3), NOTE_BAREME FLOAT(126), NOTE_PREPRO FLOAT(126), DATE_NAISSANCE DATE, DATE_RETOUR_DOSSIER DATE, ENSEIGNEMENT CHAR(1), -- activite d'enseignement > 6 mois PERI_EDUC_SCOL CHAR(1), -- activite d'education > 6 semaines ACTIVITE_SALARIE CHAR(1), -- activite salariee > 6 mois P.T. NOTE_BREVET FLOAT(126), -- note totale de tous les brevets RANG FLOAT(126) Page 94 sur 99
  • 95. Rapport de stage à l’IUFM de Versailles Frédéric Sagez ) PCTFREE 10 PCTUSED 50 TABLESPACE ROLLBACK_DATA STORAGE -- on prevoit de l'espace memoire ( initial 100k next 300k minextents 2 maxextents 121 pctincrease 40 ); -- table finalisée CREATE TABLE system.sig97_candidat_trie ( NO_DOSSIER CHAR(10) PRIMARY KEY, NO_CANDIDATURE FLOAT(126), FORMATION CHAR(4), DEPARTEMENT1 CHAR(3), DEPARTEMENT2 CHAR(3), DEPARTEMENT3 CHAR(3), DEPARTEMENT4 CHAR(3), DEPARTEMENT5 CHAR(3), NOTE_BAREME FLOAT(126), NOTE_PREPRO FLOAT(126), DATE_NAISSANCE DATE, DATE_RETOUR_DOSSIER DATE, ENSEIGNEMENT CHAR(1), -- activite d'enseignement > 6 mois PERI_EDUC_SCOL CHAR(1), -- activite d'education > 6 semaines ACTIVITE_SALARIE CHAR(1), -- activite salariee > 6 mois P.T. NOTE_BREVET FLOAT(126), -- note totale de tous les brevets : 1,2,3 RANG FLOAT(126) ) PCTFREE 10 PCTUSED 50 TABLESPACE ROLLBACK_DATA STORAGE -- on prevoit de l'espace memoire ( initial 100k next 300k minextents 2 maxextents 121 pctincrease 40 ); /* REM -- Creation de la table des capacites des centres */ CREATE TABLE system.SIG97_CAPACITE_CENTRE ( CODE_CENTRE CHAR(3), QUOTA_CENTRE_INITIAL FLOAT(126), QUOTA_CENTRE_RESTANT FLOAT(126), NBRE_ATYPIQUE FLOAT(126), NBRE_DEROGATAIRE FLOAT(126), NOM_DU_CENTRE CHAR(25) ); /* REM -- Quotas de chaque centres avec les valeurs du 'surbooking' Page 95 sur 99
  • 96. Rapport de stage à l’IUFM de Versailles Frédéric Sagez */ -- Antony Val de Bievre INSERT INTO SIG97_CAPACITE_CENTRE VALUES('92V', 770, 770, 0, 0, 'Antony Val de Bievre'); -- Etiolles INSERT INTO SIG97_CAPACITE_CENTRE VALUES('91', 960, 960, 0, 0, 'Etiolles'); -- Cergy INSERT INTO SIG97_CAPACITE_CENTRE VALUES('95', 920, 920, 0, 0, 'Cergy'); -- St Germain en Laye INSERT INTO SIG97_CAPACITE_CENTRE VALUES('78S', 580, 580, 0, 0, 'St-Germain en Laye'); -- Versailles INSERT INTO SIG97_CAPACITE_CENTRE VALUES('78V', 248, 248, 0, 0, 'Versailles'); Page 96 sur 99 -- On regarde en verifiant les valeurs SELECT * FROM SIG97_CAPACITE_CENTRE; /* REM -- Creation des tables de chaque centre */ -- Creation de la liste du centre de Cergy CREATE TABLE system.SIG97_ADMIS_CERGY ( NO_DOSSIER CHAR(10) PRIMARY KEY, NO_CANDIDATURE FLOAT(126), NOM_USUEL CHAR(25), PRENOM CHAR(20), ADRESSE VARCHAR2(255), CODE_POSTAL CHAR(5), VILLE CHAR(25), DEPARTEMENT1 CHAR(3), DEPARTEMENT2 CHAR(3), DEPARTEMENT3 CHAR(3), DEPARTEMENT4 CHAR(3), DEPARTEMENT5 CHAR(3), NO_DEPARTEMENT1 CHAR(1), NO_DEPARTEMENT2 CHAR(1), NO_DEPARTEMENT3 CHAR(1), NO_DEPARTEMENT4 CHAR(1), NO_DEPARTEMENT5 CHAR(1), DEPARTEMENT_CHOISI CHAR(3), FORMATION CHAR(4), NOTE_BAREME FLOAT(126), RANG FLOAT(126) ); -- Creation de la liste du centre d'Antony Val de Bievre CREATE TABLE system.SIG97_ADMIS_ANTONY_VdB ( NO_DOSSIER CHAR(10) PRIMARY KEY, NO_CANDIDATURE FLOAT(126), NOM_USUEL CHAR(25), PRENOM CHAR(20), ADRESSE VARCHAR2(255), CODE_POSTAL CHAR(5), VILLE CHAR(25), DEPARTEMENT1 CHAR(3), DEPARTEMENT2 CHAR(3), DEPARTEMENT3 CHAR(3), DEPARTEMENT4 CHAR(3),
  • 97. Rapport de stage à l’IUFM de Versailles Frédéric Sagez DEPARTEMENT5 CHAR(3), NO_DEPARTEMENT1 CHAR(1), NO_DEPARTEMENT2 CHAR(1), NO_DEPARTEMENT3 CHAR(1), NO_DEPARTEMENT4 CHAR(1), NO_DEPARTEMENT5 CHAR(1), DEPARTEMENT_CHOISI CHAR(3), FORMATION CHAR(4), NOTE_BAREME FLOAT(126), RANG FLOAT(126) ); -- Creation de la liste du centre de St Germain CREATE TABLE system.SIG97_ADMIS_ST_GERMAIN ( NO_DOSSIER CHAR(10) PRIMARY KEY, NO_CANDIDATURE FLOAT(126), NOM_USUEL CHAR(25), PRENOM CHAR(20), ADRESSE VARCHAR2(255), CODE_POSTAL CHAR(5), VILLE CHAR(25), DEPARTEMENT1 CHAR(3), DEPARTEMENT2 CHAR(3), DEPARTEMENT3 CHAR(3), DEPARTEMENT4 CHAR(3), DEPARTEMENT5 CHAR(3), NO_DEPARTEMENT1 CHAR(1), NO_DEPARTEMENT2 CHAR(1), NO_DEPARTEMENT3 CHAR(1), NO_DEPARTEMENT4 CHAR(1), NO_DEPARTEMENT5 CHAR(1), DEPARTEMENT_CHOISI CHAR(3), FORMATION CHAR(4), NOTE_BAREME FLOAT(126), RANG FLOAT(126) ); -- Creation de la liste du centre de Versailles CREATE TABLE system.SIG97_ADMIS_VERSAILLES ( NO_DOSSIER CHAR(10) PRIMARY KEY, NO_CANDIDATURE FLOAT(126), NOM_USUEL CHAR(25), PRENOM CHAR(20), ADRESSE VARCHAR2(255), CODE_POSTAL CHAR(5), VILLE CHAR(25), DEPARTEMENT1 CHAR(3), DEPARTEMENT2 CHAR(3), DEPARTEMENT3 CHAR(3), DEPARTEMENT4 CHAR(3), DEPARTEMENT5 CHAR(3), NO_DEPARTEMENT1 CHAR(1), NO_DEPARTEMENT2 CHAR(1), NO_DEPARTEMENT3 CHAR(1), NO_DEPARTEMENT4 CHAR(1), NO_DEPARTEMENT5 CHAR(1), DEPARTEMENT_CHOISI CHAR(3), Page 97 sur 99
  • 98. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 98 sur 99 FORMATION CHAR(4), NOTE_BAREME FLOAT(126), RANG FLOAT(126) ); -- Creation de la liste du centre d'Etiolles CREATE TABLE system.SIG97_ADMIS_ETIOLLES ( NO_DOSSIER CHAR(10) PRIMARY KEY, NO_CANDIDATURE FLOAT(126), NOM_USUEL CHAR(25), PRENOM CHAR(20), ADRESSE VARCHAR2(255), CODE_POSTAL CHAR(5), VILLE CHAR(25), DEPARTEMENT1 CHAR(3), DEPARTEMENT2 CHAR(3), DEPARTEMENT3 CHAR(3), DEPARTEMENT4 CHAR(3), DEPARTEMENT5 CHAR(3), NO_DEPARTEMENT1 CHAR(1), NO_DEPARTEMENT2 CHAR(1), NO_DEPARTEMENT3 CHAR(1), NO_DEPARTEMENT4 CHAR(1), NO_DEPARTEMENT5 CHAR(1), DEPARTEMENT_CHOISI CHAR(3), FORMATION CHAR(4), NOTE_BAREME FLOAT(126), RANG FLOAT(126) ); -- On valide le tout COMMIT; 9.3 Gestion de la mémoire (space2.sql) /* REM ------------------------------------------------------------------------- REM nom du script : space2.sql version : 1.0 REM auteur : Frederic SAGEZ date : 16 / 06 / 1997 REM description : Probleme avec les ROLLBACKS REM : Augmente la capacité d'allocation mémoire de la table REM SIG97_CANDIDAT_TRIE REM ------------------------------------------------------------------------- REM Remarque : La table SIG97_CANDIDAT_TRIE est déja créée. REM ------------------------------------------------------------------------- -- Description de la table SIG97_CANDIDAT_TRIE -- avec ses valeurs initiales CREATE TABLE system.sig97_candidat_trie ( NO_DOSSIER CHAR(10) PRIMARY KEY, ... RANG FLOAT(126) ) PCTFREE 10 PCTUSED 50 TABLESPACE ROLLBACK_DATA STORAGE
  • 99. Rapport de stage à l’IUFM de Versailles Frédéric Sagez Page 99 sur 99 ( initial 100k next 300k minextents 2 maxextents 121 pctincrease 40 ); */ -- Demande des informations PROMPT Donner la valeur 'next' pour les prochains segments : ACCEPT le_next PROMPT Donner la valeur minimale 'min' des extensions de segment mémoire : ACCEPT le_minextent PROMPT Donner la valeur maximale 'max' des extensions de segment mémoire : ACCEPT le_maxextent PROMPT Donner le pourcentage 'pctincrease' des extensions de mémoires : ACCEPT le_pctincrease -- scenario 1 : Beaucoup d'activité incluant des 'INSERT', 'UPDATE', ... ALTER TABLE sig97_candidat_trie PCTFREE = 5 PCTUSED = 60 /* -- scenario 2 : pour augmenter les performances des 'UPDATE' ALTER TABLE sig97_candidat_trie PCTFREE = 20 PCTUSED = 40 */ /* -- Table très large, on s'occupe principalement de l'espace mémoire ALTER TABLE sig97_candidat_trie PCTFREE = 5 PCTUSED = 90 */ ALTER TABLE sig97_candidat_trie STORAGE ( next &le_next minextents &le_minextent maxextents &le_maxextent pctincrease &le_pctincrease ); -- Les changements sont validés COMMIT;