Professional Documents
Culture Documents
0 Звіт
0 Звіт
Реєстраційний номер
Дата реєстрації
Ковтун Ілля Євгенович
студент ІІІ курсу
групи КН-31
денної форми навчання
залікова книжка №253048МБД
ЗВІТНА РОБОТА
з навчальної практики
на тему:
«Каталог залізничного транспорту»
Дата « » 2022 р.
Викл. Верещагін О.О.
Підпис
Ужгород 2022
ЗМІСТ
ВСТУП 3
1 ТЕОРЕТИЧНА ЧАСТИНА 4
1.1 Загальні відомості про «Каталог залізничного транспорту» 4
1.2 Опис предметної області та постановка задачі 4
1.3 Огляд аналогів 5
1.4 Обґрунтування вибору методу розв’язку задачі 6
1.5 Огляд засобів розробки 6
2 ПРАКТИЧНА ЧАСТИНА 8
2.1 Інформаційна структура даних 8
2.2 Функціональні частини програми 11
2.3 Тестування проєкту 14
2.4 Інтерфейс та керівництво користувача 18
ВИСНОВКИ 20
ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ 21
Додаток 1. Структурна схема проєкту 22
Додаток 2. Документація до програмного коду 23
Додаток 3. Лістинг 29
НП.253028МБД.22.000.ПЗ
Змн. Арк. № докум. Підпис Дата
Розроб. Ковтун І. Є. Літ. Арк. Аркушів
Перевір. Верещагін О.О. 2 32
Консольний додаток «Каталог
Реценз.
залізничного транспорту»
Н. контр. Сидор Р.М. ПГФК ДВНЗ «УжНУ»
Затверд. Лукавська А.В.
Сьогодні спосіб пересування за допомогою потягів впринципі як і
завжди доволі популярний оскільки це дововолі швидко і практично
пересуватись на далекі відстані навідміну від автомобіля. Але далеко не
завжди люди можуть дізнатись чи існують квитки які їм потрібні тому тут на
допомогу і приходить ця програма, задопомогою неї користувач може
дізнатись чи існує потрібний йому квиток, без виходу з дому, так, ця
програма не сильно виграє по конкуренції порівняно з іншими вебсайтами
оскільки вебсайти навіть завантажувати не треба, а цей додаток потрібно, але
ця програма має і свої переваги.
Метою розробки консольного додатку «Каталог залізничного
транспорту» було ознайомлення з доступними поїздками на залізничному
транспорті.
Завданням навчального проєкту було реалізувати авторизацію,
реєстрацію та пошук потрібних поїздок.
В процесі створення проекту його було поступово скориговано
оскільки на початку проект зовсім не містив елементи ООП і навіть 3
шарової архітектури, з часом це все було скориговано і проєкт почав
наслідувати вимогам.
1
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
1 ТЕОРЕТИЧНА ЧАСТИНА
1.1 Загальні відомості про «Каталог залізничного транспорту»
Каталог залізничного транспорту – вид комп’ютерних програм, або
онлайн-сервісів, сворених для перегляду та замовлення поїздок в різні
місцевосці.
Зазвичай ціллю таких додатків, сайтів це ознайомлення з наявними на
даний момент поїздками та замовлення цифрових квитків.
Проєкт було обрано писати на мові рограмування Java, оскільки ця
мова є мультиплатформенною і проєкти на цій мові максимально легко
перенести, наприклад, з системи Android на систему iOS.
В консольному додатку присутні авторизація, реєстрація та пошук
поїздок. Якщо користувач вирішить шукати поїздки що знаходяться в
Україні то йому виб’є весь список поїздок які не перетинають державний
кордон, також користувач може пошукати поїзки які йдуть за кордон, або зза
кордону з учасютю іншої країни.
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
Сворити меню завдяки якому можна буде реалізувати пошук потрібної
поїздки.
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
Рисунок 1.2 Застраівший інтерфейс
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
ліцензію. Сирцеві тексти Community-версії поширюються рамках ліцензії
Apache 2.0. Бінарні збірки підготовлені для Linux, Mac OS X і Windows.
Java — об’єктноорієнтована мова програмування, випущена 1995 року
компанією «Sun Microsystems» як основний компонент платформи Java. З
2009 року мовою займається компанія «Oracle», яка того року придбала «Sun
Microsystems». В офіційній реалізації Java-програми компілюються у байт-
код, який при виконанні інтерпретується віртуальною машиною для
конкретної платформи.
«Oracle» надає компілятор Java та віртуальну машину Java, які
задовольняють специфікації Java Community Process, під ліцензією GNU
General Public License.
Мова значно запозичила синтаксис із C і C++. Зокрема, взято за основу
об'єктну модель С++, проте її модифіковано. Усунуто можливість появи
деяких конфліктних ситуацій, що могли виникнути через помилки
програміста та полегшено сам процес розроблення об'єктно-орієнтованих
програм. Ряд дій, які в С/C++ повинні здійснювати програмісти, доручено
віртуальній машині. Передусім Java розроблялась як платформо-незалежна
мова, тому вона має менше низькорівневих можливостей для роботи з
апаратним забезпеченням, що в порівнянні, наприклад, з C++ зменшує
швидкість роботи програм. За необхідності таких дій Java дозволяє
викликати підпрограми, написані іншими мовами програмування.
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
2 ПРАКТИЧНА ЧАСТИНА
2.1 Інформаційна структура даних
Опис структури файлів
Весь проект зберігається в файлі «Katalog_0.1»
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
Вміст файлу «data»
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
Вміст файлу «bl»
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
2.2 Функціональні частини програми
Використані бібліотеки.
При написанні програми було використано бібліотеки:
Таблиця 2.1 Використані бібліотеки
Назва Призначення
import java.io.*; Взвємодія з файлами
import java.util.*; Взаємодія з LinkedList i Scanner
Таблиці змінних;
Таблиця 2.2 Змінні класа (Autorization)
Назва змінної Тип змінної Призначення змінної
name public String Публічна змінна, що зберігає ім’я
користувача
login public boolean Публічна змінна для перевірки чи
користувач зайшов в акаунт
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
Продовження таблиці 2.5
users String[] Список користувачів
fr FileReader Змінна яка читає файл
fw FileReader Змінна яка записує нові дані в файл
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
Внутрішня структура класа «ReadKatalog».
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
2.3 Тестування проєкту
Запуск проекта.
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
Користувач вводить авторизацію.
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
Успішна авторизація.
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
Пошук потрібного залізничного каталогу.
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
Якщо користувач намагатиметься знайти неіснуючі рейси.
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
Процес використання.
Для того щоб запустити програму потрібно вказати шлях до роміщення
файла в консолі або терміналі.
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
ВИСНОВКИ
Підчас написання цієї навчальної практики я закріпив старі знання в
області ООП та отримав нові, також я навчився працювати з новими типами
масивів та файлами на мові програмування Java.
На сучасній версії до можливостей користувача входять:
Авторизація та реєстрація.
Перегляд каталогу поїздок попереднім сортуванням, за бажанням
користувача.
Розвиток даного ПО не є доцільною, бо консольними додатками ніхто
не користується і є багано але і додатково є много різних онлайн аналогів які
є красивішими, досконалішими, ефективнішими. Також в майбутьому в
даний додаток можна буде добавити емулятор та завантажити ігри в
програму.
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. Java — вікіпедія. URL: https://uk.wikipedia.org/wiki/Java (дата
звернення: 21.11.2022).
2. Приклади реалізації операцій, які модифікують текстові файли. URL:
https://www.bestprog.net/uk/2020/07/09/java-examples-of-implementation-of-
operations-that-modify-text-files-classes-filereader-fileoutputstream-printstream-
ua/ (дата звернення: 26.11.2022).
3. Додаткові класи для роботи з рядками в Java. URL:
https://javarush.com/ua/quests/lectures/ua.questsyntaxpro.level09.lecture05 (дата
звернення: 26.11.2022).
4. Консольний ввід/вивід в Java. URL:
https://metanit.com/java/tutorial/2.9.php (дата звернення: 26.11.2022).
5. Different ways of Reading a text file in Java. URL:
https://www.geeksforgeeks.org/different-ways-reading-text-file-java/ (дата
звернення: 26.11.2022).
6. Replace new line/return with space using regex. URL:
https://stackoverflow.com/questions/11048973/replace-new-line-return-with-
space-using-regex (дата звернення: 26.11.2022).
7. How to Convert Int to String in Java?. URL:
https://www.edureka.co/blog/convert-int-to-string-in-java/ (дата звернення:
26.11.2022).
8. Робота зі сканером в Java (введення і виведення данних). URL:
https://vertex-academy.com/tutorials/uk/robota-zi-skanerom-v-java-vvedennya-
vivedennya-dannix/ (дата звернення: 26.11.2022).
Арк.
НП.253028МБД.22.000.ПЗ
21
Змн. Арк. № докум. Підпис Дата
Додаток 1. Структурна схема проєкту
НП.253028МБД.22.000.Е1
Змн. Арк. № докум. Підпис Дата
Розроб. Ковтун І. Є. Літ. Арк. Аркушів
Перевір. Верещагін О.О. Консольний додаток «Каталог 22 32
залізничного транспорту»
Реценз.
Додаток 1. Схема даних..
Н. Контр. Сидор Р.М. ПГФК ДВНЗ «УжНУ»
Затверд. Лукавська А.В.
Додаток 2. Документація до програмного коду
НП. 253028МБД.22.000.ПЗ
Змн. Арк. № докум. Підпис Дата
Розроб. Ковтун І. Є. Літ. Арк. Аркушів
Перевір. Верещагін О.О. Консольний додаток «Каталог 23 32
залізничного транспорту»
Реценз.
Додаток 2. Документація до
Н. контр. Сидор Р.М.
програмного коду. ПГФК ДВНЗ «УжНУ»
Затверд. Лукваська А.В.
Арк.
НП. 253028МБД.22.000.ПЗ
28
Змн. Арк. № докум. Підпис Дата
Арк.
НП. 253028МБД.22.000.ПЗ
28
Змн. Арк. № докум. Підпис Дата
Арк.
НП. 253028МБД.22.000.ПЗ
28
Змн. Арк. № докум. Підпис Дата
Арк.
НП. 253028МБД.22.000.ПЗ
28
Змн. Арк. № докум. Підпис Дата
Арк.
НП. 253028МБД.22.000.ПЗ
28
Змн. Арк. № докум. Підпис Дата
Додаток 3. Лістинг
Main.java
package com.illja123.railwaycatalog; System.out.println(auto.name);
import
com.illja123.railwaycatalog.ui.Menu; System.out.println("1.Авторизація");
/** System.out.println("2.Реєстрація");
* Базовий клас з якого запускається
програма
System.out.println("3.Каталог
*/
залізничного транспорту");
public class Main {
public static void main(String[]
args) { System.out.println("4.Вихід");
Menu menu = new Menu(); String choise =
menu.main(); in.nextLine();
} switch (choise) {
} case "1":
Menu.java avtorization();
package com.illja123.railwaycatalog.ui; break;
case "2":
import registration();
com.illja123.railwaycatalog.bl.*; break;
import case "3":
com.illja123.railwaycatalog.da.*; katalog();
break;
import java.util.Scanner; case "4":
НП. 253028МБД.22.000.ПЗ
Змн. Арк. № докум. Підпис Дата
Розроб. Ковтун І. Є. Літ. Арк. Аркушів
Перевір. Верещагін О.О. Консольний додаток «Каталог 29 32
Реценз. залізничного транспорту»
Н. Контр. Александра Н.В. Додаток 3. Лістинг ПГФК ДВНЗ «УжНУ»
Затверд. Лукавська А.В.
НП. 253028МБД.22.000.ПЗ
Змн. Арк. № докум. Підпис Дата
Розроб. Ковтун І. Є. Літ. Арк. Аркушів
Перевір. Верещагін О.О. Консольний додаток «Каталог 29 32
Реценз. залізничного транспорту»
Н. Контр. Александра Н.В. Додаток 3. Лістинг ПГФК ДВНЗ «УжНУ»
Затверд. Лукавська А.В.
in.nextLine(); auto.login = false;
switch (choise) { reg.login = false;
case "1": System.out.println("Для почотку
avtorization(); введіть ім'я:");
break; String name = in.nextLine();
case "2": System.out.println("Тепер
registration(); введіть пароль:");
break; String password =
case "3": in.nextLine();
katalog(); if (name.equals("") ||
break; password.equals("") || name.equals(" ")
case "4": || password.equals(" ")) {
System.out.println("Ці
System.out.println("Бувайте!" + "\n" + пункти не можуть бути пустими!!!");
"Сподіваємось вам сподобалась наша } else {
програма :)"); auto.avtorization(name,
break; password);
default: if (!auto.login)
System.out.println("Такого користувача
не існує");
System.out.println("Такого пункту }
немає"); main();
main(); }
}
} else { /**
* Меню реєстрації
System.out.println("1.Авторизація"); */
private void registration() {
auto.login = false;
System.out.println("2.Реєстрація");
reg.login = false;
System.out.println("Вітаю! Як
System.out.println("3.Вихід"); мені називати вас?");
String choise = String name = in.nextLine();
in.nextLine(); System.out.println("Тепер
switch (choise) { придумайте собі пароль:");
case "1": String password =
avtorization(); in.nextLine();
break; if (name.equals("") ||
case "2": password.equals("") || name.equals(" ")
registration(); || password.equals(" ")) {
break; System.out.println("Ці
case "3": пункти не можуть бути пустими!!!");
} else {
System.out.println("Бувайте!" + "\n" + reg.registration(name,
"Сподіваємось вам сподобалась наша password);
програма :)"); if (!reg.login)
break; System.out.println("Такий коористувач
default: існує");
}
main();
System.out.println("Такого пункту }
немає");
main(); /**
} * Меню каталогу
} */
} private void katalog() {
System.out.println("Який список
/** ви хочете почитати?");
* Меню авторизації System.out.println("1.Рейси з
*/ перетинанням кордону");
private void avtorization() {
Арк.
НП. 253028МБД.22.000.ПЗ
32
Змн. Арк. № докум. Підпис Дата
System.out.println("2.Рейси в }
Україні"); }
System.out.println("3.Вихід"); ReadKatalog.java
String choise = in.nextLine(); package com.illja123.railwaycatalog.da;
switch (choise) {
case "1": import java.io.File;
import java.io.FileReader;
System.out.println("Введіть назву import java.io.IOException;
країни:"); import java.util.LinkedList;
String country =
in.nextLine(); /**
read.flights(country); * Читання каталогу з файлу
if (read.num > 0) { */
public class ReadKatalog {
File catalog = new File(".\\data\\
System.out.println("Список поїздок в catalog.txt");
країні " + country); public String[] flightList;
for (int i = 0; i < public int num = 0;
read.countrys.size(); i++) public LinkedList<String> countrys
= new LinkedList<>();
System.out.println(read.countrys.get(i)
); /**
} else { * Генерація списку з файлу
*
* @param country
System.out.println("Поїздаок з учасю
*/
такої країни немає");
public void flights(String country)
}
{
katalog();
countrys.clear();
break;
num = 0;
case "2":
try (FileReader fr = new
FileReader(catalog)) {
read.flights("Україна"); char[] chars = new
if (read.num > 0) { char[(int) catalog.length()];
fr.read(chars);
System.out.println("Список поїздок в String string = new
країні Україна"); String(chars);
for (int i = 0; i < flightList =
read.countrys.size(); i++) string.split("\n");
} catch (IOException e) {
e.printStackTrace();
System.out.println(read.countrys.get(i) }
); for (String flight :
} else { flightList) {
if (flight.split(" ")
System.out.println("Поїздаок з учасю [0].replace("\r", "").equals(country))
такої країни немає"); {
} countrys.add(num + 1 +
katalog(); ".Країна: " + country + "\n" + "
break; Звідки: " + flight.split(" ")[1] + "\n"
case "3": + " Куди: " + flight.split(" ")[2]);
main(); num++;
break; }
default: }
}
System.out.println("Такого варіанту не }
існує"); ReadWriteUsers.java
katalog(); package com.illja123.railwaycatalog.da;
break;
} import java.io.File;
Арк.
НП. 253028МБД.22.000.ПЗ
32
Змн. Арк. № докум. Підпис Дата
import java.io.FileReader; public boolean login = false;
import java.io.FileWriter; ReadWriteUsers readUsers = new
import java.io.IOException; ReadWriteUsers();
Арк.
НП. 253028МБД.22.000.ПЗ
32
Змн. Арк. № докум. Підпис Дата