ecrit une web application pour gerer les inscriptions des eleves par classe
Drop files here
or click to upload
import streamlit as st
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import Session, relationship, DeclarativeBase
import pandas as pd
# Database setup
class Base(DeclarativeBase):
pass
class Class(Base):
__tablename__ = 'classes'
id = Column(Integer, primary_key=True)
name = Column(String(100), nullable=False)
students = relationship("Student", back_populates="class_")
class Student(Base):
__tablename__ = 'students'
id = Column(Integer, primary_key=True)
first_name = Column(String(100), nullable=False)
last_name = Column(String(100), nullable=False)
age = Column(Integer)
class_id = Column(Integer, ForeignKey('classes.id'))
class_ = relationship("Class", back_populates="students")
# Create database and tables
engine = create_engine('sqlite:///school.db')
Base.metadata.create_all(engine)
# Streamlit UI
st.title('Gestion des Inscriptions Scolaires')
# Sidebar for navigation
menu = st.sidebar.selectbox(
'Menu',
['Ajouter une Classe', 'Ajouter un Élève', 'Liste des Classes', 'Liste des Élèves']
)
# Add Class
if menu == 'Ajouter une Classe':
st.header('Ajouter une Nouvelle Classe')
with st.form('class_form'):
class_name = st.text_input('Nom de la Classe')
submit = st.form_submit_button('Ajouter la Classe')
if submit and class_name:
with Session(engine) as session:
new_class = Class(name=class_name)
session.add(new_class)
session.commit()
st.success(f'Classe {class_name} ajoutée avec succès!')
# Add Student
elif menu == 'Ajouter un Élève':
st.header('Ajouter un Nouvel Élève')
with Session(engine) as session:
classes = session.query(Class).all()
class_names = [c.name for c in classes]
with st.form('student_form'):
first_name = st.text_input('Prénom')
last_name = st.text_input('Nom')
age = st.number_input('Âge', min_value=6, max_value=20)
class_name = st.selectbox('Classe', class_names)
submit = st.form_submit_button('Inscrire l\'Élève')
if submit and first_name and last_name:
with Session(engine) as session:
selected_class = session.query(Class).filter_by(name=class_name).first()
new_student = Student(
first_name=first_name,
last_name=last_name,
age=age,
class_id=selected_class.id
)
session.add(new_student)
session.commit()
st.success('Élève inscrit avec succès!')
# List Classes
elif menu == 'Liste des Classes':
st.header('Liste des Classes')
with Session(engine) as session:
classes = session.query(Class).all()
for class_ in classes:
with st.expander(f'Classe: {class_.name}'):
students = session.query(Student).filter_by(class_id=class_.id).all()
if students:
data = {
'Prénom': [s.first_name for s in students],
'Nom': [s.last_name for s in students],
'Âge': [s.age for s in students]
}
st.table(pd.DataFrame(data))
else:
st.info('Aucun élève inscrit dans cette classe')
# List Students
elif menu == 'Liste des Élèves':
st.header('Liste des Élèves')
with Session(engine) as session:
students = session.query(Student).join(Class).all()
if students:
data = {
'Prénom': [s.first_name for s in students],
'Nom': [s.last_name for s in students],
'Âge': [s.age for s in students],
'Classe': [s.class_.name for s in students]
}
st.table(pd.DataFrame(data))
else:
st.info('Aucun élève inscrit')
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?