
Лаб. 3 Java
.docx
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;
}
}
}