From a4be95b2e3c89ca90c9fb1039af9c95aae26501e Mon Sep 17 00:00:00 2001 From: AndroidMaster Date: 2023年10月23日 15:46:40 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B8=D0=BD=D1=82=D0=B0=20=E2=84=962?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Main.java | 174 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 173 insertions(+), 1 deletion(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index db9356a08..7052760b4 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,6 +1,178 @@ +import java.util.Scanner; public class Main { + // Знаю, что изменять значения глобальных переменных в методе не очень хороший приём, лучше выводить результаты через RETURN. + // Прошу предложить проверенный вариант! Слышал, что существует метод POCO через создание объекта с полями + public static String mealList = ""; + public static double totalBill = 0; + public static int drinkAndFoodCounter = 0; + public static double eachPay = 0; + public static int peopleCount = 0; public static void main(String[] args) { - System.out.println("Hello world!"); + System.out.println("Консольное приложение для распределения счёта на оплату.\n\n"); + // ожидание адекватного количества человек + while (true) { + System.out.println("На сколько человек разделить счёт?"); + Scanner billShareAnswer = new Scanner(System.in); + String peopleCountString = billShareAnswer.nextLine(); + if (billShareVerify(peopleCountString) == true) { + break; + } + } + + while (true) { + if (mealList == "") { + System.out.println("Вы хотите добавить товар?\nЕсли нет, то введите слово \"завершить\" в любом регистре,\nесли да, то введите любой символ!"); + } else { + System.out.println("Вы хотите добавить еще один товар?\nЕсли нет, то введите слово \"завершить\" в любом регистре,\nесли да, то введите любой символ!"); + } + Scanner ready = new Scanner(System.in); + if (ready.next().equalsIgnoreCase("завершить")) { + System.out.println("Работа программы завершена!\nИтоговый счёт:\n"); + String messageTemplate = "Добавленные товары в счёте на %d человек:\n%s\nОбщая сумма: %.2f %s.\nС каждого %.2f %s."; + System.out.println("============================"); + System.out.println(String.format(messageTemplate, peopleCount, mealList, totalBill, rubleyblya(totalBill), eachPay, rubleyblya(eachPay))); + System.out.println("============================"); + break; + } + foodInputInAction(peopleCount); + } + } + public static boolean billShareVerify(String billShareCountString) { + if (isNumericInt(billShareCountString) == false) { + System.out.println("Введенные данные не корректны! Попробуйте еще раз!"); + return false; + } + peopleCount = Integer.parseInt(billShareCountString); + switch (peopleCount) { + case 1: { + System.out.println("Будете сами за всё платить?! Число должно быть целое, положительное, больше 1."); + return false; + } + case 0: { + System.out.println("На ноль делить нельзя! Число должно быть целое, положительное, больше 1."); + return false; + } + default: { + if (peopleCount> 0) { + System.out.println("Данные о количестве человек приняты."); + return true; + } else { + System.out.println("Наверное, это опечатка. Число должно быть целое, положительное, больше 1."); + return false; + } + } + } + } + + public static void foodInputInAction(int peopleCount) { + System.out.println("Введите название товара!"); + Scanner foodOrDrink = new Scanner(System.in); + String foodOrDrink_ = foodOrDrink.next(); + // дополняем список блюд внутри глобальной строковой переменной + drinkAndFoodCounter++; + if (mealList != "") { + mealList = mealList.concat("\n"); + } + mealList = mealList.concat(drinkAndFoodCounter+". ").concat(foodOrDrink_); + while (true) { + System.out.println("Введите стоимость товара в формате \"рубли.копейки\", например 10.45 или 11.40!"); + Scanner price = new Scanner(System.in); + String myDouble = price.nextLine(); + // Проверка введенных числовых данных + if (isNumeric(myDouble) == true) { + // увеличиваем общую ссумму блюд внутри глобальной переменной + totalBill = totalBill + Double.parseDouble(myDouble); + // выравниваем введенное значение цены для отображения в списке + String pricePerNoteTemplate = "%.2f"; + mealList = mealList.concat(" - " + String.format(pricePerNoteTemplate, Double.parseDouble(myDouble)) + " " + rubleyblya(Double.parseDouble(myDouble))); + eachPay = totalBill / peopleCount; + System.out.println("\""+foodOrDrink_+"\" успешно добавлено в счёт!"); + break; + } + System.out.println("Введенные данные не корректны. Попробуйте еще раз!"); + } + } + public static boolean isNumeric(String priceString) { + try { + Double.parseDouble(priceString); + return true; + } catch (NumberFormatException e) { + return false; + } + } + public static boolean isNumericInt(String peopleCount) { + try { + Integer.parseInt(peopleCount); + return true; + } catch (NumberFormatException e) { + return false; + } + } + public static String rubleyblya(double money) { + int moneyInt = (int) money; + String moneyString = "" + moneyInt; + if (moneyString.length() == 1) { + switch (moneyString) { + case "1": { + return "рубль"; + } + case "2": + case "3": + case "4": { + return "рубля"; + } + default: { + return "рублей"; + } + } + } else { + moneyString = moneyString.substring(moneyString.length() - 2, moneyString.length()); + switch (moneyString) { + case "21": + case "31": + case "41": + case "51": + case "61": + case "71": + case "81": + case "91": + case "01": { + return "рубль"; + } + case "22": + case "23": + case "24": + case "32": + case "33": + case "34": + case "42": + case "43": + case "44": + case "52": + case "53": + case "54": + case "62": + case "63": + case "64": + case "72": + case "73": + case "74": + case "82": + case "83": + case "84": + case "92": + case "93": + case "94": + case "02": + case "03": + case "04": { + return "рубля"; + } + default: { + return "рублей"; + } + } + } } } \ No newline at end of file From e18f6527abd3a9919049b5da91149d2fc6b516e0 Mon Sep 17 00:00:00 2001 From: AndroidMaster Date: 2023年10月26日 15:00:24 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B8=D0=BD=D1=82=D0=B0=20=E2=84=962,=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=8B=D1=82=D0=BA=D0=B0=202,=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=81=20Bill.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Bill.java | 114 ++++++++++++++++++++++++++++++++ src/main/java/Main.java | 140 +++++++++------------------------------- 2 files changed, 143 insertions(+), 111 deletions(-) create mode 100644 src/main/java/Bill.java diff --git a/src/main/java/Bill.java b/src/main/java/Bill.java new file mode 100644 index 000000000..a4961fc10 --- /dev/null +++ b/src/main/java/Bill.java @@ -0,0 +1,114 @@ +public class Bill { + String mealList = ""; + double totalBillPrice = 0; + int billVolume = 0; + double billPerMan = 0; + int peopleCount = 0; + void billNewMealAdd(String mealName, String mealPrice) { + this.totalBillPrice += Double.parseDouble(mealPrice); + this.billVolume++; + this.billPerMan = this.totalBillPrice / this.peopleCount; + if (this.mealList != "") { + this.mealList = this.mealList.concat("\n"); + } + String pricePerNoteTemplate = "%.2f"; + this.mealList = this.mealList.concat(getBillVolume()+". ").concat(mealName).concat(" - " + String.format(pricePerNoteTemplate, Double.parseDouble(mealPrice)) + " " + chooseCurrencyEnding(Double.parseDouble(mealPrice))); + } + void showBillReport() { + int peopleCount = getPeopleCount(); + String mealList = getMealList(); + double totalBillPrice = getTotalBillPrice(); + String totalCurrencyEnding = chooseCurrencyEnding(totalBillPrice); + double billPerMan = getBillPerMan(); + String perManCurrencyEnding = chooseCurrencyEnding(billPerMan); + String messageTemplate = "Добавленные товары в счёте на %d человек:\n%s\nОбщая сумма: %.2f %s.\nС каждого %.2f %s."; + System.out.println("============================"); + System.out.println(String.format(messageTemplate, peopleCount, mealList, totalBillPrice, totalCurrencyEnding, billPerMan, perManCurrencyEnding)); + System.out.println("============================"); + } + String getMealList() { + return this.mealList; + } + int getBillVolume() { + return this.billVolume; + } + double getTotalBillPrice() { + return this.totalBillPrice; + } + double getBillPerMan() { + return this.billPerMan; + } + int getPeopleCount() { + return this.peopleCount; + } + void setPeopleCount(String peopleCount) { + int peopleCountInt = Integer.parseInt(peopleCount); + this.peopleCount = peopleCountInt; + } + public static String chooseCurrencyEnding(double money) { + int moneyInt = (int) money; + String moneyString = "" + moneyInt; + if (moneyString.length() == 1) { + switch (moneyString) { + case "1": { + return "рубль"; + } + case "2": + case "3": + case "4": { + return "рубля"; + } + default: { + return "рублей"; + } + } + } else { + moneyString = moneyString.substring(moneyString.length() - 2, moneyString.length()); + switch (moneyString) { + case "21": + case "31": + case "41": + case "51": + case "61": + case "71": + case "81": + case "91": + case "01": { + return "рубль"; + } + case "22": + case "23": + case "24": + case "32": + case "33": + case "34": + case "42": + case "43": + case "44": + case "52": + case "53": + case "54": + case "62": + case "63": + case "64": + case "72": + case "73": + case "74": + case "82": + case "83": + case "84": + case "92": + case "93": + case "94": + case "02": + case "03": + case "04": { + return "рубля"; + } + default: { + return "рублей"; + } + } + } + } +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 7052760b4..a87e440ef 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,52 +1,45 @@ import java.util.Scanner; public class Main { - // Знаю, что изменять значения глобальных переменных в методе не очень хороший приём, лучше выводить результаты через RETURN. - // Прошу предложить проверенный вариант! Слышал, что существует метод POCO через создание объекта с полями - public static String mealList = ""; - public static double totalBill = 0; - public static int drinkAndFoodCounter = 0; - public static double eachPay = 0; - public static int peopleCount = 0; public static void main(String[] args) { System.out.println("Консольное приложение для распределения счёта на оплату.\n\n"); + Bill bill = new Bill(); // ожидание адекватного количества человек while (true) { System.out.println("На сколько человек разделить счёт?"); - Scanner billShareAnswer = new Scanner(System.in); - String peopleCountString = billShareAnswer.nextLine(); - if (billShareVerify(peopleCountString) == true) { + Scanner userReply = new Scanner(System.in); + String billShareCountString = userReply.nextLine(); + if (isBillShareCorrect(billShareCountString) == true) { + bill.setPeopleCount(billShareCountString); break; } } - + // ожидание команды "ЗАВЕРШИТЬ" while (true) { - if (mealList == "") { + if (bill.getMealList() == "") { System.out.println("Вы хотите добавить товар?\nЕсли нет, то введите слово \"завершить\" в любом регистре,\nесли да, то введите любой символ!"); } else { System.out.println("Вы хотите добавить еще один товар?\nЕсли нет, то введите слово \"завершить\" в любом регистре,\nесли да, то введите любой символ!"); } - Scanner ready = new Scanner(System.in); - if (ready.next().equalsIgnoreCase("завершить")) { + Scanner userReply = new Scanner(System.in); + if (userReply.nextLine().equalsIgnoreCase("завершить")) { System.out.println("Работа программы завершена!\nИтоговый счёт:\n"); - String messageTemplate = "Добавленные товары в счёте на %d человек:\n%s\nОбщая сумма: %.2f %s.\nС каждого %.2f %s."; - System.out.println("============================"); - System.out.println(String.format(messageTemplate, peopleCount, mealList, totalBill, rubleyblya(totalBill), eachPay, rubleyblya(eachPay))); - System.out.println("============================"); + bill.showBillReport(); break; } - foodInputInAction(peopleCount); + billInputInAction(bill); } } - public static boolean billShareVerify(String billShareCountString) { + + public static boolean isBillShareCorrect(String billShareCountString) { if (isNumericInt(billShareCountString) == false) { - System.out.println("Введенные данные не корректны! Попробуйте еще раз!"); + System.out.println("Введенные данные не являются целым числом! Введите значение еще раз!"); return false; } - peopleCount = Integer.parseInt(billShareCountString); + int peopleCount = Integer.parseInt(billShareCountString); switch (peopleCount) { case 1: { - System.out.println("Будете сами за всё платить?! Число должно быть целое, положительное, больше 1."); + System.out.println("Деление счёта на одного человека не имеет смысла! Число должно быть целое, положительное, больше 1."); return false; } case 0: { @@ -65,35 +58,25 @@ public static boolean billShareVerify(String billShareCountString) { } } - public static void foodInputInAction(int peopleCount) { + public static void billInputInAction(Bill bill) { System.out.println("Введите название товара!"); - Scanner foodOrDrink = new Scanner(System.in); - String foodOrDrink_ = foodOrDrink.next(); - // дополняем список блюд внутри глобальной строковой переменной - drinkAndFoodCounter++; - if (mealList != "") { - mealList = mealList.concat("\n"); - } - mealList = mealList.concat(drinkAndFoodCounter+". ").concat(foodOrDrink_); + Scanner userReplyMealName = new Scanner(System.in); + String newMealName = userReplyMealName.nextLine(); while (true) { System.out.println("Введите стоимость товара в формате \"рубли.копейки\", например 10.45 или 11.40!"); - Scanner price = new Scanner(System.in); - String myDouble = price.nextLine(); + Scanner userReplyMealPrice = new Scanner(System.in); + String newMealPrice = userReplyMealPrice.nextLine(); // Проверка введенных числовых данных - if (isNumeric(myDouble) == true) { - // увеличиваем общую ссумму блюд внутри глобальной переменной - totalBill = totalBill + Double.parseDouble(myDouble); - // выравниваем введенное значение цены для отображения в списке - String pricePerNoteTemplate = "%.2f"; - mealList = mealList.concat(" - " + String.format(pricePerNoteTemplate, Double.parseDouble(myDouble)) + " " + rubleyblya(Double.parseDouble(myDouble))); - eachPay = totalBill / peopleCount; - System.out.println("\""+foodOrDrink_+"\" успешно добавлено в счёт!"); + if (isNumericDouble(newMealPrice) == true) { + bill.billNewMealAdd(newMealName, newMealPrice); + System.out.println("\"" + newMealName + "\" успешно добавлено в счёт!"); break; } - System.out.println("Введенные данные не корректны. Попробуйте еще раз!"); + System.out.println("Введенные данные не корректны! Введите значение еще раз!"); } } - public static boolean isNumeric(String priceString) { + + public static boolean isNumericDouble(String priceString) { try { Double.parseDouble(priceString); return true; @@ -101,7 +84,8 @@ public static boolean isNumeric(String priceString) { return false; } } - public static boolean isNumericInt(String peopleCount) { + + public static boolean isNumericInt(String peopleCount) { try { Integer.parseInt(peopleCount); return true; @@ -109,70 +93,4 @@ public static boolean isNumericInt(String peopleCount) { return false; } } - public static String rubleyblya(double money) { - int moneyInt = (int) money; - String moneyString = "" + moneyInt; - if (moneyString.length() == 1) { - switch (moneyString) { - case "1": { - return "рубль"; - } - case "2": - case "3": - case "4": { - return "рубля"; - } - default: { - return "рублей"; - } - } - } else { - moneyString = moneyString.substring(moneyString.length() - 2, moneyString.length()); - switch (moneyString) { - case "21": - case "31": - case "41": - case "51": - case "61": - case "71": - case "81": - case "91": - case "01": { - return "рубль"; - } - case "22": - case "23": - case "24": - case "32": - case "33": - case "34": - case "42": - case "43": - case "44": - case "52": - case "53": - case "54": - case "62": - case "63": - case "64": - case "72": - case "73": - case "74": - case "82": - case "83": - case "84": - case "92": - case "93": - case "94": - case "02": - case "03": - case "04": { - return "рубля"; - } - default: { - return "рублей"; - } - } - } - } } \ No newline at end of file

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