校园管理系统Admin端新增Update Timetable功能需求及代码改造
理科班课表更新功能改造方案
一、重构现有课表数据结构
原代码用列表索引对应星期,维护性差,改成字典映射更直观,同时新增持久化逻辑避免重启后数据丢失:
import json # 默认课表模板(首次运行或文件丢失时使用) DEFAULT_TIMETABLE = { "Monday": ["English", "Maths", "Biology", "Moral"], "Tuesday": ["Add_Maths", "Physics", "Malay"], "Wednesday": ["History", "Chemistry", "English"], "Thursday": ["Moral", "Biology", "Maths", "Malay"], "Friday": ["Physics", "Chemistry", "Add_Maths", "History"] } # 从本地文件加载课表 def load_timetable(): try: with open("science_timetable.json", "r") as f: return json.load(f) except FileNotFoundError: save_timetable(DEFAULT_TIMETABLE) return DEFAULT_TIMETABLE # 将课表保存到本地文件 def save_timetable(timetable): with open("science_timetable.json", "w") as f: json.dump(timetable, f, indent=2) # 初始化加载课表 timetable = load_timetable()
二、封装现有查看课表功能
把原查询逻辑封装成独立函数,方便在用户菜单和管理员页面复用:
def view_timetable(): day = input("Day of the week? ").title() if day in timetable: print("Your lessons on this day:") for idx, lesson in enumerate(timetable[day], 1): print(f"{idx}. {lesson}") else: print("Not a valid week day!")
三、实现管理员课表更新功能
新增管理员专属的更新函数,支持单日课程修改和整表重置,包含输入校验和操作确认:
def update_timetable(): print("\n=== Admin - Update Timetable ===") print("1. Update a single day's lessons") print("2. Reset entire timetable to default") choice = input("Enter your choice (1/2): ") if choice == "1": day = input("Enter the day to update (e.g. Monday): ").title() if day not in timetable: print("Invalid day!") return # 接收逗号分隔的课程输入,自动清理空格 new_lessons = input(f"Enter new lessons for {day}, separated by commas: ").strip().split(",") new_lessons = [lesson.strip() for lesson in new_lessons if lesson.strip()] if not new_lessons: print("No valid lessons entered!") return # 确认更新操作 confirm = input(f"Confirm update {day}'s lessons to: {', '.join(new_lessons)}? (y/n): ").lower() if confirm == "y": timetable[day] = new_lessons save_timetable(timetable) print(f"{day}'s timetable updated successfully!") else: print("Update cancelled.") elif choice == "2": confirm = input("Are you sure you want to reset entire timetable to default? (y/n): ").lower() if confirm == "y": global timetable timetable = DEFAULT_TIMETABLE.copy() save_timetable(timetable) print("Timetable reset to default successfully!") else: print("Reset cancelled.") else: print("Invalid choice!")
四、整合到Admin页面菜单
在现有Admin菜单中添加更新选项,示例菜单逻辑:
def admin_menu(): while True: print("\n=== Admin Menu ===") print("1. View Timetable") print("2. Update Timetable") print("3. Exit") choice = input("Enter your choice: ") if choice == "1": view_timetable() elif choice == "2": update_timetable() elif choice == "3": print("Exiting admin panel...") break else: print("Invalid choice!") # 系统入口示例(需结合现有身份验证逻辑调用) if __name__ == "__main__": admin_menu()
核心优化说明
- 数据持久化:用JSON文件存储课表,解决内存数据重启丢失问题
- 代码复用:拆分功能函数,减少冗余代码,方便后续扩展
- 输入校验:对星期、课程输入、操作确认做多层校验,避免非法操作
- 操作灵活性:支持单日课程修改和整表重置,覆盖管理员常见操作场景
内容的提问来源于stack exchange,提问作者mjpro
相关产品推荐
相关产品推荐

