design web app for list of students enroll to a tuition class.
To upload files, please first save the app
import streamlit as st
import pandas as pd
from datetime import datetime
from sqlalchemy import create_engine, Column, Integer, String, Date
from sqlalchemy.orm import DeclarativeBase, Session
# Database setup
class Base(DeclarativeBase):
pass
class Student(Base):
__tablename__ = 'students'
id = Column(Integer, primary_key=True)
name = Column(String(100), nullable=False)
age = Column(Integer)
grade = Column(String(20))
contact = Column(String(100))
enrollment_date = Column(Date, default=datetime.now().date())
# Create database and tables
engine = create_engine('sqlite:///tuition.db')
Base.metadata.create_all(engine)
def add_student(name, age, grade, contact):
with Session(engine) as session:
new_student = Student(
name=name,
age=age,
grade=grade,
contact=contact
)
session.add(new_student)
session.commit()
def get_all_students():
with Session(engine) as session:
students = session.query(Student).all()
data = [{
'ID': s.id,
'Name': s.name,
'Age': s.age,
'Grade': s.grade,
'Contact': s.contact,
'Enrollment Date': s.enrollment_date
} for s in students]
return pd.DataFrame(data)
def delete_student(student_id):
with Session(engine) as session:
student = session.query(Student).filter_by(id=student_id).first()
if student:
session.delete(student)
session.commit()
return True
return False
# Streamlit UI
st.title('📚 Tuition Class Enrollment System')
# Sidebar for adding new students
st.sidebar.header('Add New Student')
with st.sidebar.form('add_student_form'):
name = st.text_input('Student Name')
age = st.number_input('Age', min_value=5, max_value=25)
grade = st.selectbox('Grade', ['Grade 1', 'Grade 2', 'Grade 3', 'Grade 4', 'Grade 5',
'Grade 6', 'Grade 7', 'Grade 8', 'Grade 9', 'Grade 10'])
contact = st.text_input('Parent Contact')
submit = st.form_submit_button('Enroll Student')
if submit and name and age and grade and contact:
add_student(name, age, grade, contact)
st.success('Student enrolled successfully!')
st.rerun()
# Main content - Display students
st.subheader('Enrolled Students')
students_df = get_all_students()
if not students_df.empty:
# Add a delete button for each student
col1, col2 = st.columns([3, 1])
with col1:
st.dataframe(students_df, use_container_width=True)
with col2:
delete_id = st.number_input('Enter ID to delete', min_value=1, step=1)
if st.button('Delete Student'):
if delete_student(delete_id):
st.success(f'Student with ID {delete_id} deleted successfully!')
st.rerun()
else:
st.error(f'No student found with ID {delete_id}')
else:
st.info('No students enrolled yet.')
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?