Spaces:
Sleeping
Sleeping
| 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.") | |