Загрузка данных


from datetime import date


#  Базовая сущность 

class entity:
    def __init__(self, code=0):
        self.setCode(code)

    def setCode(self, value):
        self.__code = value

    def getCode(self):
        return self.__code


#  Именованная сущность 

class namedentity(entity):
    def __init__(self, code=0, name=''):
        super().__init__(code)
        self.setName(name)

    def setName(self, value):
        self.__name = value

    def getName(self):
        return self.__name


#  Автомобиль 

class car(namedentity):
    def __init__(self, code=0, brand='', cost=0, rentcost=0, cartype=''):
        super().__init__(code, brand)
        self.setCost(cost)
        self.setRentCost(rentcost)
        self.setType(cartype)

    def setCost(self, value):
        self.__cost = float(value)

    def getCost(self):
        return self.__cost

    def setRentCost(self, value):
        self.__rentcost = float(value)

    def getRentCost(self):
        return self.__rentcost

    def setType(self, value):
        self.__cartype = value

    def getType(self):
        return self.__cartype

    def getBrand(self):
        return self.getName()


#  Клиент 

class client(namedentity):
    def __init__(self, code=0, surname='', name='', secname='',
                 address='', phone=''):
        super().__init__(code, name)
        self.setSurname(surname)
        self.setSecname(secname)
        self.setAddress(address)
        self.setPhone(phone)

    def setSurname(self, value):
        self.__surname = value

    def setSecname(self, value):
        self.__secname = value

    def setAddress(self, value):
        self.__address = value

    def setPhone(self, value):
        self.__phone = value

    def getSurname(self):
        return self.__surname

    def getSecname(self):
        return self.__secname

    def getAddress(self):
        return self.__address

    def getPhone(self):
        return self.__phone

    def getFio(self):
        return f'{self.getSurname()} {self.getName()} {self.getSecname()}'


# Выданный автомобиль

class rental(entity):
    def __init__(self, code=0, car=None, client=None,
                 issuedate=None, returndate=None):
        super().__init__(code)
        self.setCar(car)
        self.setClient(client)
        self.setIssueDate(issuedate)
        self.setReturnDate(returndate)

    def setCar(self, value):
        self.__car = value

    def setClient(self, value):
        self.__client = value

    def setIssueDate(self, value):
        self.__issuedate = value

    def setReturnDate(self, value):
        self.__returndate = value

    def getCar(self):
        return self.__car

    def getClient(self):
        return self.__client

    def getIssueDate(self):
        return self.__issuedate

    def getReturnDate(self):
        return self.__returndate

    def getInfo(self):
        return (
            f'Автомобиль: {self.getCar().getBrand()}, '
            f'клиент: {self.getClient().getFio()}, '
            f'дата выдачи: {self.getIssueDate()}, '
            f'дата возврата: {self.getReturnDate()}'
        )


#  Общий список сущностей 

class entityList:
    def __init__(self):
        self.__list = []

    def clear(self):
        self.__list = []

    def findByCode(self, code):
        for item in self.__list:
            if item.getCode() == code:
                return item

    def getCodes(self):
        return [item.getCode() for item in self.__list]

    def getItems(self):
        return self.__list.copy()

    def appendItem(self, value):
        self.__list.append(value)

    def removeItem(self, value):
        if value in self.__list:
            self.__list.remove(value)


# Список автомобилей 

class carList(entityList):
    def appendItem(self, value):
        if isinstance(value, car):
            super().appendItem(value)

    def createItem(self, code, brand, cost, rentcost, cartype):
        if code in self.getCodes():
            print(f'Автомобиль с кодом {code} уже существует')
        else:
            c = car(code, brand, cost, rentcost, cartype)
            super().appendItem(c)
            return c


#  Список клиентов 

class clientList(entityList):
    def appendItem(self, value):
        if isinstance(value, client):
            super().appendItem(value)

    def createItem(self, code, surname, name, secname,
                   address, phone):
        if code in self.getCodes():
            print(f'Клиент с кодом {code} уже существует')
        else:
            c = client(
                code,
                surname,
                name,
                secname,
                address,
                phone
            )
            super().appendItem(c)
            return c


# Список прокатов

class rentalList(entityList):
    def appendItem(self, value):
        if isinstance(value, rental):
            super().appendItem(value)

    def createItem(self, code, car, client, issuedate, returndate):
        if code in self.getCodes():
            print(f'Прокат с кодом {code} уже существует')
        else:
            r = rental(
                code,
                car,
                client,
                issuedate,
                returndate
            )
            super().appendItem(r)
            return r

    # История обращений клиента
    def getByClient(self, clientCode):
        return [
            r for r in self.getItems()
            if r.getClient().getCode() == clientCode
        ]

    # История прокатов автомобиля
    def getByCar(self, carCode):
        return [
            r for r in self.getItems()
            if r.getCar().getCode() == carCode
        ]




if __name__ == '__main__':

   
    cars = carList()

    c1 = cars.createItem(
        1,
        'Kia Rio',
        1200000,
        2500,
        'эконом'
    )

    c2 = cars.createItem(
        2,
        'Toyota Camry',
        2800000,
        4500,
        'бизнес'
    )

    c3 = cars.createItem(
        3,
        'Hyundai Solaris',
        1300000,
        2700,
        'эконом'
    )


    
    clients = clientList()

    cl1 = clients.createItem(
        1,
        'Иванов',
        'Иван',
        'Иванович',
        'г. Москва, ул. Ленина, 1',
        '+7-900-111-11-11'
    )

    cl2 = clients.createItem(
        2,
        'Петрова',
        'Мария',
        'Сергеевна',
        'г. Москва, ул. Мира, 5',
        '+7-900-222-22-22'
    )


    # Выданные автомобили
    rentals = rentalList()

    rentals.createItem(
        1,
        c1,
        cl1,
        date(2026, 8, 1),
        date(2026, 8, 9)
    )

    rentals.createItem(
        2,
        c2,
        cl2,
        date(2026, 9, 5),
        date(2026, 9, 15)
    )

    rentals.createItem(
        3,
        c3,
        cl1,
        date(2026, 9, 1),
        date(2026, 9, 7)
    )



    print('Выданные автомобили ')

    for r in rentals.getItems():
        print(r.getInfo())


  
    print('\n История клиента Иванова')

    for r in rentals.getByClient(1):
        print(r.getInfo())


    
    print('\n История автомобиля Kia Rio')

    for r in rentals.getByCar(1):
        print(r.getInfo())