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
43 changes: 43 additions & 0 deletions src/main/java/Calculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/**
* Calculator implementation
*/
public class Calculator {

int split;
double amountToPay;
String products = "";

public Calculator (int split) {
this.split = split;
}

public void addProduct(Product product) {
this.amountToPay += product.price;
this.products += product.name + "\n";
System.out.printf("Товар '%s' был успешно добавлен в калькулятор для дальнейшего подсчета\n", product.name);
}

public void printBillProducts() {
System.out.println("Добавленные товары:\n" + this.products);
}

public void printBillPerMan() {
double splitAmountToPay = this.amountToPay / split;
System.out.printf("%.2f %s\n", splitAmountToPay, this.currencyFormat(splitAmountToPay));
}

private String currencyFormat(double splitAmountToPay) {
int amount = (int)Math.floor(splitAmountToPay);
int lastDigit = (amount % 10);
switch (lastDigit) {
case 1:
return "рубль";
case 2:
case 3:
case 4:
return "рубля";
default:
return "рублей";
}
}
}
14 changes: 10 additions & 4 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
public class Main {

public static void main(String[] args) {
// ваш код начнется здесь
// вы не должны ограничиваться только классом Main и можете создавать свои классы по необходимости
System.out.println("Привет Мир");
UserHelper userHelper = new UserHelper();
Calculator calculator = new Calculator(userHelper.getNumberOfPeopleToSplitTheBill());

do {
calculator.addProduct(userHelper.getProduct());
} while (userHelper.doAddNewProduct());

calculator.printBillProducts();
calculator.printBillPerMan();
}
}
}
13 changes: 13 additions & 0 deletions src/main/java/Product.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/**
* Product representation
*/
public class Product {

String name;
double price;

public Product(String name, double price) {
this.name = name;
this.price = price;
}
}
96 changes: 96 additions & 0 deletions src/main/java/UserHelper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import java.util.Locale;
import java.util.Scanner;

/**
* Helper class to interact with users
*/
public class UserHelper {

Scanner scanner;

public UserHelper() {
// locale is set to scan double with a dot . instead of comma ,
this.scanner = new Scanner(System.in).useLocale(Locale.US);
}

public int getNumberOfPeopleToSplitTheBill() {
System.out.print("Введите количество человек на которых необходимо разделить счёт: ");
while(true) {
String numStr = this.scanner.next().trim();
if (numStr.isEmpty()) {
System.out.print("Некорректное значение для подсчёта, значение не может быть пустым. " +
"Попробуйе еще раз: ");
continue;
}
int num;
try {
num = Integer.parseInt(numStr);
} catch(NumberFormatException ex) {
System.out.print("Некорректное значение для подсчёта, значение должно быть целым числом. " +
"Попробуйе еще раз: ");
continue;
}
if (num > 1) {
return num;
}
System.out.print("Некорректное значение для подсчёта, необходимо указать количество > 1. " +
"Попробуйе еще раз: ");
}
}

// check if user wants to add new product
public boolean doAddNewProduct() {
System.out.print("Хотите ли Вы добавить ещё один товар?");
String command = this.scanner.next().trim();
return !command.equalsIgnoreCase("Завершить");
}

public Product getProduct() {
return new Product(getProductName(), getProductPrice());
}

public String getProductName() {
System.out.print("Введите название товара: ");
while (true) {
String name = this.scanner.next().trim();
if (name.isEmpty()) {
System.out.print("Некорректное значение названия товара, название не может быть пустым. " +
"Попробуйе еще раз: ");
continue;
}
return name;
}
}

public double getProductPrice() {
System.out.print("Введите стоимость товара (в формате рубли.копейки): ");
while (true) {
String priceStr = this.scanner.next().trim();
if (priceStr.isEmpty()) {
System.out.print("Некорректное значение цены товара, значение не может быть пустым. " +
"Попробуйе еще раз: ");
continue;
}
if (!priceStr.matches("^[0-9]+\\.[0-9]{2}$")) {
System.out.print("Некорректное значение цены товара, " +
"цена должны быть в формате рубли.копейки (копейки < 100). " +
"Попробуйе еще раз: ");
continue;
}
double price;
try {
price = Double.parseDouble(priceStr);
} catch(NumberFormatException ex) {
System.out.print("Некорректное значение для подсчёта, значение должно быть числом. " +
"Попробуйе еще раз: ");
continue;
}
if (price <= 0) {
System.out.print("Некорректное значение цены товара, цена должна быть > 0. " +
"Попробуйе еще раз: ");
continue;
}
return price;
}
}
}