From 598306fb7a06e90f861d456baeb17b97d156394a Mon Sep 17 00:00:00 2001 From: Vombit Date: Sun, 5 Apr 2026 21:23:04 +0500 Subject: [PATCH] lr10 -> task_2 --- lr10/task_2/e1.java | 166 ++++++++++++++++++++++++++++++++++++++++ lr10/task_2/e2.java | 143 ++++++++++++++++++++++++++++++++++ lr10/task_2/e3.java | 58 ++++++++++++++ lr10/task_2/movies.json | 24 ++++++ lr10/task_2/movies.xml | 24 ++++++ 5 files changed, 415 insertions(+) create mode 100644 lr10/task_2/e1.java create mode 100644 lr10/task_2/e2.java create mode 100644 lr10/task_2/e3.java create mode 100644 lr10/task_2/movies.json create mode 100644 lr10/task_2/movies.xml diff --git a/lr10/task_2/e1.java b/lr10/task_2/e1.java new file mode 100644 index 0000000..6e63715 --- /dev/null +++ b/lr10/task_2/e1.java @@ -0,0 +1,166 @@ +package lr10.task_2; + +import org.w3c.dom.*; +import javax.xml.parsers.*; +import javax.xml.transform.*; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import java.io.File; +import java.util.List; +import java.util.Scanner; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class e1 { + private static final String FILE_PATH = "lr10/task_2/movies.xml"; + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in, "cp866"); + + while (true) { + System.out.println("\n=== Управление каталогом фильмов ==="); + System.out.println("1. Добавить новый фильм"); + System.out.println("2. Найти фильм (по режиссеру или году)"); + System.out.println("3. Удалить фильм (по названию)"); + System.out.println("0. Выход"); + System.out.print("Выберите действие: "); + + String choice = scanner.nextLine(); + + try { + switch (choice) { + case "1": + System.out.print("Введите название фильма: "); + String title = scanner.nextLine(); + System.out.print("Введите режиссера: "); + String director = scanner.nextLine(); + System.out.print("Введите год: "); + String year = scanner.nextLine(); + addMovie(title, director, year); + break; + case "2": + System.out.print("Введите режиссера или год для поиска: "); + String query = scanner.nextLine(); + searchMovie(query); + break; + case "3": + System.out.print("Введите точное название фильма для удаления: "); + String titleToDelete = scanner.nextLine(); + deleteMovie(titleToDelete); + break; + case "0": + System.out.println("Завершение работы."); + return; + default: + System.out.println("Неверная команда!"); + } + } catch (Exception e) { + System.out.println("Произошла ошибка: " + e.getMessage()); + e.printStackTrace(); + } + } + } + + private static Document getDocument() throws Exception { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + return builder.parse(new File(FILE_PATH)); + } + + private static void saveXML(Document doc) throws Exception { + doc.normalizeDocument(); + Transformer transformer = TransformerFactory.newInstance().newTransformer(); + + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + transformer.setOutputProperty(OutputKeys.STANDALONE, "yes"); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); + + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(new File(FILE_PATH)); + transformer.transform(source, result); + } + + // 1. Добавление фильма + private static void addMovie(String title, String director, String year) throws Exception { + Document doc = getDocument(); + Element rootElement = doc.getDocumentElement(); + + Element newMovie = doc.createElement("movie"); + + Element titleElem = doc.createElement("title"); + titleElem.appendChild(doc.createTextNode(title)); + newMovie.appendChild(titleElem); + + Element directorElem = doc.createElement("director"); + directorElem.appendChild(doc.createTextNode(director)); + newMovie.appendChild(directorElem); + + Element yearElem = doc.createElement("year"); + yearElem.appendChild(doc.createTextNode(year)); + newMovie.appendChild(yearElem); + + rootElement.appendChild(newMovie); + saveXML(doc); + System.out.println("✅ Фильм успешно добавлен!"); + } + + // 2. Поиск фильма + private static void searchMovie(String query) throws Exception { + Document doc = getDocument(); + NodeList nodeList = doc.getElementsByTagName("movie"); + + List foundMovies = IntStream.range(0, nodeList.getLength()) + .mapToObj(nodeList::item) + .filter(node -> node.getNodeType() == Node.ELEMENT_NODE) + .map(node -> (Element) node) + .filter(element -> { + String director = element.getElementsByTagName("director").item(0).getTextContent(); + String year = element.getElementsByTagName("year").item(0).getTextContent(); + + return director.equalsIgnoreCase(query) || year.equals(query); + }) + .collect(Collectors.toList()); + + if (foundMovies.isEmpty()) { + System.out.println("❌ По вашему запросу ничего не найдено."); + } else { + System.out.println("\n--- Результаты поиска ---"); + for (Element el : foundMovies) { + System.out.println("Название: " + el.getElementsByTagName("title").item(0).getTextContent()); + System.out.println("Режиссер: " + el.getElementsByTagName("director").item(0).getTextContent()); + System.out.println("Год: " + el.getElementsByTagName("year").item(0).getTextContent()); + System.out.println("-------------------------"); + } + } + } + + // 3. Удаление фильма + private static void deleteMovie(String title) throws Exception { + Document doc = getDocument(); + NodeList nodeList = doc.getElementsByTagName("movie"); + boolean isDeleted = false; + + for (int i = 0; i < nodeList.getLength(); i++) { + Node node = nodeList.item(i); + if (node.getNodeType() == Node.ELEMENT_NODE) { + Element element = (Element) node; + String currentTitle = element.getElementsByTagName("title").item(0).getTextContent(); + + if (currentTitle.equalsIgnoreCase(title)) { + Node parentNode = element.getParentNode(); + parentNode.removeChild(element); + isDeleted = true; + break; + } + } + } + + if (isDeleted) { + saveXML(doc); + System.out.println("✅ Фильм '" + title + "' успешно удален!"); + } else { + System.out.println("❌ Фильм с таким названием не найден."); + } + } +} \ No newline at end of file diff --git a/lr10/task_2/e2.java b/lr10/task_2/e2.java new file mode 100644 index 0000000..34535e0 --- /dev/null +++ b/lr10/task_2/e2.java @@ -0,0 +1,143 @@ +package lr10.task_2; + +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.Iterator; +import java.util.Scanner; + +public class e2 { + private static final String FILE_NAME = "lr10/task_2/movies.json"; + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in, "UTF-8"); + + while (true) { + System.out.println("\n--- JSON Менеджер Фильмов ---"); + System.out.println("1. Показать все фильмы"); + System.out.println("2. Поиск по режиссёру"); + System.out.println("3. Добавить фильм"); + System.out.println("4. Удалить фильм по названию"); + System.out.println("0. Выход"); + System.out.print("Выберите действие: "); + + String choice = scanner.nextLine(); + + try { + switch (choice) { + case "1": + displayAll(); + break; + case "2": + System.out.print("Введите имя режиссёра: "); + searchByAuthor(scanner.nextLine()); + break; + case "3": + System.out.print("Название: "); + String title = scanner.nextLine(); + System.out.print("Режиссёр: "); + String author = scanner.nextLine(); + System.out.print("Год: "); + int year = Integer.parseInt(scanner.nextLine()); + addMovie(title, author, year); + break; + case "4": + System.out.print("Введите название для удаления: "); + deleteMovie(scanner.nextLine()); + break; + case "0": + return; + } + } catch (Exception e) { + System.out.println("Ошибка: " + e.getMessage()); + } + } + } + + private static JSONObject loadData() throws Exception { + JSONParser parser = new JSONParser(); + return (JSONObject) parser.parse( + new InputStreamReader(new FileInputStream(FILE_NAME), "UTF-8")); + } + + private static void saveData(JSONObject data) throws Exception { + try (OutputStreamWriter file = new OutputStreamWriter( + new FileOutputStream(FILE_NAME), "UTF-8")) { + file.write(data.toJSONString()); + } + } + + // 1. Показать все + private static void displayAll() throws Exception { + JSONObject data = loadData(); + JSONArray movies = (JSONArray) data.get("movies"); + for (Object obj : movies) { + JSONObject movie = (JSONObject) obj; + System.out.println("\nНазвание: " + movie.get("title")); + System.out.println("Режиссёр: " + movie.get("author")); + System.out.println("Год: " + movie.get("year")); + } + } + + // 2. Поиск по автору — используем stream() как в задании + @SuppressWarnings("unchecked") + private static void searchByAuthor(String author) throws Exception { + JSONObject data = loadData(); + JSONArray movies = (JSONArray) data.get("movies"); + + System.out.println("Результаты поиска:"); + ((java.util.List) (java.util.List) movies).stream() + .filter(m -> author.equalsIgnoreCase((String) m.get("author"))) + .forEach(m -> { + System.out.println("\nНазвание: " + m.get("title")); + System.out.println("Режиссёр: " + m.get("author")); + System.out.println("Год: " + m.get("year")); + }); + } + + // 3. Добавление + @SuppressWarnings("unchecked") + private static void addMovie(String title, String author, int year) throws Exception { + JSONObject data = loadData(); + JSONArray movies = (JSONArray) data.get("movies"); + + JSONObject newMovie = new JSONObject(); + newMovie.put("title", title); + newMovie.put("author", author); + newMovie.put("year", year); + movies.add(newMovie); + + saveData(data); + System.out.println("Фильм добавлен!"); + } + + // 4. Удаление через Iterator + private static void deleteMovie(String title) throws Exception { + JSONObject data = loadData(); + JSONArray movies = (JSONArray) data.get("movies"); + + Iterator iterator = movies.iterator(); + boolean found = false; + while (iterator.hasNext()) { + JSONObject movie = (JSONObject) iterator.next(); + if (title.equalsIgnoreCase((String) movie.get("title"))) { + iterator.remove(); + found = true; + } + } + + if (found) { + saveData(data); + System.out.println("Фильм удалён!"); + } else { + System.out.println("Фильм не найден."); + } + } +} \ No newline at end of file diff --git a/lr10/task_2/e3.java b/lr10/task_2/e3.java new file mode 100644 index 0000000..438e071 --- /dev/null +++ b/lr10/task_2/e3.java @@ -0,0 +1,58 @@ +package lr10.task_2; + +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; + +public class e3 { + public static void main(String[] args) { + try { + Workbook workbook = new XSSFWorkbook(); + Sheet sheet = workbook.createSheet("Товары"); + + Row headerRow = sheet.createRow(0); + String[] columns = { "Название товара", "Характеристики", "Стоимость" }; + + for (int i = 0; i < columns.length; i++) { + Cell cell = headerRow.createCell(i); + cell.setCellValue(columns[i]); + } + + // Добавляем данные чисто тестовые данные, так для вижу + String[][] data = { + { "Книга", "Автор: Иванов, Год: 2023", "1000" }, + { "Компьютер", "Процессор: Intel Core i7, RAM: 16GB", "50000" } + }; + + int rowNum = 1; + for (String[] rowData : data) { + Row row = sheet.createRow(rowNum++); + + int colNum = 0; + for (String value : rowData) { + Cell cell = row.createCell(colNum++); + cell.setCellValue(value); + } + } + + try (FileOutputStream outputStream = new FileOutputStream("output.xlsx")) { + workbook.write(outputStream); + } + + workbook.close(); + + System.out.println("Данные успешно записаны в файл output.xlsx"); + + } catch (FileNotFoundException e) { + System.err.println("Файл не найден: " + e.getMessage()); + } catch (IOException e) { + System.err.println("Ошибка при записи данных в файл: " + e.getMessage()); + } catch (Exception e) { + System.err.println("Произошла непредвиденная ошибка: " + e.getMessage()); + } + } + +} \ No newline at end of file diff --git a/lr10/task_2/movies.json b/lr10/task_2/movies.json new file mode 100644 index 0000000..8654474 --- /dev/null +++ b/lr10/task_2/movies.json @@ -0,0 +1,24 @@ +{ + "movies": [ + { + "year": 2010, + "author": "Нолан", + "title": "Начало" + }, + { + "year": 2014, + "author": "Нолан", + "title": "Интерстеллар" + }, + { + "year": 1999, + "author": "Вачовски", + "title": "Матрица" + }, + { + "year": 123, + "author": "ывф", + "title": "ыфв" + } + ] +} \ No newline at end of file diff --git a/lr10/task_2/movies.xml b/lr10/task_2/movies.xml new file mode 100644 index 0000000..b746171 --- /dev/null +++ b/lr10/task_2/movies.xml @@ -0,0 +1,24 @@ + + + + Интерстеллар + Кристофер Нолан + 2014 + + + Дюна + Дени Вильнёв + 2021 + + + Начало + Кристофер Нолан + 2010 + + + + Удачи, веселья, не сдохни + Гор Вербински + 2025 + +