From 7e6e400a374b641fe7ff1003d24a9e1966e9e7a1 Mon Sep 17 00:00:00 2001 From: Elen-b Date: 2022年11月19日 23:03:27 +0500 Subject: [PATCH 1/4] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=E2=84=96?= =?UTF-8?q?1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Main.java | 165 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 162 insertions(+), 3 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index a9198c4..fbde671 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,8 +1,167 @@ +import java.util.Scanner; +import java.util.ArrayList; + public class Main { public static void main(String[] args) { - // ваш код начнется здесь - // вы не должны ограничиваться только классом Main и можете создавать свои классы по необходимости - System.out.println("Привет Мир"); + Scanner scanner = new Scanner(System.in); + String sPersonCount, sDishName, sDishPrice; + + System.out.println("На сколько человек необходимо разделить счёт?"); + while (true) { + sPersonCount = scanner.next(); + if (!Utils.isInt(sPersonCount) || !Counter.checkPersonCount(Integer.parseInt(sPersonCount))) { + System.out.println("Введите целое число больше 1"); + } else { + break; + } + } + Counter counter = new Counter(Integer.parseInt(sPersonCount)); // создаем калькулятор + + do { + do { + System.out.print("Введите непустое наименование блюда: "); + sDishName = scanner.next(); + } while (!Dish.isCorrectName(sDishName)); + + while(true) { + System.out.print("Введите стоимость блюда в формате рубли.копейки: "); + sDishPrice = scanner.next(); + if (Dish.isCorrectPrice(sDishPrice)) + break; + System.out.println("Некорректная стоимость блюда"); + } + + counter.order.addDish(new Dish(sDishName, Double.parseDouble(sDishPrice))); // добавляем блюдо в заказ + System.out.println("Добавим еще одно блюдо в заказ? Введите \"Завершить\", чтобы отказаться или любой символ, чтобы продолжить"); + } while (!scanner.next().equalsIgnoreCase("завершить")); + + counter.order.printOrder(); + double dividedSum = counter.order.bill.divideBill(counter.personCount); + System.out.printf("Каждый из %s гостей должен заплатить %s %s", counter.personCount, Utils.toStringCustomFormat(dividedSum), Utils.getRoubleSuffix(dividedSum)); + } + + +} + +class Utils { + // контроль строки, является ли она целым числом + static boolean isInt(String aStr) { + try { + Integer.parseInt(aStr); + return true; + } catch (NumberFormatException e) { + return false; + } + } + + // получение строки дробного числа с разделителем . и двумя знаками после запятой + static String toStringCustomFormat(double aDoubleNumber) { + return String.format("%.2f", aDoubleNumber).replace(',', '.'); + } + + // получить написание "рубль" с правильным окончанием + static String getRoubleSuffix(double aSumRouble) { + int mod = (int) (aSumRouble % 10); + switch (mod) { + case 1: return "рубль"; + case 2: + case 3: + case 4: return "рубля"; + default: return "рублей"; + } + } +} + +// Калькулятор +class Counter { + int personCount; + Order order; + + Counter() { + order = new Order(); + } + + Counter(int aPersonCount) { + this(); + personCount = aPersonCount; + } + + // контроль количества посетителей x + static boolean checkPersonCount(int aInt) { + return aInt> 1; } } + +// заказ +class Order { + Bill bill; + ArrayList dishList; + + Order() { + bill = new Bill(); + dishList = new ArrayList(); + } + + // добавить блюдо в заказ + void addDish(Dish aDish) { + dishList.add(aDish); + bill.addToBill(aDish.price); + System.out.printf("В заказ добавлено блюдо \"%s\" стоимостью %s %s", aDish.name, Utils.toStringCustomFormat(aDish.price), Utils.getRoubleSuffix(aDish.price)); + System.out.println(); + } + + // распечатать заказ + void printOrder() { + System.out.println("Ваш заказ. Добавленные товары:"); + for (Dish d: dishList) { + d.printDish(); + } + } +} + +// счет +class Bill { + double sum; // сумма счета + + // добавить к счету сумму x + void addToBill(double aPrice) { + sum += aPrice; + } + + // разделить сумму счета на x посетителей + double divideBill(int aPersonCount) { + return sum / aPersonCount; + } +} + +// блюдо +class Dish { + String name; + double price; + + Dish(String aName, double aPrice) { + name = aName; + price = aPrice; + } + + // контроль корректного наименование блюда + static boolean isCorrectName(String aStr) { + return !aStr.trim().isEmpty(); + } + + // контроль корректной цены + static boolean isCorrectPrice(String aStr) { + try { + return Double.parseDouble(aStr)> 0; + } catch (NumberFormatException e) { + return false; + } + } + + // вывод описания блюда + void printDish() { + System.out.printf("%s, стоимость %s %s", name, Utils.toStringCustomFormat(price), Utils.getRoubleSuffix(price)); + System.out.println(); + } +} \ No newline at end of file From e62ef5af81b352a8e14ba20eeb5fc138e3a3436e Mon Sep 17 00:00:00 2001 From: Elen-b Date: 2022年11月20日 07:55:29 +0500 Subject: [PATCH 2/4] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=E2=84=96?= =?UTF-8?q?1=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Bill.java | 13 +++ src/main/java/Counter.java | 36 +++++++++ src/main/java/Dish.java | 29 +++++++ src/main/java/Main.java | 161 +------------------------------------ src/main/java/Order.java | 51 ++++++++++++ src/main/java/Utils.java | 32 ++++++++ 6 files changed, 163 insertions(+), 159 deletions(-) create mode 100644 src/main/java/Bill.java create mode 100644 src/main/java/Counter.java create mode 100644 src/main/java/Dish.java create mode 100644 src/main/java/Order.java create mode 100644 src/main/java/Utils.java diff --git a/src/main/java/Bill.java b/src/main/java/Bill.java new file mode 100644 index 0000000..b62d1c2 --- /dev/null +++ b/src/main/java/Bill.java @@ -0,0 +1,13 @@ +public class Bill { + double sum; // сумма счета + + // добавить к счету сумму x + public void addToBill(double aPrice) { + sum += aPrice; + } + + // разделить сумму счета на x посетителей + public double divideBill(int aPersonCount) { + return sum / aPersonCount; + } +} diff --git a/src/main/java/Counter.java b/src/main/java/Counter.java new file mode 100644 index 0000000..71b650e --- /dev/null +++ b/src/main/java/Counter.java @@ -0,0 +1,36 @@ +import java.util.Scanner; + +public class Counter { + int personCount; + Order order; + + Counter() { + order = new Order(); + } + + Counter(int aPersonCount) { + this(); + personCount = aPersonCount; + } + + // контроль количества посетителей x + static boolean checkPersonCount(int aInt) { + return aInt> 1; + } + + // получить допустимое количество гостей + public static int getPersonCount() { + Scanner scanner = new Scanner(System.in); + String sPersonCount; + + System.out.println("На сколько человек необходимо разделить счёт?"); + while (true) { + sPersonCount = scanner.next(); + if (!Utils.isInt(sPersonCount) || !checkPersonCount(Integer.parseInt(sPersonCount))) { + System.out.println("Введите целое число больше 1"); + } else { + return Integer.parseInt(sPersonCount); + } + } + } +} diff --git a/src/main/java/Dish.java b/src/main/java/Dish.java new file mode 100644 index 0000000..cdcc182 --- /dev/null +++ b/src/main/java/Dish.java @@ -0,0 +1,29 @@ +public class Dish { + String name; + double price; + + Dish(String aName, double aPrice) { + name = aName; + price = aPrice; + } + + // контроль корректного наименование блюда + public static boolean isCorrectName(String aStr) { + return !aStr.trim().isEmpty(); + } + + // контроль корректной цены + public static boolean isCorrectPrice(String aStr) { + try { + return Double.parseDouble(aStr)> 0; + } catch (NumberFormatException e) { + return false; + } + } + + // вывод описания блюда + public void printDish() { + System.out.printf("%s, стоимость %s %s", name, Utils.toStringCustomFormat(price), Utils.getRoubleSuffix(price)); + System.out.println(); + } +} \ No newline at end of file diff --git a/src/main/java/Main.java b/src/main/java/Main.java index fbde671..72b4e07 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,167 +1,10 @@ -import java.util.Scanner; -import java.util.ArrayList; - public class Main { public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - String sPersonCount, sDishName, sDishPrice; - - System.out.println("На сколько человек необходимо разделить счёт?"); - while (true) { - sPersonCount = scanner.next(); - if (!Utils.isInt(sPersonCount) || !Counter.checkPersonCount(Integer.parseInt(sPersonCount))) { - System.out.println("Введите целое число больше 1"); - } else { - break; - } - } - Counter counter = new Counter(Integer.parseInt(sPersonCount)); // создаем калькулятор - - do { - do { - System.out.print("Введите непустое наименование блюда: "); - sDishName = scanner.next(); - } while (!Dish.isCorrectName(sDishName)); - - while(true) { - System.out.print("Введите стоимость блюда в формате рубли.копейки: "); - sDishPrice = scanner.next(); - if (Dish.isCorrectPrice(sDishPrice)) - break; - System.out.println("Некорректная стоимость блюда"); - } - - counter.order.addDish(new Dish(sDishName, Double.parseDouble(sDishPrice))); // добавляем блюдо в заказ - System.out.println("Добавим еще одно блюдо в заказ? Введите \"Завершить\", чтобы отказаться или любой символ, чтобы продолжить"); - } while (!scanner.next().equalsIgnoreCase("завершить")); - + Counter counter = new Counter(Counter.getPersonCount()); // создаем калькулятор + counter.order.inputDishList(); counter.order.printOrder(); double dividedSum = counter.order.bill.divideBill(counter.personCount); System.out.printf("Каждый из %s гостей должен заплатить %s %s", counter.personCount, Utils.toStringCustomFormat(dividedSum), Utils.getRoubleSuffix(dividedSum)); } - - -} - -class Utils { - // контроль строки, является ли она целым числом - static boolean isInt(String aStr) { - try { - Integer.parseInt(aStr); - return true; - } catch (NumberFormatException e) { - return false; - } - } - - // получение строки дробного числа с разделителем . и двумя знаками после запятой - static String toStringCustomFormat(double aDoubleNumber) { - return String.format("%.2f", aDoubleNumber).replace(',', '.'); - } - - // получить написание "рубль" с правильным окончанием - static String getRoubleSuffix(double aSumRouble) { - int mod = (int) (aSumRouble % 10); - switch (mod) { - case 1: return "рубль"; - case 2: - case 3: - case 4: return "рубля"; - default: return "рублей"; - } - } -} - -// Калькулятор -class Counter { - int personCount; - Order order; - - Counter() { - order = new Order(); - } - - Counter(int aPersonCount) { - this(); - personCount = aPersonCount; - } - - // контроль количества посетителей x - static boolean checkPersonCount(int aInt) { - return aInt> 1; - } -} - -// заказ -class Order { - Bill bill; - ArrayList dishList; - - Order() { - bill = new Bill(); - dishList = new ArrayList(); - } - - // добавить блюдо в заказ - void addDish(Dish aDish) { - dishList.add(aDish); - bill.addToBill(aDish.price); - System.out.printf("В заказ добавлено блюдо \"%s\" стоимостью %s %s", aDish.name, Utils.toStringCustomFormat(aDish.price), Utils.getRoubleSuffix(aDish.price)); - System.out.println(); - } - - // распечатать заказ - void printOrder() { - System.out.println("Ваш заказ. Добавленные товары:"); - for (Dish d: dishList) { - d.printDish(); - } - } -} - -// счет -class Bill { - double sum; // сумма счета - - // добавить к счету сумму x - void addToBill(double aPrice) { - sum += aPrice; - } - - // разделить сумму счета на x посетителей - double divideBill(int aPersonCount) { - return sum / aPersonCount; - } -} - -// блюдо -class Dish { - String name; - double price; - - Dish(String aName, double aPrice) { - name = aName; - price = aPrice; - } - - // контроль корректного наименование блюда - static boolean isCorrectName(String aStr) { - return !aStr.trim().isEmpty(); - } - - // контроль корректной цены - static boolean isCorrectPrice(String aStr) { - try { - return Double.parseDouble(aStr)> 0; - } catch (NumberFormatException e) { - return false; - } - } - - // вывод описания блюда - void printDish() { - System.out.printf("%s, стоимость %s %s", name, Utils.toStringCustomFormat(price), Utils.getRoubleSuffix(price)); - System.out.println(); - } } \ No newline at end of file diff --git a/src/main/java/Order.java b/src/main/java/Order.java new file mode 100644 index 0000000..6c2c6ea --- /dev/null +++ b/src/main/java/Order.java @@ -0,0 +1,51 @@ +import java.util.Scanner; +import java.util.ArrayList; + +public class Order { + Bill bill; + ArrayList dishList; + + Order() { + bill = new Bill(); + dishList = new ArrayList(); + } + + // добавить блюдо в заказ + void addDish(Dish aDish) { + dishList.add(aDish); + bill.addToBill(aDish.price); + System.out.printf("В заказ добавлено блюдо \"%s\" стоимостью %s %s", aDish.name, Utils.toStringCustomFormat(aDish.price), Utils.getRoubleSuffix(aDish.price)); + System.out.println(); + } + + // распечатать заказ + public void printOrder() { + System.out.println("Ваш заказ. Добавленные товары:"); + for (Dish d: dishList) { + d.printDish(); + } + } + + // создать список блюд заказа + public void inputDishList() { + Scanner scanner = new Scanner(System.in); + String sDishName, sDishPrice; + + do { + do { + System.out.print("Введите непустое наименование блюда: "); + sDishName = scanner.next(); + } while (!Dish.isCorrectName(sDishName)); + + while(true) { + System.out.print("Введите стоимость блюда в формате рубли.копейки: "); + sDishPrice = scanner.next(); + if (Dish.isCorrectPrice(sDishPrice)) + break; + System.out.println("Некорректная стоимость блюда"); + } + addDish(new Dish(sDishName, Double.parseDouble(sDishPrice))); // добавляем блюдо в заказ + System.out.println("Добавим еще одно блюдо в заказ? Введите \"Завершить\", чтобы отказаться или любой символ, чтобы продолжить"); + } while (!scanner.next().equalsIgnoreCase("завершить")); + } +} diff --git a/src/main/java/Utils.java b/src/main/java/Utils.java new file mode 100644 index 0000000..ceaa01f --- /dev/null +++ b/src/main/java/Utils.java @@ -0,0 +1,32 @@ +public class Utils { + // контроль строки, является ли она целым числом + public static boolean isInt(String aStr) { + try { + Integer.parseInt(aStr); + return true; + } catch (NumberFormatException e) { + return false; + } + } + + // получение строки дробного числа с разделителем . и двумя знаками после запятой + public static String toStringCustomFormat(double aDoubleNumber) { + return String.format("%.2f", aDoubleNumber).replace(',', '.'); + } + + // получить написание "рубль" с правильным окончанием + public static String getRoubleSuffix(double aSumRouble) { + int mod = (int) (Math.floor(aSumRouble) % 100); + if (mod> 10 && mod < 15) { + return "рублей"; + } else { + switch (mod % 10) { + case 1: return "рубль"; + case 2: + case 3: + case 4: return "рубля"; + default: return "рублей"; + } + } + } +} From 50c5128cb0f1e9a42fa4d4f36bbf8e3c22ae6233 Mon Sep 17 00:00:00 2001 From: Elen-b Date: 2022年11月20日 22:44:55 +0500 Subject: [PATCH 3/4] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=E2=84=96?= =?UTF-8?q?1=20v3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Counter.java | 7 +------ src/main/java/Order.java | 9 ++------- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/src/main/java/Counter.java b/src/main/java/Counter.java index 71b650e..2d5fbe3 100644 --- a/src/main/java/Counter.java +++ b/src/main/java/Counter.java @@ -2,14 +2,9 @@ public class Counter { int personCount; - Order order; - - Counter() { - order = new Order(); - } + Order order = new Order(); Counter(int aPersonCount) { - this(); personCount = aPersonCount; } diff --git a/src/main/java/Order.java b/src/main/java/Order.java index 6c2c6ea..30480c1 100644 --- a/src/main/java/Order.java +++ b/src/main/java/Order.java @@ -2,13 +2,8 @@ import java.util.ArrayList; public class Order { - Bill bill; - ArrayList dishList; - - Order() { - bill = new Bill(); - dishList = new ArrayList(); - } + Bill bill = new Bill(); + ArrayList dishList = new ArrayList(); // добавить блюдо в заказ void addDish(Dish aDish) { From cc5c2589c0040822a2260995698f5a5f2662dced Mon Sep 17 00:00:00 2001 From: Elen-b Date: 2022年11月25日 15:49:52 +0500 Subject: [PATCH 4/4] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=D0=BC?= =?UTF-8?q?=D0=B8=20=E2=84=961?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Counter.java | 5 ++--- src/main/java/Main.java | 10 ++++++++-- src/main/java/Order.java | 9 ++++----- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/java/Counter.java b/src/main/java/Counter.java index 2d5fbe3..ba0cac7 100644 --- a/src/main/java/Counter.java +++ b/src/main/java/Counter.java @@ -14,13 +14,12 @@ static boolean checkPersonCount(int aInt) { } // получить допустимое количество гостей - public static int getPersonCount() { - Scanner scanner = new Scanner(System.in); + public static int getPersonCount(Scanner aScanner) { String sPersonCount; System.out.println("На сколько человек необходимо разделить счёт?"); while (true) { - sPersonCount = scanner.next(); + sPersonCount = aScanner.nextLine(); if (!Utils.isInt(sPersonCount) || !checkPersonCount(Integer.parseInt(sPersonCount))) { System.out.println("Введите целое число больше 1"); } else { diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 72b4e07..28ac2b0 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,10 +1,16 @@ +import java.util.Scanner; + public class Main { public static void main(String[] args) { - Counter counter = new Counter(Counter.getPersonCount()); // создаем калькулятор - counter.order.inputDishList(); + Scanner scanner = new Scanner(System.in); + + Counter counter = new Counter(Counter.getPersonCount(scanner)); // создаем калькулятор + counter.order.inputDishList(scanner); counter.order.printOrder(); double dividedSum = counter.order.bill.divideBill(counter.personCount); System.out.printf("Каждый из %s гостей должен заплатить %s %s", counter.personCount, Utils.toStringCustomFormat(dividedSum), Utils.getRoubleSuffix(dividedSum)); + + scanner.close(); } } \ No newline at end of file diff --git a/src/main/java/Order.java b/src/main/java/Order.java index 30480c1..ae6bd01 100644 --- a/src/main/java/Order.java +++ b/src/main/java/Order.java @@ -22,25 +22,24 @@ public void printOrder() { } // создать список блюд заказа - public void inputDishList() { - Scanner scanner = new Scanner(System.in); + public void inputDishList(Scanner aScanner) { String sDishName, sDishPrice; do { do { System.out.print("Введите непустое наименование блюда: "); - sDishName = scanner.next(); + sDishName = aScanner.nextLine(); } while (!Dish.isCorrectName(sDishName)); while(true) { System.out.print("Введите стоимость блюда в формате рубли.копейки: "); - sDishPrice = scanner.next(); + sDishPrice = aScanner.nextLine(); if (Dish.isCorrectPrice(sDishPrice)) break; System.out.println("Некорректная стоимость блюда"); } addDish(new Dish(sDishName, Double.parseDouble(sDishPrice))); // добавляем блюдо в заказ System.out.println("Добавим еще одно блюдо в заказ? Введите \"Завершить\", чтобы отказаться или любой символ, чтобы продолжить"); - } while (!scanner.next().equalsIgnoreCase("завершить")); + } while (!aScanner.next().equalsIgnoreCase("завершить")); } }

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