Spaces:
Sleeping
Sleeping
File size: 4,908 Bytes
92b8e0e 2dc9f8c 92b8e0e 2dc9f8c 92b8e0e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | import streamlit as st
import pandas as pd
# Initialize session state for subjects, teachers, classrooms, and timetable
if 'subjects' not in st.session_state:
st.session_state['subjects'] = []
if 'teachers' not in st.session_state:
st.session_state['teachers'] = []
if 'classrooms' not in st.session_state:
st.session_state['classrooms'] = []
if 'timetable' not in st.session_state:
st.session_state['timetable'] = pd.DataFrame(columns=['Day', 'Time', 'Room', 'Subject', 'Teacher'])
# Define days and time slots
DAYS = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
TIMES = ["09:00-10:00", "10:00-11:00", "11:00-12:00", "12:00-01:00", "01:00-02:00", "02:00-03:00"]
# Title of the application
st.title("Smart Semester Subjects Timetable Management System")
# Sidebar navigation
menu = st.sidebar.radio("Menu", ["Add Subject", "Add Teacher", "Add Classroom", "Add Subject Lectures", "View Timetable"])
# Add Subject Page
if menu == "Add Subject":
st.header("Add Subjects")
subject = st.text_input("Enter Subject Name")
if st.button("Add Subject"):
if subject:
st.session_state['subjects'].append(subject)
st.success(f"Added subject: {subject}")
else:
st.error("Please enter a subject name.")
st.subheader("Current Subjects")
if st.session_state['subjects']:
st.write(st.session_state['subjects'])
else:
st.write("No subjects added yet.")
# Add Teacher Page
elif menu == "Add Teacher":
st.header("Add Teachers")
teacher = st.text_input("Enter Teacher Name")
if st.button("Add Teacher"):
if teacher:
st.session_state['teachers'].append(teacher)
st.success(f"Added teacher: {teacher}")
else:
st.error("Please enter a teacher name.")
st.subheader("Current Teachers")
if st.session_state['teachers']:
st.write(st.session_state['teachers'])
else:
st.write("No teachers added yet.")
# Add Classroom Page
elif menu == "Add Classroom":
st.header("Add Classrooms")
room = st.text_input("Enter Classroom Name")
if st.button("Add Classroom"):
if room:
st.session_state['classrooms'].append(room)
st.success(f"Added classroom: {room}")
else:
st.error("Please enter a classroom name.")
st.subheader("Current Classrooms")
if st.session_state['classrooms']:
st.write(st.session_state['classrooms'])
else:
st.write("No classrooms added yet.")
# Add Subject Lectures Page
elif menu == "Add Subject Lectures":
st.header("Add Subject Lectures")
if not st.session_state['subjects'] or not st.session_state['teachers'] or not st.session_state['classrooms']:
st.warning("Please ensure subjects, teachers, and classrooms are added first.")
else:
subject = st.selectbox("Select Subject", st.session_state['subjects'])
teacher = st.selectbox("Select Teacher", st.session_state['teachers'])
room = st.selectbox("Select Classroom", st.session_state['classrooms'])
day = st.selectbox("Select Day", DAYS)
time = st.selectbox("Select Time Slot", TIMES)
if st.button("Add Lecture"):
# Check if the slot is already taken
if not st.session_state['timetable'][(st.session_state['timetable']['Day'] == day) &
(st.session_state['timetable']['Time'] == time) &
(st.session_state['timetable']['Room'] == room)].empty:
st.error(f"Slot on {day} at {time} in {room} is already taken.")
else:
new_entry = pd.DataFrame({"Day": [day], "Time": [time], "Room": [room], "Subject": [subject], "Teacher": [teacher]})
st.session_state['timetable'] = pd.concat([st.session_state['timetable'], new_entry], ignore_index=True)
st.success("Lecture added successfully.")
# View Timetable Page
elif menu == "View Timetable":
st.header("Weekly Timetable")
if not st.session_state['timetable'].empty:
# Create a pivot table for better visualization
pivot_table = st.session_state['timetable'].pivot_table(
index='Day',
columns='Time',
values=['Subject', 'Teacher'],
aggfunc=lambda x: ' | '.join(x)
)
# Combine Subject and Teacher in each cell
styled_table = pivot_table.apply(lambda x: x.dropna().apply(lambda y: y.split(' | ')[0] + "\n" + y.split(' | ')[1] if ' | ' in y else y), axis=1)
st.write(styled_table.fillna("-"))
if st.button("Clear Timetable"):
st.session_state['timetable'] = pd.DataFrame(columns=['Day', 'Time', 'Room', 'Subject', 'Teacher'])
st.success("Timetable cleared.")
else:
st.write("No timetable entries yet.")
|