import datetime
import random
class Employee:
def __init__(self, name, id, title, post):
self.name = name
self.id = id
self.title = title
self.post = post
self.last_rest_day = None
class Shift:
def __init__(self, id, time, post):
self.id = id
self.time = time
self.post = post
class Schedule:
def __init__(self):
self.employees = []
self.shifts = []
self.schedules = {}
self.holidays = []
def add_employee(self, employee):
self.employees.append(employee)
def add_shift(self, shift):
self.shifts.append(shift)
def add_holiday(self, date):
self.holidays.append(date)
def generate(self, start, end):
for date in self.get_dates(start, end):
self.schedule_for_date(date)
def schedule_for_date(self, date):
if date in self.holidays:
self.assign_holiday(date)
else:
self.assign_night_shift(date)
for emp in self.employees:
if self.is_rest_day(emp, date):
self.assign_rest(emp, date)
else:
self.assign_shift(emp, date)
def assign_shift(self, emp, date):
shift = self.get_shift(emp.post)
if shift:
print(f'{emp.name} 的班次是 {shift.time}')
self.update_last_rest_day(emp, date)
def is_rest_day(self, emp, date):
if emp.last_rest_day is None or (date - emp.last_rest_day).days >= 7:
return True
else:
return False
def update_last_rest_day(self, emp, date):
emp.last_rest_day = date
def get_shift(self, post):
for s in self.shifts:
if s.post == post:
return s
return None
def assign_holiday(self, date):
...
def assign_night_shift(self, date):
...
sched = Schedule()
sched.add_holiday(datetime.date(2023, 2, 5))
start = datetime.date(2023, 2, 1)
end = datetime.date(2023, 2, 28)
sched.generate(start, end)