Star station OOP exercise code
main.py
from employee import Manager
from employee import Attendant
from employee import Cook
from employee import Mechanic
from reporting import AccountingReport
from reporting import StaffingReport
from reporting import ScheduleReport
from shift import MorningShift
from shift import AfternoonShift
from shift import NightShift
employees = [
Manager("Vera", "Schmidt", 2000, MorningShift()),
Attendant("Chuck", "Norris", 1800, MorningShift()),
Attendant("Samantha", "Carrington", 1800, AfternoonShift()),
Cook("Roberto", "Jacketti", 2100, MorningShift()),
Mechanic("Dave", "Dreissig", 2200, MorningShift()),
Mechanic("Tina", "Rivers", 2300, MorningShift()),
Mechanic("Ringo", "Rama", 1900, AfternoonShift()),
Mechanic("Chuck", "Rainey", 1800, NightShift()),
]
reports = [
AccountingReport(employees),
StaffingReport(employees),
ScheduleReport(employees),
]
for r in reports:
r.print_report()
print()
employee.py
class Employee:
def __init__(self, first_name, last_name, salary, shift):
self._first_name = first_name
self._last_name = last_name
self.salary = salary
self.shift = shift
def get_full_name(self):
return f"{self._first_name} {self._last_name}"
class Manager(Employee):
job_title = "Manager"
class Attendant(Employee):
job_title = "Station Attendant"
class Cook(Employee):
job_title = "Cook"
class Mechanic(Employee):
job_title = "Mechanic"
reporting.py
class Report:
def __init__(self, emp_list):
self._emp_list = emp_list
class AccountingReport(Report):
def print_report(self):
print("Accounting")
print("==========")
for e in self._emp_list:
print(f"{e.get_full_name()}, ${e.salary}")
class StaffingReport(Report):
def print_report(self):
print("Staffing")
print("========")
for e in self._emp_list:
print(f"{e.get_full_name()}, {e.job_title}")
class ScheduleReport(Report):
def print_report(self):
print("Schedule")
print("========")
for e in self._emp_list:
print(f"{e.get_full_name()}, {e.shift.get_shift_info()}")
shift.py
import datetime
class Shift:
def get_shift_info(self):
return f"{self.start_time:%H:%M} to {self.end_time:%H:%M}"
class MorningShift(Shift):
start_time = datetime.time(8, 00)
end_time = datetime.time(16, 00)
class AfternoonShift(Shift):
start_time = datetime.time(12, 00)
end_time = datetime.time(20, 00)
class NightShift(Shift):
start_time = datetime.time(14, 00)
end_time = datetime.time(22, 00)
test_employee.py
import unittest
from employee import Employee
class TestEmployee(unittest.TestCase):
def test_get_full_name(self):
e = Employee("Vera", "Schmidt", 0, None)
self.assertEqual(e.get_full_name(), "Vera Schmidt")
def test_raise_salary(self):
e = Employee("", "", 2000, None)
e.raise_salary(1.1)
self.assertEqual(e.salary, 2200)