11import json
22
33class USFGenerator :
4- def __init__ (self ):
5- self .data = {"subjects" : [], "schedule" : []}
6-
7- def add_subject (self , name , teacher , location ):
8- """添加课程"""
9- subject = {"name" : name , "teacher" : teacher , "location" : location }
10- self .data ["subjects" ].append (subject )
11-
12- def add_schedule (self , subject_index , day , time , week_rule = "all" ):
13- """添加课程表项"""
14- schedule_item = {
15- "subject_index" : subject_index ,
16- "day" : day ,
17- "time" : time ,
18- "week_rule" : week_rule
4+ def __init__ (self , version = 1 ):
5+ """
6+ Initialize USF Generator.
7+
8+ Args:
9+ version (int, optional): USF format version. Defaults to 1.
10+ """
11+ self .version = version
12+ self .subjects = {}
13+ self .periods = []
14+ self .timetable = []
15+
16+ def add_subject (self , name , simplified_name = None , teacher = None , room = None ):
17+ """
18+ Add a subject to USF.
19+
20+ Args:
21+ name (str): Subject name.
22+ simplified_name (str, optional): Shortened subject name.
23+ teacher (str, optional): Teacher's name.
24+ room (str, optional): Classroom.
25+ """
26+ self .subjects [name ] = {
27+ "simplified_name" : simplified_name or name ,
28+ "teacher" : teacher or "" ,
29+ "room" : room or "" ,
30+ }
31+
32+ def add_period (self , start_time , end_time ):
33+ """
34+ Add a class period to USF.
35+
36+ Args:
37+ start_time (str): Start time (HH:MM:SS).
38+ end_time (str): End time (HH:MM:SS).
39+
40+ Returns:
41+ int: Index of the added period (1-based).
42+ """
43+ self .periods .append ([start_time , end_time ])
44+ return len (self .periods ) # Return 1-based index
45+
46+ def add_schedule (self , day , week_type , subject , period_index ):
47+ """
48+ Add a schedule entry.
49+
50+ Args:
51+ day (int): Day of the week (1=Monday, ..., 7=Sunday).
52+ week_type (str): "all", "even", or "odd".
53+ subject (str): Subject name (must exist in subjects).
54+ period_index (int): Index of the period (1-based).
55+ """
56+ if subject not in self .subjects :
57+ raise ValueError (f"Subject '{ subject } ' is not defined." )
58+ if period_index < 1 or period_index > len (self .periods ):
59+ raise ValueError (f"Invalid period index { period_index } ." )
60+ self .timetable .append ([day , week_type , subject , period_index ])
61+
62+ def generate (self ):
63+ """
64+ Generate USF data as a dictionary.
65+
66+ Returns:
67+ dict: USF formatted data.
68+ """
69+ return {
70+ "version" : self .version ,
71+ "subjects" : self .subjects ,
72+ "periods" : self .periods ,
73+ "timetable" : self .timetable ,
1974 }
20- self .data ["schedule" ].append (schedule_item )
2175
22- def save (self , filename ):
23- """保存USF文件"""
76+ def save_to_file (self , filename ):
77+ """
78+ Save USF data to a JSON file.
79+
80+ Args:
81+ filename (str): Output filename.
82+ """
2483 with open (filename , "w" , encoding = "utf-8" ) as f :
25- json .dump (self .data , f , ensure_ascii = False , indent = 2 )
84+ json .dump (self .generate () , f , indent = 2 , ensure_ascii = False )
0 commit comments