diff --git a/EXOS/Exam2020-all.tex b/EXOS/Exam2020-all.tex new file mode 100644 index 0000000..2801b6a --- /dev/null +++ b/EXOS/Exam2020-all.tex @@ -0,0 +1,838 @@ +\documentclass[a4paper,11pt]{article} + +\usepackage[utf8x]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[french]{babel} +\usepackage[a4paper,hmargin=20mm,vmargin=30mm]{geometry}%\usepackage{fullpage} +\usepackage{url} +\usepackage{comment} +\usepackage{fancyhdr}% fancy header +\usepackage{multirow} +\usepackage{slashbox} + +\usepackage{color, colortbl} +\definecolor{Gray}{gray}{0.9} +\usepackage{adjustbox} +\usepackage{slashbox} +%\usepackage{times} +\usepackage{tikz,pgflibraryarrows,pgffor,pgflibrarysnakes} +\usetikzlibrary{decorations.pathreplacing} +\usetikzlibrary{calc} + +\usepackage[bf]{caption} + +\usepackage{tcolorbox} + +\usepackage{pdfpages} + +\usepackage{fancyvrb} + +\fancypagestyle{monstyle}{ +%\fancyhead{} +\renewcommand{\headrulewidth}{1pt} +%% %\renewcommand{\footrulewidth}{0.4pt} + +% \fancyhead[LE]{\slshape \thepage/ \pageref{LastPage}} +%% \fancyhead[RO]{\slshape \thepage/ \pageref{LastPage}} + + +%\fancyhf{} +%\fancyhead[LE]{\slshape LE} +%\fancyhead[CE]{\slshape CE} +%\fancyhead[RE]{\slshape RE} + +\fancyhead[LO]{\bfseries 2020-2021 BD PLS/SQL\rightmark} +%\fancyhead[CO]{\slshape APF} +\fancyhead[RO]{\bfseries ~\leftmark } + +%% %\fancyfoot{} +% \fancyfoot[LE,RO]{} + \fancyfoot[CO,CE]{}%\slshape\thepage/\pageref{LastPage}} +%% %\fancyfoot[LO,RE]{\small\slshape \ddmmyyyydate version du \today} + +} + +% \pagestyle{fancy} + +\usepackage{amsmath} +\usepackage{amsthm} +\usetikzlibrary{fit} + + + +\theoremstyle{definition} +\newtheorem{exercice}{Exercice} + +\pagestyle{monstyle} + +\usepackage{amsmath} +\usepackage{amsthm} + +\newcommand{\code}[1]{\texttt{#1}} + +\usepackage{boxedminipage} +\usepackage{setspace} + + +\newsavebox\svbx +\newif\ifcache +\long\def\cache#1{\ \newline + \setbox\svbx=\vbox{\leavevmode \newline \begin{spacing}{1}#1\end{spacing}} + \smallskip\par\noindent + \begin{boxedminipage}{\linewidth} + \ifcache + \leavevmode\hrule height 0pt\vskip \ht\svbx\hrule height 0pt + \else \unvbox\svbx + \fi + \end{boxedminipage} + \par\smallskip} + + +\cachefalse % version prof +%\cachetrue % version etudiant + + + +\begin{document} + + +\begin{center} + NOM : \hfill Examen \hfill~\\ + PRENOM : \hfill 90 minutes%% , 75 points + \hfill ~\\ + GROUPE : \hfill \hfill~\\ + +\end{center} + +\section*{PL/SQL : R\'eservation d'un terrain de sport} + +Une entreprise de location de terrain de badminton/padel souhaite +informatiser la gestion de ses locaux. Chaque terrain possède un +numéro : il y a 10 terrains de badminton numérotés de 1 à 10, et 2 de +padels de 1 à 2. Il est possible qu'il y ait entre 2 et 4 joueurs pour +le badminton, mais exactement 4 joueurs pour le padel. Les tarifs +horaires pour la location du terrain ne sont pas les mêmes pour le +badminton et le padel. Ils varient également en fonction de +l'horaire. La réservation se fait pour un créneau dont l’heure de +début est connue (9h , 10h, ... , 17h) et la durée spécifique au sport +pratiqué (1h ou 2h). Une fois sur place, il est également possible de +louer des équipements (raquettes et chaussures) pour un supplément : +\begin{center} + \begin{tabular}{|l|c|c|} + \hline +Prix à l’unité & BADMINTON & PADEL \\ \hline +Raquette & 1€ & 2€ \\ \hline +Paire de chaussures& 2€ & 3€ \\ \hline + \end{tabular} +\end{center} +Lors d'une réservation, il faut connaître au moins les coordonnées +d'un des joueurs pour savoir qui a fait la réservation. Lors d'une +réservation en ligne, il est possible d'inscrire le nom et le numéro +de téléphone des joueurs, afin qu'un rappel leur soit envoyé le jour +de leur réservation. Il faut pouvoir sortir une facture avec le +montant total de la réservation ; c'est à dire le tarif de la location +en fonction du sport et du créneau horaire, ainsi que des équipements +loués. + +MCD de l’application : +%\newpage +%\begin{center} +% \includegraphics{MCD.png} +%\end{center} +\begin{center} + \begin{tikzpicture}[every node/.style={inner sep=0,outer sep=0}] + + \node (equip) at (3,3) { + \begin{varwidth}{1.5in} + \begin{tabular}{|l|} + \hline + \rowcolor{lightgray}EQUIPEMENT\\ +\hline +\underline{idEquipement}\\ +Libell\'e\\ +Tarif\\ +\hline + \end{tabular} +\end{varwidth} +}; + + \node (con) at (7,3) { + \begin{varwidth}{1.5in} + \begin{tabular}{l} +\rowcolor{Gray}contenir\\ +\hline +nombre\\ +\end{tabular} +\end{varwidth} +}; +\draw[rounded corners] ($(con.north west)-(0.03,-0.03)$) rectangle ($(con.south east)+(-0.03,0.03)$); + + + + \node (faire) at (10,0) { + \begin{varwidth}{1.5in} + \begin{tabular}{l} +\rowcolor{Gray}Faire\\ +\hline +~ \\ +\end{tabular} +\end{varwidth} +}; +\draw[rounded corners] ($(faire.north west)-(0.03,-0.03)$) rectangle ($(faire.south east)+(-0.03,0.03)$); + + + + + \node (DFres) at (14,-3) { + \begin{varwidth}{1.5in} + \begin{tabular}{l} +\rowcolor{Gray}DF\_reserver\\ +\hline +~ \\ +\end{tabular} +\end{varwidth} +}; +\draw[rounded corners] ($(DFres.north west)-(0.03,-0.03)$) rectangle ($(DFres.south east)+(-0.03,0.03)$); + + + + \node (DFpra) at (-1,-3) { + \begin{varwidth}{1.5in} + \begin{tabular}{l} +\rowcolor{Gray}DF\_pratiquer\\ +\hline +~ \\ +\end{tabular} +\end{varwidth} +}; +\draw[rounded corners] ($(DFpra.north west)-(0.03,-0.03)$) rectangle ($(DFpra.south east)+(-0.03,0.03)$); + + + + \node (fact) at (6.5,-3) { + \begin{varwidth}{1.5in} + \begin{tabular}{l} +\rowcolor{Gray}facturer\\ +\hline +tarifHoraire \\ +\end{tabular} +\end{varwidth} +}; +\draw[rounded corners] ($(fact.north west)-(0.03,-0.03)$) rectangle ($(fact.south east)+(-0.03,0.03)$); + + \node (DFcon) at (3,0) { + \begin{varwidth}{1.5in} + \begin{tabular}{l} +\rowcolor{Gray}DF\_concerner\\ +\hline +~ \\ +\end{tabular} +\end{varwidth} +}; +\draw[rounded corners] ($(DFcon.north west)-(0.03,-0.03)$) rectangle ($(DFcon.south east)+(-0.03,0.03)$); + + +\node (res) at (7,0) {\begin{varwidth}{1.5in} +\begin{tabular}{|l|} +\hline +\rowcolor{lightgray}RESERVATION\\ +\hline +\underline{idReservation}\\ +dateReserv\\ +nbJoueurs\\ \hline +\end{tabular} +\end{varwidth} +}; + + + +\node (ter) at (-1,0) {\begin{varwidth}{2.5in} +\begin{tabular}{|l|} +\hline +\rowcolor{lightgray}TERRAIN\\ +\hline +\underline{idTerrain}\\ +numTerrain\\ +\hline +\end{tabular} +\end{varwidth} +}; + + +\node (cre) at (10,-3) {\begin{varwidth}{2.5in} +\begin{tabular}{|l|} +\hline +\rowcolor{lightgray}CRENEAU\\ +\hline +\underline{numCreneau}\\ +heureD\'ebut\\ +\hline +\end{tabular} +\end{varwidth} +}; + +\node[draw,rectangle] (g) at (3,-3) {\begin{varwidth}{2in} +\begin{tabular}{l} + \rowcolor{lightgray}SPORT\\ + \hline + \underline{nomSport}\\ + nbMinJoueurs\\ + nbMaxJoueurs\\ + dur\'ee\\ +\end{tabular} +\end{varwidth}}; + + + +\node[draw,rectangle] (c) at (13,0) { +\begin{tabular}{|l|} + \hline + \rowcolor{lightgray}JOUEUR\\ +\hline +\underline{idjoueur}\\ +Nom\\ +Pénom\\ +num\'ero\\ +\hline +\end{tabular} +}; + +\draw (equip) -- (con) node [pos=0.5, above] {$0,n$}; +\draw (res) -- (con) node [midway, right] {$0,n$}; +\draw (faire) -- (c) node [midway, above] {$0,n$}; +\draw (res) -- (faire) node [midway, above] {$1,n$}; +\draw (res) -- (DFres) node [midway, above] {$1,1$}; +\draw (cre) -- (DFres) node [midway, above] {$0,n$}; +\draw (cre) -- (fact) node [midway, above] {$0,n$}; +\draw (fact) -- (g) node [midway, above] {$0,n$}; +\draw (g) -- (DFpra) node [midway, above] {$1,n$}; +\draw (ter) -- (DFpra) node [midway, right] {$1,1$}; +\draw (ter) -- (DFcon) node [midway, above] {$0,n$}; +\draw (res) -- (DFcon) node [midway, above] {$1,1$}; + + + + \end{tikzpicture} +\end{center} +% \newpage +Modèle relationnel : + +EQUIPEMENT(\underline{idEquipement}, libell\'e, tarif) + +CONTENIR(\underline{idReservation}, \underline{idEquipement}, nombre) + +TERRAIN(\underline{idTerrain}, numTerrain, nomSport) + +RESERVATION(\underline{idReservation}, dateReserv, nbJoueurs, idTerrain, numCreneau) + +FAIRE(\underline{idReservation}, \underline{idJoueur}) + +JOUEUR(\underline{idJoueur}, nom, pr\'enom, num\'ero) + +SPORT(\underline{nomSport}, nbMinJoueurs, nbMaxJoueurs, dur\'ee) + +FACTURER(\underline{nomSport}, \underline{numCreneau}, tarifHoraire) + +CRENEAU(\underline{numCreneau}, heureD\'ebut) + + +Ordres de création des tables : + +\begin{verbatim} +create table EQUIPEMENT ( +idEquipement char(3) primary key, +libelle varchar2(20), +tarif number(5,2)); + +create table JOUEUR ( +idJoueur char(2) primary key, +nom varchar2(20), +pnom varchar2(20), +numero number); + +create table CRENEAU ( +numCreneau char(2) primary key, +heureDebut number(2)); + +create table SPORT ( +nomSport varchar2(10), +nbMinJoueurs number, +nbMaxJoueurs number, +duree number); + +create table TERRAIN ( +idTerrain char(3) primary key, +numTerrain number, +nomSport varchar2(10) references SPORT); + +create table RESERVATION ( +idReserv char(3) primary key, +dateReserv date, +nbJoueurs number, +idTerrain char(5) references TERRAIN, +numCreneau char(2) references CRENEAU ); + +create table faire ( +idReserv char(3) references RESERVATION, +idJoueur char(2) references JOUEUR, +primary key(idReserv, idJoueur)); + +create table contenir ( +idReserv char(3) primary key references RESERVATION, +idEquipement char(3) references EQUIPEMENT, +nombre number); + +create table facturer( +nomSport varchar2(10) references SPORT, +numCreneau char(2) references CRENEAU, +tarifHoraire number, +primary key(nomSport, numCreneau)); +\end{verbatim} + + +Consignes : +\begin{itemize} +\item Les résultats seront affichés avec une table Tresultat (ligne varchar2 (200)) +\item La partie SQL+ n’est pas demandée pour les exercices 2 et 3 +\end{itemize} + +\begin{exercice}[MF1] (10 points) +Donner le programme (partie SQL + et PL/SQL) permettant d’enregistrer +un sport. + +Messages à prévoir : +\begin{itemize} +\item Le nom du sport est déjà attribué +\item Le nombre maximum de joueurs ne peut être inférieur au nombre minimum +\item La durée est de 1h ou 2h +\item Le sport a été enregistré : nom du sport +\end{itemize} + +\begin{SaveVerbatim}{Maxpoints} +DROP TABLE tligne ; +CREATE TABLE tligne (ligne varchar2(100)) ; + +\end{SaveVerbatim} + +%% \cache{%\begin{small} +%% \BUseVerbatim{Maxpoints} +%% % \end{small} +%} + +\end{exercice} + +\begin{exercice}[PB1] (10 points) + Donner le programme (partie SQL + et PL/SQL) permettant d’enregistrer une réservation sans équipement. + +Messages à prévoir : + +\begin{itemize} +\item L’identifiant de la réservation est déjà attribué +\item La date de réservation doit être postérieure à la date du jour +\item L’identifiant du terrain est inconnu +\item Le numéro du créneau est inconnu +\item La réservation a été enregistrée +\end{itemize} +\end{exercice} + + +\begin{exercice}[FG1] (10 points) + Donner le programme (partie SQL + et PL/SQL) permettant d’enregistrer + un équipement sans réservation. + + Messages à prévoir : + \begin{itemize} + \item L’identifiant de l’équipement est déjà attribué + \item Le tarif doit être supérieure à 0 + \item Le libellé doit être unique + \item L’équipement a été enregistré : Libellé + \end{itemize} +\end{exercice} + +\begin{exercice}[PL1] (10 points) + Donner le programme (partie SQL + et PL/SQL) permettant d’enregistrer + un nouveau cr\'eneau. + + Messages à prévoir : + \begin{itemize} + \item L’identifiant du cr\'eneau est déjà attribué + \item L'heure de d\'ebut est d\'ej\`a attribu\'ee + \item L'heure de d\'ebut doit \^etre comprise entre 9h et 17h + \end{itemize} +\end{exercice} + +\begin{exercice}[MF2] (15 points) +Donner le programme permettant la suppression d’un joueur à condition +qu’il n’ait pas fait de réservations pour aujourd’hui ou dans le +futur. L’identifiant du joueur aura été précédemment lu dans la +variable \code{vidJoueur}. Messages à prévoir, utilisation d’au moins +une exception utilisateur: +\begin{itemize} +\item Joueur inconnu +\item Impossible, il existe des réservations faites par ce joueur pour aujourd’hui ou dans le futur +\item Nb actions de réservations faites dans le passé par ce joueur ont été supprimées +\item Joueur supprimé +\end{itemize} +\end{exercice} + +\begin{exercice}[PB2] (15 points) +Donner le programme permettant la suppression de toutes les réservations du mois de mars utilisant l’équipement d’identifiant contenu dans la variable videquip. + +Messages à prévoir : +\begin{itemize} +\item L’identifiant de l’équipement est inconnu +\item nb réservations ont été supprimées +\end{itemize} +\end{exercice} + +\begin{exercice}[FG2] (15 points) +Donner le programme permettant la suppression d’un équipement à +condition qu’il ne soit plus réservé (aujourd’hui et dans le futur), +on utilisera l’identifiant de l’équipement contenu dans la variable +\code{videquip}. + +Messages à prévoir : +\begin{itemize} +\item L’identifiant de l’équipement est inconnu +\item Des réservations en cours ou à venir utilisent cet équipement +\item nb réservations passées ont été supprimées +\end{itemize} +\end{exercice} + +\begin{exercice}[PL2] (15 points) +Donner le programme permettant la suppression d’un terrain à +condition qu’il ne soit plus réservé (aujourd’hui et dans le futur), +on utilisera l’identifiant du terrain contenu dans la variable +\code{vidterrain}. + +Messages à prévoir : +\begin{itemize} +\item L’identifiant du terrain est inconnu +\item Des réservations en cours ou à venir utilisent cet équipement +\item nb réservations passées ont été supprimées +\end{itemize} +\end{exercice} + +\begin{exercice}[MF3] (20 points) + Donner le programme permettant d’afficher les réservations actuelles + ou futures par créneau horaire pour un sport donné. On utilisera le + nom du sport contenu dans la variable \code{vnomSport}. On affichera les + résultats dans l’ordre croissant de l’heure de début, puis de la + date de réservation. + +\begin{SaveVerbatim}{Affichage} +Heure de début : XX + Id réservation date : XX/XX/XX + Id réservation date : XX/XX/XX + Id réservation date : XX/XX/XX + ... +Heure de début : XX + Id réservation date : XX/XX/XX + Id réservation date : XX/XX/XX + ... +Nombre de réservations total pour ce sport : nb +\end{SaveVerbatim} + +% \cache{%\begin{small} +\begin{center} + \fbox{ \BUseVerbatim{Affichage}} +\end{center} + +%\end{small} + % } + + +\end{exercice} + + +\begin{exercice}[PB3] (20 points) +Donner le programme permettant d’afficher la liste des réservations +concernant le terrain d’identifiant T003, affichage dans l’ordre +croissant de la date de réservation, puis du nom des joueurs. + +\begin{SaveVerbatim}{AffichagePB} +Id reservation : XXXXX date : XX/XX/XX + nom joueur + nom joueur + nom joueur + ... +Id reservation : XXXXX date : XX/XX/XX + nom joueur + nom joueur + ... +... +Nombre de réservations sans équipement : nb +\end{SaveVerbatim} + +% \cache{%\begin{small} +\begin{center} + \fbox{ \BUseVerbatim{AffichagePB}} +\end{center} + +%\end{small} + % } + +\end{exercice} + + +\begin{exercice}[FG3] (20 points) + Donner le programme permettant d’afficher la liste des joueurs à + prévenir lors de la suppression d’un équipement lié à sa réservation + actuelle ou future. On utilisera l’identifiant de l’équipement + contenu dans la variable \code{videquip}. On affichera les résultats + dans l’ordre décroissant de la date de réservation, puis du nom des + joueurs. + + \begin{SaveVerbatim}{AffichageFG} +Id réservation : XXXXX date : XX/XX/XX + nom joueur + nom joueur + nom joueur + ... +Id réservation : XXXXX date : XX/XX/XX + nom joueur + nom joueur + ... +... +Nombre de joueurs à prévenir : nb + \end{SaveVerbatim} +\begin{center} + \fbox{ \BUseVerbatim{AffichageFG}} +\end{center} + +\end{exercice} + +\begin{exercice}[PL3] (20 points) + Donner le programme permettant d’afficher la liste des joueurs à + prévenir lors de la suppression, pour cause de coupure \'electrique + d'EDF, d’un cr\'eneau lié à sa réservation actuelle ou future. On + utilisera l’identifiant du cr\'eneau contenu dans la variable + \code{vnumcreneau}. On affichera les résultats dans l’ordre décroissant + de la date de réservation, puis du nom des joueurs. + + \begin{SaveVerbatim}{AffichagePL} +Id réservation : XXXXX date : XX/XX/XX + nom joueur + nom joueur + nom joueur + ... +Id réservation : XXXXX date : XX/XX/XX + nom joueur + nom joueur + ... +... +Nombre de joueurs à prévenir : nb + \end{SaveVerbatim} +\begin{center} + \fbox{ \BUseVerbatim{AffichagePL}} +\end{center} + +\end{exercice} + + + +\begin{exercice}[MF4] (20 points) +Donner le programme permettant d’afficher pour chaque réservation le +coût de la réservation du terrain. On affichera les résultats dans +l’ordre décroissant du coût du terrain. + +\begin{SaveVerbatim}{AffichageMF2} +Id. réserv: XXXXX heure début : X durée : X tarif horaire : 99 Coût terrain :9999€ +Id. réserv: XXXXX heure début : X durée : X tarif horaire : 99 Coût terrain :9999€ +... +\end{SaveVerbatim} + + +\begin{center} + \fbox{\begin{small} + \BUseVerbatim{AffichageMF2} + \end{small} +} +\end{center} +\end{exercice} + +\begin{exercice}[PB4] (20 points) + Donner le programme permettant d’afficher la liste de toutes les + réservations en calculant leur nombre de joueur. On affichera les + résultats dans l’ordre décroissant du nombre de joueur par + réservation. + + \begin{SaveVerbatim}{AffichagePB2} +Id réservation : XXXXX date : XX/XX/XX Nombre de joueurs : 999 +Id réservation : XXXXX date : XX/XX/XX Nombre de joueurs : 999 +Id réservation : XXXXX date : XX/XX/XX Nombre de joueurs : 999 +... +Nombre de joueur moyen par réservation : 999 + \end{SaveVerbatim} + +\begin{center} + \fbox{\begin{small} + \BUseVerbatim{AffichagePB2} + \end{small} +} +\end{center} +\end{exercice} + +\begin{exercice}[FG4] (20 points) +Donner le programme permettant d’afficher la liste de toutes les +réservations en calculant le montant des coûts engendrés par leurs +équipements. On affichera les résultats dans l’ordre décroissant du +coût lié aux équipement de la réservation. + +\begin{SaveVerbatim}{AffichageFG2} +Id réservation : XXXXX date : XX/XX/XX Coût des équipements : 9999€ +Id réservation : XXXXX date : XX/XX/XX Coût des équipements : 9999€ +Id réservation : XXXXX date : XX/XX/XX Coût des équipements : 9999€ +... +\end{SaveVerbatim} + +\begin{center} + \fbox{\begin{small} + \BUseVerbatim{AffichageFG2} + \end{small} +} +\end{center} +\end{exercice} + + +\begin{exercice}[PL4] (20 points) + Donner le programme permettant d’afficher pour chaque cr\'eneau le + b\'en\'efice fait et le nombre de joueurs. On affichera les résultats dans +l’ordre décroissant des b\'en\'efices. + +\begin{SaveVerbatim}{AffichagePL2} +NumCreneau: XXXXX heure début : X Benefice :9999€ nb joueurs : 9999 +NumCreneau: XXXXX heure début : X Benefice :9999€ nb joueurs : 9999 +... +\end{SaveVerbatim} + + +\begin{center} + \fbox{\begin{small} + \BUseVerbatim{AffichagePL2} + \end{small} +} +\end{center} +\end{exercice} + + +\section*{Rappels} +%% Les fonctions \code{connexion}, \code{deconnexion} et \code{sql\_error} +%% sont rappell\'ees ci-dessous. Elles ne sont pas \`a r\'e\'ecrire sur +%% vos copies, mais \`a utiliser dans les exercices si besoin. + +%% \begin{verbatim} +%% void connexion() +%% { VARCHAR uid[50]; +%% char login[20]; +%% char passwd[20]; +%% printf("Donner votre login : "); +%% scanf("%s",login); +%% printf("\nDonnez votre mot de passe Oracle : "); +%% scanf("%s",passwd); +%% printf("\n"); +%% strcpy(uid.arr,login); +%% strcat(uid.arr,"/"); +%% strcat(uid.arr,passwd); +%% strcat(uid.arr,"@kirov"); +%% uid.len=strlen(uid.arr); + +%% EXEC SQL CONNECT :uid; +%% if (sqlca.sqlcode==0) +%% printf(" Connexion réussie avec succès.\n\n"); +%% else +%% { +%% printf ("Problème à la connexion.\n\n"); +%% exit(1); +%% }} +%% \end{verbatim} + + +%% \begin{verbatim} +%% void deconnexion(int validation) +%% { +%% if (validation == 1) +%% { EXEC SQL COMMIT WORK RELEASE; +%% } else +%% { EXEC SQL ROLLBACK WORK RELEASE;} +%% printf("Déconnexion sans problème.\n"); +%% } +%% \end{verbatim} + +%% \begin{verbatim} +%% void sql_error(char *msg) +%% { char err_msg[128]; +%% long buf_len, msg_len; + +%% EXEC SQL WHENEVER SQLERROR CONTINUE; + +%% printf("%s\n", msg); +%% buf_len = sizeof (err_msg); +%% sqlglm(err_msg, &buf_len, &msg_len); + +%% if (msg_len > buf_len) +%% msg_len = buf_len; + +%% printf("%.*s\n", msg_len, err_msg); +%% deconnexion(0); +%% exit(1); +%% } +%% \end{verbatim} + + +\section*{MEMO} +\subsection*{Langage PL/SQL} + +\begin{verbatim} +DECLARE + variable_PL/SQL {type SQL | nom_table.nom_colonne%TYPE | nom_table%ROWTYPE} ; + CURSOR curseur IS SELECT … ; + nom_exception EXCEPTION; +BEGIN + OPEN curseur ; + FETCH curseur INTO liste de variables ; + curseur%FOUND + CLOSE curseur ; + RAISE nom_exception ; + SELECT liste_de_sélection INTO liste de variables FROM … WHERE … ORDER BY ... ; + Variable PL/SQL := ‘&variable_ SQLPlus’ … + IF … THEN … [ELSE …] END IF ; + WHILE … LOOP … END LOOP ; +EXCEPTION + WHEN nom_exception THEN …; + WHEN NO_DATA_FOUND THEN … ; + WHEN OTHERS THEN … : +END ; +\end{verbatim} + +%% \subsection*{Langage PRO*C} +%% \begin{verbatim} +%% struct {long sqlcode;/* code resultant de l'exécution +%% =0 -> ok, +%% >0 -> ok avec un code d'état, +%% <0 -> erreur */ +%% struct { +%% unsigned short sqlerrml;/*longueur du message*/ +%% char sqlerrmc[70];/*message d'erreur*/ +%% } sqlerrm; +%% long sqlerrd[6];/* seul sqlerrd[2] est utilisé -> donne le nombre de lignes modifiées +%% UPDATE ou rajoutées par INSERT ou ramenées par un SELECT*/ +%% char sqlwarn[8];/*sqlwarn[0] 'W’ -> warning*/ +%% sqlwarn[0] = '' /*-> pas de warning*/ +%% sqlwarn[1] = 'W'/*-> troncation numérique ou char*/ +%% sqlwarn[2] = 'W'/*-> valeur Null est ignore */ +%% sqlwarn[3] = 'W'/*-> plus de champs dans SELECT que de variables pour recevoir*/ +%% sqlwarn[4] = 'W'/*-> toutes les lignes d'une table sont touchées (par DELETE ou +%% UPDATE par exemple)*/ +%% sqlwarn[5] /* inutilisé */ +%% sqlwarn[6] = 'W'/*-> Oracle a dû exécuter un rollback */ +%% sqlwarn[7] = 'W'/*-> la donnée ramenée par un FETCH a été modifié +%% depuis que la clause SELECT a été executé */ +%% } sqlca; +%% :var_hote INDICATOR :indicateur +%% :var_hote :indicateur +%% \end{verbatim} + +%\includepdf[pages=-]{MEMO.pdf} + +\end{document} diff --git a/EXOS/Exam2020.tex b/EXOS/Exam2020.tex index 2801b6a..df8736e 100644 --- a/EXOS/Exam2020.tex +++ b/EXOS/Exam2020.tex @@ -1,8 +1,8 @@ \documentclass[a4paper,11pt]{article} \usepackage[utf8x]{inputenc} -\usepackage[T1]{fontenc} -\usepackage[french]{babel} +\usepackage[T1]{fontenc} +\usepackage[french,british]{babel} \usepackage[a4paper,hmargin=20mm,vmargin=30mm]{geometry}%\usepackage{fullpage} \usepackage{url} \usepackage{comment} @@ -93,6 +93,54 @@ +%%%%%%%%% Gestion de la correction + +\usepackage{ifthen} +\usepackage{framed} +\usepackage{environ} +\usepackage{xcolor} +\colorlet{shadecolor}{gray!10!red!5} + +\ifdefined\iscorrec % Définition depuis le script d'appel +\else + \def\iscorrec{1} % 0=> sujet, 1=>corrigé +\fi + +%%% \begin{correction}....\end{correction} +% le contenu ne s'affiche que si \iscorrec=1 + +\NewEnviron{correction}{\ifthenelse{\iscorrec=1}{% + \medskip\medskip\par\begin{shaded}\noindent{\bf Solution:} \BODY \end{shaded} +}{}} + + +%%%%%%%%% Paramètres individuels du sujet + +%%% Valeurs par défaut (pour une compilation isolée) + +\ifdefined\assignedparameters\else + \def\assignedparameters{1,1,1,1} % dans cet exemple, 4 paramètres requis +\fi + +%%% Liste permettant d'accéder aux assignedparameters: \ListAP[1], \ListAP[2], etc. + +\usepackage{listofitems} +\ifx\assignedparameters\empty % (erreur de \readlist dans ce cas) +\else + \readlist*\ListAP{\assignedparameters} +\fi + +%%% Switch de versions, définie ici "à vide" pour mettre du renewcommand plus tard + +\newcommand{\switch}{} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + \begin{document} @@ -396,7 +444,12 @@ Consignes : \item La partie SQL+ n’est pas demandée pour les exercices 2 et 3 \end{itemize} -\begin{exercice}[MF1] (10 points) + +\begin{exercice} (10 points) +\def\versionExo{\ListAP[1]} + +\ifnum\versionExo=1 +%MF1 Donner le programme (partie SQL + et PL/SQL) permettant d’enregistrer un sport. @@ -418,10 +471,9 @@ CREATE TABLE tligne (ligne varchar2(100)) ; %% \BUseVerbatim{Maxpoints} %% % \end{small} %} - -\end{exercice} - -\begin{exercice}[PB1] (10 points) +\fi +\ifnum\versionExo=2 +%PB1 Donner le programme (partie SQL + et PL/SQL) permettant d’enregistrer une réservation sans équipement. Messages à prévoir : @@ -433,10 +485,9 @@ Messages à prévoir : \item Le numéro du créneau est inconnu \item La réservation a été enregistrée \end{itemize} -\end{exercice} - - -\begin{exercice}[FG1] (10 points) +\fi +\ifnum\versionExo=3 +%FG1 Donner le programme (partie SQL + et PL/SQL) permettant d’enregistrer un équipement sans réservation. @@ -447,9 +498,9 @@ Messages à prévoir : \item Le libellé doit être unique \item L’équipement a été enregistré : Libellé \end{itemize} -\end{exercice} - -\begin{exercice}[PL1] (10 points) +\fi +\ifnum\versionExo=4 +%PL1 Donner le programme (partie SQL + et PL/SQL) permettant d’enregistrer un nouveau cr\'eneau. @@ -459,9 +510,16 @@ Messages à prévoir : \item L'heure de d\'ebut est d\'ej\`a attribu\'ee \item L'heure de d\'ebut doit \^etre comprise entre 9h et 17h \end{itemize} +\fi \end{exercice} -\begin{exercice}[MF2] (15 points) + +\begin{exercice} (15 points) + +\def\versionExo{\ListAP[2]} + +\ifnum\versionExo=1 +%MF2 Donner le programme permettant la suppression d’un joueur à condition qu’il n’ait pas fait de réservations pour aujourd’hui ou dans le futur. L’identifiant du joueur aura été précédemment lu dans la @@ -473,9 +531,9 @@ une exception utilisateur: \item Nb actions de réservations faites dans le passé par ce joueur ont été supprimées \item Joueur supprimé \end{itemize} -\end{exercice} - -\begin{exercice}[PB2] (15 points) +\fi +\ifnum\versionExo=2 +%PB2 Donner le programme permettant la suppression de toutes les réservations du mois de mars utilisant l’équipement d’identifiant contenu dans la variable videquip. Messages à prévoir : @@ -483,9 +541,9 @@ Messages à prévoir : \item L’identifiant de l’équipement est inconnu \item nb réservations ont été supprimées \end{itemize} -\end{exercice} - -\begin{exercice}[FG2] (15 points) +\fi +\ifnum\versionExo=3 +%FG2 Donner le programme permettant la suppression d’un équipement à condition qu’il ne soit plus réservé (aujourd’hui et dans le futur), on utilisera l’identifiant de l’équipement contenu dans la variable @@ -497,9 +555,8 @@ Messages à prévoir : \item Des réservations en cours ou à venir utilisent cet équipement \item nb réservations passées ont été supprimées \end{itemize} -\end{exercice} - -\begin{exercice}[PL2] (15 points) +\fi +\ifnum\versionExo=4 Donner le programme permettant la suppression d’un terrain à condition qu’il ne soit plus réservé (aujourd’hui et dans le futur), on utilisera l’identifiant du terrain contenu dans la variable @@ -511,10 +568,15 @@ Messages à prévoir : \item Des réservations en cours ou à venir utilisent cet équipement \item nb réservations passées ont été supprimées \end{itemize} +\fi \end{exercice} -\begin{exercice}[MF3] (20 points) - Donner le programme permettant d’afficher les réservations actuelles +\begin{exercice} (20 points) + +\def\versionExo{\ListAP[3]} +\ifnum\versionExo=1 +%MF3 +Donner le programme permettant d’afficher les réservations actuelles ou futures par créneau horaire pour un sport donné. On utilisera le nom du sport contenu dans la variable \code{vnomSport}. On affichera les résultats dans l’ordre croissant de l’heure de début, puis de la @@ -541,11 +603,9 @@ Nombre de réservations total pour ce sport : nb %\end{small} % } - -\end{exercice} - - -\begin{exercice}[PB3] (20 points) +\fi +\ifnum\versionExo=2 +%PB3 Donner le programme permettant d’afficher la liste des réservations concernant le terrain d’identifiant T003, affichage dans l’ordre croissant de la date de réservation, puis du nom des joueurs. @@ -572,10 +632,9 @@ Nombre de réservations sans équipement : nb %\end{small} % } -\end{exercice} - - -\begin{exercice}[FG3] (20 points) +\fi +\ifnum\versionExo=3 +%FG3 Donner le programme permettant d’afficher la liste des joueurs à prévenir lors de la suppression d’un équipement lié à sa réservation actuelle ou future. On utilisera l’identifiant de l’équipement @@ -599,10 +658,9 @@ Nombre de joueurs à prévenir : nb \begin{center} \fbox{ \BUseVerbatim{AffichageFG}} \end{center} - -\end{exercice} - -\begin{exercice}[PL3] (20 points) +\fi +\ifnum\versionExo=4 +%PL3 Donner le programme permettant d’afficher la liste des joueurs à prévenir lors de la suppression, pour cause de coupure \'electrique d'EDF, d’un cr\'eneau lié à sa réservation actuelle ou future. On @@ -626,12 +684,17 @@ Nombre de joueurs à prévenir : nb \begin{center} \fbox{ \BUseVerbatim{AffichagePL}} \end{center} - +\fi \end{exercice} -\begin{exercice}[MF4] (20 points) +\begin{exercice} (20 points) + +\def\versionExo{\ListAP[4]} + +\ifnum\versionExo=1 +%MF4 Donner le programme permettant d’afficher pour chaque réservation le coût de la réservation du terrain. On affichera les résultats dans l’ordre décroissant du coût du terrain. @@ -649,9 +712,9 @@ Id. réserv: XXXXX heure début : X durée : X tarif horaire : 99 Coût terr \end{small} } \end{center} -\end{exercice} - -\begin{exercice}[PB4] (20 points) +\fi +\ifnum\versionExo=2 +%PB4 Donner le programme permettant d’afficher la liste de toutes les réservations en calculant leur nombre de joueur. On affichera les résultats dans l’ordre décroissant du nombre de joueur par @@ -671,9 +734,9 @@ Nombre de joueur moyen par réservation : 999 \end{small} } \end{center} -\end{exercice} - -\begin{exercice}[FG4] (20 points) +\fi +\ifnum\versionExo=3 +%FG4 Donner le programme permettant d’afficher la liste de toutes les réservations en calculant le montant des coûts engendrés par leurs équipements. On affichera les résultats dans l’ordre décroissant du @@ -692,10 +755,9 @@ Id réservation : XXXXX date : XX/XX/XX Coût des équipements : 9999€ \end{small} } \end{center} -\end{exercice} - - -\begin{exercice}[PL4] (20 points) +\fi +\ifnum\versionExo=4 +%PL4 Donner le programme permettant d’afficher pour chaque cr\'eneau le b\'en\'efice fait et le nombre de joueurs. On affichera les résultats dans l’ordre décroissant des b\'en\'efices. @@ -713,6 +775,8 @@ NumCreneau: XXXXX heure début : X Benefice :9999€ nb joueurs : 9999 \end{small} } \end{center} + +\fi \end{exercice} diff --git a/EXOS/genere_sujets.rb b/EXOS/genere_sujets.rb index f8db0d9..e35adb4 100644 --- a/EXOS/genere_sujets.rb +++ b/EXOS/genere_sujets.rb @@ -28,7 +28,7 @@ require 'fileutils' ##################################### $file = "assignation.ods" # format ods (ou xls) -$source = "Examen.tex" +$source = "Exam2020.tex" $sujetdir = "Sujets" # destination des sujets $correcdir = "Corrigés" # destination des corrigés $builddir = "build" # destination des fichiers auxiliaires