From 37a54604761a93acc1a4d06a13cae5558abd2ec1 Mon Sep 17 00:00:00 2001 From: Oleg Patsan Date: 2022年11月27日 16:21:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B8=D1=88=D0=B5=D0=BC=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=81=D0=BE=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=E2=84=961?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/CheckCalculator.java | 86 ++++++++++++++++++++++++++++++ src/main/java/CheckItem.java | 16 ++++++ src/main/java/Double2Rubles.java | 19 +++++++ src/main/java/Main.java | 31 +++++++++-- 4 files changed, 149 insertions(+), 3 deletions(-) create mode 100644 src/main/java/CheckCalculator.java create mode 100644 src/main/java/CheckItem.java create mode 100644 src/main/java/Double2Rubles.java diff --git a/src/main/java/CheckCalculator.java b/src/main/java/CheckCalculator.java new file mode 100644 index 0000000..9d97c28 --- /dev/null +++ b/src/main/java/CheckCalculator.java @@ -0,0 +1,86 @@ +import java.util.ArrayList; +import java.util.InputMismatchException; +import java.util.Locale; +import java.util.Scanner; + +//калькулятор чека +public class CheckCalculator { + + int guests; //количество гостей + ArrayList items = new ArrayList(); //список товаров + Scanner scanner; //сканер + double totalSum = 0.0; //итоговая сумма по чеку + + //конструктор принимает на вход количество гостей и сканер + CheckCalculator(int guests, Scanner scanner) { + this.guests = guests; + if (scanner==null) { + this.scanner = new Scanner(System.in); + } else { + this.scanner = scanner; + } + } + + //конструктор без сканера + CheckCalculator(int guests) { + this(guests, null); + } + + //Печать ИТОГО по чеку + public void printTotal(){ + System.out.println(String.format("ИТОГО по чеку: %s", Double2Rubles.print(totalSum))); + } + + //Печать чека + public void printAll(){ + if (items.size() == 0) { + System.out.println("Чек пустой, делить нечего"); + } else{ + System.out.println("Добавленные товары:"); + for (CheckItem ci : items) { + ci.printItem(); + } + printTotal(); + + //округляем свеху ceil, чтобы сумма с каждого получилась не меньше итоговой суммы + System.out.println(String.format("На каждого из %d человек по %s",guests, Double2Rubles.print(Math.ceil(totalSum*100/guests)/100))); + } + } + + //Добавление товара в чек + public void addItem(String itemName, double itemCost) { + items.add(new CheckItem(itemName, itemCost)); //создаем новый объект товара и добавляем в список + totalSum += itemCost; //обновляет итого по чеку + System.out.println(String.format("В чек добавлен товар \"%s\" cтоимостью %s", itemName, Double2Rubles.print(itemCost))); //сообщение о добавлении товара в чек + printTotal(); //выводим обновленное итого по чеку + } + + public void startCalc() { + //addItem("Колбаса", 5.01); + //addItem("Хлеб", 1.11); + String itemName; + double itemCost; + scanner.useLocale(Locale.ENGLISH);//чтобы был разделитель "." + while (true) { + System.out.println("Введите наименование товара или \"Завершить\" для окончания ввода:"); + itemName = scanner.next(); + if (itemName.equalsIgnoreCase("Завершить")) { + break; + } else { + while (true) { + try { + System.out.println("Введите стоимость товара в формате рубли.копейки:"); + itemCost = scanner.nextDouble(); + break; + } catch (InputMismatchException e) { + System.out.println("Введено неверное значение"); + scanner.nextLine(); + } + } + addItem(itemName, itemCost); + } + } + printAll(); + } + +} diff --git a/src/main/java/CheckItem.java b/src/main/java/CheckItem.java new file mode 100644 index 0000000..a4a5948 --- /dev/null +++ b/src/main/java/CheckItem.java @@ -0,0 +1,16 @@ + +public class CheckItem { + String itemName; //наименование товара + double itemCost; //стоимость товара + + CheckItem(String itemName, double itemCost) { + this.itemName = itemName; + this.itemCost = itemCost; + } + + //вывод на печать + public void printItem() { + System.out.println(String.format("%s х %s" ,itemName,Double2Rubles.print(itemCost))); + } + +} diff --git a/src/main/java/Double2Rubles.java b/src/main/java/Double2Rubles.java new file mode 100644 index 0000000..196913a --- /dev/null +++ b/src/main/java/Double2Rubles.java @@ -0,0 +1,19 @@ +public class Double2Rubles { + + //преобразует число в строки формата "число рублей", где рублей склоняется в зависимости от остатка + public static String print(double d) { + String rubs = "рублей"; + int last10 = (int) (Math.floor(d)) % 100; //остаток от деления на 100 + int last1 = last10 % 10; //остаток от деления на 10 + + if (!((last10>=11) && (last10<=20))) { //от 11 до 20 не проверять последнюю цифру - всегда рублей + if (last1==1) { + rubs = "рубль"; + } else if (last1>=2 && last1 <= 4) { + rubs = "рубля"; + } + } + + return String.format("%.2f %s",d,rubs); + } +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java index a9198c4..1868d1d 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,8 +1,33 @@ +import java.util.InputMismatchException; +import java.util.Scanner; + + + public class Main { public static void main(String[] args) { - // ваш код начнется здесь - // вы не должны ограничиваться только классом Main и можете создавать свои классы по необходимости - System.out.println("Привет Мир"); + + Scanner scanner = new Scanner(System.in); + int guests; + while (true) { + System.out.println("Введите количество человек на которых необходимо разделить счет:"); + try { + guests = scanner.nextInt(); + if (guests < 1) { + System.out.println("Количество гостей не может быть меньше 1"); + } else { + break; + } + } catch (InputMismatchException e) { + System.out.println("Введено неверное значение"); + scanner.nextLine(); + } + } + if (guests==1) { + System.out.println("Для одного гостя не требуется делить счет"); + } else { + CheckCalculator calc = new CheckCalculator(guests, scanner); + calc.startCalc(); + } } }

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