Условия задачи:

 

Система управления персоналом. Это упражнение предполагает создание класса Employee из упражнения 4 по программированию. Создайте программу, которая сохраня­ет объекты Employee в словаре. Используйте идентификационный номер сотрудника в ка­честве ключа. Программа должна вывести меню, которое позволяет пользователю:
•найти сотрудника в словаре;
•добавить нового сотрудника в словарь;
•изменить имя, отдел и должность существующего сотрудника в словаре;
•удалить сотрудника из словаря;
•выйти из программы.
По завершении работы программа должна законсервировать словарь и сохранить его в файле. При каждом запуске программы она должна попытаться загрузить законсер­вированный словарь из файла. Если файл не существует, то программа должна начать работу с пустого словаря.

 

Решение задачи:

import pickle

class Employee():
    def __init__(self, name, ID, department, job):
        self.__name = name
        self.__ID = ID
        self.__department = department
        self.__job = job
    def set_name(self, name):
        self.__name = name
    def set_ID(self, ID):
        self.__ID = ID
    def set_department(self, department):
        self.__department = department
    def set_job(self, job):
        self.__job = job
    def get_name(self):
        return  self.__name
    def get_ID(self):
        return self.__ID
    def get_department(self):
        return self.__department
    def get_job(self):
        return self.__job
    def __str__(self):
        return f'Имя: {self.__name} номер: {self.__ID} должность {self.__job} отдел {self.__department}'


FIND = 1
CREATE = 2
EDIT = 3
DELETE = 4
QUIT = 5

def menu():
    print('для того что бы произвести действия со словарем выберите один из вариантов')
    print('1 - для поиска работника по словарю')
    print('2- для добавления работника в словарь')
    print('3 - для редактирования информации о работнике')
    print('4 - для удаления информации о работнике')
    print('5 - для выхода из словаря')
    try:
        with open('dict_employee.dat', 'rb') as out_file:
            dict_emp = pickle.load(out_file)
    except:
        dict_emp = {}
    answer = int(input('Укажите цифру:'))
    return answer, dict_emp

def find(dict_emp):
    number = input('Укажите номер сотрудника: ')
    if number in dict_emp:
        print(dict_emp[number])
    else:
        print('Сотрудника с таким номером нет в словаре')

def add(dict_emp):
    number = input('Укажите номер сотрудника: ')
    if number not in dict_emp:
        print('Сотрудника нет в списке, можно добавить')
        name = input('Укажите имя сотрудника: ')
        department = input('Укажите отдел сотрудника: ')
        job = input('Укажите должность сотрудника: ')
        employee = Employee(name, number, department, job)
        dict_emp[number] = employee
        with open('dict_employee.dat', 'wb') as in_file:
            pickle.dump(dict_emp, in_file)
    else:
        print('Сотрудника с таким номером есть в словаре')


def edit(dict_emp):

    number = input('Укажите номер сотрудника: ')
    if number in dict_emp:
        print(dict_emp[number])
        print('Отредактируйте данные')
        name = input('Укажите имя сотрудника: ')
        department = input('Укажите отдел сотрудника: ')
        job = input('Укажите должность сотрудника: ')
        employee = Employee(name, number, department, job)
        dict_emp[number] = employee
        with open('dict_employee.dat', 'wb') as in_file:
            pickle.dump(dict_emp, in_file)
    else:
        print('Сотрудника с таким номером нет в словаре')


def delit(dict_emp):

    number = input('Укажите номер сотрудника: ')
    if number in dict_emp:
        print(dict_emp[number])
        del dict_emp[number]
        print('Данные удалены')
    else:
        print('Сотрудника с таким номером нет в словаре')


answer = 0
while answer != 5:
    answer, dict_emp = menu()

    if answer == FIND:
        find(dict_emp)
    elif answer == 2:
        add(dict_emp)
    elif answer == 3:
        edit(dict_emp)
    elif answer == 4:
        delit(dict_emp)
    else:
        answer = 5