From f7b2b45df8a62224e9e02307a629ef354cfa59d0 Mon Sep 17 00:00:00 2001 From: Denis B/ Date: Thu, 25 Jul 2024 00:23:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D1=83?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B5=D0=BF=D0=BE=D0=B4=D0=BE=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8F.=20=D0=98=D0=B7=D0=B2=D0=B8=D0=BD=D0=B8?= =?UTF-8?q?=D1=82=D0=B5=20,=20=D1=87=D1=82=D0=BE=20=D0=BD=D0=B5=20=D1=81?= =?UTF-8?q?=D0=B5=D0=BC=D0=B5=D0=B9=D0=BD=D0=BE=D0=B5=20=D0=B4=D1=80=D0=B5?= =?UTF-8?q?=D0=B2=D0=BE.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 109 ++++++++++++++++++ src/ru/gb/vending_machine/Main.java | 14 +++ .../gb/vending_machine/products/HotDrink.java | 20 ++++ .../products/HotDrinkWithTemp.java | 24 ++++ .../vending/VendingMachine.java | 33 +++++- 5 files changed, 195 insertions(+), 5 deletions(-) create mode 100644 Readme.md create mode 100644 src/ru/gb/vending_machine/products/HotDrink.java create mode 100644 src/ru/gb/vending_machine/products/HotDrinkWithTemp.java diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..8d748ec --- /dev/null +++ b/Readme.md @@ -0,0 +1,109 @@ +# Вендивговая Машина 🍹 + +Проект представляет собой имитацию работы вендинговой машины с продуктами, в том числе горячими напитками, используя принципы объектно-ориентированного программирования на языке Java. 🖥️☕ + +## Структура Проекта 📁 + +Проект включает следующие основные компоненты: + +### 1. **Классы Продуктов** 🛒 + +- **`Product`** + Базовый класс, представляющий продукт. Содержит свойства: + + - `id` — идентификатор продукта + - `name` — название продукта + - `price` — цена продукта + + Методы: + + - Конструктор, геттеры и сеттеры для свойств + - `toString()` — строковое представление продукта + +- **`Bottle`** + Подкласс `Product`, представляющий бутылку. Дополнительно содержит свойство: + + - `volume` — объем бутылки + + Методы: + + - Конструктор, геттеры для объема + - `toString()` — строковое представление с учетом объема + +- **`HotDrink`** + Абстрактный класс, наследующий `Product`, представляющий горячие напитки. Содержит свойства: + + - `volume` — объем напитка + + Методы: + + - Конструктор, геттеры и сеттеры для объема + - Абстрактный метод `prepare()` — для приготовления напитка + +- **`HotDrinkWithTemp`** + Подкласс `HotDrink`, представляющий горячие напитки с заданной температурой. Дополнительно содержит свойство: + + - `specificTemperature` — температура напитка + + Методы: + + - Конструктор, геттеры для температуры + - `toString()` — строковое представление с учетом температуры + - Реализация метода `prepare()` + +### 2. **Класс Вендивговой Машины** 🏪 + +- **`VendingMachine`** + Класс, представляющий вендинговую машину. Содержит свойства: + + - `id` — идентификатор машины + - `productId` — идентификатор продукта (для уникального присвоения) + - `productList` — список продуктов в машине + + Методы: + + - Конструктор, геттеры и сеттеры для идентификатора + - `addProduct(Product product)` — добавление продукта в машину + - `getProductsInfo()` — получение информации обо всех продуктах + - `getProduct(String name, double volume, int temperature)` — поиск продукта по параметрам (для горячих напитков) + +### 3. **Главный Класс** 🚀 + +- **`Main`** + Основной класс с методом `main()`, демонстрирующий создание и работу вендинговой машины. + + Примеры: + + - Создание экземпляра `VendingMachine` + - Добавление продуктов + - Вывод информации о продуктах + - Поиск и выдача конкретного продукта + +## Запуск Проекта ⚙️ + +Для запуска проекта: + +1. Скомпилируйте все классы с помощью команды `javac`. +2. Запустите основной класс `Main` с помощью команды `java`. + +Пример команды для компиляции: + +```bash +javac -d bin src/ru/gb/vending_machine/products/*.java src/ru/gb/vending_machine/vending/*.java src/ru/gb/vending_machine/Main.java +``` + +Пример команды для запуска: + +```bash +java -cp bin ru.gb.vending_machine.Main +``` + +## Примечания 📝 + +- **Классы `Bottle` и `HotDrinkWithTemp`** могут быть расширены для поддержки дополнительных свойств и методов. +- **`HotDrink`** является абстрактным классом и требует реализации метода `prepare()` в своих подклассах. + +## Информация о Разработчике 👤 + +- **Группа:** 6381 +- **Фамилия и Имя:** [Bakun Denis](https://gb.ru/users/62f39054-3c43-4341-95fb-c7d648c2c4ad) diff --git a/src/ru/gb/vending_machine/Main.java b/src/ru/gb/vending_machine/Main.java index abfd7ac..32d772a 100644 --- a/src/ru/gb/vending_machine/Main.java +++ b/src/ru/gb/vending_machine/Main.java @@ -1,6 +1,7 @@ package ru.gb.vending_machine; import ru.gb.vending_machine.products.Bottle; +import ru.gb.vending_machine.products.HotDrinkWithTemp; import ru.gb.vending_machine.products.Product; import ru.gb.vending_machine.vending.VendingMachine; @@ -8,12 +9,25 @@ public class Main { public static void main(String[] args) { VendingMachine vendingMachine = new VendingMachine(123); + System.out.println("Vending Machine ID: " + vendingMachine.getId()); + Product product1 = new Bottle("coca-cola", 150, 1.5); Product product2 = new Product("milko", 100); + HotDrinkWithTemp hotDrink1 = new HotDrinkWithTemp("Green Tea", 200, 0.25, 75); + HotDrinkWithTemp hotDrink2 = new HotDrinkWithTemp("Coffee", 300, 0.30, 85); vendingMachine.addProduct(product1); vendingMachine.addProduct(product2); + vendingMachine.addProduct(hotDrink1); + vendingMachine.addProduct(hotDrink2); System.out.println(vendingMachine.getProductsInfo()); + + Product requestedDrink = vendingMachine.getProduct("Green Tea", 0.25, 75); + if (requestedDrink != null) { + System.out.println("Dispensing: " + requestedDrink); + } else { + System.out.println("Product not found."); + } } } diff --git a/src/ru/gb/vending_machine/products/HotDrink.java b/src/ru/gb/vending_machine/products/HotDrink.java new file mode 100644 index 0000000..17e1e80 --- /dev/null +++ b/src/ru/gb/vending_machine/products/HotDrink.java @@ -0,0 +1,20 @@ +package ru.gb.vending_machine.products; + +public abstract class HotDrink extends Product { + private double volume; + + public HotDrink(String name, double price, double volume) { + super(name, price); + this.volume = volume; + } + + public double getVolume() { + return volume; + } + + public void setVolume(double volume) { + this.volume = volume; + } + + public abstract void prepare(); +} diff --git a/src/ru/gb/vending_machine/products/HotDrinkWithTemp.java b/src/ru/gb/vending_machine/products/HotDrinkWithTemp.java new file mode 100644 index 0000000..cb8bfb6 --- /dev/null +++ b/src/ru/gb/vending_machine/products/HotDrinkWithTemp.java @@ -0,0 +1,24 @@ +package ru.gb.vending_machine.products; + +public class HotDrinkWithTemp extends HotDrink { + private int specificTemperature; + + public HotDrinkWithTemp(String name, double price, double volume, int specificTemperature) { + super(name, price, volume); + this.specificTemperature = specificTemperature; + } + + public int getSpecificTemperature() { + return specificTemperature; + } + + @Override + public String toString() { + return super.toString() + ", temperature: " + specificTemperature + "°C"; + } + + @Override + public void prepare() { + System.out.println("Preparing " + getName() + " at " + getSpecificTemperature() + " degrees."); + } +} diff --git a/src/ru/gb/vending_machine/vending/VendingMachine.java b/src/ru/gb/vending_machine/vending/VendingMachine.java index 01a63ca..caaec42 100644 --- a/src/ru/gb/vending_machine/vending/VendingMachine.java +++ b/src/ru/gb/vending_machine/vending/VendingMachine.java @@ -1,10 +1,11 @@ package ru.gb.vending_machine.vending; -import ru.gb.vending_machine.products.Product; - import java.util.ArrayList; import java.util.List; +import ru.gb.vending_machine.products.HotDrinkWithTemp; +import ru.gb.vending_machine.products.Product; + public class VendingMachine { private int id; private int productId; @@ -15,18 +16,40 @@ public VendingMachine(int id) { productList = new ArrayList<>(); } - public void addProduct(Product product){ + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public void addProduct(Product product) { product.setId(productId++); productList.add(product); } - public String getProductsInfo(){ + public String getProductsInfo() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("Список продуктов:\n"); - for (Product product: productList){ + for (Product product : productList) { stringBuilder.append(product); stringBuilder.append("\n"); } return stringBuilder.toString(); } + + public Product getProduct(String name, double volume, int temperature) { + for (Product product : productList) { + if (product instanceof HotDrinkWithTemp) { + HotDrinkWithTemp hotDrink = (HotDrinkWithTemp) product; + if (hotDrink.getName().equals(name) && + hotDrink.getVolume() == volume && + hotDrink.getSpecificTemperature() == temperature) { + return hotDrink; + } + } + } + return null; + } }