Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра ЕОМ
/
Курсова робота
з дисципліни «Програмування, частина 2 (Об'єктно-орієнтоване програмування)»
на тему:
«Базові принципи об’єктно-орієнтованого програмування»
Індивідуальне завдання: «Залізничний вокзал»
Анотація
Метою курсової роботи є створення спрощеної моделі функціонування залізничного вокзалу. Написання програмного забезпечення було виконано мовою програмування C++ із використанням об’єктно-орієнтованого підходу для формування програми у вигляді набору сутностей та об’єктів, що взаємодіють. Програма включає у собі можливість роботи із текстовими файлами, а саме: запис та зчитування даних, пошук необхідної інформації та її видалення, а також сортування за певною характеристикою для зручнішого використання та керування інформацією. Програмне забезпечення передбачає кілька рівнів доступу, що дозволяє встановити роль користувача та надати йому лише ті можливості керування інформацією, що необхідні конкретно даній особі. Інтерфейс програми написано українською мовою.
Зміст
Завдання на курсову роботу ……………………………………………………… 3
Вступ …………………………………………………………………………………. 4
1. Визначення поняття ООП, його основні принципи та обґрунтування вибору його технологій …………………………………………………………………....... 5
1.1 ООП як основа сучасного програмування …………………………............... 5
1.2 Визначення ООП ………………………………………………………………. 6
1.3 Фундаментальні поняття ООП ……………………………………………..… 7
1.4 Переваги вибраного методу ………………………………………………...... 8
2. Аналіз та розробка алгоритму згідно індивідуального завдання …………… 9
2.1 Загальний опис поставленої задачі …………………………………………… 9
2.2 Пасажир ………………………………………………………………………… 9
2.3 Персонал ………………………………………………………………….......... 10
2.4 Потяги ………………………………………………………………………….. 11
2.5 Визначення основних задач покладених в основу програми ……………… 12
2.6 Алгоритм виконання роботи програми ………………………………............ 14
3. Реалізація алгоритму у програмному коді ……………………………………. 15
4. Тестування програми ……………………………………………………….......... 21
5. Аналіз продуктивності роботи програми ………………………………………. 23
Висновок ……………………………………………………………………………… 25
Література ……………………………………………………………………….......... 26
Додаток А ……………………………………………………………………….......... 30
Завдання на курсову роботу
Згідно із отриманим індивідуальним завданням метою курсової роботи є реалізація мовою C++ із застосуванням об’єктно-орієнтованого підходу предметної галузі “Залізничний вокзал”. Програма повинна підтримувати можливості роботи з файлами : запис, зчитування, пошук, видалення та оновлення даних, а також їх сортування за певним критерієм. Для типу користувачів “Клієнт” передбачена система пунктів для кращої орієнтації у програмі. Для користувачів, що мають права адміністратора повинні бути реалізовані методи, що дозволяють керувати даними.
Вступ
Об’єктно-орієнтоване програмування (ООП) — одна з парадигм програмування, яка розглядає програму як множину об'єктів, що взаємодіють між собою. В основі ООП покладено три основні положення: інкапсуляцію, успадкування та поліморфізм. Однією з переваг ООП є краща модульність програмного забезпечення, що дозволяє групам розробників працювати незалежно один від одного, розробляючи окремі функціональні компоненти програми . Попри те, що парадигма ООП з'явилась в 1960-тих роках, вона не мала широкого застосування до 1990-тих, коли розвиток комп'ютерів та комп'ютерних мереж дозволив писати надзвичайно об'ємне і складне програмне забезпечення, що змусило переглянути підходи до написання програм та покращити їх модульність. Однією з таких мов програмування стала мова С++. У 1990-х р. вона стала однією із найпопулярніших мов програмування загального призначення. Розробником цієї мови став професор Техаського університету Б’єрн Страуструп. На початку свого існування ця мова дістала назву «Сі з класами». Пізніше у 1983 році Страуструп перейменував мову на C++. У 1998 році було ратифіковано міжнародний стандарт мови С++: ISO/IEC 14882 «Standard for the C++ Programming Language». Сьогодні цю мову використовують для розробки програмного забезпечення, написання драйверів, системного програмування, потужних серверних та клієнтських програм. Мова C++ мала значний вплив на інші мови програмування такі як Java, C# та ін.
Метою виконання курсової роботи є засвоєння основних методів та алгоритмів об’єктно-орієнтованого програмування мови С++ та їх практичне застосування у описі сутностей конкретної сфери.
1. Визначення поняття ООП, його основні принципи та обгрунтування його технологій.
1.1 ООП як основа сучасного програмування
Раніше програми розроблялися із застосуванням процедурного підходу, що полягав у поділі проекту на окремі більш дрібні складові – функції. Із розростанням проектів та ускладненням завдань з’явилась необхідність у більш раціональному підході у написанні програмного забезпечення та ефективному поділі поставленого завдання таким чином, щоб не виникало проблем при розробці окремих складових проекту. Для подолання цієї проблеми було розроблено структурне програмування. Структурне програмування, на відміну від свого попередника — стихійного програмування, має певні правила та засоби, які суттєво вдосконалили процес написання програм. Однак через обмеженість структурного програмування дуже важко писати програми ще більшої складності, яких вимагає сучасний ринок праці. Принципово новим підходом стало впровадження об’єктно-орієнтованого програмування. Першою мовою програмування, в якій були запропоновані базові поняття, які згодом об’єдналися у парадигму, була Симула, але термін “об'єктна орієнтованість” не можна було застосувати в контексті використання цієї мови. У 1967 році були запропоновані революційні ідеї: об'єкти, класи, віртуальні методи і ін., проте це не було сприйнято сучасниками як щось революційне та здатне змінити підхід до розробки програмного забезпечення. Погляд на програмування «під іншим кутом» (відмінним від процедурного) запропонували Алан Кей і Ден Інгаллс в мові Smalltalk. Тут поняття класу стало основотвірною ідеєю для всіх інших конструкцій мови (тобто клас в Смолток є примітивом, за допомогою якого описані більш складні конструкції). Саме ця мова стала першою широко поширеною об'єктно-орієнтованою мовою програмування. Станом на сьогодні кількість прикладних мов програмування (список мов), що реалізують об'єктно-орієнтовану парадигму, є найбільшою порівняно з іншими парадигмами.
Отже, впровадження ООП стало вагомим внеском у розвитку сучасного програмування раціональним шляхом мінімізації коду та покращенням ефективності.
1.2 Визначення ООП
Об'єктно-орієнтоване програмування (ООП) - методологія програмування, заснована на представленні програми у вигляді сукупності об'єктів, кожен з яких є екземпляром певного класу, а класи можуть утворюють ієрархію спадкування. Лука Карделла і Мартін Абаді побудували теоретичне обгрунтування ООП і класифікацію на основі цього обгрунтування. Вони відзначають, що виділені ними поняття і категорії разом зустрічаються далеко не у всіх об’єктно-орієнтованих мовах, більшість мов підтримують лише підмножини теорії, а часом і своєрідні відхилення від неї.
Ключові поняття:
квантифікація змінних типу (універсальна, екзистенційна, обмежена);
підтипізація (англ. subtyping - відносини «супертип-підтип»);
включення (англ. subsumption) - окремий випадок підтипізації;
об'єкт;
об'єктний тип (фактично, спеціальна форма «запису», в число полів якої входять функції першого класу);
клас.
Клас – це сутність, що описує абстрактну поведінку. Об'єктні типи будуються на основі класу за допомогою додавання різних приватних полів і методів. Об'єкт (тобто значення об'єктного типу, традиційно називається «екземпляром класу») породжується конструктором на основі початкових параметрів.
1.3 Фундаментальні поняття ООП
До фундаментальних понять (принципів), використаних у переважній більшості визначень об'єктно-орієнтованого програмування належать:
Абстракція даних – виділення лише значущої інформації і виключення її з розгляду незначною. В ООП розглядають лише абстракцію даних (нерідко називаючи її просто «абстракцією»), маючи на увазі набір значущих характеристик об'єкта, доступних решті частини програми.
Інкапсуляція – властивість системи, що дозволяє об'єднати дані і методи, що працюють з ними, в класі. Одні мови (наприклад, С ++, Java або Ruby) ототожнюють інкапсуляцію з приховуванням, але інші (Smalltalk, Eiffel, OCaml) розрізняють ці поняття.
Спадкування – властивість, що дозволяє описати новий клас на основі вже існуючого, що передбачає часткове або абсолютне отримання властивостей чи методів батьківського класу. Клас, від якого відбувається спадкування, називається базовим, батьківським або суперкласом. Новий клас – нащадком, спадкоємцем, дочірнім або похідним класом.
Поліморфізм підтипів – властивість, що дозволяє використовувати об'єкти з однаковим інтерфейсом без інформації про тип і внутрішню структуру об'єкта. Інший вид поліморфізму – параметричний.
Клас – абстрактні характеристики деякої сутності, включаючи характеристики самої сутності (її атрибути або властивості) та дії, які вона здатна виконувати (її поведінки, методи або можливості). Класи вносять модульність та структурованість в об'єктно-орієнтовану програму. Як правило, клас має бути зрозумілим для осіб, що не мають відношення до програмування, проте знаються на предметній області, що, у свою чергу, значить, що клас повинен мати значення в контексті. Також, код реалізації класу має бути досить самодостатнім. Властивості та методи класу, разом називаються членами даного класу.
Об’єкт – сутність в адресному просторі обчислювальної системи, що з'являється при створенні екземпляра класу (наприклад, після запуску результатів компіляції і зв'язування вихідного коду на виконання).
1.4 Переваги обраного методу.
Оптимальність та раціональність вибору того чи іншого методу є однією із фундаментальних основ при розробленні програмного забезпечення для розв’язання конкретної задачі. Від вибору підходу при створенні програми залежить час виконання програми, ресурсозатратність і т.д. Тому грамотне та доцільне рішення може суттєво спростити процес розроблення та вдосконалення програмного забезпечення в майбутньому. Чим більшою стає програма, тим гостріше постає проблема про важливість чітко окресленого поділу на компоненти, абстрагуючись від незначних деталей і в той же час проектуючи складові так, щоб вони могли описати сутності, на базі яких буде передбачено створення об’єктів та описано правила їх взаємодії. Однією із основних переваг використання саме об’єктно-орієнтованого підходу є можливість створювати розширювані та модульні системи, що й дає перевагу над традиційними методами програмування. Розширюваність передбачає, що існуючу систему можна доповнити новими компонентами, причому без внесення до неї будь-яких змін. Компоненти можуть бути додані на етапі виконання.
2. Аналіз та розробка алгоритму згідно індивідуального завдання
2.1 Загальний опис поставленого завдання
Запропонованим завданням для моєї курсової роботи є створення сутності «Залізничний вокзал». Перш за все, дану сутність слід розглядати як взаємодію кількох важливих його складових, зокрема потягів, пасажирів та працівників самого залізничного вокзалу. Усі ці частини є невід’ємними для мінімального опису його роботи. Розглянемо кожен компонент залізничного вокзалу зокрема.
2.2 Пасажири
Поняття «пасажир» має під собою декілька визначень, а саме:
особа, яка користується транспортним засобом, але не причетна до керування ним;
особа, яка користується транспортним засобом і знаходиться в ньому, але не причетна до керування ним;
особа, яка здійснює поїздку у дорожньому транспортному засобі (за винятком водія та іншого персоналу по обслуговуванню пасажирів);
особа, за винятком членів екіпажу, яка перевозиться на повітряному судні відповідно до договору повітряного перевезення.
Я користуватимусь першим визначенням, тобто пасажир – це особа, яка користується транспортним засобом, але не причетна до керування ним.
Пасажир має широкий діапазон можливостей, які характеризують його стан, але для зручності використання я використовуватиму спрощену модель пасажира, яка в себе включає: можливість купівлі та бронювання квитка, перегляд розкладу та пошук потрібного поїзда, перегляд списку пільг на проїзд та список цін на додаткові послуги у поїзді. Я вдався до абстрагування моделі залізничного вокзалу, описавши фундаментальні та необхідні для його функціонування можливості.
2.3 Персонал
Персонал залізничного вокзалу несе відповідальність за правильне функціонування усіх його частин. За допомогою персоналу відбувається взаємодія між пасажирами та самим рухомим складом потягів. Термін «персонал» має багато визначень та поділів, зокрема такі:
Адміністративно-технічний — керівники суб'єктів господарювання, головний енергетик (механік), начальники відділів, дільниць, інженери та техніки, майстри та інші особи, на яких покладено адміністративно-технічні функцій;
Оперативний — персонал, який перебуває на чергуванні в зміні і допущений до оперативного керування і оперативних перемикань: диспетчери, чергові інженери та техніки, начальники змін, чергові на щитах керування, члени оперативно-виїзних бригад, які обслуговують теплові установки та мережі;
Оперативно-ремонтний — ремонтний персонал, спеціально навчений і підготований для оперативного обслуговування в затвердженому обсязі закріпленого за ним устатковання;
Ремонтний — персонал, навчений і допущений до ремонту теплового устатковання і мереж, засобів вимірювальної техніки і автоматики теплового устатковання;
Електротехнічний — спеціально підготовлений адміністративно-технічний, оперативний, оперативно-ремонтний, ремонтний персонал, який здійснює монтаж, наладку, технічне обслуговування, ремонт і керування режимом роботи електроустановок.
Для опису такої великої кількості типів працівників та обслуговуючого персоналу потрібно програмно врахувати чималу кількість властивостей, методів та функцій. Тому я демонструватиму можливості адміністрації вокзалу, оскільки, на мою думку, саме персонал адміністрації вокзалу виконує більшість ключові завдання управління вокзалом. Представники адміністрації можуть додавати нову інформацію про поїзди чи працівників, виплачувати заробітну плату, розраховуватися з постачальниками за паливо та виконувати інші важливі з точки зору їх функціональності у залізничному вокзалі функції.
2.4 Потяги
Програмно сутність «потяг» повинна бути максимально наближено передати її роль у реальному світі.
Сьогодні відомо безліч типів поїздів, а саме:
Поїзд пасажирський — поїзд для перевезення пасажирів, багажу й пошти, сформований з пасажирських вагонів. За видами сполучення пасажирські поїзди розподіляються на далекі, що рухаються на відстань більше 700 км, місцеві до 700 км та приміські до 150 км.
вантажно-пасажирський — формується на малодіяльних ділянках із вантажних та пасажирських вагонів, які призначені для перевезення вантажів та пасажирів.
вантажний підвищеної ваги — вантажний поїзд вагою більше 6 тисяч тонн з одним або декількома діючими локомотивами в голові рухомого складу, в голові та хвості, в голові та останній третині рухомого складу.
поштово-багажний — формується з пасажирських і вантажних вагонів, які призначені для перевезення пошти, багажу й вантажобагажу, а також окремих пасажирських вагонів для перевезення пасажирів, що причіплюються тільки на дільницях, де не обертаються пасажирські поїзди.
Електропоїзд — моторвагонний рухомий склад, який переміщують бортові електродвигуни, що отримують енергію із контактної мережі або від акумуляторних батарей. Потяги формуються із моторних і причіпних вагонів. Головний і хвостовий вагони електропоїзда мають кабіни керування.
Рейковий автобус, рідше скорочено рельсобус — синонім або найменування автомотрис та дизель-поїздів малої складової (один-чотири вагони).
Інтерсіті — денний міжрегіональний швидкісний поїзд, тобто пасажирський поїзд, який рухається з середньою швидкістю 80 км/год та максимальною швидкістю 160 км/год у денний час, вагони з місцями для сидіння 1-го та 2-го класу з можливим включенням вагонів 3-го класу.
TGV — пасажирські потяги з електричним приводом, найшвидші потяги у світі.
Поїзд людський — вантажний поїзд, у якому знаходиться 10 і більше вагонів, зайнятих людьми.
Поїзд пасажирський довгоскладний — пасажирський поїзд, довжина якого перевищує довжину, встановлену схемою формування даного поїзда.
Поїзд пасажирський довгоскладний — пасажирський поїзд, довжина якого перевищує довжину, встановлену схемою формування даного поїзда.
Оскільки існує ще багато видів поїздів, для опису їх функцій потрібно програмно передбачити незліченну кількість властивостей та методів. У своїй роботі я використав лише деякі з них. А саме: пасажирський, вантажний, електричний, рейковий автобус, TGV та intercity. Я вважаю, що обраних поїздів буде достатньо, щоб описати всі можливості та їхні функції.
2.5 Визначення основних завдань покладених в основу програми
Дане програмне забезпечення створене для вирішення певного роду завдань, які тісно пов’язані з такими об’єктами залізничного вокзалу як пасажири, персонал та потяги. Основною задачею, яку повинна виконувати ця програма є операції над розкладом руху потягів, які докорінно можуть його змінити, забезпечення співробітникам швидкого доступу до інформації про їхню заробітну плату, надання послуг пасажирам, зокрема, можливість переглядати розклад руху потягів, шукати відповідний номер потягу у базі даних та купувати чи бронювати квиток на потрібний їм потяг. У підсумку я отримав набір функцій, які мені потрібно реалізувати для виконання поставленого завдання.
Запис і збереження даних у файлах;
Зчитування даних з файлу;
Додавання або видалення даних;
Сортування даних для виведення їх екран;
Пошук потрібних даних по структурованих текстових файлах.
Проаналізувавши мою умову мого завдання опису сутності «Залізничний вокзал», можна виокремити основні об’єкти, відносно яких можна сформувати властивості, які однозначно їх відрізняють:
Потяги;
Персонал;
Квиток;
Оскільки усі потяги мають відмінності між собою, то я виокремив такі, за якими можна однозначно охарактеризувати кожен:
Тип поїзда;
Номер поїзда;
Назва поїзда;
Час прибуття;
Час відправлення;
Номер платформи;
Кількість вільних місць;
Тип двигуна;
Потужність двигуна;
Максимальна та мінімальна швидкість;
Споживання палива на 10 кілометрів;
Ціна за паливо , яку потрібно заплатити.
Працівники також можуть бути охарактеризовані певною кількістю ознак:
Тип професії;
Ім’я працівника;
Прізвище працівника;
Вік;
Стаж;
Дата народження;
Премія за додаткові робочі дні;
Доплата за стаж;
Заробітна плата.
Для квитка також можна виділити набір ознак:
Тип поїзда;
Назва поїзда;
Номер вагона;
Місце;
2.6 Алгоритм виконання роботи програми
Оскільки, я виокремив чотири основні об’єкти, з якими буде працювати моя програма, то необхідно сформувати перелік операцій, які будуть доступні для виконання певним типом користувачів над цими об’єктами.
Тип користувача – Administrator – має наcтупний список можливостей:
Додавання нового поїзда до бази даних;
Перегляд списку співробітників;
Додавання нового співробітника;
Пошук інформації про співробітника;
Друкування квитанції для оплати за паливо;
Тип користувача – User – власне, це тип користувача для якого і розроблялася дана програма. Дані користувачі матимуть наступний список можливостей:
Перегляд розкладу;
Пошук потрібного поїзда;
Придбання чи бронювання квитка з можливістю зниження його вартості для пільгових категорій громадян;
Перегляд цін на додаткові послуги;
Перегляд цін на пільговий проїзд;
UML – схема роботи усіх вище вказаних процесів є у додатку В.
3. Реалізація алгоритму у програмному коді
Після складання алгоритму роботи моєї програми, я розпочав реалізовувати її програмним кодом. У своїй програмі я використовую 23 класи, а саме: TrainProcessing (клас файлових операцій для потягів), Train (клас де прописано ознаки поїзда), WorkerProcessing (клас файлових операцій для працівників), Worker (клас де прописано ознаки працівників), TicketProcessing (клас файлових операцій для придбання квитка), Ticket (клас де прописано ознаки квитка), DistanceProcessing (клас файлових операцій для розрахунку ціни за паливо), Distance (клас де прописано ознаки відстаней для різних маршутів), AdditionalServices (клас файлових операцій для цін на додаткові послуги), Benefits (клас файлових операцій для даних про пільги), Schedule (проміжний клас, за допомогою якого клієнт здійснює купівлю квитка). В класах: CargoTrain, ElectricityTrain, IntercityTrain, RailbusTrain, TGV, PassangerTrain я описав характеристики кожного типу поїзда зокрема. У класах Keeper, Maid, Driver, Conductor я описав характеристики кожного працівника зокрема. Класи User і Administrator слугують для здійснення входу з різними правами доступу до інформації.
Користувач – адміністратор, об’єкт – потяги.
Виконання запису нових даних у файл відбувається таким чином: відкривається файл для запису, поелементно записуються дані про поїзд, файл закривається, а на екран виводиться повідомлення, що дані додано успішно.
/
Рис.1 Виконання операції додавання нового потягу до бази даних
Виконання запису нових даних у файл відбувається наступним чином: відкривається файл для запису, поелементно записуються дані про працівника, файл закривається, а на екран виводиться повідомлення, що дані додано успішно.
/
Рис.2 Виконання запису у файл даних про нового працівника
Виконання зчитування з файлу списку працівників відбувається так: файл відкривається для зчитування, проводиться поелементне зчитування, після чого файл закривається, а дані які зчитані з файлу виводяться на екран.
Рис.3 Виконання зчитування з файлу даних про працівників
Пошук вибраного вами працівника, для здійснення виплати йому заробітної плати, здійснюється за допомогою зчитування з клавіатури потрібного імені співробітника. Потім відкривається файл для зчитування зі списком працівників і поелементно зчитуючи з файлу усі дані, ми порівнюємо введене ім’я, з тим, що було зчитано з файлу. При виявленні збігу, перед тим, як інформація про працівника буде виведена на екран, потрібно ввести кількість дадаткових робочих днів які відпрацював даний робітник, для виписання йому премії.
/
/
Рис.4,5 Виконання пошуку інформації про працівника для виплати зарплати
Виконання друкування квитанції про оплату пального відбувається в декілька етапів. На першому етапі здійснюється зчитування з клавіатури потрібного номера чи назви поїзда, на який потрібно видрукувати квитанцію. Далі відкривається файл для зчитування з інформацією про відстані і, поелементно зчитуючи з файлу усі дані, ми співставляємо нашу назву чи номер поїзда, з тими, що були зчитані з файлу. При виявленні збігу, потрібно ввести середню швидкість з якою рухатиметься даний поїзд на цьому маршуті. Після введення середньої швидкості програма виконає необхідні обчислення, після чого програма відкриє новий файл куди запише необхідні дані для формування квитанції про оплату.
/
Рис.6 Результат виконання друку квитанції
Виконання зчитування з файлу списку потягів відбувається так: файл відкривається для зчитування, проводиться поелементне зчитування, після чого файл закривається.
/
Рис.7 Результат виконання операції, яка виводить розкад на екран
Далі зчитаний список поїздів сортується за типом поїзда, після чого він виводиться на екран.
Пошук вибраного вами поїзда, для знаходження інформації про нього, здійснюється за допомогою зчитування з клавіатури потрібного номера чи назви поїзда. Далі відкривається файл для зчитування зі списком поїздів і поелементно зчитуючи з файлу усі дані, ми порівнюємо наш номер чи назву поїзда, з тими, що були зчитані з файлу. При виявленні збігу інформація про поїзд виводиться на еран. Якщо ж пасажир, з цікавості, бажає переглянути інформацію про технічні характеристики поїзда, він може їх переглянути нажавши відповідну клавішу на клавіатурі. Після цього на екран будуть виведені характеристики даного поїзда.
Рис.8 Результат виконання операції, яка виводить дані про поїзд на екран
Рис.9 Результат виконання операції, яка виводить технічні дані про поїзд на екран
Купівля квитка відбувається в декілька етапів. На першому етапі відбувається пошук пошук поїзда та інформації про нього. Це здійснюється за допомогою зчитування з клавіатури потрібного номера чи назви поїзда. Потім відкривається файл для зчитування зі списком поїздів і поелементно зчитуючи з файлу усі дані, ми порівнюємо наш номер чи назву поїзда, з тими, що було зчитано з файлу. При вияленні збігу інформація про даний поїзд записується у файл для створення квитка.
На другому етапі відбувається пошук вільних місць. Відкривається файл для зчитування зі списком вільних місць у поїзді і поелементно зчитуючи з файлу усі дані, ми порівнюємо ім’я нашого поїзда з тими, що були зчитані з файлу. При виявлені збігу, інформація про вільні місця виводиться на екран.
На третьому етапі відбувається вибір місця. Пасажир вводить номер місця яке хоче придбати, після чого цей номер порівнюється з місцями які доступні, якщо ж виявлено збіг інформація про це місце видаляється з довідника, а сам довідник закривається.
Рис.10 Результат виконання операцій за допомогою яких відбувається вибір місця
На четвертому етапі, якщо пасажир має якусь пільгову категорію він може придбати квиток, натиснувши відповідну клавішу і, вибравши пільгову категорію. Якщо ж пасажир немає ніякої пільгової категорії він обирає звичайну форму купівлі квитка.
На п’ятому етапі, пасажир має можливість одразу придбати квиток або ж забронювати його. Різниця між цими можливостями полягає в тому, що якщо пасажир хоче забронювати обране місце йому не доведеться оплачувати одразу ціну за квиток, але у цьому випадку ціна квитка зросте на 10 грн.
Рис.11 Операції з вибору пасажиром пільгової категорії (якщо вона є) та методу купівлі чи бронювання квитка
Після вибору купівлі чи бронювання квитка, інформація про місце, номер вагона і ціну записується у файл для завершення формування квитка. Після чого цей файл закривається, а на екран виводиться повідомлення, що квиток надруковано.
/
Рис.12 Результат виконання друку квитка
Виконання зчитування з файлу інформації про ціни на додаткові послуги відбувається наступним чином: файл відкривається для зчитування, проводиться поелементне зчитування, після чого файл закривається, а дані, що було зчитано з файлу виводяться на екран.
Рис.13 Результат виконання операції ,яка виводить дані про ціни на додаткові послуги на екран
Виконання зчитування з файлу інформації про пільговий проїзд відбувається таким чином: файл відкривається для зчитування, проводиться поелементне зчитування, після чого файл закривається, а дані які зчитані з файлу виводяться на екран.
Рис.14,15 Можливості користувача та адміністратора
Кодова частина виконання всіх цих операцій наведена у додатку А.
4. Тестування програми
При вході у систему потрібно визначитися з режимом доступу: адміністратор чи пасажир.
/
Рис.15 Виконання меню для входу в систему
Спочатку оберемо режим доступу адміністратор.
/
Рис.16 Виконання входу в систему від імені адміністратора
Після цього ми отримаємо перелік операцій, які можна здійснювати в даному режимі.
/
Рис.17 Виконання операцій які може здійснювати адміністратор
Для виконання операції друкування квитанції потрібно ввести пароль вищого доступу.
/
Рис.18 Виконання входу в систему з паролем вищого доступу
Якщо ж ми оберемо режим доступу типу «Пасажир» ми отримаємо набір операцій, які можна здійснювати в такому режимі.
/
Рис.19 Перелік операцій які може здійснювати пасажир
Зробивши потрібні вам дії, результати яких описані в попередньому розділі, ви можете повернутись до попереднього меню чи вийти з режиму користувача під яким ви зараз працюєте.
Рис.20 Операцій для виходу або продовження роботи в даному режимі
Також передбачена можливість входу від імені іншого користувача чи завершити роботу з програмою.
Код, завдяки якому виконуються дані операції знаходиться у додатку А.
5. Аналіз продуктивності (часу роботи) реалізованої програми згідно індивідуального завдання.
Оскільки, моя програма реалізує процеси завдяки яким функціонує залізничний вокзал, то зрозуміло, що великої кількості інформації в обігу програми не буде (максимальна кількість поїздів, яку може прийняти і обслужити вокзал, а також його персоналу є обмежена). Значної різниці в часі виконання програми спостерігатися не буде.
/
Рис.21 Тестування часу виконання програми
Використавши функцію clock(), я виконав тестування часу роботи скрипта. В результаті досліджень було виявлено, що час роботи програми при збільшенні обсягу виконання операцій відрізняється незначно.
Висновок
У процесі виконання поставленого завдання, а саме реалізація такої предметної галузі як залізничний вокзал, я закріпив свої знання з вивченого за один семестр курсу об’єктно-орієнтованого програмування. Закріпив на практиці знання із створення класів, утворення одинарного наслідування та інкапсуляцію даних.
З переваг моєї програми можна виділити те , що вона є безкоштовною, а також має високу швидкодію, наявність простого у використанні інтерфейсу, що спрощує керування нею. До переваг можна віднести й те, що люди можуть купувати квитки та дізнаватися всю потрібну їм інформацію не підходячи до каси.
З точки зору програмування однією із позитивних сторін моєї програми є те, що я використовував масиви об’єктів – так звані вектори, адже у сучасному світі ООП саме такий метод опрацювання об’єктів є пріоритетним.
Недоліком моєї програми можна вважати те, що вона не охоплює усіх аспектів керування залізничним вокзалом.
В результаті виконання даної курсової роботи можна зробити висновок, що станом на сьогодні залізничний вокзал є потужним механізмом, який обслуговує велику кількість пасажирів. Правильне його функціонування є запорукою успішного пасажироперевезення великої кількості людей. Зваживши всі плюси та мінуси можна сказати, що моя програма спрямована для підтримки правильності його функціонування.
Література
Лавріщева К.М. Програмна інженерія—К.: Академперіодика, 2008.- 319 с.
Основы информатики и программирования: Учебное пособие// Е. А. Роганов — М.: МГИУ, 2001. — Вузол VI.(рос.)
Armstrong, Deborah J. (February 2006). The Quarks of Object-Oriented Development. Communications of the ACM 49 (2). с. 123–128. ISSN 0001-0782.
Meyer, Bertrand (1997). Object-Oriented Software Construction. Prentice Hall. ISBN 0-13-629155-4.
Електронні ресурси
http://programming.in.ua/programming/basisprogramming/25-oop.html
https://uk.wikipedia.org/wiki/Об%27єктноорієнтоване_програмування#.D0.86.D1.81.D1.82.D0.BE.D1.80.D1.96.D1.8F
https://uk.wikipedia.org/wiki/C%2B%2B
https://ru.wikipedia.org/wiki/Объектноориентированное_программирование#.D0.98.D1.81.D1.82.D0.BE.D1.80.D0.B8.D1.8F
https://uk.wikipedia.org/wiki/Об%27єктно-орієнтоване_програмування
http://www.progs.in.ua/Progs/rozdilu/OOP.php
http://damp.biz/plyusi-i-minusi-obyektno-oriyentovanogo-programuvannya/
https://uk.wikipedia.org/wiki/Пасажир
https://uk.wikipedia.org/wiki/Поїзд#.D0.A0.D1.96.D0.B7.D0.BD.D0.BE.D0.B2.D0.B8.D0.B4.D0.B8_.D0.BF.D0.BE.D1.97.D0.B7.D0.B4.D1.96.D0.B2
https://uk.wikipedia.org/wiki/Персонал
https://uk.wikipedia.org/wiki/Електропоїзд
https://uk.wikipedia.org/wiki/Рейковий_автобус
https://uk.wikipedia.org/wiki/Інтерсіті
https://uk.wikipedia.org/wiki/TGV
ДОДАТОК А
#pragma once
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
class AdditionalServices
{
private:
string typeTrain;
string nameOfDish;
int price;
public:
void lookPriceForAdditionalService(string name); //Створюємо метод для перегляду iнформацiї про цiни на додатковi послуги в поїздах
};
Лістинг 1. Код файлу «AdditionalServices.h»
#pragma once
#include "DistanceProcessing.h"
#include "TrainProcessing.h"
#include "WorkerProcessing.h"
#include "Driver.h"
#include "Keeper.h"
#include "Conductor.h"
#include "Maid.h"
class Administrator
{
public:
void featureList();
void addTrain();
void lookWorkerList();
void addWorker();
void searchWorker();
void fuelReceipt();
};
Лістинг 2. Код файлу «Administrator.h»
#pragma once
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
class Benefits
{
private:
string listCategories;
string ContentPreferences;
string DocumentTitleFreeTravel;
public:
void lookBenefits(string name); //Створюємо метод для перегляду даних про пiльговий проїзд
};
Лістинг 3. Код файлу «Benefits.h»
#pragma once
#include"Train.h"
class CargoTrain:public Train
{
public:
protected:
int fuelCapacity;
int fuelPerKm;
int enginePower;
int maxSpeed;
int minSpeed;
public:
CargoTrain(string typeOfTrain = "", int numberTrain = 0, string nameTrain = "");;
~CargoTrain();
void showInfo();
void showTechDitails();
};
Лістинг 4. Код файлу «CargoTrain.h»
#pragma once
#include "Worker.h"
class Conductor: public Worker {
protected:
int normalSalary;
int surchangeRecord;
int allSalary;
int premium;
public:
Conductor(string typeOfWorker = "", string nameWorker = "", string surname = "", int age = 0, int experience = 0, string birthday = 0, int numberWorkingDays = 0);
~Conductor();
void showInfo();
void showAllInform();
};
Лістинг 5. Код файлу «Conductor.h»
#pragma once
#include<fstream>
#include<iomanip>
#include <vector>
#include <string>
#include <iostream>
using namespace std;
class Distance
{
private:
string typeTrain;
int numberTrain;
string nameTrain;
int length;
public:
//конструктор за замовчуванням
Distance(string typeTrain, int numberTrain, string nameTrain, int length) {
this->typeTrain = typeTrain;
this->numberTrain = numberTrain;
this->nameTrain = nameTrain;
this->length = length;
}
~Distance();
//Створюємо методи get для кожної властивостi
string getTypeTrain();
int getNumberTrain();
string getNameTrain();
int getlength();
};
Лістинг 6. Код файлу «Distance.h»
#pragma once
#include"Distance.h"
class DistanceProcessing
{
private:
int speed;
float fuel10Km;
float amountFuel;
float electr10Km;
float amountElectr;
float priceFuel;
float priceElectr;
int costPath;
public:
string *getStrArray(string name, int numerator