diff --git a/src/main/java/Main.java b/src/main/java/Main.java index db9356a08..9c210a946 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,6 +1,26 @@ +import java.util.List; +import java.util.Scanner; + +import helper.InputHelper; +import model.Product; +import service.Calculator; public class Main { public static void main(String[] args) { - System.out.println("Hello world!"); + Scanner scanner = new Scanner(System.in); + + int numberOfPerson = InputHelper.inputNumberOfPerson(scanner); + List products = InputHelper.inputProducts(scanner); + + Calculator calculator = new Calculator(products, numberOfPerson); + double calculated = calculator.calculate(); + String calculatingString = String.format("%.2f", calculated); + + System.out.println("Каждый должен заплатить по: " + + calculatingString + + " рубл" + + InputHelper.endingOfTheWord((int) Math.floor(calculated), "ей", "ь", "я")); + + scanner.close(); } } \ No newline at end of file diff --git a/src/main/java/helper/InputHelper.java b/src/main/java/helper/InputHelper.java new file mode 100644 index 000000000..fd58185d1 --- /dev/null +++ b/src/main/java/helper/InputHelper.java @@ -0,0 +1,114 @@ +package helper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +import model.Product; + +/** + * Хелпер при работе с информацией введенной в консоль + */ +public class InputHelper { + private InputHelper() { + } + + /** + * Ввод информации о количестве гостей + * + * @param scanner сканер работающий в консоли + * @return количество гостей на которых необходимо расчитать чек + */ + public static int inputNumberOfPerson(Scanner scanner) { + System.out.println("На какое количество человек нужно разделить счет:"); + int numberOfPerson = 0; + boolean exitLoop = false; + while (!exitLoop) { + try { + numberOfPerson = scanner.nextInt(); + if (numberOfPerson <= 1) { + System.out.println("Некорректное значение. Количество человек должно быть больше 1"); + continue; + } + exitLoop = true; + //break; + } catch (Exception e) { + printError(); + scanner.nextLine(); + } + } + scanner.nextLine(); + return numberOfPerson; + } + + /** + * Ввод информации о товарах из консоли + * + * @param scanner сканер работающий в консоли + * @return список товаров + */ + public static List inputProducts(Scanner scanner) { + List products = new ArrayList(); + while (true) { + System.out.println("Введите название товара и его стоимость"); + String productInfo = scanner.nextLine(); + if (productInfo.equalsIgnoreCase("Завершить")) { + break; + } + addNewProduct(products, productInfo); + } + return products; + } + + private static void addNewProduct(List products, String productInfo) { + String[] strings = productInfo.split(" "); + if (strings.length <= 1) { + printError(); + return; + } + String productName = ""; + double price; + try { + price = Double.parseDouble(strings[strings.length - 1]); + if (price < 0) { + printError(); + return; + } + for (int i = 0; i < strings.length - 1; i++) { + productName += strings[i] + " "; + } + } catch (Exception e) { + printError(); + return; + } + products.add(new Product(productName, price)); + System.out.println("Товар успешно добавлен"); + } + + /** + * Подобрать окончание слова в зависимости от числа + * + * @param numb число + * @param firstEnding первое окончание + * @param secondEnding второе окончание + * @param thirdEnding третье окончание + * @return нужное окончание + */ + public static String endingOfTheWord(int numb, String firstEnding, String secondEnding, String thirdEnding) { + int module = numb % 100; + if (module < 11 || module> 14) { + module = numb % 10; + if (module == 1) { + return secondEnding; + } + if (module>= 2 && module <= 4) { + return thirdEnding; + } + } + return firstEnding; + } + + private static void printError() { + System.out.println("Некорректное значение, попробуйте еще раз"); + } +} diff --git a/src/main/java/model/Product.java b/src/main/java/model/Product.java new file mode 100644 index 000000000..c08d04666 --- /dev/null +++ b/src/main/java/model/Product.java @@ -0,0 +1,56 @@ +package model; + +/** + * Товар + */ +public class Product { + private String name; + private double price; + + /** + * Конструктор + * + * @param name наименование товара + * @param price цена товара + */ + public Product(String name, double price) { + this.name = name; + this.price = price; + } + + /** + * Получить наименование товара + * + * @return наименование товара + */ + public String getName() { + return name; + } + + /** + * Установить наименование товара + * + * @param name наименование товара + */ + public void setName(String name) { + this.name = name; + } + + /** + * Получить цену товара + * + * @return цена товара + */ + public double getPrice() { + return price; + } + + /** + * Установить цену товара + * + * @param price цена товара + */ + public void setPrice(double price) { + this.price = price; + } +} diff --git a/src/main/java/service/Calculator.java b/src/main/java/service/Calculator.java new file mode 100644 index 000000000..64ddb174f --- /dev/null +++ b/src/main/java/service/Calculator.java @@ -0,0 +1,39 @@ +package service; + +import java.util.List; + +import model.Product; + +/** + * Калькулятор + */ +public class Calculator { + private List products; + private int numberOfPerson; + private double totalCost; + + /** + * Конструктор + * + * @param products список товаров + * @param numberOfPerson количество гостей + */ + public Calculator(List products, int numberOfPerson) { + this.products = products; + this.numberOfPerson = numberOfPerson; + } + + /** + * Расчитать плату по чеку на кждого гостя + * + * @return количество денег для оплаты + */ + public double calculate() { + System.out.println("Добавленные товары: \n"); + for (Product product : products) { + totalCost += product.getPrice(); + System.out.println(product.getName() + product.getPrice()); + } + return totalCost / numberOfPerson; + } +}

AltStyle によって変換されたページ (->オリジナル) /