diff --git a/README.md b/README.md index 63be1bfe0..754976ba3 100644 --- a/README.md +++ b/README.md @@ -1 +1,4 @@ # Пустой репозиторий для работы с Java кодом в Android Studio +Проектная работа №1 +cтудента курса по Android-разработке (Когорта №10) +Станислава Евстигнеева \ No newline at end of file diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java new file mode 100644 index 000000000..01ec3451d --- /dev/null +++ b/src/main/java/Calculator.java @@ -0,0 +1,32 @@ +public class Calculator { + + // поля + private double amount; + private int peopleQuantity; + private double calculationResult; + + + // методы + public void setAmount (double totalAmount) { + amount = totalAmount; + } + public double getAmount() { + return amount; + } + + public void setPeopleQty (int peopleQty) { + peopleQuantity = peopleQty; + } + public int getPeopleQty() { + return peopleQuantity; + } + + public void calculate () { + calculationResult = amount/peopleQuantity; + } + + public double getCalculationResult() { + return calculationResult; + } + +} diff --git a/src/main/java/Input.java b/src/main/java/Input.java new file mode 100644 index 000000000..37f5c4237 --- /dev/null +++ b/src/main/java/Input.java @@ -0,0 +1,35 @@ +import java.util.Scanner; + +public class Input { + //поля + private int peopleQty; + + // Методы + public void enterPeopleQty() { + Scanner scanP = new Scanner(System.in); + scanP.useDelimiter("\n"); + + while (true) { + try { + System.out.println("На скольких человек следует разделить счёт? Введите количество: "); + int quantity = scanP.nextInt(); // считывание количества человек с клавиатуры + if (quantity > 1) { + peopleQty = quantity; + System.out.println("Хорошо, давайте разделим счёт на " + peopleQty + "-х человек"); + break; + } else { + System.out.println("Ошибка. Для корректной работы программы колличество человек должно быть больше 1. Пожалуйста введите повторно"); + } + } catch (Exception e2) { + System.out.println("Ошибка ввода. Пожалуйста введите число, равное количеству человек"); + scanP.next(); + } + } + + } + + public int getPeopleQty() { + return peopleQty; + } + +} \ No newline at end of file diff --git a/src/main/java/Main.java b/src/main/java/Main.java index db9356a08..2967126a5 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,6 +1,44 @@ - +import java.util.Scanner; public class Main { public static void main(String[] args) { - System.out.println("Hello world!"); + Scanner scanner = new Scanner(System.in); + + // Вввод количества человек с проверкой ввода + Input peopleQuantity = new Input(); + peopleQuantity.enterPeopleQty(); + + // После ввода количества человек создаем список товаров + ProductList productList = new ProductList(); + + // Цикл ввод товаров в список + while (true) { + System.out.println("Введите название товара: "); + productList.setProductName(); + System.out.println("Введите стоимость этого товара в формате 'рубли,копейки' (например: 123,45): "); + productList.setProductPrice(); + productList.updateList(); + System.out.println("Вы хотите добавить ещё один товар?\n-Для продолжения введите любой символ\n-Если хотите закончить и получить результат, введите слово \"Завершить\""); + String userAnswer = scanner.next(); + if (userAnswer.equalsIgnoreCase("завершить")) { + break; + } + } + System.out.println(productList.getList() + "Общей стоимостью: " + String.format("%.2f", productList.getTotalAmount()) + " руб.\n"); + + + // Создаем объект калькулятор для расчёта суммы для каждого человека + Calculator calculator = new Calculator(); + calculator.setAmount(productList.getTotalAmount()); + calculator.setPeopleQty(peopleQuantity.getPeopleQty()); + calculator.calculate(); // метод расчета суммы для каждого человека + + + // Создаем объект result для вывода правильного падежа слова "рубль" в итоговом сообщении + Result result = new Result(); + result.setRubValue(calculator.getCalculationResult()); + result.format(); + String resultTemplate = "Каждый из " + peopleQuantity.getPeopleQty() + "-х человек должен заплатить %.2f %s"; + System.out.println(String.format(resultTemplate, calculator.getCalculationResult(), result.getRubFormat())); + System.out.println("Работы программы завершена."); } } \ No newline at end of file diff --git a/src/main/java/ProductList.java b/src/main/java/ProductList.java new file mode 100644 index 000000000..39316ece5 --- /dev/null +++ b/src/main/java/ProductList.java @@ -0,0 +1,72 @@ +/* класс описывает объект "Список товаров", который хранит все товары, введенные пользователем, + стоимость товаров и общую сумму */ + + +import java.util.Scanner; +public class ProductList { + + // поля + private String name; // наименование товара + private double price; // стоимость товара + private String list = "Добавленные товары:\n"; // переменная для хранения списка товаров + private double totalAmount = 0; // переменная для хранения общей стоимости всех товаров + + + + // методы + public void setProductName() { + Scanner scanName = new Scanner(System.in); + while(true) { + scanName.useDelimiter("\n"); + String product = scanName.next(); + if (product.isEmpty()) { + System.out.println("Поле не может быть пустым. Пожалуйста, введите наименование товара"); + } + else { + name = (product.substring(0,1).toUpperCase()+product.substring(1)).trim(); // формат имени товара - с заглавной буквы + break; + } + } + } + public String getProductName() { + return name; + } + + public void setProductPrice() { + Scanner scanPrice = new Scanner(System.in); + while (true) { + try { + double productPrice = scanPrice.nextDouble(); + if (productPrice >= 0) { + price = productPrice; + break; + } else { + System.out.println("Ошибка. Стоимость не может быть отрицательной. Введите стоимость повторно"); + + } + } catch (Exception e) { + System.out.println("Ошибка ввода. Пожалуйста введите стоимость товара повторно, отделяя копейки запятой (Пример: 123,45)"); + scanPrice.next(); + } + } + } + + public double getProductPrice() { + return price; + } + + public void updateList() { + list = list + "- " + name + " : " + String.format("%.2f", price) + " руб.\n"; // + totalAmount = totalAmount + price; + System.out.println("Спасибо, Вы ввели товар: " + name + " стоимостью " + String.format("%.2f", price) + " руб.\n"); + } + + public String getList() { + return list; + } + + public double getTotalAmount() { + return totalAmount; + } + +} \ No newline at end of file diff --git a/src/main/java/Result.java b/src/main/java/Result.java new file mode 100644 index 000000000..205bfe130 --- /dev/null +++ b/src/main/java/Result.java @@ -0,0 +1,58 @@ +public class Result { + + /// поля + private double rubValue; // итоговое значение вычислений + private String rubFormat; // переменная для хранения правильной формы слова "рубль" + + // методы + + public void setRubValue(double rub) { + rubValue = rub; + } + + public void format() { + double rubRounded = Math.floor(rubValue); + if (rubValue >= 0 && rubValue <21) { + if (rubValue==0) { + rubFormat = "рублей"; + } else if (rubValue == 1) { + rubFormat = "рубль"; + } else if (rubValue >= 2 && rubValue <5) { + rubFormat = "рубля"; + } else if (rubValue >=5) { + rubFormat = "рублей"; + } + } else if (rubValue >= 21 && rubValue <100) { + if (rubRounded%10 == 1) { + rubFormat = "рубль"; + } else if (rubRounded%10 > 1 && rubRounded%10 <5) { + rubFormat = "рубля"; + } else if (rubRounded%10 >=5 || rubRounded%10 == 0) { + rubFormat = "рублей"; + } + } else if (rubValue >=100) { + if (rubRounded % 100 == 0) { + rubFormat = "рублей"; + } else if (rubRounded % 100 == 1) { + rubFormat = "рубль"; + } else if (rubRounded % 100 > 1 && rubRounded % 100 <5) { + rubFormat = "рубля"; + } else if (rubRounded % 100 >=5 && rubRounded % 100 < 21) { + rubFormat = "рублей"; + } else { + if (rubRounded%10 == 1) { + rubFormat = "рубль"; + } else if (rubRounded%10 > 1 && rubRounded%10 <5) { + rubFormat = "рубля"; + } else if (rubRounded%10 >=5 || rubRounded%10 == 0) { + rubFormat = "рублей"; + } + } + + } + } + + public String getRubFormat() { + return rubFormat; + } +} \ No newline at end of file