Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

5.4 KiB

Общее контрольное задание по теме 9

Задание:

Создайте и запишите в модуль класс, содержащий следующие компоненты:

  • конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
  • метод для обеспечения операции повышения оклада сотрудника на заданное значение;
  • метод для обеспечения перевода сотрудника из одного отдела в другой;
  • метод для изменения должности сотрудника;
  • свойство, содержащее перечень (список) поощрений сотрудника. Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности.

Решение:

  • Содержание модуля:
>>>class Employee:
    def __init__(self, fio="Unknown", otdel="Not specified", 
                 dolzhnost="Not specified", oklad=0):
        self.fio = fio
        self.otdel = otdel
        self.dolzhnost = dolzhnost
        self.oklad = oklad
        self._poosherenia = []

    def increase_oklad(self, amount):
        if amount < 0:
            print(f"Error: amount cannot be negative ({amount})")
            return self.oklad
        else:
            old_oklad = self.oklad
            self.oklad += amount
            print(f"{self.fio}: salary increased by {amount:,} rub. "
                  f"({old_oklad:,} → {self.oklad:,} rub.)")
            return self.oklad

    def change_department(self, new_department):
        old_department = self.otdel
        self.otdel = new_department
        print(f"Employee {self.fio} transferred from {old_department} to {new_department}.")

    def change_position(self, new_position):
        old_position = self.dolzhnost
        self.dolzhnost = new_position
        print(f"Employee {self.fio} position changed from {old_position} to {new_position}.")

    @property
    def poosherenia(self):
        return self._poosherenia.copy()

    def add_poosherenia(self, text):
        """Adds a new commendation"""
        self._poosherenia.append(text)
        print(f"{self.fio}: added commendation: '{text}'")
    
    def show_info(self):
        """Shows employee information"""
        print(f"\n{'='*40}")
        print(f"EMPLOYEE: {self.fio}")  # ← английское имя!
        print(f"Department: {self.otdel}")  # ← английское имя!
        print(f"Position: {self.dolzhnost}")  # ← английское имя!
        print(f"Salary: {self.oklad} rub.")
        if self._poosherenia:
            print("Commendations:")
            for item in self._poosherenia:
                print(f"  • {item}")
        else:
            print("No commendations")
        print(f"{'='*40}")
  • Тест модуля:
>>>import Mod_tema9
>>>sotr1 = Mod_tema9.Employee("Иванов И.И.", "IT-отдел", "Программист", 80000)
>>>sotr1.show_info()

========================================
EMPLOYEE: Иванов И.И.
Department: IT-отдел
Position: Программист
Salary: 80000 rub.
No commendations
========================================
>>>sotr2 = Mod_tema9.Employee("Петрова А.С.", "Бухгалтерия", "Бухгалтер", 60000)
>>>sotr2.show_info()

========================================
EMPLOYEE: Петрова А.С.
Department: Бухгалтерия
Position: Бухгалтер
Salary: 60000 rub.
No commendations
========================================
>>>sotr1.change_department("Отдел разработки")
Employee Иванов И.И. transferred from IT-отдел to Отдел разработки.
>>>sotr1.increase_oklad(15000)
Иванов И.И.: salary increased by 15,000 rub. (80,000 → 95,000 rub.)
95000
>>>sotr1.change_position("Старший программист")
Employee Иванов И.И. position changed from Программист to Старший программист.
>>>sotr1.add_poosherenia("Заработал, молодец")
Иванов И.И.: added commendation: 'Заработал, молодец'
>>>sotr1.add_poosherenia("За все хорошее")
Иванов И.И.: added commendation: 'За все хорошее'
>>>sotr2.change_department("Отдел финансовых махинаций")
Employee Петрова А.С. transferred from Бухгалтерия to Отдел финансовых махинаций.
>>>sotr2.increase_oklad(60000)
Петрова А.С.: salary increased by 60,000 rub. (60,000 → 120,000 rub.)
120000
>>>sotr2.change_position("Главный бухгалтер")
Employee Петрова А.С. position changed from Бухгалтер to Главный бухгалтер.
>>>sotr2.add_poosherenia("За дело")
Петрова А.С.: added commendation: 'За дело'