Pour le TP3

Fichier des étudiants


26 rangées
  • rowid
  • code
  • nom
  • prénom

Fichier des cours


10 rangées
  • rowid
  • sigle
  • titre

Fichier des résultats


260 rangées
  • rowid
  • code étudiant
  • sigle cours
  • note

"use strict"
 
console.log "\nDébut de l'exécution"
 
sqlite3 = require( "sqlite3" ).verbose()
 
noms = [
    "Allard",
    "Beauchamp"
    "Cadieux"
    "Daigneault"
    "Enselme"
    "Fafard"
    "Gagnon"
    "Hétier"
    "Imbeault"
    "Jeannot"
    "Kenneth"
    "Loiselle"
    "Martineau"
    "Nadeau"
    "Ouellet"
    "Paquin"
    "Quenneville"
    "Robitaille"
    "Sauvageau"
    "Tétreault"
    "Uberdeau"
    "Vachon"
    "White"
    "Xavier"
    "Yann"
    "Zorro"
]
 
prenoms = [
    "Antoine",
    "Béatrice"
    "Claude"
    "Denise"
    "Etienne"
    "France"
    "Guy"
    "Hélène"
    "Ivan"
    "Jeanne"
    "Kevin"
    "Lucie"
    "Martin"
    "Nadine"
    "Olivier"
    "Paméla"
    "Quantin"
    "Rose"
    "Sylvain"
    "Thérèse"
    "Ulric"
    "Valérie"
    "Winston"
    "Xena"
    "Yvon"
    "Zoé"
]
 
cours = {
    "ECO1300": "Analyse microéconomique"
    "SCO1250": "Introduction aux sciences comptables"
    "MKG3300": "Marketing"
    "MET1111": "Théories de l'organisation"
    "ORH2100": "Entreprise et société"
    "INF1255": "Informatique pour les sciences de la gestion"
    "INF1110": "Programmation I"
    "INF2110": "Programmation II"
    "INF4010": "Bases de données"
    "INF5151": "Génie logiciel: analyse et modélisation"
}
 
creerTables = ( db ) ->
    db.run "CREATE TABLE IF NOT EXISTS etudiants (
                code TEXT PRIMARY KEY,
                nom TEXT NOT NULL,
                prenom TEXT NOT NULL
            );"
    db.run "CREATE TABLE IF NOT EXISTS cours (
                sigle TEXT PRIMARY KEY,
                titre TEXT NOT NULL
            );"
    db.run "CREATE TABLE IF NOT EXISTS resultats (
                code_etudiant TEXT REFERENCES etudiants,
                sigle_cours TEXT REFERENCES cours,
                note INTEGER NOT NULL,
                PRIMARY KEY ( code_etudiant, sigle_cours )
            );"
 
 
chargerEtudiants = ( db ) ->
    stmt = db.prepare "INSERT INTO etudiants ( code, nom, prenom ) VALUES ( ?, ?, ? )"
    for index in [ 0..( noms.length - 1 ) ]
        nom = noms[ index ]
        prenom = prenoms[ index ]
        code = genererCodeEtudiant nom, prenom
        stmt.run code, nom, prenom
    stmt.finalize()
 
 
chargerCours = ( db ) ->
    stmt = db.prepare "INSERT INTO cours ( sigle, titre ) VALUES ( ?, ? )"
    stmt.run sigle, titre for sigle, titre of cours
    stmt.finalize()
 
 
genererNotes = ( db ) ->
    db.all "SELECT code FROM etudiants ORDER BY code", ( err, codes ) ->
        db.all "SELECT sigle FROM cours ORDER BY sigle", ( err, sigles ) ->
            stmt = db.prepare "INSERT INTO resultats ( code_etudiant, sigle_cours, note ) VALUES ( ?, ?, ? )"
            for code in codes
                for sigle in sigles
                    stmt.run code.code, sigle.sigle, 40 + random 60
            stmt.finalize()
 
 
genererCodeEtudiant = ( nom, prenom ) ->
    ( nom[ 0..2 ] + prenom[ 0 ] ).toUpperCase() + genererChaineNombre 8
 
 
genererChaineNombre = ( longueur ) ->
    ( random( 10 ) for i in [ 1..longueur ] ).join ""
 
 
random = ( limite ) ->
    Math.floor Math.random() * limite
 
 
# SECTION PRINCIPALE
 
db = new sqlite3.Database "test.sqlite"
 
process.on "exit", ->
    console.log "\nFin de l'exécution\n"
    db.close()
 
 
db.serialize ->
    creerTables db
    chargerEtudiants db
    chargerCours db
    genererNotes db
 
 
###
 
# Pour obtenir la liste des cours et notes des étudiants
 
SELECT code, nom, prenom, sigle, titre, note
    FROM etudiants, cours, resultats
    WHERE code = code_etudiant AND sigle = sigle_cours
    ORDER BY code, sigle
 
# Pour obtenir la moyenne de chaque étudiant en ordre décroissant
 
SELECT code, nom, prenom, round( avg( note ), 2 ) as moyenne
    FROM etudiants, resultats
    WHERE code = code_etudiant
    GROUP BY code
    ORDER BY moyenne DESC
 
# Pour obtenir la moyenne de chaque cours en ordre décroissant
 
SELECT sigle, titre, round( avg( note ), 2 ) as moyenne
    FROM cours, resultats
    WHERE sigle = sigle_cours
    GROUP BY sigle
    ORDER BY moyenne DESC
 
# Pour obtenir la moyenne de la classe
 
SELECT round( avg( moyenne ), 2 )
    FROM ( SELECT code, nom, prenom, avg( note ) as moyenne
                FROM etudiants, resultats
                WHERE code = code_etudiant
                GROUP BY code )
 
###