Загрузка данных
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())