Professional Documents
Culture Documents
Звіт до курсової роботи Думрак
Звіт до курсової роботи Думрак
3
В ході розробки цього електронного довідника будуть використані
сучасні технології, такі як Android Studio для розробки мобільного додатку,
мова програмування Java для реалізації
Результатом цієї курсової роботи буде функціональний електронний
довідник з вбудованою системою тестування, який дозволить користувачам
зручно та ефективно отримувати доступ до необхідної інформації та
перевіряти свої знання.
4
1. Теоретична частина
1.1 Що таке електронний довідник?
Електронний довідник є комп'ютерною програмою або мобільним
додатком, який містить інформацію та матеріали з певної області знань або
предмету. Він призначений для надання користувачам зручного та швидкого
доступу до необхідних даних, фактів, визначень, інструкцій, формул та
інших ресурсів, пов'язаних з обраною темою.
Електронний довідник може включати різноманітні розділи та
підрозділи, що охоплюють різні аспекти предмета або області знань. Він
може містити текстові матеріали, ілюстрації, відео- або аудіофайли, графіки,
таблиці та інші типи інформації.
Довідники можуть охоплювати широкий спектр тематик, включаючи
словники, енциклопедії, каталоги продуктів, туристичні путівники, медичні
довідники, технічні документації і багато іншого. Вони забезпечують
швидкий доступ до інформації і можуть бути дуже корисними для отримання
відповідей на питання або розширення загальних знань.
Основна його перевага полягає в його мобільності та доступності. Він
може бути встановлений на персональний комп'ютер або смартфон, що
дозволяє користувачам мати постійний доступ до необхідних даних
незалежно від місця та часу. Крім того, електронний довідник може бути
оновлений та доповнений з часом, що забезпечує актуальність інформації для
користувачів.
5
1.2 Призначення довідника
Довідник призначений для надання інформації, вказівок, пояснень і
орієнтації з певної теми або предметної області. Він зазвичай містить
короткі, стислі відомості, які допомагають користувачам зрозуміти основні
концепції і знаходити відповіді на питання.
Довідники можуть мати різні формати, такі як книги, електронні
ресурси, веб-сайти, програми або мобільні додатки. Вони можуть бути
загальними (наприклад, "Англійська граматика для початківців") або
спеціалізованими (наприклад, "Медичний довідник" або "Кулінарний
довідник").
Типовий довідник містить відсортовані або систематизовані списки
термінів, визначень, питань та відповідей, категорій, посилань, графіків,
таблиць, ілюстрацій або інструкцій, що допомагають користувачам знайти
інформацію, яку вони шукають.
Довідники використовуються для навчання, дослідження, розв'язання
проблем, пошуку відповідей, ознайомлення з новими темами і загального
підвищення знань у певній області. Вони допомагають людям швидко
зорієнтуватися в складних питаннях і забезпечують доступ до конкретної
інформації на вимогу.
6
1.3 Огляд аналогів
Додаток Learn JavaScript є аналогом довідника по Ruby. Де користувач
може дізнатись багато корисної інформації про мову програмування.
Переваги додатку полягають в тому що додаток має красивий
інтерфейс, є поділ по розділам, та доступна інформація про декілька мов
програмування.
7
На рисунку 1.3 можемо побачити інтерфейс програми з красивим та
структурованим інтерфейсом, тож текст читати зручно і приємно.
9
Не дуже зручний компілятор;
Додаток доступний тільки на англійській мові і користувачі які
не володіють нею будуть мати проблеми щоб навчатись.
Додаток LearnPHPProgrammer також є аналогом довідника Ruby.
Серед головних переваг додатку є велика кількість розділів з
інформацією. Користувач з великою долею ймовірності знайде відповідь на
свою проблему.
10
Рисунок 1.10 Інтерфейс додатку LearnPHPProgrammer
В додатку наведені знімки екрана що допомагають краще візуалізувати
інформацію, що звісно позитивно проявиться на запам’ятовуванні
інформації.
11
Немає пошуку по розділам, що додає багато часу користувачеві
для пошуку потрібної інформації;
Не сучасний інтерфейс, не дуже приємно вчитись в програмі;
В програмі є великий баг при якому кнопка повернення в головне
меню зникає, і доводиться виходити з програми для того щоб вибрати новий
розділ.
1.4 Опис предметної області та постановка задачі
Опис предметної області для звіту до курсової роботи «Створення
електронного довідника Ruby з вбудованою системою тестування та
повторення на базі Android довідник, створений на Java в Android Studio».
14
Основні плагіни призначені для розробки і
розгортання Java, Groovy і Scala додатків, але готуються плагіни і для
інших мов програмування.
1.5.3 Середовище розробки Android Studio
Android Studio — це інтегроване середовище розробки (IDE),
спеціально створене для розробки мобільних додатків на платформі Android.
Воно надає розробникам широкий набір інструментів, що спрощують процес
створення, тестування та розгортання додатків для Android.
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 зображено структуру програми, її файли, класи, форми
та інше.
17
Клас «QuestionAnswer» є класом, що містить питання та відповіді для
тестування знань. У ньому зберігаються масиви рядків з питаннями,
варіантами відповідей та правильними відповідями.
Клас «TestActivity» відповідає за функціонал тестування. Його основна
відповідність полягає в відображенні питань, варіантів відповідей та обробці
вибору користувача.
Алгоритм роботи програми:
- При запуску програми користувачу будуть представленні
розділи.
- Користувач може вибрати розділ який його цікавить натиснувши
на нього, після чого відкриється пояснення даного розділу.
- Також, користувач може скористуватись пошуком на головній
сторінці програми, для легшого пошуку.
- Після того як користувач переглянув довідку є можливість
перевірити знаня, пройшовши тестування.
- В кінці тестування користувачу буде показаний його результат з
кількістю правильних відповідей.
2.1.3 Тестування проекту: план, методи та інструменти
В Головному меню користувачу доступні розділи натиснувши на який,
буде відкрито нове вікно де буде можливість прочитати інформацію.
Також в додатку реалізований пошук, для того щоб клієнт зміг швидко
та зручно знайти потрібний розділ.
Останній елемент, кнопка тестування, натиснувши на яку користувачу
буде задано декілька запитань по мові програмування Ruby, тим самим
перевіривши свої знання.
18
Рисунок 2.2 Інтерфейс додатку
На рисунку 2.3 зображено опис розділу «Ruby» в якому можна
ознайомитись з значенням даної мови.
19
Рисунок 2.4 Робота пошуку
У вікні тестування користувачу представлене запитання де є чотири
варіанти відповідей, потрібно натиснути на варіант, який вважається
правильним, якщо користувач натиснув на відповідь вона засвітиться
фіолетовим кольором як можна побачити на рисунку, що буде означати те,
що вона прийнята і можна натиснути на кнопку «Відповісти».
Якщо є бажання завершити тестування, то можна натиснути на
«Головне меню» і повернутись до розділів для подальшого вивчення.
20
Рисунок 2.6 Інтерфейс тестування
Після того як буде пройдено всі тести, на екрані висвітиться
інформація про кількість правильних відповідей.
22
ВИСНОВКИ
23
Існує велика кількість ресурсів і документації, присвячених розробці на
Java для Android, що полегшує процес вивчення та реалізації необхідних
функцій у вашому довіднику.
Розробка електронного довідника на платформі Android забезпечує
мобільний доступ до інформації, що робить його зручним і простим у
використанні для користувачів.
Отже, підсумувавши висновки, можна сказати, що курсовий проект
пройшов успішно і було досягнуто усіх поставлених цілей.
24
ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ
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); };
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; }
@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
} }
<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