You are on page 1of 29

ВСТУП

Сучасний світ надзвичайно швидко розвивається, його нерозривною


частиною стала інформаційна технологія. За останні роки інтернет, мобільні
пристрої та різноманітні програмні рішення стали невід'ємною складовою
повсякденного життя. У цьому контексті ефективне та зручне використання
та доступ до інформації має велике значення для успішної навігації в
цифровому світі.
Одним із найпоширеніших способів забезпечити доступ до інформації
є використання електронних довідників. Вони надають можливість швидкого
пошуку необхідної інформації та організації її у зручному форматі. Однак,
існуючі електронні довідники можуть мати обмежені можливості тестування
та повторення матеріалу, що впливає на їхню практичну користь.
Метою цієї курсової роботи є розробка електронного довідника з
вбудованою системою тестування та повторення, що базується на мові
програмування 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 відрізняється швидкістю, високим
рівнем захисту і надійністю. Від портативних комп’ютерів до центрів даних,
від ігрових консолей до комп’ютерів, які використовуються для наукових
розробок, від стільникових телефонів до мережі Інтернет.

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


платформозалежних особливостей, як обробка графіки, багатопотоковість та
роботу з мережами. У деяких версіях задля збільшення продуктивності JVM
13
байт-код можна компілювати у машинний код до або під час виконання
програми.
Швидкість офіційної віртуальної машини 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
використовує спрямований ациклічний граф для визначення порядку
виконання завдань.
Gradle було розроблено для побудови мультипроектів, які можуть
розростатися, і підтримує інкрементальне збирання. Вона визначає, які
частини було змінено, і виконує тільки ті задачі, які залежать від цих частин.

14
Основні плагіни призначені для розробки і
розгортання 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 Вікно з результатами тесту


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

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
InputStreamReader(inputStream);
package com.example.manual; BufferedReader buffReader = new
BufferedReader(inputReader);
import android.content.Context; String line;
import android.content.Intent; StringBuilder builder = new
import android.os.Bundle; StringBuilder();
import
androidx.appcompat.app.AppCompatActivit try {
y; while (( line =
import android.util.Log; buffReader.readLine()) != null) {
import android.webkit.WebView; builder.append(line);
builder.append("\n");
import java.io.BufferedReader; }
import java.io.IOException; } catch (IOException e) {
import java.io.InputStream; return null;
import java.io.InputStreamReader; }
return builder.toString();
public class DetailActivity extends }
AppCompatActivity { }

@Override MainActivity
protected void onCreate(Bundle package com.example.manual;
savedInstanceState) {
super.onCreate(savedInstanceState); import android.content.Intent;
import android.os.Bundle;
setContentView(R.layout.activity_detai import
l); androidx.appcompat.app.AppCompatActivit
y;
WebView webView = import android.view.View;
findViewById(R.id.webView); import android.widget.AdapterView;
import android.widget.ArrayAdapter;
Intent intent = getIntent(); import android.widget.ListView;
String resName = "n" + import android.widget.SearchView;
intent.getIntExtra("title", 0);
Log.i("name", resName); import java.util.ArrayList;
Context context = getBaseContext();
public class MainActivity extends
String text = readRawTextFile(context, AppCompatActivity {
getResources().getIdentifier(resName,
"raw", "com.example.manual")); SearchView searchView;
ListView listView;
webView.loadDataWithBaseURL(null,
text, "text/html", "en_US", null); ArrayList arrayList;
} ArrayAdapter adapter;
private String readRawTextFile(Context
context, int resId) @Override
{ protected void onCreate(Bundle
InputStream inputStream = savedInstanceState) {
context.getResources().openRawResource(r super.onCreate(savedInstanceState);
esId); setContentView(R.layout.activity_main
);
26
listView.setOnItemClickListener(new
searchView = AdapterView.OnItemClickListener() {
findViewById(R.id.search); public void
listView = onItemClick(AdapterView<?> a, View v, int
findViewById(R.id.listView); position, long id) {
Intent intent = new Intent();
arrayList = new ArrayList<>(); intent.setClass(MainActivity.this,
DetailActivity.class);
arrayList.add("Ruby"); intent.putExtra("arrayList",
arrayList.add("Алфавіт мови Ruby"); position);
arrayList.add("Синтаксис"); startActivity(intent);
arrayList.add("Коментар"); }
arrayList.add("Лексема"); });
arrayList.add("Тип даних"); }
arrayList.add("Семантика");
arrayList.add("Масиви"); public void test(View v) {
arrayList.add("Ключові слова"); Intent intent = new Intent(this,
arrayList.add("Оператор while"); TestActivity.class);
arrayList.add("Оператор until"); startActivity(intent);
arrayList.add("Оператор for"); }
arrayList.add("Оператори керування
циклом"); }
arrayList.add("Параметри роботи з
файлами"); QuestionAnswer
arrayList.add("Вбудовані package com.example.manual;
бібліотеки");
public class QuestionAnswer {
adapter = new
ArrayAdapter<>(getApplicationContext(), public static String question[] ={
android.R.layout.simple_list_item_1, "Як називається найпопулярніший
arrayList); фреймворк мови Ruby для Інтернету?",
listView.setAdapter(adapter); "Чи спрацює цей код?\
nprint(\"Введите имя: \")\n" +
searchView.setOnQueryTextListener(n "name = gets\n" +
ew SearchView.OnQueryTextListener() { "puts(\"Имя: \" + name)",
@Override "Який метод дозволяє привести
public boolean рядок до нижнього регістру?",
onQueryTextSubmit(String query) { "В якому варіанті ви отримаєте
число без пропуску від користувача?"
adapter.getFilter().filter(query); };

return false; public static String choices[][] = {


} {"Ruby Web","Ruby On
Rails","Ruby Framework","Ruby Web"},
@Override {"Необхідно дописати
public boolean gets.chomp()","Необхідно дописати
onQueryTextChange(String newText) { name.to_s під час виведення
інформації","Код спрацює лише якщо
adapter.getFilter().filter(newText); введуть рядок, а не число","Код спрацює
у будь-якому випадку"},
return false; {"нижній
} регістр()","upcase()","нижній
}); регістр()","вниз()"},

27
{"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();
clickedButton.setBackgroundColor(
totalQuestionsTextView = Color.MAGENTA);
findViewById(R.id.total_question);
}
28
} }

void loadNewQuestion(){ activity_detail

if(currentQuestionIndex == <?xml version="1.0" encoding="utf-8"?>


totalQuestion ){ <LinearLayout
finishQuiz(); xmlns:android="http://schemas.android.c
return; om/apk/res/android"
} android:orientation="vertical"
android:layout_width="match_parent"
questionTextView.setText(QuestionAn android:layout_height="match_parent">
swer.question[currentQuestionIndex]);
ansA.setText(QuestionAnswer.choices[ <WebView
currentQuestionIndex][0]); android:id="@+id/webView"
ansB.setText(QuestionAnswer.choices[ android:layout_width="match_parent"
currentQuestionIndex][1]); android:layout_height="match_parent"
ansC.setText(QuestionAnswer.choices[ >
currentQuestionIndex][2]); </WebView>
ansD.setText(QuestionAnswer.choices[ </LinearLayout>
currentQuestionIndex][3]);
activity_main
}
<?xml version="1.0" encoding="utf-8"?>
void finishQuiz(){ <RelativeLayout
String passStatus = ""; xmlns:android="http://schemas.android.c
if(score > totalQuestion*0.60){ om/apk/res/android"
passStatus = "Passed"; xmlns:app="http://schemas.android.com/a
}else{ pk/res-auto"
passStatus = "Failed"; xmlns:tools="http://schemas.android.com/
} tools"
android:layout_width="match_parent"
new AlertDialog.Builder(this) android:layout_height="match_parent"
.setTitle(passStatus) android:padding="20dp"
.setMessage("Score is "+ score+" android:orientation="vertical"
out of "+ totalQuestion) tools:context=".MainActivity">
.setPositiveButton("Restart",
(dialogInterface, i) -> restartQuiz() ) <SearchView
.setCancelable(false) android:id="@+id/search"
.show(); android:queryHint="search"
} android:layout_width="250dp"
android:layout_height="wrap_content"
void restartQuiz(){ />
score = 0;
currentQuestionIndex =0; <ListView
loadNewQuestion(); android:id="@+id/listView"
} android:layout_width="match_parent"
android:layout_height="match_parent"
public void onHome(View v) { android:layout_below="@id/search">
Intent intent = new Intent(this, </ListView>
MainActivity.class);
startActivity(intent); <Button
} android:id="@+id/button2"
android:layout_width="120dp"
29
android:layout_height="wrap_content" android:textSize="24dp"
android:layout_alignParentTop="true" android:textStyle="bold" />
android:layout_alignParentRight="true
" <LinearLayout
android:backgroundTint="@color/oran android:layout_width="match_parent"
ge" android:layout_height="wrap_content"
android:insetBottom="20dp" android:id="@+id/choices_layout"
android:onClick="test" android:layout_centerInParent="true"
android:text="Тест" android:orientation="vertical">
android:textSize="20sp"
app:cornerRadius="10dp" /> <Button
android:id="@+id/ans_B"
</RelativeLayout> android:layout_width="match_paren
t"
activity_test android:layout_height="wrap_conten
t"
<?xml version="1.0" encoding="utf-8"?> android:layout_margin="5dp"
<RelativeLayout android:layout_marginStart="5dp"
xmlns:android="http://schemas.android.com android:layout_marginLeft="5dp"
/apk/res/android" android:layout_marginTop="5dp"
xmlns:app="http://schemas.android.com/a android:layout_marginEnd="5dp"
pk/res-auto" android:layout_marginRight="5dp"
xmlns:tools="http://schemas.android.com/ android:layout_marginBottom="5dp
tools" "
android:layout_width="match_parent" android:backgroundTint="@color/gr
android:layout_height="match_parent" ey"
android:padding="24dp" android:text="Ans B"
tools:context=".TestActivity"> android:textColor="@color/black" />

<TextView <Button
android:layout_width="wrap_content" android:id="@+id/ans_A"
android:layout_height="wrap_content" android:layout_width="match_paren
android:id="@+id/total_question" t"
android:text="Тестування" android:layout_height="wrap_conten
android:layout_centerHorizontal="true" t"
android:textSize="20dp"/> android:layout_margin="5dp"
android:layout_marginStart="5dp"
android:layout_marginLeft="5dp"
<TextView android:layout_marginTop="5dp"
android:id="@+id/question" android:layout_marginEnd="5dp"
android:layout_width="356dp" android:layout_marginRight="5dp"
android:layout_height="130dp" android:layout_marginBottom="5dp
android:layout_above="@id/choices_la "
yout" android:backgroundTint="@color/gr
android:layout_marginStart="20dp" ey"
android:layout_marginLeft="20dp" android:text="Ans A"
android:layout_marginTop="20dp" android:textColor="@color/black" />
android:layout_marginEnd="20dp"
android:layout_marginRight="20dp" <Button
android:layout_marginBottom="18dp" android:id="@+id/ans_D"
android:gravity="center_horizontal" android:layout_width="match_paren
android:text="This will be the t"
question" android:layout_height="wrap_conten
android:textColor="@color/black" t"
30
android:layout_margin="5dp" android:layout_height="82dp"
android:layout_marginStart="5dp" android:layout_below="@id/choices_la
android:layout_marginLeft="5dp" yout"
android:layout_marginTop="5dp" android:layout_marginTop="103dp"
android:layout_marginEnd="5dp" android:backgroundTint="@color/blac
android:layout_marginRight="5dp" k"
android:layout_marginBottom="5dp android:insetLeft="20dp"
" android:insetTop="20dp"
android:backgroundTint="@color/gr android:insetRight="20dp"
ey" android:insetBottom="20dp"
android:text="Ans D" android:onClick="onHome"
android:textColor="@color/black" /> android:text="На головну"
android:textSize="20sp"
<Button app:cornerRadius="10dp"
android:id="@+id/ans_C"
android:layout_width="match_paren />
t"
android:layout_height="wrap_conten </RelativeLayout>
t"
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"
android:insetRight="20dp"
android:insetBottom="20dp"
android:text="Відповісти"
android:textSize="20sp"
app:cornerRadius="10dp" />

<Button
android:id="@+id/OnHomeBtn"
android:layout_width="match_parent"
31

You might also like