■ Cahier des charges résumé.
-Pour 1 à N élèves (SPH si tu passes par là)
-Pour 1 à N matières.
->Saisir 1 à N notes.
->Afficher la moyenne des notes par matière ainsi que la moyenne générale.
L'objectif est didacticiel. La base de données est stockée en mémoire et non pas sur disque.
Création d'une base de donnée SQLite comprenant les tables suivantes :
■ Eleves
Code : Tout sélectionner
ReqSql = "CREATE TABLE eleves("
ReqSql + "ideleve INTEGER PRIMARY KEY,"
ReqSql + "nom VARCHAR(50)"
ReqSql + ");"
Code : Tout sélectionner
ReqSql = "CREATE TABLE matieres("
ReqSql + "idmatiere INTEGER PRIMARY KEY,"
ReqSql + "nom VARCHAR(50)"
ReqSql + ");"
Code : Tout sélectionner
ReqSql = "CREATE TABLE notes("
ReqSql + "ideleve INTEGER,"
ReqSql + "idmatiere INTEGER,"
ReqSql + "idnote INTEGER PRIMARY KEY,"
ReqSql + "note INTEGER"
ReqSql + ");"
■ Qu'est ce que je n'ai pas fait ?
-Ajout, modification et suppression d'un élève.
-Ajout, modification et suppression d'une matière.
-Modification et suppression d'une note.
-Pour un élève une matière : Voir l'historique des notes.
-Pour un élève une matière : Saisir une appréciation. (ça implique une nouvelle table.)
-Impression d'un bulletin.
Code : Tout sélectionner
Enumeration Database
#Database
EndEnumeration
Enumeration Window
#Mainform
#NoteForm
EndEnumeration
Enumeration Gadgets
#Eleves ;Liste des éléves
#Tableau ;Moyenne des notes par matiere
#Moyenne ;Moyenne générale
#AjoutNote ;Ajout d'une note
#SelectMatiere ;Sélecteur d'une matiere
#Note ;Saisie d'une note
#Enregistre ;Enregistrement de la note dans la base de données
EndEnumeration
Define.l Event, WEvent, MEvent, GEvent, TEvent
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered
Global ReqSql.s, Key.i
Procedure DatabaseInit()
;-Création de la table <eleves>
ReqSql = "CREATE TABLE eleves("
ReqSql + "ideleve INTEGER PRIMARY KEY,"
ReqSql + "nom VARCHAR(50)"
ReqSql + ");"
DatabaseUpdate(#DataBase, ReqSql)
;Création d'un jeu de données eleves
ReqSql = "INSERT INTO eleves (nom) VALUES ("
ReqSql + Chr(34) + "Laura" + Chr(34)+")"
DatabaseUpdate(#DataBase, ReqSql)
ReqSql = "INSERT INTO eleves (nom) VALUES ("
ReqSql + Chr(34) + "Janus" + Chr(34)+")"
DatabaseUpdate(#DataBase, ReqSql)
;-Création de la table des <matieres>
ReqSql = "CREATE TABLE matieres("
ReqSql + "idmatiere INTEGER PRIMARY KEY,"
ReqSql + "nom VARCHAR(50)"
ReqSql + ");"
DatabaseUpdate(#DataBase, ReqSql)
;Création d'un jeu de données matieres
ReqSql = "INSERT INTO matieres (nom) VALUES ("
ReqSql + Chr(34) + "S.V.T" + Chr(34)+")"
DatabaseUpdate(#DataBase, ReqSql) : FinishDatabaseQuery(#DataBase)
ReqSql = "INSERT into matieres (nom) VALUES ("
ReqSql + Chr(34) + "Histoire/Geo" + Chr(34)+")"
DatabaseUpdate(#DataBase, ReqSql) : FinishDatabaseQuery(#DataBase)
;-Création de la table des <notes>
ReqSql = "CREATE TABLE notes("
ReqSql + "ideleve INTEGER,"
ReqSql + "idmatiere INTEGER,"
ReqSql + "idnote INTEGER PRIMARY KEY,"
ReqSql + "note INTEGER"
ReqSql + ");"
DatabaseUpdate(#DataBase, ReqSql) : FinishDatabaseQuery(#DataBase)
;Création d'un jeu de données notes
ReqSql = "INSERT INTO notes (ideleve, idmatiere, note) VALUES ("
ReqSql + Chr(34) + "2" + Chr(34)+Chr(44) ;Janus
ReqSql + Chr(34) + "1" + Chr(34)+Chr(44) ;S.V.T.
ReqSql + Chr(34) + "13" + Chr(34)+")"
DatabaseUpdate(#DataBase, ReqSql) : FinishDatabaseQuery(#DataBase)
ReqSql = "INSERT INTO notes (ideleve, idmatiere, note) VALUES ("
ReqSql + Chr(34) + "2" + Chr(34)+Chr(44) ;Janus
ReqSql + Chr(34) + "2" + Chr(34)+Chr(44) ;Histoire/Géo.
ReqSql + Chr(34) + "10" + Chr(34)+")"
DatabaseUpdate(#DataBase, ReqSql) : FinishDatabaseQuery(#DataBase)
ReqSql = "INSERT INTO notes (ideleve, idmatiere, note) VALUES ("
ReqSql + Chr(34) + "1" + Chr(34)+Chr(44) ;laura
ReqSql + Chr(34) + "1" + Chr(34)+Chr(44) ;S.V.T.
ReqSql + Chr(34) + "11" + Chr(34)+")"
DatabaseUpdate(#DataBase, ReqSql) : FinishDatabaseQuery(#DataBase)
ReqSql = "INSERT INTO notes (ideleve, idmatiere, note) VALUES ("
ReqSql + Chr(34) + "1" + Chr(34)+Chr(44) ;laura
ReqSql + Chr(34) + "2" + Chr(34)+Chr(44) ;Histoire/Géo
ReqSql + Chr(34) + "15" + Chr(34)+")"
DatabaseUpdate(#DataBase, ReqSql) : FinishDatabaseQuery(#DataBase)
ReqSql = "INSERT INTO notes (ideleve, idmatiere, note) VALUES ("
ReqSql + Chr(34) + "1" + Chr(34)+Chr(44) ;laura
ReqSql + Chr(34) + "2" + Chr(34)+Chr(44) ;Histoire/Géo
ReqSql + Chr(34) + "18" + Chr(34)+")"
DatabaseUpdate(#DataBase, ReqSql) : FinishDatabaseQuery(#DataBase)
EndProcedure
;Affichage du bulletin et calcul de la moyenne
Procedure AfficheNotes(Key.i)
Protected Buffer.s
;Moyenne des notes par matiére
ReqSql = "SELECT eleves.nom, matieres.nom, AVG(notes.note), notes.idmatiere, notes.ideleve"
ReqSql + " FROM eleves, matieres, notes"
ReqSql + " WHERE notes.ideleve = eleves.ideleve"
ReqSql + " AND notes.idmatiere = matieres.idmatiere"
ReqSql + " AND notes.ideleve = " + Chr(34)+Key+Chr(34)
ReqSql + " GROUP BY notes.idmatiere"
ReqSql + " ORDER BY matieres.nom ASC"
DatabaseQuery(#DataBase, ReqSql)
ClearGadgetItems(#Tableau)
While NextDatabaseRow(#DataBase)
AddGadgetItem(#Tableau, -1, GetDatabaseString(#DataBase, 1)+Chr(10)+StrD(GetDatabaseFloat(#DataBase, 2),2))
Wend
FinishDatabaseQuery(#DataBase)
;Moyenne de l'ensemble des notes toutes matiéres confondu
ReqSql = "SELECT AVG(note) FROM notes WHERE ideleve = " + Chr(34)+Key+Chr(34)
DatabaseQuery(0, ReqSql)
While NextDatabaseRow(0)
SetGadgetText(#Moyenne, StrD(GetDatabaseFloat(0, 0),2))
Wend
EndProcedure
;Enregistrement d'une note
Procedure EnregistreNote()
Protected IdEleve.i, IdMatiere, Note.s
IdEleve = GetGadgetItemData(#Eleves, GetGadgetState(#Eleves))
IdMatiere = GetGadgetItemData(#SelectMatiere, GetGadgetState(#SelectMatiere))
Note = GetGadgetText(#Note)
ReqSql = "INSERT INTO notes (ideleve, idmatiere, note) VALUES ("
ReqSql + Chr(34) + IdEleve + Chr(34)+Chr(44)
ReqSql + Chr(34) + IdMatiere + Chr(34)+Chr(44)
ReqSql + Chr(34) + Note + Chr(34)+")"
DatabaseUpdate(0, ReqSql) : FinishDatabaseQuery(0)
AfficheNotes(IdEleve)
EndProcedure
Procedure Open_MainForm()
OpenWindow(#Mainform, 0, 0, 400, 600, "Bulletin de notes", WindowStyle)
;Liste des éléves
TextGadget(#PB_Any, 10, 20, 100, 20, "Choisir un éléve")
ComboBoxGadget(#Eleves, 110, 20, 280, 22)
;Moyenne des notes par matieres
ListIconGadget(#Tableau, 10, 60, 380, 400, "Matiére", 200)
AddGadgetColumn(#Tableau, 1, "Note", 150)
;Moyenne
TextGadget(#PB_Any, 10, 480, 100, 20, "Moyenne")
StringGadget(#Moyenne, 110, 480, 50, 22, "00.00", #PB_String_ReadOnly)
;Ajout d'une note
ButtonGadget(#AjoutNote, 150, 550, 100, 22, "Ajouter une note")
EndProcedure
Procedure Open_NoteForm()
OpenWindow(#NoteForm, 0, 0, 300, 300, "Ajout d'une note", #PB_Window_SystemMenu|#PB_Window_ScreenCentered, WindowID(#Mainform))
;Sélectionner une matiére
TextGadget(#PB_Any, 10, 20, 150, 20, "Sélectionner une matiére")
ComboBoxGadget(#SelectMatiere, 165, 20, 120, 22)
;Lecture des matiére dans la base de donnée : Table matiere
DatabaseQuery(#Database, "SELECT * FROM matieres")
While NextDatabaseRow(#Database)
AddGadgetItem(#SelectMatiere, -1, GetDatabaseString(0, 1)) ;Ajout du libellé
SetGadgetItemData(#SelectMatiere, CountGadgetItems(#SelectMatiere)-1, GetDatabaseLong(#DataBase, 0))
Wend
SetGadgetState(#SelectMatiere, 0)
;Saisie de la note
TextGadget(#PB_Any, 10, 50, 150, 20, "Note")
StringGadget(#Note, 165, 50, 50, 22,"0")
;Validation
ButtonGadget(#Enregistre, 100, 250, 100, 22, "Enregistre")
EndProcedure
Procedure Start()
;Base de données en mémoire pour cette demo
UseSQLiteDatabase()
OpenDatabase(#DataBase, ":memory:", "", "")
;Initialisation de la base de données
DatabaseInit()
;Ouverture de la fenetre principale
Open_MainForm()
;Chargement des éléves
DatabaseQuery(#DataBase, "SELECT * FROM eleves")
While NextDatabaseRow(#DataBase)
AddGadgetItem(#Eleves, -1, GetDatabaseString(#DataBase, 1))
SetGadgetItemData(#Eleves, CountGadgetItems(#Eleves)-1, GetDatabaseLong(#DataBase, 0))
Wend
SetGadgetState(#Eleves, 0)
AfficheNotes(GetGadgetItemData(#Eleves, GetGadgetState(#Eleves)))
EndProcedure
start()
Repeat
Event = WaitWindowEvent()
WEvent = EventWindow()
MEvent = EventMenu()
GEvent = EventGadget()
TEvent = EventType()
Select Event
Case #PB_Event_Gadget
Select GEvent
Case #Eleves
If IsWindow(#NoteForm)
CloseWindow(#NoteForm)
EndIf
AfficheNotes(GetGadgetItemData(#Eleves, GetGadgetState(#Eleves)))
Case #AjoutNote
Open_NoteForm()
Case #Enregistre
EnregistreNote()
EndSelect
Case #PB_Event_CloseWindow
Select WEvent
Case #Mainform
End
Case #NoteForm
CloseWindow(#NoteForm)
EndSelect
EndSelect
ForEver