<%@ page language="java" import="java.sql.*, java.math.*" %> <%! String sqlUser = "invited"; String sqlPwd = "invited"; Connection conn; String sqlTxt; Statement stmt; String errMsg; String errPage = "edt_result.jsp"; String errFwd; // Parametres du formulaire de selection String reqCursus; String reqSem; int reqSemInt; %> <% errMsg = ""; // ----------------------- // Connexion a la base // ----------------------- try { errMsg= "PB de pilote JDBC"; Class.forName("org.postgresql.Driver"); errMsg= "PB de connexion avec Postgresql"; conn= DriverManager.getConnection ("jdbc:postgresql://dbms.essi.fr/claudine", sqlUser, sqlPwd ); errMsg= "Connexion OK"; if ( conn == null ) { // --------------------------- // Connexion impossible // --------------------------- errMsg= "Connexion impossible"; errFwd ="edt_erreur.jsp?ERR_MSG="+errMsg+"&ERR_PAGE="+errPage; %> <% } // ------------------------- // Connexion existante // ------------------------- // ------------------------------------------------------- // Recuperation des valeurs de champs pour la selection // ------------------------------------------------------- reqCursus = request.getParameter("CURSUS"); reqSem = request.getParameter("SEM"); reqSemInt = ( reqSem == null ) ? 49 : Integer.parseInt( reqSem ) ; if ( reqCursus == null || reqSemInt <1 || reqSemInt > 51 ) { errMsg = "champs incorrects" ; errFwd ="edt_erreur.jsp?ERR_MSG="+errMsg+"&ERR_PAGE="+errPage; %> <% } // ------------------------------------------------------- // Construction de table affiche // ------------------------------------------------------- int[] nbLignes = new int [5]; //Nombre de lignes d'affichage pour chaque jour String[] nomJours = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi"}; // ------------------------------------------------------- // Insertion d'un creneau vide par journee // ------------------------------------------------------- errMsg="PB SQL dans placement des creneaux vides"; stmt = conn.createStatement(); stmt.executeUpdate("DELETE FROM affichage"); for (int i=1; i<=5; i++) { stmt.executeUpdate( "insert into affichage (code_module, groupe, jour, heured, duree, ligne) " + " values(NULL, NULL, " + Integer.toString(i) + ", 1, 8, 1) " ); nbLignes[i-1]=1; } // ------------------------------------------------------- // selection des modules a placer // ------------------------------------------------------- sqlTxt = " SELECT E.code_module, E.groupe, E.jour, E.heured, CT.duree, E.salle " + " FROM edt_sem E, cursus_groupe CCT, creneau_type CT " + " WHERE CCT.nomcursus = ? and E.sem= ? and " + " E.groupe=CCT.groupe and " + " CT.code_module= E.code_module and CT.groupe=E.groupe " + " ORDER BY 3,4,5 " ; errMsg="PB SQL dans insertion des creneaux a placer : \n" + sqlTxt; PreparedStatement stmtModules = conn.prepareStatement(sqlTxt); stmtModules.setString(1, reqCursus); stmtModules.setInt(2, reqSemInt); ResultSet rsetModules = stmtModules.executeQuery(); while (rsetModules.next()) { String module = rsetModules.getString(1); String groupe = rsetModules.getString(2); int jour = rsetModules.getInt(3); int heured = rsetModules.getInt(4); int duree = rsetModules.getInt(5); int heuref = heured + duree-1; String salle = rsetModules.getString(6); //parametres du creneau vide a trouver boolean cv_trouve=false; int cv_ligne=1; int cv_heured=1; int cv_duree=1; int cv_heuref=1; // --------------------------------- // Calcul de la ligne de placement // recherche de creneau vide // --------------------------------- errMsg="PB SQL dans selection des creneaux libres"; PreparedStatement stmtSelCrenVide = conn.prepareStatement( " SELECT A.ligne, A.heured, A.duree " + " FROM affichage A " + " WHERE A.code_module is NULL and A.jour = ? and " + " A.heured <= ? and ? <= A.heured+duree-1 " + " ORDER BY 1, 2" ); stmtSelCrenVide.setInt(1, jour); stmtSelCrenVide.setInt(2, heured); stmtSelCrenVide.setInt(3, heuref); ResultSet rsetSelCrenVide = stmtSelCrenVide.executeQuery(); while (rsetSelCrenVide.next()) { cv_trouve=true; cv_ligne= rsetSelCrenVide.getInt(1); cv_heured= rsetSelCrenVide.getInt(2); cv_duree= rsetSelCrenVide.getInt(3); cv_heuref= cv_heured + cv_duree -1; break; } rsetSelCrenVide.close(); if (! cv_trouve ) { // --------------------------------------- // insertion d'une nouvelle ligne dans le jour // par creation d'un nouveau creneau vide de 8h // recherche de la ligne maximale pour le jour // --------------------------------------- nbLignes[jour-1] +=1; cv_ligne=nbLignes[jour-1]; errMsg="PB SQL dans ajout nouvelle ligne"; stmt.executeUpdate( "insert into affichage (jour, heured, duree, ligne) " + " values(" + Integer.toString(jour) + ", 1, 8, " + Integer.toString(cv_ligne) +")" ); cv_heured = 1; cv_duree=8; cv_heuref=8; } //Eof (! cv_trouve ) // ----------------------------------------- // Le creneau vide existe donc maintenant. // ----------------------------------------- // ----------------------------------------- // on supprime le creneau vide // ----------------------------------------- errMsg="PB SQL dans suppresion du creneau vide"; stmt.executeUpdate( "delete from affichage " + "where jour=" + Integer.toString(jour) + " and heured=" + Integer.toString(cv_heured) + " and " + " ligne=" + Integer.toString(cv_ligne) ); // ----------------------------------------- // On place le creneau sur la ligne. // ----------------------------------------- errMsg="PB SQL dans insertion du creneau place"; stmt.executeUpdate( "insert into affichage (code_module, groupe, jour, heured, duree, ligne, salle) " + " values('" + module + "', '" + groupe + "', " + Integer.toString(jour) + ", " + Integer.toString(heured) + ", " + Integer.toString(duree) + ", " + Integer.toString(cv_ligne) +",'" + salle + "')" ); if (cv_heured < heured ) { // ----------------------------------------- // insertion d'un creneau vide a gauche // ----------------------------------------- errMsg="PB SQL dans insertion du creneau vide gauche"; stmt.executeUpdate( "insert into affichage (jour, heured, duree, ligne) " + " values(" + Integer.toString(jour) + ", " + Integer.toString(cv_heured) + ", " + Integer.toString(heured - cv_heured) + ", " + Integer.toString(cv_ligne) +")" ); } if (heuref < cv_heuref ) { // ----------------------------------------- // insertion d'un creneau vide a droite // ----------------------------------------- errMsg="PB SQL dans insertion du creneau vide droite"; stmt.executeUpdate( "insert into affichage (jour, heured, duree, ligne) " + " values(" + Integer.toString(jour) + ", " + Integer.toString(heuref+1) + ", " + Integer.toString(cv_heuref-heuref) + ", " + Integer.toString(cv_ligne) +")" ); } } //Eof (rsetModules.next()) -- prochain module a placer rsetModules.close(); %>

EDT pour <%=reqCursus%> Sem<%=reqSem%>

<% sqlTxt = " SELECT A.jour, A.ligne,A .heured, A.duree,A.code_module, A.groupe, A.salle " + " FROM affichage A " + " ORDER BY 1,2,3 " ; errMsg="PB SQL dans selection des creneaux places pour affichage : \n" + sqlTxt; ResultSet rsetAffichage = stmt.executeQuery(sqlTxt); while (rsetAffichage.next()) { int jour = rsetAffichage.getInt(1); int ligne = rsetAffichage.getInt(2); int heured = rsetAffichage.getInt(3); int duree = rsetAffichage.getInt(4); if (heured==1) { // Nouvelle ligne out.println(" "); if (ligne==1) { // Nouvelle journee : premier champ avec nom du jour out.print (" "); } } //Impression du creneau if ( rsetAffichage.getString(5) != null) { out.print(" "); } else { out.print(" "); } if (heured+duree-1 == 8) { // Fin de ligne out.println(" "); } } // eof while (rsetAffichage.next()) %>
8h 9h 10h 11h 14h 15h 16h 17h
"); out.print(nomJours[jour-1]); out.println(""); out.println(" "); out.print(" "); out.print(rsetAffichage.getString(5));out.println("  "); out.print(" "); out.print(rsetAffichage.getString(6));out.println("
" ); out.print(" "); out.print(rsetAffichage.getString(7));out.println(""); out.println("
 
<% // ---------------- fin de connexion conn.close(); } catch (Exception e) { errMsg += e.getMessage () ; errFwd ="edt_erreur.jsp?ERR_MSG="+errMsg+"&ERR_PAGE="+errPage; %> <% } %>