Скачиваний:
1
Добавлен:
27.01.2024
Размер:
126.81 Кб
Скачать

Лабораторная работа №3

Работа со строками. Чтение исходной строки осуществлять из текстового файла, для результирующей строки применить стандартный алгоритм шифрования и записать в файл. При выполнении следующих заданий для вывода результатов создавать новую директорию и файл средствами класса File.

24. Определить сумму всех целых чисел, встречающихся в заданном тексте.

Содержание файла source.txt:

fftun6u6urn6chjdghjfj

Содержание Main.java:

import java.io.*;

import java.nio.charset.StandardCharsets;

import java.nio.file.Files;

import java.nio.file.Paths;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Main {

/**

* @param args

*/

public static void main(String[] args) {

try {

String sourceString = readSourceStringFromFile();

String encryptedString = encryptSourceString(sourceString);

writeEncryptedStringToFile(encryptedString);

int sum = findSumOfAllIntegersInString(sourceString);

System.out.println("Sum of all integers in the source string: " + sum);

} catch (IOException e) {

System.out.println("Error: " + e.getMessage());

}

}

private static String readSourceStringFromFile() throws IOException {

byte[] encoded = Files.readAllBytes(Paths.get("source.txt"));

return new String(encoded, StandardCharsets.UTF_8);

}

private static String encryptSourceString(String sourceString) {

char[] result = new char[sourceString.length()];

for (int i = 0; i < sourceString.length(); i++) {

char ch = sourceString.charAt(i);

result[i] = (char) (ch + 3);

}

return new String(result);

}

private static void writeEncryptedStringToFile(String encryptedString) throws IOException {

Files.write(Paths.get("encrypted.txt"), encryptedString.getBytes(StandardCharsets.UTF_8));

}

private static int findSumOfAllIntegersInString(String sourceString) {

Pattern pattern = Pattern.compile("\\d+");

Matcher matcher = pattern.matcher(sourceString);

int sum = 0;

while (matcher.find()) {

sum += Integer.parseInt(matcher.group());

}

return sum;

}

}

Результат выполнения:

Содержание файла encrypted.txt:

iiwxq9x9xuq9fkmgjkmim

Лабораторная работа №4

Разработать проект управления процессами на основе создания и реализации интерфейсов для предметных областей, создать консольное приложение, удовлетворяющее следующим требованиям: использовать возможности ООП: классы, наследование, полиморфизм, инкапсуляция. Аргументировать принадлежность классу каждого создаваемого метода и корректно переопределить для каждого класса методы equals(), hashCode(), toString(). Каждый класс должен иметь отражающее смысл название и информативный состав. Наследование должно применяться только тогда, когда это имеет смысл. При кодировании должны быть использованы соглашения об оформлении кода java code convention. Классы должны быть грамотно разложены по пакетам. При необходимости использовать внутренние и вложенные классы. Консольное меню должно быть минимальным. Для хранения параметров инициализации можно использовать файлы. Для ввода данных использовать обработку исключительных ситуаций.

24. Логистический склад. Определенному товару соответствуют сектор, ряд, место, дата поступления, количество. Вывести по заданным параметрам (сектор, ряд, место) соответствующую информацию о товаре. Создать список товаров, поступивших за определенный период времени.

Для начала, давайте создадим пакет model и определим класс Product с атрибутами сектор, ряд, место, дата поступления, количество. Также создадим методы equals(), hashCode(), и toString().

package model;

import java.util.Date;

public class Product {

private String sector;

private String row;

private String place;

private Date arrivalDate;

private int quantity;

// Getters and setters

@Override

public boolean equals(Object obj) {

if (this == obj) {

return true;

}

if (obj == null || getClass() != obj.getClass()) {

return false;

}

Product product = (Product) obj;

return quantity == product.quantity &&

Objects.equals(sector, product.sector) &&

Objects.equals(row, product.row) &&

Objects.equals(place, product.place) &&

Objects.equals(arrivalDate, product.arrivalDate);

}

@Override

public int hashCode() {

return Objects.hash(sector, row, place, arrivalDate, quantity);

}

@Override

public String toString() {

return "Product{" +

"sector='" + sector + '\'' +

", row='" + row + '\'' +

", place='" + place + '\'' +

", arrivalDate=" + arrivalDate +

", quantity=" + quantity +

'}';

}

}

Теперь, создадим пакет storage и определим интерфейс Storage с методом getProductByParameters(String sector, String row, String place). Также создадим класс ProductStorage реализующий этот интерфейс.

package storage;

import model.Product;

import java.util.ArrayList;

import java.util.List;

public class ProductStorage implements Storage {

private List<Product> products;

public ProductStorage() {

products = new ArrayList<>();

}

public void addProduct(Product product) {

products.add(product);

}

@Override

public List<Product> getProductByParameters(String sector, String row, String place) {

List<Product> result = new ArrayList<>();

for (Product product : products) {

if (product.getSector().equals(sector) &&

product.getRow().equals(row) &&

product.getPlace().equals(place)) {

result.add(product);

}

}

return result;

}

}

Далее, создадим класс WarehouseManager для управления складом. В нем будет реализован метод findProductsByParameters(String sector, String row, String place).

package warehouse;

import model.Product;

import storage.ProductStorage;

import storage.Storage;

import java.util.List;

public class WarehouseManager {

private Storage storage;

public WarehouseManager() {

storage = new ProductStorage();

}

public void addProduct(Product product) {

storage.addProduct(product);

}

public List<Product> findProductsByParameters(String sector, String row, String place) {

return storage.getProductByParameters(sector, row, place);

}

}

Наконец, создадим класс WarehouseApp с консольным меню для управления складом.

package warehouse;

import model.Product;

import storage.ProductStorage;

import storage.Storage;

import java.util.List;

import java.util.Scanner;

public class WarehouseApp {

public static void main(String[] args) {

WarehouseManager manager = new WarehouseManager();

Scanner scanner = new Scanner(System.in);

int option;

do {

System.out.println("1. Add Product");

System.out.println("2. Find Product by Parameters");

System.out.println("3. Exit");

System.out.print("Enter option: ");

option = scanner.nextInt();

switch (option) {

case 1:

addProduct(manager);

break;

case 2:

findProductsByParameters(manager);

break;

case 3:

System.out.println("Exiting...");

break;

default:

System.out.println("Invalid option");

}

} while (option != 3);

scanner.close();

}

private static void addProduct(WarehouseManager manager) {

Product product = new Product();

// Initialize product attributes (sector, row, place, arrivalDate, quantity)

manager.addProduct(product);

System.out.println("Product added successfully");

}

private static void findProductsByParameters(WarehouseManager manager) {

System.out.print("Enter sector: ");

String sector = new Scanner(System.in).nextLine();

System.out.print("Enter row: ");

String row = new Scanner(System.in).nextLine();

System.out.print("Enter place: ");

String place = new Scanner(System.in).nextLine();

List<Product> products = manager.findProductsByParameters(sector, row, place);

if (products.isEmpty()) {

System.out.println("No products found");

} else {

System.out.println("Products found:");

for (Product product : products) {

System.out.println(product);

}

}

}

}

Пример выполнения:

Лабораторная работа №5

Используя Collection Framework (соответствующий интерфейс и Stream API):

24. На плоскости задано N отрезков. Найти точку пересечения двух отрезков, имеющую минимальную абсциссу. Использовать класс TreeMap.

Содержание Main.java:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int N = scanner.nextInt();

LineSegment[] segments = new LineSegment[N];

for (int i = 0; i < N; i++) {

int x1 = scanner.nextInt();

int y1 = scanner.nextInt();

int x2 = scanner.nextInt();

int y2 = scanner.nextInt();

segments[i] = new LineSegment(x1, y1, x2, y2);

}

scanner.close();

Point intersectionPoint = findIntersection(segments);

if (intersectionPoint != null) {

System.out.println("Пересечение отрезков найдено в точке (" + intersectionPoint.getX() + ", " + intersectionPoint.getY() + ")");

} else {

System.out.println("Отрезок не пересекаются");

}

}

private static Point findIntersection(LineSegment[] segments) {

for (int i = 0; i < segments.length; i++) {

for (int j = i + 1; j < segments.length; j++) {

Point intersectionPoint = segments[i].intersection(segments[j]);

if (intersectionPoint != null) {

return intersectionPoint;

}

}

}

return null;

}

}

class LineSegment {

private Point startPoint;

private Point endPoint;

public LineSegment(int x1, int y1, int x2, int y2) {

startPoint = new Point(x1, y1);

endPoint = new Point(x2, y2);

}

public Point intersection(LineSegment segment) {

int x1 = startPoint.getX();

int y1 = startPoint.getY();

int x2 = endPoint.getX();

int y2 = endPoint.getY();

int x3 = segment.startPoint.getX();

int y3 = segment.startPoint.getY();

int x4 = segment.endPoint.getX();

int y4 = segment.endPoint.getY();

int denom = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);

if (denom == 0) {

return null;

}

int numX = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4);

int numY = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4);

int x = numX / denom;

int y = numY / denom;

return new Point(x, y);

}

}

class Point {

private int x;

private int y;

public Point(int x, int y) {

this.x = x;

this.y = y;

}

public int getX() {

return x;

}

public int getY() {

return y;

}

}

Результат выполнения: