module Sched; from RoomDB import RoomDB, RoomRecord; from CourseDB import CourseDB, CourseRecord; from StudentApp import Summer, Winter, Spring, Fall; from Teacher import TeacherDatabase, TeacherRecord, Monday, Tuesday, Wednesday, Thursday, Friday; export Schedule, Time, section, ClassAssignment, daysOfWeek, day; object Schedule is components: ca:ClassAssignment*, CourseDB, TeacherDatabase, RoomDB, term, year, phase, department; description: (* This object represents a schedule in the admin portion. Schedule includes the databases used to create it. *); end Schedule; object ClassAssignment is components: tr:TeacherRecord, rr:RoomRecord, cr:CourseRecord, t:Time, s:section; description: (* This object represents the connection made between a teacher, room, CourseRecord, and Time Assumes that TeacherRecord, RoomRecord, and CourseRecord are described in another RSL *); end ClassAssignment; object Time is components: h:Hour, m:Minute, d:Duration, dow:daysOfWeek; description: (* Time represents the starting time, and how long a class will go. And what days too. *); end Time; object Hour is integer; object Minute is integer; object Duration is integer; object daysOfWeek is day*; object day is Monday or Tuesday or Wednesday or Thursday or Friday; object term is Summer or Spring or Winter or Fall; object year is integer; object phase is integer; object department is string; object section is integer; operation GenerateSchedule inputs: CourseDB, TeacherDatabase, RoomDB, Schedule; outputs: Schedule; description: (* GenerateSchedule is the big operation that makes many schedules and prints out the best one *); end GenerateSchedule; operation NewSchedule inputs: CourseDB, TeacherDatabase, RoomDB; outputs: Schedule; description: (* NewSchedule will be the operation for when the admin user selects new from any of the various start points. *); end NewSchedule; end Sched;