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
108 changes: 108 additions & 0 deletions src/main/java/Check.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
import java.util.Scanner;
// Класс чека
public class Check {
// позиции в чеке
private String[] items = {};
// общаяя сумма чека
private double summa = 0.0;
// количество гостей
private int guestsNumber = 0;
// статусы добавления позиции в чек
private static final int addStatusStop = 0;// закончили добавлять
private static final int addStatusSuccess = 1;// успешно добавили

// добавление позиции в чек
private int addItem(String item)
{
String[] array = new String[this.items.length+1];
System.arraycopy(this.items, 0, array, 0, this.items.length);
array[this.items.length] = item;
this.items = array;
// успешно добавили
return addStatusSuccess;
}

// запуск добавления позиций в чек
public void addItems() {
int i;
// запрашиваем название, пока не будет сигнала остановиться
while ((i = getItemName())!=addStatusStop) {
// успешно добавили название
if (i == addStatusSuccess) {
// запрашиваем цену
getPrice();
}
}
}

// запрос наименования позиции
int getItemName() {
String stopWord = "завершить";
System.out.println(this.items.length>0 ? "Желаете добавить еще? Введите название товара или слово "+stopWord : "Введите название товара");
Scanner scanner = new Scanner(System.in);
String item = scanner.next();
// сигналом к остановке служит совпадение названия со стоп словом
// в противном случае - добавляем позицию в чек
return item.equalsIgnoreCase(stopWord) ? addStatusStop : this.addItem(item);
}

// запрос цены позиции
void getPrice() {
boolean success=false;
String input;
Scanner scanner = new Scanner(System.in);
while (!success) {
System.out.println("Введите стоимость товара "+ this.items[this.items.length-1] +" (руб,коп):");
// ввод строки, разрешим писать копейки через запятую
input = scanner.next().replace(",", ".");
// проверка на число
try {
// число с плавающей точкой из строки
double d = Float.parseFloat(input);
if (d>0) {
// округлением превратим в число с двумя знаками после точки
this.summa += Math.ceil(d * 100) / 100;
// получилось - можно выходить из цикла
success = true;
System.out.println("Добавлено.");
}
}
catch (NumberFormatException e) {
// проверка на число не прошла, успеха нет - цикл продолжается
}
}
}

// запросим количество гостей
public void setGuests() {
String input;
Scanner scanner = new Scanner(System.in);
while (this.guestsNumber ==0) {
int maxPeople = 10;
System.out.println("На сколько человек делим счет (2-"+ maxPeople +")?");
try {
input = scanner.next();
int peopleInt = Integer.parseInt(input);
if ((peopleInt>=1) && (peopleInt<= maxPeople)) {
this.guestsNumber = peopleInt;
}
}
catch (NumberFormatException e) {
// количество гостей все еще 0 - запрос повторится
}
}
}

// выведем результат
void showResult() {
System.out.println("Добавленные товары:");
// выведем каждую добавленную позицию
for (String item : this.items) {
System.out.println(item);
}
System.out.println("--------------------");
// сколько должен заплатить каждый гость
double eachSumma = this.summa/this.guestsNumber;
System.out.println("С каждого гостя: " + String.format("%.2f", eachSumma) + " " + Helper.getWordForm(eachSumma, "рубль", "рубля", "рублей"));
}
}
18 changes: 18 additions & 0 deletions src/main/java/Helper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// by AlexPanic
// Вспомогательные методы
public class Helper {
// подставить нужную словоформу из типовых трех в зависимости от числа
// formLike1Moneta - для чисел типа 1 монета, 21 монета, 1001 монета
// formLike2Moneti - для чисел типа 2 монеты, 94 монеты, 1003 монеты
// formLike5Monet - для чисел типа 5 монет, 18 монет, 9999 монет
public static String getWordForm(double sum, String formLike1Moneta, String formLike2Moneti, String formLike5Monet) {
// определяем по остатку от деления на 100
int N = Math.abs((int) Math.floor(sum)) % 100;
// и остатку от деления на 10
int N1 = N % 10;
// sum от 11 до 19 всегда монет
// если последняя цифра от 2 до 4 то монеты
// иначе если последняя цифра 1 то монета в противном случае - монет
return N > 10 && N < 20 ? formLike5Monet : (N1 > 1 && N1 < 5 ? formLike2Moneti : (N1 == 1 ? formLike1Moneta : formLike5Monet));
}
}
10 changes: 8 additions & 2 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@

public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
Check check = new Check();
// количество гостей
check.setGuests();
// позиции в чеке
check.addItems();
// результат
check.showResult();
}

}