lr10 -> task_2
This commit is contained in:
166
lr10/task_2/e1.java
Normal file
166
lr10/task_2/e1.java
Normal file
@@ -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<Element> 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("❌ Фильм с таким названием не найден.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
143
lr10/task_2/e2.java
Normal file
143
lr10/task_2/e2.java
Normal file
@@ -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<JSONObject>) (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("Фильм не найден.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
58
lr10/task_2/e3.java
Normal file
58
lr10/task_2/e3.java
Normal file
@@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
24
lr10/task_2/movies.json
Normal file
24
lr10/task_2/movies.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"movies": [
|
||||||
|
{
|
||||||
|
"year": 2010,
|
||||||
|
"author": "Нолан",
|
||||||
|
"title": "Начало"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"year": 2014,
|
||||||
|
"author": "Нолан",
|
||||||
|
"title": "Интерстеллар"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"year": 1999,
|
||||||
|
"author": "Вачовски",
|
||||||
|
"title": "Матрица"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"year": 123,
|
||||||
|
"author": "ывф",
|
||||||
|
"title": "ыфв"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
24
lr10/task_2/movies.xml
Normal file
24
lr10/task_2/movies.xml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<catalog>
|
||||||
|
<movie>
|
||||||
|
<title>Интерстеллар</title>
|
||||||
|
<director>Кристофер Нолан</director>
|
||||||
|
<year>2014</year>
|
||||||
|
</movie>
|
||||||
|
<movie>
|
||||||
|
<title>Дюна</title>
|
||||||
|
<director>Дени Вильнёв</director>
|
||||||
|
<year>2021</year>
|
||||||
|
</movie>
|
||||||
|
<movie>
|
||||||
|
<title>Начало</title>
|
||||||
|
<director>Кристофер Нолан</director>
|
||||||
|
<year>2010</year>
|
||||||
|
</movie>
|
||||||
|
|
||||||
|
<movie>
|
||||||
|
<title>Удачи, веселья, не сдохни</title>
|
||||||
|
<director>Гор Вербински</director>
|
||||||
|
<year>2025</year>
|
||||||
|
</movie>
|
||||||
|
</catalog>
|
||||||
Reference in New Issue
Block a user