Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
org.gradle.jvmargs=-Xmx2048m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
Expand Down
2 changes: 1 addition & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ dependencyResolutionManagement {
mavenCentral()
}
}
rootProject.name = "BillCalculator"
rootProject.name = "Java-Module-Project"
22 changes: 0 additions & 22 deletions src/main/java/Calculator.java

This file was deleted.

17 changes: 0 additions & 17 deletions src/main/java/Formatter.java

This file was deleted.

10 changes: 0 additions & 10 deletions src/main/java/Item.java

This file was deleted.

156 changes: 126 additions & 30 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,49 +1,145 @@
import java.io.IOError;
import java.io.IOException;
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Scanner sc = new Scanner(System.in);
int n;
String name;
String test1 = "Завершить";
String test2 = "Complete";
double price;
double summ;
Calculator Calc = new Calculator();


do {
n = ReadInt(sc, "На сколько человек необходимо разделить счёт ?");

if (n == 1) System.out.println("Нет смысла ничего считать и делить при 1 человеке");
else if (n < 1) System.out.println("Количество людей должно быть больше 1");
else System.out.println(String.format("Будем делить на %d %s", n, OutPers(n)));

} while (n < 2);

int friendCount;
while (true) {
System.out.println("На сколько человек необходимо разделить счет?");
friendCount = scanner.nextInt();
System.out.println("Что будем покупать ?");

if (friendCount > 1) {
while(true) {
System.out.println("Введите название товара или слово \"Завершить\" (\"Complete\")");
name = sc.next();
if (name.equalsIgnoreCase(test1) || name.equalsIgnoreCase(test2))
break;
} else if (friendCount == 1) {
System.out.println(
"Нет смысла делить сумму на одного человека. Давайте попробуем ввести другое значение, которое будет больше единицы.");
} else {
System.out.println("Неверное количество друзей. Значение должно быть болье единицы, давайте попробуем еще раз.");
}
if (name.isEmpty())
System.out.println("Обратите внимаение! Вы не ввели пустое имя, видимо не хотите раскрывать имя товара...");
do {
price = ReadDouble(sc, "Введите стоимость товара в формате рубли.копейки, если копеек нет их можно не вводить");
if (price < 0.0)
System.out.println("Ошибка!! Товар не может стоить меньше 0 рублей 00 копеек");
else if (price == 0.0)
System.out.println("Обратите внимание! Бесплатный товар, но мы его добавим");
} while(price < 0);
Calc.calculate(name, price);
System.out.println(jl;lString.format("Добавлен товар \"%s\" по цене %.2f, каждому теперь нужно внести уже по %s\n",
name, price, OutMoneySum(Calc.sum / n, 2)));
System.out.println("Если больше не хотите добавлять товар наберите слово \"Завершить\" или \"Complete\"");
System.out.println("Английское можно ввести в любом регистре, но русское именно так, как написано\n");
}
System.out.println(String.format("\nДобавленные товары:\n%s\nОбщая сумма: %s на %d %s\nКаждому нужно внести по %s\n",
Calc.list, OutMoneySum(Calc.sum, 1), n, OutPers(n), OutMoneySum(Calc.sum / n, 2)));
}

// Вывод денежной суммы в формате
// для var == 1: хх рубль/рубля/рублей xx копейка/копейки/копеек
// для var == 2: хх рублю/рубля/рублей xx копейке/копейки/копеек
private static String OutMoneySum(double sum, int var) {
int rub = (int)sum;
int kop = (int)((sum - rub) * 100 + 0.5);
return String.format("%d %s %d %s", rub, OutRub(rub, var), kop, OutKop(kop, var));
}

private static String OutRub(int rub, int var) {
String Out = "рубль"; // именительный падеж
if (var == 2)
Out = "рублю"; // дательный падеж
int p1 = rub % 100;
if ((p1 >= 5) && (p1 <= 20)) // Обработка исключений от 11 до 14: рублей
Out = "рублей";
else {
int p2 = p1 % 10;
if ((p2 >= 5) || (p2 == 0)) // Обработка оканчивающихся от 5 до 9 и на 0: рублей
Out = "рублей";
else if (p2 >= 2)
Out = "рубля"; // Обработка оканчивающихся от 2 до 4: рубля
}
return Out; // При 1 остается в единственном числе: рубль/рублю
}

Calculator calculator = new Calculator(friendCount);
private static String OutKop(int kop, int var) {
String Out = "копейка"; // именительный падеж
if (var == 2)
Out = "копейке"; // дательный падеж

while (true) {
System.out.println("Введите название товара");
String name = scanner.next();
int p1 = kop % 100;
if ((p1 >= 5) && (p1 <= 20)) // Обработка исключений от 11 до 14: копеек
Out = "копеек";
else {
int p2 = p1 % 10;
if ((p2 >= 5) || (p2 == 0)) // Обработка оканчивающихся от 5 до 9 и на 0: копеек
Out = "копеек";
else if (p2 >= 2)
Out = "копейки"; // Обработка оканчивающихся от 2 до 4: копейки
}
return Out; // При 1 остается в единственном числе: копейка/копейке
}

System.out.println("Введите стоимость товара в формате: 'рубли.копейки' [10.45, 11.40]");
double price = scanner.nextDouble();
// Вывод в формате: (на) хх человека/человек
private static String OutPers(int persons) {
String Out = "человека"; // Разделить на 1, 2, 3, 4 человека
int p1 = persons % 100;
if ((p1 >= 5) && (p1 <= 20)) // исключение от 11 до 14 человек
Out = "человек";
else {
int p2 = p1 % 10;
if ((p2 >= 5) || (p2 == 0))
Out = "человек";
}
return Out; // При последней цифре 1, 2, 3, 4 (кроме 11..14) остается значение по умолчанию: человека
}

calculator.addItem(new Item(name, price));
private static class Calculator {
double sum = 0;
String list = "";
void calculate(String name, double price) {
this.sum += price;
this.list += String.format("%s по цене %.2f\n", name, price);
}
}

System.out.println(
"Хотите добавить еще один товар? Введите любой символ для продолжения, либо 'Завершить' если больше нет товаров для добавления");
String answer = scanner.next();
private static int ReadInt(Scanner sc, String prompt) {
int ret;

if (answer.equalsIgnoreCase("Завершить")) {
break;
}
System.out.println(prompt);
while(!sc.hasNextInt()) {
sc.next();
System.out.println("Это явно не целое число. Попробуйте снова. Вводите целое число !");
System.out.println(prompt);
}
ret = sc.nextInt();
return ret;
}

double result = calculator.divideSum();
Formatter formatter = new Formatter();
private static double ReadDouble(Scanner sc, String prompt) {
double ret;

System.out.println(calculator.cart);
System.out.println("Каждому человеку к оплате: " + formatter.roundResult(result) + " " + formatter.formatValue(result));
System.out.println(prompt);
while(!sc.hasNextDouble()) {
sc.next();
System.out.println("Это явно не число. Возможно, вместо точки нужно поставить запятую\nПопробуйте еще раз");
System.out.println(prompt);
}
System.out.println();
ret = sc.nextDouble();
return ret;
}
}