0% ont trouvé ce document utile (0 vote)
7 vues3 pages

Application de Gestion Scolaire Tkinter

L'application de gestion scolaire permet d'inscrire des étudiants, de gérer les paiements et d'afficher les résultats académiques. Elle utilise une interface graphique Tkinter et stocke les données dans un fichier JSON. Les résultats sont calculés en fonction des notes et des coefficients des matières pour chaque filière.

Transféré par

victordrago31
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
7 vues3 pages

Application de Gestion Scolaire Tkinter

L'application de gestion scolaire permet d'inscrire des étudiants, de gérer les paiements et d'afficher les résultats académiques. Elle utilise une interface graphique Tkinter et stocke les données dans un fichier JSON. Les résultats sont calculés en fonction des notes et des coefficients des matières pour chaque filière.

Transféré par

victordrago31
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

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]()

Vous aimerez peut-être aussi