Лабораторная работа №5
Цель работы: Ознакомление и практическое использование классов Python.
Задание на работу:
Решить задачи по варианту, учитывая требования к программе. Для задач номер варианта соответствует номеру в списке группы, если вариант превышает количество имеющихся задач, отсчет начать заново.
Ход работы
Задание:
14) Создать класс OnlineStoreItem (элемент интернет-магазина) с приватными полями: название товара, цена, количество на складе. Реализовать функцию для определения товара с наибольшим количеством единиц на складе, а также функцию для расчета общей стоимости всех товаров в магазине.
Блок-схемы программы
Рисунок 1 – Основная программа
Рисунок 2 – Метод addProduct
Рисунок 3 – Метод maxCount
Рисунок 4 – Метод sumPrice
Рисунок 5 – Метод write_summary
Рисунок 6 – Метод write_to_file
Пример работы программы:
Рисунок 7 – Пример результатов выполнения методов
Рисунок 8 – Примеры результатов записи в файл
Листинг программы:
class OnlineStoreItem:
def __init__(self, productName, price, countInStock):
self.__productName = productName
self.__price = price
self.__countInStock = countInStock
# Метод-геттер для получения названия товара
def get_product_name(self):
return self.__productName
# Метод-сеттер для установки названия товара
def set_product_name(self, name):
if isinstance(name, str):
self.__productName = name
else:
print("Недопустимое название")
# Метод-геттер для получения цены
def get_price(self):
return self.__price
# Метод-сеттер для установки цены
def set_price(self, price):
if isinstance(price, (int, float)):
self.__price = price
else:
print("Недопустимое значение")
# Метод-геттер для получения количества на складе
def get_count_in_stock(self):
return self.__countInStock
# Метод-сеттер для установки количества на складе
def set_count_in_stock(self, count):
if isinstance(count, int):
self.__countInStock = count
else:
print("Недопустимое значение")
@staticmethod
def sort_name(objects):
result = sorted(objects, key=lambda x: x.get_product_name()) # Сортировка по названию товара
for product in result:
print(product.get_product_name())
@staticmethod
def max_count(objects):
max_item = max(objects, key=lambda x: x.get_count_in_stock())
print("Товар с наибольшим количеством на складе:", max_item.get_product_name(), max_item.get_count_in_stock())
@staticmethod
def sum_price(objects,filename):
total_price = 0
for product in objects:
total_price += product.get_price() * product.get_count_in_stock()
print("Общая стоимость всех товаров в магазине:", total_price)
summary = ""
summary += f"Общая стоимость всех товаров в магазине: {str(total_price)}\n"
OnlineStoreItem.write_to_file(summary, filename)
@staticmethod
def add_product(objects, product_name, price, count_in_stock):
new_product = OnlineStoreItem(product_name, price, count_in_stock)
objects.append(new_product)
print("Новый продукт", product_name, "добавлен в магазин.")
@staticmethod
def write_to_file(content, filename):
with open(filename, 'a+') as file:
file.write(content)
print("Данные записаны в файл", filename)
@staticmethod
def write_summary(objects, filename):
summary = ""
for product in objects:
summary += f"Товар: {product.get_product_name()}, Цена: {product.get_price()}, Количество: {product.get_count_in_stock()}\n"
OnlineStoreItem.write_to_file(summary, filename)
# Вызов статических методов
objects = [
OnlineStoreItem('Phone', 300, 45),
OnlineStoreItem('Tomato', 45, 132),
OnlineStoreItem('Keyboard', 155, 73)
]
OnlineStoreItem.add_product(objects, 'Potato', 50, 120)
OnlineStoreItem.max_count(objects)
OnlineStoreItem.sum_price(objects,"price_summary.txt")
OnlineStoreItem.write_summary(objects, "product_summary.txt")
Вывод: в ходе лабораторной работы ознакомились и практически использовали классами в Python.