@startuml Class Diagram

class Categorie {
    nom: string
}
class Questionnaire {
    nom: String
    description : String
    actif: boolean
    etudiantAyantTerminer: {user_id, note}[]
}

interface Question {
type: String
nom: String
enonce: String
messageBonneReponse: String
messageMauvaiseReponse: String
active: boolean
reponse: any

+boolean verifier(response: boolean)
}
class Devoir {
nom: String
description : String
noteMax : int
debut : DateTime
fin : DateTime
actif: boolean

+Devoir telecharge()
+televerser(devoir: Devoir)
}

interface Travail {
id: int
type : Devoir | Questionnaire

+associerNote(note: Note)
}

note right of Travail::associerNote
"SGB: insertGrade(...note)"
end note

class Cours {
id : String
prealable : String
titre : String
actif : boolean
}

class GroupCours {
id : String
jour: String
heure: String
activite: String
mode: String
local: String
enseignantID: String
}

class Utilisateur {
id: string
prenom: string
nom: string
isEnseignant: boolean

+Cours[] getCours()
+Cours getCours(id: string)
}

class QuestionVraiFaux {
reponse: boolean
}

class QuestionChoix {
choix: string[]
reponse: string
}

interface Note {
student_id : String
group_id : String
type_id: int
type : Devoir | Questionnaire
note: number
}

QuestionChoix --|> Question
QuestionVraiFaux --|> Question

Devoir --|> Travail
Questionnaire --|> Travail

Question -- Categorie
Categorie -* Questionnaire

Cours -* GroupCours
Cours -* Travail
Cours -* Question

Cours "1..*" -- "0..*" Utilisateur

Travail -- Note

@enduml