You are on page 1of 31

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ 

ДЕРЖАВНИЙ ВИЩИЙ НАВЧАЛЬНИЙ ЗАКЛАД 


«УЖГОРОДСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ» 
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ 
КАФЕДРА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ СИСТЕМ 
Реєстраційний №______ 
Дата ________________ 
КУРСОВА РОБОТА 
з дисципліни «Об’єктно-орієнтоване програмування» 
спеціальність 121 Інженерія програмного забезпечення 
Тема: «Створення електронного довідника Ruby з вбудованою системою
тестування та повторення на базі Android» 
Рекомендована до захисту 
“____” ____________ 2023р. 
Робота захищена 
“____” ____________ 2023р. 
з оцінкою 
_______________________ 
Підписи членів комісії 

Ужгород – 2023
ЗМІСТ
ВСТУП 3
1.ТЕОРЕТИЧНА ЧАСТИНА 7
1.1 Що таке електронний довідник? 7
1.2 Призначення довідника 8
1.3 Огляд аналогів 9
1.4 Опис предметної області та постановка задачі 14
1.5 Огляд використаних технологій та інструментальних засобів 15
1.5.1 Загальні відомості про Java 15
1.5.2 Загальні відомості про Gradle 16
1.5.3 Середовище розробки Android Studio 17
2.ПРАКТИЧНА ЧАСТИНА 19
2.1 Проектна частина 19
2.1.1 Функціональні частини програми 19
2.1.2 Опис структури класів 19
2.1.3 Тестування проекту: план, методи та інструменти 20
2.2 Експлуатаційна частина 24
2.2.1 Опис умов впровадження програмного продукту 24
ВИСНОВКИ 25
ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ 27
Додаток 1. Лістинг 28
ВСТУП
Сучасний світ надзвичайно швидко розвивається, його нерозривною
частиною стала інформаційна технологія. За останні роки інтернет, мобільні
пристрої та різноманітні програмні рішення стали невід'ємною складовою
повсякденного життя. У цьому контексті ефективне та зручне використання
та доступ до інформації має велике значення для успішної навігації в
цифровому світі.
Одним із найпоширеніших способів забезпечити доступ до інформації
є використання електронних довідників. Вони надають можливість швидкого
пошуку необхідної інформації та організації її у зручному форматі. Однак,
існуючі електронні довідники можуть мати обмежені можливості тестування
та повторення матеріалу, що впливає на їхню практичну користь.
Метою цієї курсової роботи є розробка електронного довідника з
вбудованою системою тестування та повторення, що базується на мові
програмування Ruby та реалізована в середовищі Android Studio з
використанням мови Java. Розроблений довідник надасть користувачам
можливість не тільки швидко знаходити необхідну інформацію про Ruby, але
й перевіряти свої знання, виконуючи тести та повторюючи матеріал. Таким
чином, користувачі зможуть залучатись до активного вивчення та
систематизації знань з мови Ruby.
Головними завданнями роботи є:
1. Розробка інтерфейсу користувача електронного довідника. Буде
створено зручний та інтуїтивно зрозумілий інтерфейс, який дозволить
користувачеві знаходити необхідну інформацію швидко та ефективно.
2. Реалізація системи тестування. Користувач зможе перевірити свої
знання, виконуючи різні тести, що містяться в електронному довіднику.

У процесі розробки додатку будуть використані сучасні методи та


підходи до розробки мобільних додатків, зокрема, використання Android
Studio для створення інтерфейсу та програмування на мові Java.

3
В ході розробки цього електронного довідника будуть використані
сучасні технології, такі як Android Studio для розробки мобільного додатку,
мова програмування Java для реалізації
Результатом цієї курсової роботи буде функціональний електронний
довідник з вбудованою системою тестування, який дозволить користувачам
зручно та ефективно отримувати доступ до необхідної інформації та
перевіряти свої знання.

4
1. Теоретична частина
1.1 Що таке електронний довідник?
Електронний довідник є комп'ютерною програмою або мобільним
додатком, який містить інформацію та матеріали з певної області знань або
предмету. Він призначений для надання користувачам зручного та швидкого
доступу до необхідних даних, фактів, визначень, інструкцій, формул та
інших ресурсів, пов'язаних з обраною темою.
Електронний довідник може включати різноманітні розділи та
підрозділи, що охоплюють різні аспекти предмета або області знань. Він
може містити текстові матеріали, ілюстрації, відео- або аудіофайли, графіки,
таблиці та інші типи інформації.
Довідники можуть охоплювати широкий спектр тематик, включаючи
словники, енциклопедії, каталоги продуктів, туристичні путівники, медичні
довідники, технічні документації і багато іншого. Вони забезпечують
швидкий доступ до інформації і можуть бути дуже корисними для отримання
відповідей на питання або розширення загальних знань.
Основна його перевага полягає в його мобільності та доступності. Він
може бути встановлений на персональний комп'ютер або смартфон, що
дозволяє користувачам мати постійний доступ до необхідних даних
незалежно від місця та часу. Крім того, електронний довідник може бути
оновлений та доповнений з часом, що забезпечує актуальність інформації для
користувачів.

Рисунок 1.1 Довідник безбар’єрності


5
1.2 Призначення довідника
Довідник призначений для надання інформації, вказівок, пояснень і
орієнтації з певної теми або предметної області. Він зазвичай містить
короткі, стислі відомості, які допомагають користувачам зрозуміти основні
концепції і знаходити відповіді на питання.
Довідники можуть мати різні формати, такі як книги, електронні
ресурси, веб-сайти, програми або мобільні додатки. Вони можуть бути
загальними (наприклад, "Англійська граматика для початківців") або
спеціалізованими (наприклад, "Медичний довідник" або "Кулінарний
довідник").
Типовий довідник містить відсортовані або систематизовані списки
термінів, визначень, питань та відповідей, категорій, посилань, графіків,
таблиць, ілюстрацій або інструкцій, що допомагають користувачам знайти
інформацію, яку вони шукають.
Довідники використовуються для навчання, дослідження, розв'язання
проблем, пошуку відповідей, ознайомлення з новими темами і загального
підвищення знань у певній області. Вони допомагають людям швидко
зорієнтуватися в складних питаннях і забезпечують доступ до конкретної
інформації на вимогу.

Рисунок 1.2 Довідник по Java

6
1.3 Огляд аналогів
Додаток Learn JavaScript є аналогом довідника по Ruby. Де користувач
може дізнатись багато корисної інформації про мову програмування.
Переваги додатку полягають в тому що додаток має красивий
інтерфейс, є поділ по розділам, та доступна інформація про декілька мов
програмування.

Рисунок 1.3 Інтерфейс додатку Learn JavaScript

Рисунок 1.4 Інтерфейс опису розділів в Learn JavaScript

7
На рисунку 1.3 можемо побачити інтерфейс програми з красивим та
структурованим інтерфейсом, тож текст читати зручно і приємно.

Рисунок 1.5 Приклад фрагментів коду в додатку Learn JavaScript


В тексті присутні фрагменти коду які доповнюють інформацію. Вони
виділені різними кольорами для кращого сприйняття.

Рисунок 1.6 Роділ «Новини» в додатку Learn JavaScript

8
В програмі також є розділ з новинами, де ми можемо прочитати
найсвіжіші оновлення про мови програмування.

Рисунок 1.7 Роділ «Help Center» в додатку Learn JavaScript


Також хорошою перевагою є розіл де ми можемо написати відгук про
програму в службу підтримки.
Дуже корисна функція яка допоможе розробникам які навчаються це
влаштований компілятор де є можливість написати невеличкі програми.

Рисунок 1.8 Компілятор в додатку Learn JavaScript

Для перевірки знань ми можемо пройти тестування де зможемо


перевірити наскільки якісно ми засвоїли інформацію.
9
До недоліків можна віднести:
 Не повністю безкоштовний додаток;
 Не дуже зручний компілятор;
 Додаток доступний тільки на англійській мові і користувачі які
не володіють нею будуть мати проблеми щоб навчатись.
Додаток LearnPHPProgrammer також є аналогом довідника Ruby.
Серед головних переваг додатку є велика кількість розділів з
інформацією. Користувач з великою долею ймовірності знайде відповідь на
свою проблему.

Рисунок 1.9 Інтерфейс додатку LearnPHPProgrammer


Також як і в попередній програмі все поділене на розділи що полегшує
пошук інформації.

10
Рисунок 1.10 Інтерфейс додатку LearnPHPProgrammer
В додатку наведені знімки екрана що допомагають краще візуалізувати
інформацію, що звісно позитивно проявиться на запам’ятовуванні
інформації.

Рисунок 1.11 Інтерфейс опису розділів в LearnPHPProgrammer


Мінусів в програми вистачає:
 Програма доступна тільки на англійській мові;

11
 Немає пошуку по розділам, що додає багато часу користувачеві
для пошуку потрібної інформації;
 Не сучасний інтерфейс, не дуже приємно вчитись в програмі;
 В програмі є великий баг при якому кнопка повернення в головне
меню зникає, і доводиться виходити з програми для того щоб вибрати новий
розділ.
1.4 Опис предметної області та постановка задачі
Опис предметної області для звіту до курсової роботи «Створення
електронного довідника Ruby з вбудованою системою тестування та
повторення на базі Android довідник, створений на Java в Android Studio».

Ця курсова робота фокусується на розробці електронного довідника


для мови програмування Ruby з використанням технологій Android та Java.
Довідник має на меті надати користувачам зручний доступ до інформації про
Ruby-синтаксис, ключові концепції та стандартні бібліотеки.

Основна мета цього проекту — створити мобільний додаток, який буде


виконувати функції електронного довідника. Додаток буде включати в себе
різні розділи, такі як основи мови, змінні, функції, класи, модулі, обробка
виключень та багато іншого. Користувачі зможуть швидко знайти необхідну
інформацію про певний аспект мови Ruby за допомогою зручного інтерфейсу
додатка.

Одним з ключових елементів цього проекту є вбудована система


тестування. Користувачі зможуть перевірити свої знання Ruby, виконуючи
тестові завдання, що відображатимуться у додатку. Система тестування буде
оцінювати результати та надавати користувачам повернення щодо їх
відповідей, допомагаючи їм поліпшити свої навички.

Додаток буде розроблений з використанням Java в середовищі


розробки Android Studio. Android Studio надає потужні інструменти для
створення мобільних додатків, забезпечуючи зручну розробку і тестування
програм на Android-платформі.
12
В цілому, завданням цієї курсової роботи є розробка електронного
довідника для мови програмування Ruby з

використанням технологій Android та Java. Додаток повинен надавати


користувачам доступну та зручну інформацію про Ruby, а також допомагати
їм в покращенні навичок через вбудовану систему тестування.

1.5 Огляд використаних технологій та інструментальних засобів


1.5.1 Загальні відомості про Java
Java — об’єктно-орієнтована мова програмування, випущена 1995 року
компанією «Sun Microsystems» як основний компонент платформи Java. З
2009 року мовою займається компанія «Oracle», яка того року придбала «Sun 
Microsystems». В офіційній реалізації Java-програми компілюються у байт-
код, який при виконанні інтерпретується віртуальною машиною для
конкретної платформи.

Рисунок 1.12 Logo віртуальної машини Java


Java є мовою програмування і платформу обчислень, яка була вперше
випущена Sun Microsystems в 1995 р Існує безліч додатків і веб-сайтів, які не
працюють при відсутності встановленої Java, і з кожним днем число таких
веб-сайтів і додатків збільшується. Java відрізняється швидкістю, високим
рівнем захисту і надійністю. Від портативних комп’ютерів до центрів даних,
від ігрових консолей до комп’ютерів, які використовуються для наукових
розробок, від стільникових телефонів до мережі Інтернет.

Стандартні бібліотеки забезпечують загальний спосіб доступу до таких


платформозалежних особливостей, як обробка графіки, багатопотоковість та

13
роботу з мережами. У деяких версіях задля збільшення продуктивності JVM
байт-код можна компілювати у машинний код до або під час виконання
програми.
Швидкість офіційної віртуальної машини Java значно покращилася з
моменту випуску ранніх версій, до того ж, деякі випробування показали, що
продуктивність JIT-компіляторів у порівнянні зі звичайними компіляторами
у машинний код майже однакова. Проте ефективність компіляторів не
завжди свідчить про швидкість виконання скомпільованого коду, тільки
ретельне тестування може виявити справжню ефективність у даній системі.
1.5.2 Загальні відомості про Gradle
Gradle — система автоматичного збирання, яка далі розвиває
принципи, закладені в Apache Ant та Apache Maven і
використовує предметно-орієнтовану мову (DSL) на основі
мови Groovy замість традиційної XML-подібної форми представлення
конфігурації проекту. Для визначення порядку виконання завдань Gradle
використовує орієнтований ациклічний граф ("DAG").

Рисунок 1.13 Логотип «Gradle»


На відміну від Apache Maven, заснованого на концепції життєвого
циклу проекту, і Apache Ant, в якому порядок виконання задач (targets)
визначається відносинами залежності (depends-on), Gradle
використовує спрямований ациклічний граф для визначення порядку
виконання завдань.

14
Gradle було розроблено для побудови мультипроектів, які можуть
розростатися, і підтримує інкрементальне збирання. Вона визначає, які
частини було змінено, і виконує тільки ті задачі, які залежать від цих частин.
Основні плагіни призначені для розробки і
розгортання Java, Groovy і Scala додатків, але готуються плагіни і для
інших мов програмування.
1.5.3 Середовище розробки Android Studio
Android Studio — це інтегроване середовище розробки (IDE),
спеціально створене для розробки мобільних додатків на платформі Android.
Воно надає розробникам широкий набір інструментів, що спрощують процес
створення, тестування та розгортання додатків для Android.

Рисунок 1.14 Логотип Android Studio


Основні характеристики та можливості середовища розробки Android
Studio:
1. Інтуїтивний інтерфейс: Android Studio має добре організований
інтерфейс, який дозволяє розробникам легко навігувати між різними
вкладками та інструментами. Інтерфейс доповнений контекстними
підказками, автодоповненням коду та візуальними редакторами, що спрощує
розробку.
2. Засоби розробки інтерфейсу користувача: Android Studio надає
графічний редактор, відомий як Layout Editor, який дозволяє розробникам
створювати та налаштовувати інтерфейс користувача за допомогою методу
15
перетягування та відпускання. Редактор також підтримує попередній
перегляд розміщення елементів на різних пристроях.
3. Редактор коду: Android Studio має потужний редактор коду, який
надає функції автодоповнення, підсвічування синтаксису, відступів та
відображення помилок. Він також інтегрований з системою контролю версій,
що дозволяє розробникам відстежувати зміни в коді та співпрацювати з
іншими розробниками.
4. Емулятори та пристрої: Android Studio надає можливість запуску,
тестування та налагодження додатків на вбудованих емуляторах або
підключених фізичних пристроях. Це дозволяє розробникам перевіряти
поведінку додатка на різних конфігураціях пристроїв.
5. Інструменти профілювання та налагодження: Android Studio має
набір інструментів для профілювання та налагодження додатків, що
допомагає виявляти та виправляти помилки, покращувати продуктивність та
виконувати аналіз використання пам'яті.
6. Підтримка мов програмування: Android Studio підтримує розробку
додатків на Java, Kotlin і C++. Це дає розробникам можливість вибрати мову,
з якою вони найбільш комфортно працюють.
Android Studio є відкритим інструментом, розробленим спеціально для
спрощення розробки додатків для Android. Його постійне оновлення та
підтримка сприяють розвитку мобільних додатків на цій платформі.

16
2. ПРАКТИЧНА ЧАСТИНА
2.1 Проектна частина
2.1.1 Функціональні частини програми
Для розробки програми було використано Java. Розробка проводилася в
середовищі Android Studio.
На рисунку 2.1 зображено структуру програми, її файли, класи, форми
та інше.

Рисунок 2.1 Структура проекту


2.1.2 Опис структури класів
Програма містить 4 класи та 3 форми.
Клас «DetailActivity» відповідає за відображення детальної інформації
про об'єкт у мобільному додатку. Його основна відповідність полягає в
завантаженні і відображенні текстових даних з ресурсів.
Клас «MainActivity» відповідає за головний екран мобільного додатку.
Його основна відповідність полягає в управлінні списком елементів із
можливістю пошуку та перехіду до детальної інформації про вибраний
елемент.

17
Клас «QuestionAnswer» є класом, що містить питання та відповіді для
тестування знань. У ньому зберігаються масиви рядків з питаннями,
варіантами відповідей та правильними відповідями.
Клас «TestActivity» відповідає за функціонал тестування. Його основна
відповідність полягає в відображенні питань, варіантів відповідей та обробці
вибору користувача.
Алгоритм роботи програми:
- При запуску програми користувачу будуть представленні
розділи.
- Користувач може вибрати розділ який його цікавить натиснувши
на нього, після чого відкриється пояснення даного розділу.
- Також, користувач може скористуватись пошуком на головній
сторінці програми, для легшого пошуку.
- Після того як користувач переглянув довідку є можливість
перевірити знаня, пройшовши тестування.
- В кінці тестування користувачу буде показаний його результат з
кількістю правильних відповідей.
2.1.3 Тестування проекту: план, методи та інструменти
В Головному меню користувачу доступні розділи натиснувши на який,
буде відкрито нове вікно де буде можливість прочитати інформацію.
Також в додатку реалізований пошук, для того щоб клієнт зміг швидко
та зручно знайти потрібний розділ.
Останній елемент, кнопка тестування, натиснувши на яку користувачу
буде задано декілька запитань по мові програмування Ruby, тим самим
перевіривши свої знання.

18
Рисунок 2.2 Інтерфейс додатку
На рисунку 2.3 зображено опис розділу «Ruby» в якому можна
ознайомитись з значенням даної мови.

Рисунок 2.3 Інтерфейс опису розділу


Можемо побачити приклад роботи пошуку на рисунку 2.4

19
Рисунок 2.4 Робота пошуку
У вікні тестування користувачу представлене запитання де є чотири
варіанти відповідей, потрібно натиснути на варіант, який вважається
правильним, якщо користувач натиснув на відповідь вона засвітиться
фіолетовим кольором як можна побачити на рисунку, що буде означати те,
що вона прийнята і можна натиснути на кнопку «Відповісти».
Якщо є бажання завершити тестування, то можна натиснути на
«Головне меню» і повернутись до розділів для подальшого вивчення.

Рисунок 2.5 Вікно тестування

20
Рисунок 2.6 Інтерфейс тестування
Після того як буде пройдено всі тести, на екрані висвітиться
інформація про кількість правильних відповідей.

Рисунок 2.7 Вікно з результатами тесту

21
2.2 Експлуатаційна частина
2.2.1 Опис умов впровадження програмного продукту
Програмний продукт був розроблений з цілю проінформувати
користувача про мову програмування Ruby. Програмним продуктом можна
користуватись на мобільному телефоні з операційною системою Android.
Також, програма не портебує інтернету для її експлуатації, тож
користувач прочитати корисну для нього інформацію в будь який час.

22
ВИСНОВКИ

Завданням курсового проекту було створення програми на мові Java.


Було використано найбільш раціональний, компактний та практичний спосіб
для розв’язку цього завдання. Отже, в результаті був створений довідник по
Ruby, який є доступний для будь-якого користувача і до неї був створений
звіт з усіма потрібними даними та визначенням, які допомагають краще
ознайомитися з даною програмою.
Під час розробки курсового проекту був отриманий досвід розробки
мобільних додатків на базі операційної системи Android.
Крім того, було освоєно середовище розробки Android Studio, що було
використано для написання коду, рефакторингу, налаштування та
компілювання проекту.
За час написання даного проекту було вивчено більше про мову
програмування Java, вдосконалена техніка програмування даною мовою,
закріплено знання, необхідні для роботи із базами даних, отримано нові
знання щодо кодування текстових даних, синтаксису формування запитів
засобами мови програмування Java.
До переваг можна віднести:
наявність зручного, простого інтерфейсу;
простий та надійний у використанні;
займає мало місця на запам’ятовуючому пристрої;
корисний продукт який допоможе починаючому програмісту.
Використання Java для розробки на Android є розумним вибором,
оскільки ця мова є офіційною для платформи Android і має велику підтримку
з боку Google.
Java надає розробникам доступ до широкого спектру функціональності
платформи Android, що дозволяє ефективно реалізувати функції
електронного довідника, такі як пошук, сортування, зберігання та
відображення даних.

23
Існує велика кількість ресурсів і документації, присвячених розробці на
Java для Android, що полегшує процес вивчення та реалізації необхідних
функцій у вашому довіднику.
Розробка електронного довідника на платформі Android забезпечує
мобільний доступ до інформації, що робить його зручним і простим у
використанні для користувачів.
Отже, підсумувавши висновки, можна сказати, що курсовий проект
пройшов успішно і було досягнуто усіх поставлених цілей.

24
ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ

1. [Електронний ресурс] — Hexlet. Введення в ООП. —


https://ru.hexlet.io/courses/java_-101/lessons/java_oop_basics/theory_unit.
2. [Книга] — Барри Берд (2013). Програмування Java для чайників, 3-е
видання. «Діалектика».
3. [Книга] — Копитко М. Ф., Іванків К. С. Основи програмування мовою
Java: Тексти лекцій. −Львів: Видавничий центр ЛНУ ім. Івана Франка, 2002.−
83 с.
4. [Електронний ресурс] — Learn Java — https://dev.java/learn/.
5. [Електронний ресурс] — Proglang. Java — Класи і об’єкти. —
http://proglang.su/java/classes-and-objects.
6. [Електронний ресурс] — Wikipedia.Java. —
https://uk.wikipedia.org/wiki/Java/.
7. [Електронний ресурс] — JavaDevBlog. Java програмування. —
https://javadevblog.com/kak-udalit-fajl-ili-papku-v-java.html.
8. [Електронний ресурс] — Android —
https://uk.wikipedia.org/wiki/Android.
9. [Електронний ресурс] — Форум для питань по Java —
https://www.java.com/ru/download/help/whatis_java.html.
10. [Електронний ресурс] — Developer Guides
—https://developer.android.com/docs.

25
Лістинг
DetailActivity
InputStreamReader inputReader = new
package com.example.manual; InputStreamReader(inputStream);
BufferedReader buffReader = new
import android.content.Context; BufferedReader(inputReader);
import android.content.Intent; String line;
import android.os.Bundle; StringBuilder builder = new
import StringBuilder();
androidx.appcompat.app.AppCompatActivit
y; try {
import android.util.Log; while (( line =
import android.webkit.WebView; buffReader.readLine()) != null) {
builder.append(line);
import java.io.BufferedReader; builder.append("\n");
import java.io.IOException; }
import java.io.InputStream; } catch (IOException e) {
import java.io.InputStreamReader; return null;
}
public class DetailActivity extends return builder.toString();
AppCompatActivity { }
}
@Override
protected void onCreate(Bundle MainActivity
savedInstanceState) { package com.example.manual;
super.onCreate(savedInstanceState);
import android.content.Intent;
setContentView(R.layout.activity_detai import android.os.Bundle;
l); import
androidx.appcompat.app.AppCompatActivit
WebView webView = y;
findViewById(R.id.webView); import android.view.View;
import android.widget.AdapterView;
Intent intent = getIntent(); import android.widget.ArrayAdapter;
String resName = "n" + import android.widget.ListView;
intent.getIntExtra("title", 0); import android.widget.SearchView;
Log.i("name", resName);
Context context = getBaseContext(); import java.util.ArrayList;

String text = readRawTextFile(context, public class MainActivity extends


getResources().getIdentifier(resName, AppCompatActivity {
"raw", "com.example.manual"));
SearchView searchView;
webView.loadDataWithBaseURL(null, ListView listView;
text, "text/html", "en_US", null);
} ArrayList arrayList;
private String readRawTextFile(Context ArrayAdapter adapter;
context, int resId)
{ @Override
InputStream inputStream = protected void onCreate(Bundle
context.getResources().openRawResource(r savedInstanceState) {
esId); super.onCreate(savedInstanceState);

26
setContentView(R.layout.activity_main }
); });

searchView = listView.setOnItemClickListener(new
findViewById(R.id.search); AdapterView.OnItemClickListener() {
listView = public void
findViewById(R.id.listView); onItemClick(AdapterView<?> a, View v, int
position, long id) {
arrayList = new ArrayList<>(); Intent intent = new Intent();
intent.setClass(MainActivity.this,
arrayList.add("Ruby"); DetailActivity.class);
arrayList.add("Алфавіт мови Ruby"); intent.putExtra("arrayList",
arrayList.add("Синтаксис"); position);
arrayList.add("Коментар"); startActivity(intent);
arrayList.add("Лексема"); }
arrayList.add("Тип даних"); });
arrayList.add("Семантика"); }
arrayList.add("Масиви");
arrayList.add("Ключові слова"); public void test(View v) {
arrayList.add("Оператор while"); Intent intent = new Intent(this,
arrayList.add("Оператор until"); TestActivity.class);
arrayList.add("Оператор for"); startActivity(intent);
arrayList.add("Оператори керування }
циклом");
arrayList.add("Параметри роботи з }
файлами");
arrayList.add("Вбудовані QuestionAnswer
бібліотеки"); package com.example.manual;

adapter = new public class QuestionAnswer {


ArrayAdapter<>(getApplicationContext(),
android.R.layout.simple_list_item_1, public static String question[] ={
arrayList); "Як називається найпопулярніший
listView.setAdapter(adapter); фреймворк мови Ruby для Інтернету?",
"Чи спрацює цей код?\
searchView.setOnQueryTextListener(n nprint(\"Введите имя: \")\n" +
ew SearchView.OnQueryTextListener() { "name = gets\n" +
@Override "puts(\"Имя: \" + name)",
public boolean "Який метод дозволяє привести
onQueryTextSubmit(String query) { рядок до нижнього регістру?",
"В якому варіанті ви отримаєте
adapter.getFilter().filter(query); число без пропуску від користувача?"
};
return false;
} public static String choices[][] = {
{"Ruby Web","Ruby On
@Override Rails","Ruby Framework","Ruby Web"},
public boolean {"Необхідно дописати
onQueryTextChange(String newText) { gets.chomp()","Необхідно дописати
name.to_s під час виведення
adapter.getFilter().filter(newText); інформації","Код спрацює лише якщо
введуть рядок, а не число","Код спрацює
return false; у будь-якому випадку"},
27
{"нижній
регістр()","upcase()","нижній totalQuestionsTextView =
регістр()","вниз()"}, findViewById(R.id.total_question);
{"num = chomp().to_i","num = questionTextView =
gets.chomp()","num = findViewById(R.id.question);
gets.chomp().to_i","num = gets.to_i"} ansA = findViewById(R.id.ans_A);
}; ansB = findViewById(R.id.ans_B);
ansC = findViewById(R.id.ans_C);
public static String correctAnswers[] = { ansD = findViewById(R.id.ans_D);
"Ruby On Rails", submitBtn =
"Код спрацює у будь-якому findViewById(R.id.submit_btn);
випадку",
"нижній регістр()", ansA.setOnClickListener(this);
"num = gets.chomp().to_i" ansB.setOnClickListener(this);
}; ansC.setOnClickListener(this);
ansD.setOnClickListener(this);
} submitBtn.setOnClickListener(this);

TestActivity totalQuestionsTextView.setText("Total
package com.example.manual; questions : "+totalQuestion);

import loadNewQuestion();
androidx.appcompat.app.AppCompatActivit
y; }

import android.app.AlertDialog; @Override


import android.content.Intent; public void onClick(View view) {
import android.graphics.Color;
import android.os.Bundle; ansA.setBackgroundColor(Color.WHI
import android.view.View; TE);
import android.widget.Button; ansB.setBackgroundColor(Color.WHIT
import android.widget.TextView; E);
ansC.setBackgroundColor(Color.WHIT
public class TestActivity extends E);
AppCompatActivity implements ansD.setBackgroundColor(Color.WHI
View.OnClickListener{ TE);

TextView totalQuestionsTextView; Button clickedButton = (Button) view;


TextView questionTextView; if(clickedButton.getId()==R.id.submit_
Button ansA, ansB, ansC, ansD; btn){
Button submitBtn; if(selectedAnswer.equals(QuestionA
nswer.correctAnswers[currentQuestionIndex
int score=0; ])){
int totalQuestion = score++;
QuestionAnswer.question.length; }
int currentQuestionIndex = 0; currentQuestionIndex++;
String selectedAnswer = ""; loadNewQuestion();

@Override
protected void onCreate(Bundle }else{
savedInstanceState) { //choices button clicked
super.onCreate(savedInstanceState); selectedAnswer =
setContentView(R.layout.activity_test); clickedButton.getText().toString();
28
clickedButton.setBackgroundColor( Intent intent = new Intent(this,
Color.MAGENTA); MainActivity.class);
startActivity(intent);
} }

}
}
void loadNewQuestion(){
activity_detail
if(currentQuestionIndex ==
totalQuestion ){ <?xml version="1.0" encoding="utf-8"?>
finishQuiz(); <LinearLayout
return; xmlns:android="http://schemas.android.c
} om/apk/res/android"
android:orientation="vertical"
questionTextView.setText(QuestionAn android:layout_width="match_parent"
swer.question[currentQuestionIndex]); android:layout_height="match_parent">
ansA.setText(QuestionAnswer.choices[
currentQuestionIndex][0]); <WebView
ansB.setText(QuestionAnswer.choices[ android:id="@+id/webView"
currentQuestionIndex][1]); android:layout_width="match_parent"
ansC.setText(QuestionAnswer.choices[ android:layout_height="match_parent"
currentQuestionIndex][2]); >
ansD.setText(QuestionAnswer.choices[ </WebView>
currentQuestionIndex][3]); </LinearLayout>

} activity_main

void finishQuiz(){ <?xml version="1.0" encoding="utf-8"?>


String passStatus = ""; <RelativeLayout
if(score > totalQuestion*0.60){ xmlns:android="http://schemas.android.c
passStatus = "Passed"; om/apk/res/android"
}else{ xmlns:app="http://schemas.android.com/a
passStatus = "Failed"; pk/res-auto"
} xmlns:tools="http://schemas.android.com/
tools"
new AlertDialog.Builder(this) android:layout_width="match_parent"
.setTitle(passStatus) android:layout_height="match_parent"
.setMessage("Score is "+ score+" android:padding="20dp"
out of "+ totalQuestion) android:orientation="vertical"
.setPositiveButton("Restart", tools:context=".MainActivity">
(dialogInterface, i) -> restartQuiz() )
.setCancelable(false) <SearchView
.show(); android:id="@+id/search"
} android:queryHint="search"
android:layout_width="250dp"
void restartQuiz(){ android:layout_height="wrap_content"
score = 0; />
currentQuestionIndex =0;
loadNewQuestion(); <ListView
} android:id="@+id/listView"
android:layout_width="match_parent"
public void onHome(View v) { android:layout_height="match_parent"
29
android:layout_below="@id/search"> android:layout_marginEnd="20dp"
</ListView> android:layout_marginRight="20dp"
android:layout_marginBottom="18dp"
<Button android:gravity="center_horizontal"
android:id="@+id/button2" android:text="This will be the
android:layout_width="120dp" question"
android:layout_height="wrap_content" android:textColor="@color/black"
android:layout_alignParentTop="true" android:textSize="24dp"
android:layout_alignParentRight="true android:textStyle="bold" />
"
android:backgroundTint="@color/oran <LinearLayout
ge" android:layout_width="match_parent"
android:insetBottom="20dp" android:layout_height="wrap_content"
android:onClick="test" android:id="@+id/choices_layout"
android:text="Тест" android:layout_centerInParent="true"
android:textSize="20sp" android:orientation="vertical">
app:cornerRadius="10dp" />
<Button
</RelativeLayout> android:id="@+id/ans_B"
android:layout_width="match_paren
activity_test t"
android:layout_height="wrap_conten
<?xml version="1.0" encoding="utf-8"?> t"
<RelativeLayout android:layout_margin="5dp"
xmlns:android="http://schemas.android.com android:layout_marginStart="5dp"
/apk/res/android" android:layout_marginLeft="5dp"
xmlns:app="http://schemas.android.com/a android:layout_marginTop="5dp"
pk/res-auto" android:layout_marginEnd="5dp"
xmlns:tools="http://schemas.android.com/ android:layout_marginRight="5dp"
tools" android:layout_marginBottom="5dp
android:layout_width="match_parent" "
android:layout_height="match_parent" android:backgroundTint="@color/gr
android:padding="24dp" ey"
tools:context=".TestActivity"> android:text="Ans B"
android:textColor="@color/black" />
<TextView
android:layout_width="wrap_content" <Button
android:layout_height="wrap_content" android:id="@+id/ans_A"
android:id="@+id/total_question" android:layout_width="match_paren
android:text="Тестування" t"
android:layout_centerHorizontal="true" android:layout_height="wrap_conten
android:textSize="20dp"/> t"
android:layout_margin="5dp"
android:layout_marginStart="5dp"
<TextView android:layout_marginLeft="5dp"
android:id="@+id/question" android:layout_marginTop="5dp"
android:layout_width="356dp" android:layout_marginEnd="5dp"
android:layout_height="130dp" android:layout_marginRight="5dp"
android:layout_above="@id/choices_la android:layout_marginBottom="5dp
yout" "
android:layout_marginStart="20dp" android:backgroundTint="@color/gr
android:layout_marginLeft="20dp" ey"
android:layout_marginTop="20dp" android:text="Ans A"
30
android:textColor="@color/black" /> android:insetRight="20dp"
android:insetBottom="20dp"
<Button android:text="Відповісти"
android:id="@+id/ans_D" android:textSize="20sp"
android:layout_width="match_paren app:cornerRadius="10dp" />
t"
android:layout_height="wrap_conten <Button
t" android:id="@+id/OnHomeBtn"
android:layout_margin="5dp" android:layout_width="match_parent"
android:layout_marginStart="5dp" android:layout_height="82dp"
android:layout_marginLeft="5dp" android:layout_below="@id/choices_la
android:layout_marginTop="5dp" yout"
android:layout_marginEnd="5dp" android:layout_marginTop="103dp"
android:layout_marginRight="5dp" android:backgroundTint="@color/blac
android:layout_marginBottom="5dp k"
" android:insetLeft="20dp"
android:backgroundTint="@color/gr android:insetTop="20dp"
ey" android:insetRight="20dp"
android:text="Ans D" android:insetBottom="20dp"
android:textColor="@color/black" /> android:onClick="onHome"
android:text="На головну"
<Button android:textSize="20sp"
android:id="@+id/ans_C" app:cornerRadius="10dp"
android:layout_width="match_paren
t" />
android:layout_height="wrap_conten
t" </RelativeLayout>
android:layout_margin="5dp"
android:layout_marginStart="5dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp
"
android:backgroundTint="@color/gr
ey"
android:text="Ans C"
android:textColor="@color/black" />

</LinearLayout>

<Button
android:id="@+id/submit_btn"
android:layout_width="match_parent"
android:layout_height="82dp"
android:layout_below="@id/choices_la
yout"
android:layout_marginTop="21dp"
android:backgroundTint="@color/oran
ge"
android:insetLeft="20dp"
android:insetTop="20dp"
31

You might also like