import tkinter as tk
from tkinter import ttk, messagebox, simpledialog
import uuid
from datetime import datetime
import json
class Application([Link]):
def __init__(self):
super().__init__()
[Link]("Gestion Scolaire")
[Link]("1000x700")
[Link] = [Link]()
[Link].theme_use("clam")
# Configuration initiale
self.FICHIER_DATA = "[Link]"
[Link] = {
"SIO": {"matieres": {"Réseaux": 3, "Programmation": 4, "Systèmes": 3},
"frais": 1500},
"CQP": {"matieres": {"Comptabilité": 4, "Droit": 3, "Management": 3},
"frais": 1200},
"TGSSI": {"matieres": {"Sécurité": 4, "Cloud": 3, "DevOps": 3},
"frais": 1800}
}
# Charger les données
self.charger_donnees()
# Interface principale
self.creer_menu_principal()
# ... (Les méthodes charger_donnees() et sauvegarder_donnees() restent
identiques)
def creer_menu_principal(self):
self.frame_principal = [Link](self, padding=20)
self.frame_principal.pack(expand=True, fill=[Link])
btn_style = [Link]()
btn_style.configure("TButton", font=('Helvetica', 12), padding=10)
[Link](self.frame_principal, text="Inscription",
command=self.interface_inscription).pack(fill=tk.X, pady=5)
[Link](self.frame_principal, text="Paiement",
command=self.interface_paiement).pack(fill=tk.X, pady=5)
[Link](self.frame_principal, text="Résultats",
command=self.interface_resultats).pack(fill=tk.X, pady=5)
[Link](self.frame_principal, text="Quitter",
command=[Link]).pack(fill=tk.X, pady=5)
def interface_resultats(self):
fenetre = [Link](self)
[Link]("Calcul des Résultats")
[Link]("600x400")
frame = [Link](fenetre, padding=20)
[Link](expand=True, fill=[Link])
# Recherche étudiant
[Link](frame, text="ID Étudiant:", font=('Helvetica', 12)).grid(row=0,
column=0, sticky="w")
self.id_entry = [Link](frame, width=20)
self.id_entry.grid(row=0, column=1, padx=5, pady=5)
btn_rechercher = [Link](frame, text="Rechercher", command=lambda:
self.afficher_resultats(frame))
btn_rechercher.grid(row=0, column=2, padx=10)
# Zone d'affichage des résultats
self.resultat_text = [Link](frame, height=15, width=60, state=[Link])
self.resultat_text.grid(row=1, columnspan=3, pady=10)
def afficher_resultats(self, parent):
id_etudiant = self.id_entry.get()
etudiant = next((e for e in [Link] if e["id"] == id_etudiant),
None)
if not etudiant:
[Link]("Erreur", "Étudiant non trouvé !")
return
# Vérifier les notes manquantes
if not etudiant["notes"]:
self.saisir_notes(etudiant)
# Calculer la moyenne
total = sum(note * [Link][etudiant["filiere"]]["matieres"][matiere]
for matiere, note in etudiant["notes"].items())
total_coeff = sum([Link][etudiant["filiere"]]["matieres"].values())
moyenne = total / total_coeff
statut = "Admis ✅" if moyenne >= 10 else "Échec ❌"
# Afficher les résultats
self.resultat_text.config(state=[Link])
self.resultat_text.delete(1.0, [Link])
resultats = (
f"Étudiant: {etudiant['prenom']} {etudiant['nom']}\n"
f"Filière: {etudiant['filiere']}\n\n"
"Notes:\n"
)
for matiere, note in etudiant["notes"].items():
coeff = [Link][etudiant["filiere"]]["matieres"][matiere]
resultats += f"- {matiere} (coeff {coeff}): {note}/20\n"
resultats += (
f"\nMoyenne générale: {moyenne:.2f}/20\n"
f"Statut: {statut}"
)
self.resultat_text.insert([Link], resultats)
self.resultat_text.config(state=[Link])
self.sauvegarder_donnees()
def saisir_notes(self, etudiant):
for matiere in [Link][etudiant["filiere"]]["matieres"]:
while True:
note = [Link](
"Saisie des notes",
f"Note pour {matiere} (0-20):",
parent=self,
minvalue=0,
maxvalue=20
)
if note is not None:
etudiant["notes"][matiere] = note
break
# ... (Les autres méthodes restent similaires)
if __name__ == "__main__":
app = Application()
[Link]()