Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб. 3 Java

.docx
Скачиваний:
2
Добавлен:
31.08.2024
Размер:
200.67 Кб
Скачать

package lab_3;

class BulkCargo extends Product{

public BulkCargo(String name) {

super(name);

}

}

package lab_3;

class BulkCargoWagon extends Wagon{

public BulkCargoWagon() {

super("Вагон для сыпучих грузов");

}

}

package lab_3;

class Car extends Product{

public Car(String name) {

super(name);

}

}

package lab_3;

class CarPlatform extends Wagon{

public CarPlatform() {

super("Автомобильная платформа");

}

}

package lab_3;

class Container extends Product{

public Container(String name) {

super(name);

}

}

package lab_3;

class ContainerPlatform extends Wagon{

public ContainerPlatform() {

super("Платформа для контейнеров");

}

}

package lab_3;

class Liquid extends Product{

public Liquid(String name) {

super(name);

}

}

package lab_3;

class LiquidTank extends Wagon{

public LiquidTank() {

super("Цистерна для жидкостей");

}

}

package lab_3;

import java.io.Serializable;

class Product implements Serializable{

protected String type;

public Product() {

this.type="";

}

public Product(String type) {

this.type = type;

}

public void load() {

System.out.println("Загрузка продукции: " + type + "\n");

}

public String toString() {

return this.type;

}

}

package lab_3;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

import java.util.ArrayList;

class Train implements Serializable{

private ArrayList<Wagon> wagons;

public Train() {

wagons = new ArrayList<>();

}

public ArrayList<Wagon> getWagons() {

return wagons;

}

public Wagon getOneWagon(int i) {

return wagons.get(i);

}

public void addWagon(Wagon wagon) {

wagons.add(wagon);

}

public int getLengthTrain() {

return wagons.size();

}

public void info() {

System.out.println("Железнодорожный состав состоит из " + wagons.size() + " вагонов");

}

public void serialize(String fileName) {

try (FileOutputStream fileOutputStream = new FileOutputStream(fileName);

ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream)) {

objectOutputStream.writeObject(this);

System.out.println("Данные успешно сохранены в файл " + fileName +".");

} catch (IOException e) {

System.out.println("Ошибка при сохранении данных в файл " + fileName + ": " + e.getMessage());

}

}

public Train deserialize(String fileName) {

Train train = null;

try (FileInputStream fileInputStream = new FileInputStream(fileName);

ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream)) {

train = (Train) objectInputStream.readObject();

System.out.println("Данные успешно загружены из файла " + fileName +".");

} catch (IOException | ClassNotFoundException e) {

System.out.println("Ошибка при загрузке данных из файла " + fileName + ": " + e.getMessage());

}

return train;

}

}

package lab_3;

import java.io.Serializable;

class Wagon implements Serializable{

protected String type;

public Wagon() {

this.type="";

}

public Wagon(String type) {

this.type= type;

}

public void load() {

System.out.println("Загрузка вагона типа: " + type);

}

public String toString() {

return this.type;

}

}

package lab_3;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

import java.util.ArrayList;

class Warehouse implements Serializable{ //реализация интерфейса, чтобы объекты класса могли быть преобразованы в последовательность байтов для сохранения в файле, а затем восстановлены обратно в исходный объект

private ArrayList<Product> products;

public Warehouse() {

products = new ArrayList<>();

}

public ArrayList<Product> GetProducts() {

return products;

}

public Product getOneProduct(int i) {

return products.get(i);

}

public void addProduct(Product product) {

products.add(product);

}

public int getSizeWarehouse() {

return products.size();

}

public Product removeProduct(int index) {

return products.remove(index);

}

public void removeProductIndex(int i) {

products.remove(i);

}

public void addProductIndex(int i, Product product) {

products.add(i, product);

}

public boolean isEmpty() {

return products.isEmpty();

}

public void serialize(String fileName) {

try (FileOutputStream fileOutputStream = new FileOutputStream(fileName); //создается экземпляр класса FileOutputStream, который открывает файл на запись

ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream)) { //создается экземпляр класса ObjectOutputStream, который обеспечивает сериализацию объектов в поток

objectOutputStream.writeObject(this);//сериализация объекта и запись его в поток

System.out.println("Данные успешно сохранены в файл " + fileName +".");

} catch (IOException e) {

System.out.println("Ошибка при сохранении данных в файл " + fileName + ": " + e.getMessage());

}

}

public Warehouse deserialize(String fileName) {

Warehouse warehouse = null;

try (FileInputStream fileInputStream = new FileInputStream(fileName); //создается экземпляр класса FileInputStream, который открывает файл для чтения

ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream)) { //создается экземпляр класса ObjectInputStream, который обеспечивает десериализацию объектов из потока

warehouse = (Warehouse) objectInputStream.readObject(); //чтение объекта из потока объектов и приводит его к типу Warehouse. Метод readObject() считывает сериализованный объект из потока и восстанавливает его в исходный объект

System.out.println("Данные успешно загружены из файла " + fileName +".");

} catch (IOException | ClassNotFoundException e) {

System.out.println("Ошибка при загрузке данных из файла " + fileName + ": " + e.getMessage());

}

return warehouse;

}

public void addWarehouseToFile(String fileName, Warehouse warehouse) {

try (FileOutputStream fileOutputStream = new FileOutputStream(fileName, true);

ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream)) {

objectOutputStream.writeObject(warehouse);

System.out.println("Объект успешно добавлен в файл " + fileName + ".");

} catch (IOException e) {

System.out.println("Ошибка при добавлении объекта в файл " + fileName + ": " + e.getMessage());

}

}

}

package lab_3;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.time.LocalDateTime;

import java.time.format.DateTimeFormatter;

import java.util.Scanner;

public class Settings {

private static final String SETTINGS_FILE = "settings.txt";

private static final String LOG_FILE = "log.txt";

private String username;

private String password;

private String group;

private boolean debugMode;

public void loadSettings() {

try (Scanner in = new Scanner(new File(SETTINGS_FILE))) { //создается экземпляр класса Scanner, который будет использоваться для чтения данных из файла

username = in.nextLine();

password = in.nextLine();

group = in.nextLine();

debugMode = Boolean.parseBoolean(in.nextLine());

} catch (Exception e) {

System.out.println("Ошибка при загрузке настроек: " + e.getMessage());

}

}

public void run() {

loadSettings();

int flag = 0;

while (flag == 0){

System.out.println("Для входа введите логин и пароль.");

Scanner in = new Scanner(System.in);

System.out.print("Логин: ");

String inputUsername = in.nextLine();

System.out.print("Пароль: ");

String inputPassword = in.nextLine();

if (inputUsername.equals(username) && inputPassword.equals(password)) {

System.out.println("Добро пожаловать, " + username + "!");

if (group.equals("root")) {

flag=1;

//menu();

}

} else {

System.out.println("Неверный логин или пароль.");

}

}

}

public int menu() {

System.out.println("\n");

System.out.println("Выберите команду, введя её номер:");

System.out.println("1. Отладка");

System.out.println("2. Автотесты");

System.out.print("-> ");

Scanner in = new Scanner(System.in);

int number = in.nextInt();

while (number < 1 || number > 2) {

System.out.println("Введён неверный номер! Введите номер заново.");

System.out.print("-> ");

number = in.nextInt();

}

System.out.println("\n");

return number;

}

public void writeLog(String message) {

try (BufferedWriter writer = new BufferedWriter(new FileWriter(LOG_FILE, true))) { //создается экземпляр класса, который будет использоваться для записи данных в файл

LocalDateTime now = LocalDateTime.now(); //получается текущая дата и время

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

String formattedDateTime = now.format(formatter);

writer.write("[" + formattedDateTime + "] " + message);

writer.newLine();

} catch (Exception e) {

System.out.println("Ошибка при записи в лог-файл: " + e.getMessage());

}

}

}

package lab_3;

import java.util.ArrayList;

import java.util.Scanner;

import java.io.BufferedReader;

import java.io.ByteArrayOutputStream;

import java.io.FileReader;

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.PrintWriter;

public class Main{

public static int menu() {

System.out.println("\n");

System.out.println("Выберите команду, введя её номер:");

System.out.println("1. Загрузить товар на склад");

System.out.println("2. Состояние склада на данный момент");

System.out.println("3. Загрузить товар в вагон");

System.out.println("4. Состояние железнодорожного состава на данный момент");

System.out.println("5. Работа с файлом");

System.out.println("6. Выход");

System.out.print("-> ");

Scanner in = new Scanner(System.in);

int number = in.nextInt();

System.out.println("\n");

return number;

}

public static int menuProduct() {

System.out.println("\n");

System.out.println("Выберите тип товара, введя его номер:");

System.out.println("1. Контейнеры");

System.out.println("2. Жидкости");

System.out.println("3. Сыпучие грузы");

System.out.println("4. Автомобили");

System.out.print("-> ");

Scanner in = new Scanner(System.in);

int number = in.nextInt();

while (number < 1 || number > 4) {

System.out.println("Введён неверный номер! Введите номер заново.");

System.out.print("-> ");

number = in.nextInt();

}

System.out.println("\n");

return number;

}

public static int menuFle() {

System.out.println("\n");

System.out.println("1. Добавление элементов в файл");

System.out.println("2. Изменение конкретного элемента в файле");

System.out.println("3. Удаление конкретного элемента в файле");

System.out.print("-> ");

Scanner in = new Scanner(System.in);

int number = in.nextInt();

while (number < 1 || number > 3) {

System.out.println("Введён неверный номер! Введите номер заново.");

System.out.print("-> ");

number = in.nextInt();

}

System.out.println("\n");

return number;

}

public static void addProductToWarehouse(int numberProduct, Warehouse warehouse) {

Scanner in = new Scanner(System.in);

System.out.print("Введите название продукции: ");

String name = in.nextLine();

switch(numberProduct) {

case 1:

Container container = new Container(name);

warehouse.addProduct(container);

break;

case 2:

Liquid liquid = new Liquid(name);

warehouse.addProduct(liquid);

break;

case 3:

BulkCargo bulkCargo = new BulkCargo(name);

warehouse.addProduct(bulkCargo);

break;

case 4:

Car car = new Car(name);

warehouse.addProduct(car);

break;

}

System.out.print("Продукция успешно добавлена на склад!");

}

public static void warehouseInformation(Warehouse warehouse) {

//System.out.println(warehouse.GetProducts());

if (warehouse.getSizeWarehouse() == 0) {

System.out.print("Склад пуст!");

}

else {

for (int i = 0; i < warehouse.getSizeWarehouse(); i++) {

System.out.println(i + ": " + warehouse.getOneProduct(i));

}

}

}

public static void addProductToWagon(Warehouse warehouse, Train train, ContainerPlatform containerPlatform, LiquidTank liquidTank, BulkCargoWagon bulkCargoWagon, CarPlatform carPlatform) {

if (warehouse.getSizeWarehouse() == 0) {

System.out.print("Склад пуст!");

}

else {

Scanner in = new Scanner(System.in);

System.out.print("Введите номер продукции, который хотите загрузить: ");

int number = in.nextInt();

while (number < 0 || number > warehouse.getSizeWarehouse()) {

System.out.println("Продукции под данным номером не существует! Введите номер заново.");

System.out.print("-> ");

number = in.nextInt();

}

Product product = warehouse.getOneProduct(number);

if (product instanceof Container) {

train.addWagon(containerPlatform);

containerPlatform.load();

product.load();

}

if (product instanceof Liquid) {

train.addWagon(liquidTank);

liquidTank.load();

product.load();

}

if (product instanceof BulkCargo) {

train.addWagon(bulkCargoWagon);

bulkCargoWagon.load();

product.load();

}

if (product instanceof Car) {

train.addWagon(carPlatform);

carPlatform.load();

product.load();

}

warehouse.removeProductIndex(number);

}

}

public static void trainInformation(Train train) {

//System.out.println(warehouse.GetProducts());

if (train.getLengthTrain() == 0) {

System.out.print("Железнодорожный состав не имеет грузовых вагонов!");

}

else {

train.info();

for (int i = 0; i < train.getLengthTrain(); i++) {

System.out.println(i + ": " + train.getOneWagon(i));

}

}

}

public static void putInFile(String fileName, int numberProduct, Warehouse warehouse) {

//Warehouse warehouse = new Warehouse();

Scanner in = new Scanner(System.in);

System.out.print("Введите название продукции: ");

String name = in.nextLine();

//File file = new File(fileName);

//PrintWriter pw = new PrintWriter(file);

//try {

//pw = new PrintWriter(file);

//File file = new File(fileName);

//PrintWriter pw = new PrintWriter(file);

switch(numberProduct) {

case 1:

Container container = new Container(name);

warehouse.addProduct(container);

break;

case 2:

Liquid liquid = new Liquid(name);

warehouse.addProduct(liquid);

break;

case 3:

BulkCargo bulkCargo = new BulkCargo(name);

warehouse.addProduct(bulkCargo);

break;

case 4:

Car car = new Car(name);

warehouse.addProduct(car);

break;

}

//} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

//e.printStackTrace();

//}

warehouse.addWarehouseToFile(fileName, warehouse);

//System.out.print("Продукция успешно добавлена в файл!");

}

public static void changeProduct(Warehouse warehouse) {

int number = 0;

if (warehouse.getSizeWarehouse() == 0) {

System.out.println("Склад пуст!");

System.out.println("Программа завершена!");

System.exit(0);

}

else {

Scanner in = new Scanner(System.in);

System.out.print("Введите номер объекта, который хотите изменить: ");

number = in.nextInt();

while (number < 0 || number > warehouse.getSizeWarehouse()) {

System.out.println("Продукции под данным номером не существует! Введите номер заново.");

System.out.print("-> ");

number = in.nextInt();

}

}

warehouse.removeProductIndex(number);

int numberProduct = menuProduct();

System.out.print("Введите название продукции: ");

Scanner in = new Scanner(System.in);

String name = in.nextLine();

switch(numberProduct) {

case 1:

Container container = new Container(name);

//warehouse.addProduct(container);

warehouse.addProductIndex(number, container);

break;

case 2:

Liquid liquid = new Liquid(name);

//warehouse.addProduct(liquid);

warehouse.addProductIndex(number, liquid);

break;

case 3:

BulkCargo bulkCargo = new BulkCargo(name);

//warehouse.addProduct(bulkCargo);

warehouse.addProductIndex(number, bulkCargo);

break;

case 4:

Car car = new Car(name);

//warehouse.addProduct(car);

warehouse.addProductIndex(number, car);

break;

}

System.out.println("Объект успешно изменён.");

}

public static void removeProduct(Warehouse warehouse) {

int number = 0;

if (warehouse.getSizeWarehouse() == 0) {

System.out.println("Склад пуст!");

System.out.println("Программа завершена!");

System.exit(0);

}

else {

Scanner in = new Scanner(System.in);

System.out.print("Введите номер объекта, который хотите удалить: ");

number = in.nextInt();

while (number < 0 || number > warehouse.getSizeWarehouse()) {

System.out.println("Продукции под данным номером не существует! Введите номер заново.");

System.out.print("-> ");

number = in.nextInt();

}

}

warehouse.removeProductIndex(number);

System.out.println("Объект успешно удалён.");

}

public static void main(String[] args) {

Settings settings = new Settings();

settings.run();

settings.writeLog("Запуск программы!");

int numberSettings = settings.menu();

switch(numberSettings) {

case 1:

String fileNameWarehouse = "warehouse.ser";

String fileNameTrain = "train.ser";

ContainerPlatform containerPlatform = new ContainerPlatform();

LiquidTank liquidTank = new LiquidTank();

BulkCargoWagon bulkCargoWagon = new BulkCargoWagon();

CarPlatform carPlatform = new CarPlatform();

Warehouse warehouse = new Warehouse();

if( warehouse.deserialize(fileNameWarehouse) != null) {

warehouse = warehouse.deserialize(fileNameWarehouse);

settings.writeLog("Чтение с файла warehouse.ser");

}

System.out.println("Данные с warehouse.ser: ");

warehouseInformation(warehouse);

System.out.println(" ");

Train train = new Train();

if( train.deserialize(fileNameTrain) != null) {

train = train.deserialize(fileNameTrain);

settings.writeLog("Чтение с файла train.ser");

}

System.out.println("Данные с train.ser: ");

trainInformation(train);

while (true){

int number = menu();

switch(number) {

case 1:

int numberProduct = menuProduct();

addProductToWarehouse(numberProduct, warehouse);

break;

case 2:

warehouseInformation(warehouse);

break;

case 3:

addProductToWagon(warehouse, train, containerPlatform, liquidTank, bulkCargoWagon, carPlatform);

break;

case 4:

trainInformation(train);

break;

case 5:

int numberFile = menuFle();

switch(numberFile) {

case 1:

int count = -1;

while(count < 1) {

System.out.println("Введите количество объектов, которое хотите добавить.");

System.out.print("-> ");

Scanner in = new Scanner(System.in);

count = in.nextInt();

if(count < 1) {

System.out.println("Введено некорректное число.");

}

}

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

int numberProductFile = menuProduct();

putInFile(fileNameWarehouse, numberProductFile, warehouse);

}

warehouse.serialize(fileNameWarehouse);

System.out.println("Программа завершена!");

settings.writeLog("Запись в файл warehouse.ser");

settings.writeLog("Завершение программы!");

System.exit(0);

break;

case 2:

changeProduct(warehouse);

warehouse.serialize(fileNameWarehouse);

System.out.println("Программа завершена!");

settings.writeLog("Запись в файл warehouse.ser");

settings.writeLog("Завершение программы!");

System.exit(0);

break;

case 3:

removeProduct(warehouse);

warehouse.serialize(fileNameWarehouse);

System.out.println("Программа завершена!");

settings.writeLog("Запись в файл warehouse.ser");

settings.writeLog("Завершение программы!");

System.exit(0);

break;

}

break;

case 6:

warehouse.serialize(fileNameWarehouse);

train.serialize(fileNameTrain);

System.out.println("Программа завершена!");

settings.writeLog("Запись в файл warehouse.ser");

settings.writeLog("Запись в файл train.ser");

settings.writeLog("Завершение программы!");

System.exit(0);

break;

default:

System.out.println("Команды под данным номером не существует!\n");

break;

}

}

//break;

case 2:

System.out.println("Пока ничего нет.");

settings.writeLog("Завершение программы!");

System.out.println("Программа завершена!");

System.exit(0);

break;

}

}

}

Соседние файлы в предмете Основы языка Java