Загрузка данных
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
public class ShoppingListAnalyzer {
// Класс для удобного хранения данных о товаре
static class Item {
String name;
BigDecimal price;
Item(String name, BigDecimal price) {
this.name = name;
this.price = price;
}
}
public static void main(String[] args) {
// Имитируем содержимое текстового файла (массив строк)
String[] fileLines = {
"Молоко цельное пастеризованное 89.90",
"Хлеб Бородинский нарезка 45",
"Кофе в зернах Арабика 100% 1250.55",
"Шоколад горький 99.9% 149.00",
"Сыр Пармезан выдержанный 450.25"
};
List<Item> items = new ArrayList<>();
BigDecimal totalPrice = BigDecimal.ZERO;
// Обработка строк
for (String line : fileLines) {
if (line == null || line.trim().isEmpty()) {
continue;
}
line = line.trim();
// Находим последний пробел в строке
int lastSpaceIndex = line.lastIndexOf(" ");
if (lastSpaceIndex != -1) {
// Разделяем: всё до последнего пробела — название, после — цена
String name = line.substring(0, lastSpaceIndex).trim();
String priceStr = line.substring(lastSpaceIndex + 1).trim();
try {
// Используем BigDecimal для защиты от погрешностей float/double
BigDecimal price = new BigDecimal(priceStr);
items.add(new Item(name, price));
totalPrice = totalPrice.add(price);
} catch (NumberFormatException e) {
System.out.println("Ошибка парсинга цены в строке: " + line);
}
}
}
int totalItems = items.size();
if (totalItems == 0) {
System.out.println("Список покупок пуст!");
return;
}
// Расчет аналитики
// Средняя цена = Итого / Количество
BigDecimal averagePrice = totalPrice.divide(BigDecimal.valueOf(totalItems), 2, RoundingMode.HALF_UP);
// НДС 20% внутри суммы: Цена * 20 / 120 (или Цена * 0.2 / 1.2)
BigDecimal vatRate = new BigDecimal("0.20");
BigDecimal vatDivider = new BigDecimal("1.20");
BigDecimal vatAmount = totalPrice.multiply(vatRate).divide(vatDivider, 2, RoundingMode.HALF_UP);
// Поиск самого дорогого и дешевого товара
Item mostExpensive = items.get(0);
Item leastExpensive = items.get(0);
for (Item item : items) {
if (item.price.compareTo(mostExpensive.price) > 0) {
mostExpensive = item;
}
if (item.price.compareTo(leastExpensive.price) < 0) {
leastExpensive = item;
}
}
// --- КРАСИВЫЙ ВЫВОД ЧЕКА ---
System.out.println("==================================================");
System.out.printf("%-50s\n", " ТОВАРНЫЙ ЧЕК / ОТЧЕТ ПО ПОКУПКАМ");
System.out.println("==================================================");
for (int i = 0; i < items.size(); i++) {
Item item = items.get(i);
// Если название слишком длинное, аккуратно подрезаем его для верстки
String displayName = item.name.length() > 35 ? item.name.substring(0, 32) + "..." : item.name;
System.out.printf("%2d. %-35s %8.2f руб.\n", (i + 1), displayName, item.price);
}
System.out.println("--------------------------------------------------");
System.out.printf("%-38s %8d\n", "Всего позиций:", totalItems);
System.out.printf("%-38s %8.2f руб.\n", "ИТОГО К ОПЛАТЕ:", totalPrice);
System.out.println("--------------------------------------------------");
System.out.printf("%-38s %8.2f руб.\n", "В том числе НДС (20%):", vatAmount);
System.out.printf("%-38s %8.2f руб.\n", "Средняя стоимость товара:", averagePrice);
System.out.println("--------------------------------------------------");
System.out.printf("⭐ Самый дорогой товар: %s (%.2f руб.)\n", mostExpensive.name, mostExpensive.price);
System.out.printf("🛒 Самый бюджетный товар: %s (%.2f руб.)\n", leastExpensive.name, leastExpensive.price);
System.out.println("==================================================");
}
}