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/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000..7643783
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ xmlns:android
+
+ ^$
+
+
+
+
+
+
+
+
+ xmlns:.*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*:id
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ .*:name
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ name
+
+ ^$
+
+
+
+
+
+
+
+
+ style
+
+ ^$
+
+
+
+
+
+
+
+
+ .*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*
+
+ http://schemas.android.com/apk/res/android
+
+
+ ANDROID_ATTRIBUTE_ORDER
+
+
+
+
+
+
+ .*
+
+ .*
+
+
+ BY_NAME
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000..79ee123
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
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..6cec569
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..a47d29e
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ 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/settings.gradle b/settings.gradle
index 716abf2..be110bf 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -12,4 +12,4 @@ dependencyResolutionManagement {
mavenCentral()
}
}
-rootProject.name = "BillCalculator"
+rootProject.name = "Java-Module-Project"
diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java
index 2fbc00d..bb997d5 100644
--- a/src/main/java/Calculator.java
+++ b/src/main/java/Calculator.java
@@ -1,22 +1,37 @@
-class Calculator {
+public class Calculator {
+ static float itemsSum;
+ static float costPerPerson;
- int friendsCount;
-
- String cart = "Добавленные товары:";
- double totalPrice = 0;
-
- Calculator(int friendsCount) {
- this.friendsCount = friendsCount;
+ public static void sumCostsOfItems(float cost) {
+ itemsSum = itemsSum + cost;
}
- void addItem(Item item) {
- totalPrice += item.price;
- cart = cart + "\n" + item.name;
-
- System.out.println(item.name + " в корзине");
+ public static float calculateCostPerPerson(int personsQuantity) {
+ costPerPerson = itemsSum / (float) personsQuantity;
+ return costPerPerson;
}
- double divideSum() {
- return totalPrice / friendsCount;
+ public static String findRightRoubleWord(int roubles) {
+ String roubleName;
+ int lastDigit;
+ int lastTwoDigits;
+ lastTwoDigits = roubles % 100;
+ if (lastTwoDigits>= 11 && lastTwoDigits <= 14) { + roubleName = "рублей"; + return roubleName; + } + lastDigit = roubles % 10; + if (lastDigit == 1) { + roubleName = "рубль"; + return roubleName; + } else if (lastDigit>= 2 && lastDigit <= 4) { + roubleName = "рубля"; + return roubleName; + } else { + roubleName = "рублей"; + return roubleName; + } } + } + diff --git a/src/main/java/Formatter.java b/src/main/java/Formatter.java deleted file mode 100644 index 3f915b7..0000000 --- a/src/main/java/Formatter.java +++ /dev/null @@ -1,17 +0,0 @@ -public class Formatter { - - String formatValue(double price) { - double roundedValue = Math.floor(price); - if (roundedValue == 1) { - return "рубль"; - } else if (roundedValue>= 2 && roundedValue <= 4) { - return "рубля"; - } else { - return "рублей"; - } - } - - String roundResult(final double result) { - return String.format("%.2f", result); - } -} diff --git a/src/main/java/Item.java b/src/main/java/Item.java deleted file mode 100644 index fad8a4e..0000000 --- a/src/main/java/Item.java +++ /dev/null @@ -1,10 +0,0 @@ -class Item { - - String name; - double price; - - Item(String name, double price) { - this.name = name; - this.price = price; - } -} diff --git a/src/main/java/ItemsBasket.java b/src/main/java/ItemsBasket.java new file mode 100644 index 0000000..10fe53c --- /dev/null +++ b/src/main/java/ItemsBasket.java @@ -0,0 +1,16 @@ +public class ItemsBasket { + static String itemsNames = "None"; + + public static void addItemInBasket(String name) { + if (itemsNames.equals("None")) { + itemsNames = name; + } else { + itemsNames = itemsNames + ", " + name; + } + } + + public static void writeItemsFromBasket() { + System.out.println("Добавленные товары:\n" + itemsNames.replaceAll(", ", "\n")); + } +} + diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 11ba5d3..728eb0f 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,49 +1,95 @@ import java.util.Scanner; public class Main { - public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); + int personsQuantity = inputPersonsQuantity(); // получем колчиество персон + String itemName = inputItemName(1); // получаем имя первого товара + float itemCost = inputItemCost(itemName); // получаем стоимость товара - int friendCount; - while (true) { - System.out.println("На сколько человек необходимо разделить счет?"); - friendCount = scanner.nextInt(); + ItemsBasket.addItemInBasket(itemName); // записали Item в Basket + Calculator.sumCostsOfItems(itemCost); // приплюсовали Cost + int roubles = (int) (itemCost); + String roubleName = Calculator.findRightRoubleWord(roubles); - if (friendCount> 1) {
+ System.out.printf("Вы успешно добавили товар %s стоимостью %.2f %s%n", itemName, itemCost, roubleName);
+ while (true) {
+ itemName = inputItemName(2); // получаем имя следующего товара
+ if (itemName.equalsIgnoreCase("ЗАВЕРШИТЬ")) {
break;
- } else if (friendCount == 1) {
- System.out.println(
- "Нет смысла делить сумму на одного человека. Давайте попробуем ввести другое значение, которое будет больше единицы.");
- } else {
- System.out.println("Неверное количество друзей. Значение должно быть болье единицы, давайте попробуем еще раз.");
- }
+ } // проверяем команду Завершить
+ itemCost = -1.1f; // сброс предыдущего значения для вхождения в цикл
+ while (itemCost < 0) { + itemCost = inputItemCost(itemName); + }// получаем стоимость следующего товара + ItemsBasket.addItemInBasket(itemName); // записали Item в Basket + Calculator.sumCostsOfItems(itemCost); // приплюсовали Cost + roubles = (int) (itemCost); + roubleName = Calculator.findRightRoubleWord(roubles); + System.out.printf("Вы успешно добавили товар %s стоимостью %.2f %s%n", itemName, itemCost, roubleName); } - Calculator calculator = new Calculator(friendCount); - - while (true) { - System.out.println("Введите название товара"); - String name = scanner.next(); - - System.out.println("Введите стоимость товара в формате: 'рубли.копейки' [10.45, 11.40]"); - double price = scanner.nextDouble(); - - calculator.addItem(new Item(name, price)); + float resultCalculator = Calculator.calculateCostPerPerson(personsQuantity); + ItemsBasket.writeItemsFromBasket(); + roubles = (int) (resultCalculator); + roubleName = Calculator.findRightRoubleWord(roubles); + System.out.printf("Каждому нужно заплатить %.2f %s%n", resultCalculator, roubleName); + } - System.out.println( - "Хотите добавить еще один товар? Введите любой символ для продолжения, либо 'Завершить' если больше нет товаров для добавления"); - String answer = scanner.next(); +//_____________________________________________________________________________________________ - if (answer.equalsIgnoreCase("Завершить")) { + public static int inputPersonsQuantity() { + Scanner scanner = new Scanner(System.in); + System.out.println("Введите число персон, на которых разделить счет:"); + int personsQuantity; + while (true) { + if (scanner.hasNextInt()) { + personsQuantity = scanner.nextInt(); break; + } else { + System.out.println("Ошибочный ввод. Попробуйте ещё раз ввести число персон в виде целого положительного числа, например 10,45"); + scanner.next(); } } + return personsQuantity; + } - double result = calculator.divideSum(); - Formatter formatter = new Formatter(); + public static String inputItemName(int type) { + Scanner scanner = new Scanner(System.in); + String itemName; + switch (type) { + case 1: + System.out.println("Введите название товара из чека:"); + itemName = scanner.next(); + itemName = itemName.trim(); + return itemName; + case 2: + System.out.println("Если хотите завершить ввод напишите \"Завершить\" или введите название следующего товара из чека:"); + itemName = scanner.next(); + itemName = itemName.trim(); + return itemName; + } + itemName = "None"; + return itemName; + } - System.out.println(calculator.cart); - System.out.println("Каждому человеку к оплате: " + formatter.roundResult(result) + " " + formatter.formatValue(result)); + public static float inputItemCost(String itemName) { + Scanner scanner = new Scanner(System.in); + System.out.println("Введите стоимость товара " + itemName + " в формате 0,00 в рублях с копейками:"); + float itemCost; + while (true) { + if (scanner.hasNextFloat()) { + itemCost = scanner.nextFloat(); + if (itemCost>= 0) {
+ break;
+ } else {
+ System.out.println("Вы ввели стоимость не в правильном фомате. Попробуйте ещё раз, например 10,45");
+ scanner.next();
+ }
+ } else {
+ System.out.println("Вы ввели стоимость не в правильном фомате. Попробуйте ещё раз, например 10,45");
+ scanner.next();
+ }
+ }
+ return itemCost;
}
-}
+}
\ No newline at end of file