diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..61a9130 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..b220fcc --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..5d10be7 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/Main.java b/src/main/java/Main.java index a9198c4..ba9648f 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,8 +1,114 @@ +import java.util.Locale; +import java.util.Scanner; + public class Main { public static void main(String[] args) { - // ваш код начнется здесь - // вы не должны ограничиваться только классом Main и можете создавать свои классы по необходимости - System.out.println("Привет Мир"); + // Начало программы + int amountMan = inputAmountMan(); // Получение количества человек для расчета из метода + System.out.println("Количество человек для расчета - " + amountMan + "."); + float sumProductPrice = requestProduct(); // Получение общей суммы всех товаров из метода + float everyonePays = sumProductPrice / amountMan; // Получение расчета на каждого человека + String rublesEveryonePays = nameRubles(everyonePays); // Получение падежа слова "рубль" из метода + String messageTemplate = "Каждому счет обойдется в %.2f %s."; + String finalOutputText = String.format(messageTemplate, everyonePays, rublesEveryonePays); + finalOutputText = finalOutputText.replace(',', '.'); // Вывод точки вместо запятой (как указано в задании) + System.out.println(finalOutputText); + } + + private static int inputAmountMan() { // Метод ввода количества человек для разделения счета + // Объявление метода, возвращеющего значение типа int + System.out.println("Введите количество человек, на которое будет разделен счет"); + Scanner scanner = new Scanner(System.in); // Создание объекта "сканер" + + int inputMan; // Объявление переменной "количество человек" + while (true) { // Запускаем бесконечный цикл + + if (scanner.hasNextInt()) { // Условие, если введено значение типа int + inputMan = scanner.nextInt(); // Ввод с клавиатуры количества человек для разделения счета + + if (inputMan > 1) { // Если введено корректное значение больше 1 + break; // Выходим из бесконечного цикла + } else if (inputMan == 1) { // Если пользователь вводит 1 + System.out.println("Программа производит расчеты при количестве человек от 2-х и больше, попробуйте еще раз."); + } + else { + System.out.println("Некорректное значение, попробуйте еще раз."); + } + } else { // Если пользователь ввел с клавиатуры символ или значение типа отличного от int + System.out.println("Не балуйтесь с вводом значений. Вводите целое неотрицательное число, большое или равное 2"); + System.out.println("\nВведите количество человек, на которое будет разделен счет"); + scanner.nextLine(); // переход на следующую строку считывания для того, чтобы избежать бесконечного вывода + } + } + return inputMan; + } + public static float calcPrice () { // Метод ввода стоимости товара + Scanner scanner = new Scanner(System.in).useLocale(Locale.US); // Создание объекта "сканер" + float priceProduct; // Переменная стоимости продукта + System.out.println("Введите стоимость продукта в формате 'рубли.копейки' [10.45, 11.40]:"); + while (true) { // Запускаем бесконечный цикл + if (scanner.hasNextFloat()) { // Условие, если введено значение типа float + priceProduct = scanner.nextFloat(); // Ввод с клавиатуры стоимости товара + if (priceProduct > 0.00) { // Если введено корректное значение больше 0.00 + break; // Выходим из бесконечного цикла + } else if (priceProduct <= 0.00) { // Если пользователь вводит 0.00 + System.out.println("Некорректное значение, стоимость должна быть больше 0.00"); + } + } else { // Если пользователь ввел с клавиатуры некоректные значения + System.out.println("Не балуйтесь с вводом значений. Вводите дробное неотрицательное число, большое или равное 1 копейке (0.01)."); + scanner.nextLine(); // переход на следующую строку считывания для того, чтобы избежать бесконечного вывода + } + } + return priceProduct; + } + + public static float requestProduct() { // Метод подсчета общей стоимости товаров + + Scanner scanner = new Scanner(System.in);// Создание объекта "сканер" + String addedProduct = ""; // Объявление переменной "Добавленные товары" и присваивание "" + float priceProductOne; // Объявление переменной стоимости одного продукта + float sumPrice = 0.00F; // Объявление переменной "Общая сумма всех товаров" и присваивание "0.00" + String continueProgram; // Объявление переменной продолжения или завершения расчетов + while (true) { // Бесконечный цикл + System.out.println("Введите название товара"); + String nameProduct = scanner.nextLine(); // Ввод имени товара + priceProductOne = calcPrice(); // Вызов функции и получение стоимости товара + Product newProduct = new Product(nameProduct, priceProductOne); // Создание экземпляра класса product c атрибутами "Имя товара", "Стоимость" + System.out.println("Товар " + newProduct.productName + " успешно добавлен."); + addedProduct = addedProduct + "\n" + newProduct.productName + ";"; // Перечень всех добавленных продуктов + sumPrice = sumPrice + newProduct.productPrice; // Общая стоимость всех продуктов + System.out.println("Добавленные товары:" + addedProduct); + System.out.println("Общая сумма: " + sumPrice); + System.out.println("Хотите ли добавить еще один товар? (введите 'завершить' для расчета стоимости или любой другой символ для продолжения)"); + continueProgram = scanner.nextLine(); // Считываем желание пользователя завершить или не завершать программу + if (continueProgram.equalsIgnoreCase("Завершить")) { // Условие выхода из бесконечного цикла + break; // Выходим из бесконечного цикла + } + System.out.println("Продолжаем добавлять товары"); + } + return sumPrice; // Возвращение общей стоимости всех товаров + } + + public static String nameRubles (float sum) { // Метод определения падежа для слова "рубль" + + float finalNumberSum = (float) Math.floor(sum); // Округление в меньшую сторону + String nameRublesOut; // Объявление строки конечного падежа + // Вывод полученного падежа слова "рубль" + if (finalNumberSum >= 10.0 && finalNumberSum <= 20.0) { // Если на каждого человека от от 10 до 20 рублей + nameRublesOut = "рублей"; + } + else { // Иначе в зависимости от последней цифры в числе + finalNumberSum = finalNumberSum % 10; + if (finalNumberSum == 1.0) { + nameRublesOut = "рубль"; + } + else if (finalNumberSum >= 2.0 && finalNumberSum <= 4.0) + nameRublesOut = "рубля"; + else { + nameRublesOut = "рублей"; + } + } + return nameRublesOut; // То возвращяем "рублей" } } diff --git a/src/main/java/Product.java b/src/main/java/Product.java new file mode 100644 index 0000000..f3ead44 --- /dev/null +++ b/src/main/java/Product.java @@ -0,0 +1,9 @@ +public class Product { + String productName; // Наименование товара + float productPrice; // Цена товара + + Product(String productName, float productPrice) { + this.productName = productName; + this.productPrice = productPrice; + } +}