Загрузка данных


import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;

public class ShoppingCartAnalyzer {

    public static void main(String[] args) {
        Path filePath = Path.of("products.txt");

        try {
            List<String> lines = Files.readAllLines(filePath);
            
            BigDecimal totalSum = BigDecimal.ZERO;
            BigDecimal maxPrice = BigDecimal.ZERO;
            BigDecimal minPrice = null;
            String mostExpensiveItem = "";
            String cheapestItem = "";
            int validItemsCount = 0;

            System.out.println("=== СПИСОК ПОКУПОК ===");
            
            for (String line : lines) {
                line = line.trim();
                if (line.isEmpty()) continue;

                int lastSpaceIndex = line.lastIndexOf(' ');
                if (lastSpaceIndex == -1) {
                    System.out.println("[Пропуск] Неверный формат строки: " + line);
                    continue;
                }

                String productName = line.substring(0, lastSpaceIndex).trim();
                String pricePart = line.substring(lastSpaceIndex + 1).replace(',', '.');

                try {
                    BigDecimal price = new BigDecimal(pricePart);
                    
                    totalSum = totalSum.add(price);
                    validItemsCount++;

                    if (price.compareTo(maxPrice) > 0) {
                        maxPrice = price;
                        mostExpensiveItem = productName;
                    }
                    if (minPrice == null || price.compareTo(minPrice) < 0) {
                        minPrice = price;
                        cheapestItem = productName;
                    }

                    System.out.printf("%-35s | %8.2f руб.%n", productName, price);
                } catch (NumberFormatException e) {
                    System.out.println("[Ошибка цены] Не удалось распознать число в строке: " + line);
                }
            }

            if (validItemsCount > 0) {
                BigDecimal averagePrice = totalSum.divide(BigDecimal.valueOf(validItemsCount), 2, RoundingMode.HALF_UP);
                BigDecimal vatAmount = totalSum.multiply(new BigDecimal("0.20")).setScale(2, RoundingMode.HALF_UP);
                BigDecimal totalWithVat = totalSum.add(vatAmount);

                System.out.println("\n=== ИТОГОВЫЙ РАСКРУТ (ЧЕК) ===");
                System.out.println("Всего позиций:          " + validItemsCount);
                System.out.println("Сумма без НДС:          " + totalSum.setScale(2, RoundingMode.HALF_UP) + " руб.");
                System.out.println("Сумма НДС (20%):        " + vatAmount + " руб.");
                System.out.println("ИТОГО К ОПЛАТЕ:         " + totalWithVat + " руб.");
                System.out.println("Средняя цена за товар:  " + averagePrice + " руб.");
                System.out.println("Самый дорогой товар:    " + mostExpensiveItem + " (" + maxPrice + " руб.)");
                System.out.println("Самый дешевый товар:    " + cheapestItem + " (" + minPrice + " руб.)");
            } else {
                System.out.println("Список покупок пуст.");
            }

        } catch (IOException e) {
            System.err.println("Ошибка при чтении файла: " + e.getMessage());
        }
    }
}