Skip to content

Instantly share code, notes, and snippets.

@untainsYD
Created May 22, 2025 06:31
Show Gist options
  • Select an option

  • Save untainsYD/d137a7e5b740569fa86ab95b00572bbc to your computer and use it in GitHub Desktop.

Select an option

Save untainsYD/d137a7e5b740569fa86ab95b00572bbc to your computer and use it in GitHub Desktop.
Laboratory 5, Task 1
package lab5.fileio;
import lab3.tram.TramStop;
import lab3.tram.Hour;
import java.io.IOException;
/**
* Абстрактний клас для представлення трамвайної зупинки з можливостями файлового введення-виведення.
* Розширює базовий клас TramStop додатковими операціями роботи з файлами різних форматів.
*/
public abstract class TramStopWithFile extends TramStop {
/**
* Конструктор за замовчуванням
*/
public TramStopWithFile() {
super("", new int[0]);
}
/**
* Конструктор з параметрами
* @param name назва зупинки
* @param routeNumbers номери маршрутів
* @param hours години роботи
*/
public TramStopWithFile(String name, int[] routeNumbers, Hour[] hours) {
super(name, routeNumbers);
setHours(hours);
}
/**
* Абстрактний метод для читання даних з файлу
* @param fileName ім'я файлу для читання
* @throws IOException у разі помилки введення-виведення
* @throws Exception у разі інших помилок
*/
public abstract void readFromFile(String fileName) throws IOException, Exception;
/**
* Абстрактний метод для запису даних у файл
* @param fileName ім'я файлу для запису
* @throws IOException у разі помилки введення-виведення
* @throws Exception у разі інших помилок
*/
public abstract void writeToFile(String fileName) throws IOException, Exception;
/**
* Метод для демонстрації роботи з файлами
* @param sourceFile вихідний файл
* @param sortedByPassengersFile файл для збереження відсортованих за пасажирами даних
* @param sortedByCommentsFile файл для збереження відсортованих за коментарями даних
*/
public void demonstrateFileOperations(String sourceFile, String sortedByPassengersFile, String sortedByCommentsFile) {
try {
// Створення тестових даних
createTestData();
System.out.println("=== Створені тестові дані ===");
displayToConsole();
// Запис у вихідний файл
writeToFile(sourceFile);
System.out.println("\n=== Дані записані у файл: " + sourceFile + " ===");
// Очищення даних та читання з файлу
clearData();
readFromFile(sourceFile);
System.out.println("\n=== Дані прочитані з файлу ===");
displayToConsole();
// Сортування за кількістю пасажирів та збереження
sortByPassengersCountBubble();
writeToFile(sortedByPassengersFile);
System.out.println("\n=== Дані відсортовані за кількістю пасажирів та збережені у: " + sortedByPassengersFile + " ===");
displayToConsole();
// Сортування за коментарями та збереження
sortByCommentInsertion();
writeToFile(sortedByCommentsFile);
System.out.println("\n=== Дані відсортовані за коментарями та збережені у: " + sortedByCommentsFile + " ===");
displayToConsole();
} catch (IOException e) {
System.err.println("Помилка введення-виведення: " + e.getMessage());
e.printStackTrace();
} catch (Exception e) {
System.err.println("Загальна помилка: " + e.getMessage());
e.printStackTrace();
}
}
/**
* Створення тестових даних
*/
protected void createTestData() {
setName("Центральна площа");
setRouteNumbers(new int[]{5, 12, 23});
setHours(new Hour[]{
new Hour(15, "Ранковий пік, сонячно"),
new Hour(5, "Обідній час, дощ"),
new Hour(10, "Вечірній час, хмарно"),
new Hour(20, "Кінець робочого дня"),
new Hour(3, "Нічний час")
});
}
/**
* Очищення даних
*/
protected void clearData() {
setName("");
setRouteNumbers(new int[0]);
setHours(new Hour[0]);
}
/**
* Виведення даних у консоль
*/
public void displayToConsole() {
System.out.println("Назва зупинки: " + getName());
System.out.print("Маршрути: ");
int[] routes = getRouteNumbers();
for (int i = 0; i < routes.length; i++) {
System.out.print(routes[i]);
if (i < routes.length - 1) System.out.print(", ");
}
System.out.println();
System.out.println("Години роботи:");
for (Hour hour : getHours()) {
System.out.println(" " + hour);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment