You are on page 1of 48

ІНСТИТУТ ПРИКЛАДНОГО СИСТЕМНОГО АНАЛІЗУ»

НАЦІОНАЛЬНОГО ТЕХНІЧНОГО УНІВЕРСИТЕТУ УКРАЇНИ


«КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ
імені ІГОРЯ СІКОРСЬКОГО»

КАФЕДРА МАТЕМАТИЧНИХ МЕТОДІВ СИСТЕМНОГО АНАЛІЗУ

КУРСОВА РОБОТА
з дисципліни
«Програмування та алгоритмічні мови»
на тему: Психологічний тест

Студентки 1 курсу групи КА-95


Спеціальність: 124 «Системний аналіз»
Нечипорук Вікторії Олександрівни

Керівник: старший викладач


Назарчук Ірина Василівна

Національна оцінка ____________


Кількість балів: ____Оцінка: ECTS ____

Члени комісії:
_______________________________________________
(підпис) (вчене звання, науковий ступінь, прізвище та ініціали)
_______________________________________________
(підпис) (вчене звання, науковий ступінь, прізвище та ініціали)
_______________________________________________
(підпис) (вчене звання, науковий ступінь, прізвище та ініціали)

Київ – 2020 рік


ННК „ІПСА” НТУУ „КПІ”
(назва вищого закладу освіти)

Кафедра Математичних методів системного аналізу

Дисципліна Програмування та алгоритмічні мови

Спеціальність 124 Системний аналіз

Курс перший Група КА-95 Семестр другий


ЗАВДАННЯ
на курсовий проект(роботу) студента
Нечипорук Вікторії Олександрівни
(прізвище, ім’я, по батькові)

1. Тема проекту(роботи) Психологічний тест


Психологічний тест на визначення типу темпераменту людини.

2. Строк здачі студентом закінченого проекту(роботи)

3. Вихідні дані до проекту(роботи)


Консольний інтерфейс.
Психологічний тест на визначення типу темпераменту людини.

4. Зміст розрахунково-пояснювальної записки (перелік питань, які підлягають


розробці)
Постановка задачі.
Метод розв’язку задачі
Загальна блок-схема алгоритму та опис алгоритму
Опис програмного продукту.
Результати роботи.
Висновки.
Список літератури.
Додаток А. Текст програми.

5. Перелік графічного матеріалу (з точним зазначенням обов’язкових


креслень)
Загальна блок-схема алгоритму.
Ілюстрації роботи програми.

6. Дата видачі завдання 11.02.2020


КАЛЕНДАРНИЙ ПЛАН
№/п Назва етапів курсового проекту (роботи) Строк виконання Примітка
етапів роботи
1. Вибір теми курсової роботи. 19.02.2020
Опрацювання відповідної
літератури.
Оформлення листа Завдання.
2. Аналіз постановки задачі. 26.02.2020
3. Вибір та дослідження методів, вибір 05.03.2020
відповідних структур даних,
розробка алгоритму. Перше
узгодження з керівником.
4. Проектування інтерфейсу. 12.03.2020
5. Друге узгодження з керівником. 19.03.2020
6. Програмна реалізація. 26.03.2020
7. Демонстрація першого варіанту. 02.04.2020
Трете узгодження з керівником.
8. Заключне тестування програми. 16.04.2020
9. Аналіз результатів. 23.04.2020
Оформлення звіту.
10. Захист та демонстрація курсової 17.05.2020 – «А»
роботи. 24.05.2020–«В,С»
30.05.2020– «D,E»

Студент Нечипорук Вікторія Олександрівна


(підпис)

Керівник Назарчук Ірина Василівна


(підпис) (прізвище, ім’я, по батькові)

(дата)
АНОТАЦІЯ
У даній курсовій роботі подано програмну реалізацію психологічного
тесту на визначення темпераменту людини завдяки мові програмування С++
у середовищі Visual Studio 2019.
Інтерфейс програми було реалізовано у консольному вікні Windows.
Програма створена для проходження тесту на темперамент людини.

ANNOTATION
This course work presents a software implementation of a psychological
test to determine human temperament with the C ++ programming language in
Visual Studio 2019.
The program interface was implemented in the Windows console window.
The program was created to pass a test for human temperament.
ЗМІСТ

ВСТУП .................................................................................................................. 6

РОЗДІЛ 1............................................................................................................... 7

ПОСТАНОВКА ЗАДАЧІ ..................................................................................... 7

1.1 Огляд існуючих підходів до розв’язання поставленої задачі .................. 7

1.2 Обґрунтування вибору засобів розробки .................................................. 9

1.3 Постановка задачі проектування .............................................................. 11

РОЗДІЛ 2 ............................................................................................................ 12

РОЗРОБКА ПРОГРАМНОГО ПРОДУКТУ ..................................................... 12


2.1 Алгоритм виведення результату .............................................................. 12
2.2 Алгоритм розв’язку задачі ...................................................................... 13
РОЗДІЛ 3 ............................................................................................................ 15

3.1 Опис класу ............................................................................................... 15


3.2 Опис головних структур і змінних програми ....................................... 15
3.3 Опис основних функцій ......................................................................... 16
ВИСНОВКИ ...................................................................................................... 27

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ ........................................................... 28

ДОДАТКИ .......................................................................................................... 30

Додаток А...................................................................................................... 30
Лістинг програми ........................................................................................ 30
Додаток Б ...................................................................................................... 45
Текст файлу ................................................................................................... 45

5
ВСТУП
Актуальність: тест на виявлення темпераменту людини є актуальним,
адже саме темперамент вважається найбільш стійкою характеристикою
особистості людини, яка майже не змінюється впродовж життя і виявляється
у всіх сферах життєдіяльності.
Мета: розробити та реалізувати програмний продукт для проходження
тесту для визначення темпераменту людини.
Завдання: розробити програму, що реалізує психологічний тест.
Практичне значення: : створений програмний продукт буде корисним ,
щоб дізнатися про тип свого темпераменту.
Використане програмне забезпечення: при виконанні роботи було
використано таке програмне забезпечення: середовище розробки Microsoft
Visual Studio Code 2019, операційна система Microsoft Windows 10, Microsoft
Word для оформлення звіту пояснювальної записки.
Структура роботи: робота складається зі вступу, трьох розділів,
висновків, додатків та списку використаних джерел.

6
РОЗДІЛ 1
ПОСТАНОВКА ЗАДАЧІ
1.1 Огляд існуючих підходів до розв’язання поставленої задачі
Психологічний тест – це інструмент, який дає змогу одержати
вимірювання відповідних властивостей психології людини. Завдяки тесту на
темперамент ви можете дізнатися про тип темпераменту, який переважає саме
у вашій особистості. Це дуже важливо, адже завдяки темпераменту
виробляється індивідуальний стиль діяльності людини, спосіб її життя.
Головними проблемами будь-яких психологічних тестів є точність
результату та час їх проходження. Людина, яка проходить психологічний тест,
бажає якнайшвидше отримати точний результат, при цьому не витративши
свій час на купу нудних запитань. Мета цієї розробки – створити точний
тест,для проходження якого потрібно витратити не більше двох хвилин.
Перед створенням власної програми можна розглянути вже існуючі
методи розробки для аналізу їх мінусів та плюсів, та створити власний
оптимальний варіант.
Далі наведений приклад тесту на темперамент:
Тест на темперамент по Айзенку[9] – онлайн-тест, що складається з 60
питань та двох відповідей на вибір(«так» або «ні»). Після того як користувач
дав відповіді на запитання, з’являється вікно з результатами. У вікні зображена
шкала щирості користувача (тобто програма перевіряє, чи роздумливо
користувач обирав відповіді),круг Айзенка, в якому зеленою крапкою вказано
положення в цій шкалі і відповідно тип темпераменту та характерні риси цього
типу темпераменту. Також додатково подані результати та шкала щодо того, є
користувач інтровертом чи екстравертом.
Зразок проходження тесту поданий на рис.1.1, рис.1.2:

7
рис.1.1 Проходження тесту

рис.1.2 Результат тесту


Порівняльна характеристика власної програми та вже існуючої з
перевагами та недоліками подані у табл.1.1 :

Таблиця 1.1
Програма Власна програма Тест на темперамент
по Айзенку

8
Переваги Простий інтерфейс, Графічний інтерфейс,
більше варіантів відповідей, більше запитань,
менші затрати по часу для виведення результатів
проходження тесту. у формі шкал та
ілюстрації, більш
точні результати.
Недоліки Можлива деяка неточність Необхідний доступ до
результатів Інтернету.

Висновки Проста у використанні, Хороший онлайн-тест


нвелика програма, що для визначення
допомагає визначити темпераменту
темперамент людини. людини.

Розглянувши програми-аналоги, врахувавши основні недоліки та


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

1.2 Обґрунтування вибору засобів розробки


Для розробки програмного продукту була обрана мова
програмування C ++ . C++ – мова програмування високого рівня з
підтримкою декількох парадигм програмування: об’єктно-орієнтованої,
узагальненої та процедурної. Розроблена Б'ярном Страуструпом у 1979
році та названа «Сі з класами». Страуструп перейменував мову у C++ у
1983 р. Перевагами цієї мови є:
1)Висока сумісність з мовою С, що дозволяє використовувати весь
існуючий С-код (код З може бути з мінімальними переробками
скомпільовано компілятором С ++; бібліотеки, написані на С, зазвичай

9
можуть бути викликані з С ++ безпосередньо без будь-яких додаткових
витрат, в тому числі і на рівні функцій зворотного виклику, дозволяючи
бібліотекам, написаним на С, викликати код, написаний на С ++.
2)Підтримуються різні стилі і технології програмування, включаючи
традиційне директивне програмування, ООП, узагальнене програмування,
метапрограмування (шаблони, макроси).
3)Є можливість роботи на низькому рівні з пам’яттю, адресами,
портами. Можливість створення узагальнених контейнерів і алгоритмів для
різних типів даних, їх спеціалізація і обчислення на етапі компіляції,
використовуючи шаблони.
4)Кросплатформеність. Доступні компілятори для великої кількості
платформ, на мові C ++ розробляють програми для найрізноманітніших
платформ і систем.
5)Ефективність. Мова спроектована так, щоб дати програмісту
максимальний контроль над усіма аспектами структури і порядку виконання
програми[10].
У якості середовища розробки було застосовано розробки Microsoft
Visual Studio Code 2019. Це найбільш ефективний спосіб розробки для
Windows, в якому можна проектувати та створювати класичні програми .
Також Microsoft Visual Studio Code 2019 підтримує сучасні версії С++, тому
можна створювати додатки C++11, C++14 та C++17. Проводьте базові
операції, такі як установка точок зупину і покрокове виконання коду, а
також вдавайтеся до розширених можливостей, включаючи візуалізацію
змінних, профілювання продуктивності, налагодження будь-яких
локальних і віддалених процесів, а також налагодження багатопоточних
додатків. Запускайте код одним клацанням, редагуйте його в режимі
реального часу і продовжуйте його виконання без повторної збірки.
Робіть код більш наочним за допомогою розмальовки синтаксичних
конструкцій, рекомендацій, підказок, уявлення класів і ієрархії викликів. Ви
можете перейти до будь-якого символу в коді за посиланням, визначенню,

10
оголошенню і іншими способами. Користуйтеся автозаповненням в процесі
введення коду, швидко усувайте проблеми і робіть рефакторинг по мірі
необхідності.[11]

1.3 Постановка задачі проектування


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

11
РОЗДІЛ 2
РОЗРОБКА АЛГОРИТМУ РОЗВ’ЯЗКУ ЗАДАЧІ
2.1 Алгоритм виведення результату
Головним завданням психологічного тесту є отримання точного
результату. Саме тому для цього під час проходження тесту здійснюється
аналіз поданих користувачем відповідей. Принцип аналізу відповідей
полягає в тому, що здійснюється підрахунок, скільки яких відповідей обрала
людина, що проходить тест. Схема алгоритму наведена на Рис. 2.1.

Рис. 2.1. Схема алгоритму виведення результату


Наприклад, якщо найбільше з-поміж усіх варіантів був обраний
варіант А), то у підсумку вид темпераменту людини буде визначений як
флегматик. Аналогічно подається результат, якщо було найбільше дано
відповідей B), C), або D). Тобто кожному з варіантів А), B), C), D).

12
Відповідає певний результат, який буде зображений після тесту внаслідок
підрахунку найбільшої кількості якоїсь із відповідей

2.2 Алгоритм розв’язку задачі


На початку роботи перед користувачем з’являється меню із пунктами
Begin test «What temperament do you have?» (Розпочати тест «Який
темперамент ти маєш?»), About test (Про тест), About author (Про автора),
Exit (Вихід).
Загальний алгоритм роботи всієї програми зображений на рис.2.2:

Рис. 2.2. Блок-схема роботи програми


Головний алгоритм програми виконується у наступні кроки:
1. Запустити програму.
2. Розпочати тест
3. Відповісти на чотирнадцять запитань тесту за допомогою клавіш-
стрілок «вгору» та «вниз» та «Enter».

13
4. Обрати пункт, щоб отримати результат психологічного тесту на
темперамент людину або повернутися до головного меню.
5. Отримати результат
6. Повернутися до головного меню.
7.Вийти з меню.
8.Завершити роботу програми.
Також перед або після проходженням тесту можна прочитати коротку
інформацію про тест та автора, обравши пункти меню About test (Про тест),
About author (Про автора) відповідно.

14
РОЗДІЛ 3
ОПИС РОЗРОБЛЕНОГО ПРОГРАМНОГО ПРОДУКТУ
3.1 Опис класу
Для створення та реалізації програмного продукти було визначено, що
будуть використані елементи об’єктно-орієнтованого програмування.
Отже, було створено клас class PsychologicalTest з модифікатором доступ
public, конструктором та деструктором за умовчанням. До того ж був
створений метод класу void quest(), який ми викликаємо поза класом
функцією void PsychologicalTest::quest(). Саме завдяки цьому методу класу
ми маємо змогу зчитувати запитання з варіантами відповідей нашого тесту
та вивести на екран користувача. У цьому методі класу ми підраховуємо
скільки яких відповідей було обрано, створюємо та записуємо ці результати
у масив, знаходимо варіант відповіді, обраний користувачем найчастіше. І
таким чином після цього ми виводимо результат проходження
психологічного тесту на темперамент.
3.2 Опис головних структур і змінних програми
Під час роботи програми, в функціях використовуються змінні,
перелік яких наведено у таблиці 3.1 :
Таблиця 3.1. Основні змінні, що відповідають за роботу програми
№ Змінна Тип Призначення
1 А, B, C, D int для підрахунку відповідей, за
якими визначаємо тип
темпераменту людини
2 x,y int координати точки
3 i int для створення рамки
4 key int виведення пунктів меню та
підрахунок відповідей
5 code int переміщення по меню

15
6 cursorPos COORD структура з двома полями x i y,
в якій повинні знаходитися
координати текстового курсору
7 Question[1000] char запис питання з файлу
8 AnswerA[1000] char запис варінта відповіді з файлу
9 mas[4] int масив, в який після проходження
тесту записуємо результати
10 index int знаходження індексу
максимального елемента в
масиві, щоб дізнатися яких
обраних користувачем
відповідей найбільше
11 max int знаходження максимального
елемента в масиві, щоб дізнатися
яких обраних користувачем
відповідей найбільше
12 answer int підключення меню

3.3 Опис основних функцій


У таблиці 3.2 подано опис усіх функцій, їх призначення і семантику
змінних у порядку появі у коді :
Таблиця 3.2 Опис функцій програми
№ Прототип функції Призначення Семантика параметрів
функції
1 void SetConcole(int x, встановлює x,y – певні координати точки
int y) курсор у
певній точці

16
консольного
вінка
2 HANDLE consoleOutput = отримуємо константа
GetStdHandle дескриптор STD_OUTPUT_HANDLE
(STD_OUTPUT_HANDLE) консольного повідомляє про те, що ми
вікна хочемо отримати дескриптор
стандратного пристрою
ввода/виводу stdout

3 SetConsoleCursorPosition встановлює consoleOutpu приймає


(consoleOutput, cursorPos) положення дескриптор консольного
курсора в вікна, cursorPos приймає
консольному змінну типу типа COORD
вікні (структура з двома полями X
i Y), в якій повинні
знаходитися координати
текстового курсору
4 void Ramka() створює
рамку
_
в меню
5 int Menu() створення _
меню
6 SetConsoleTextAttribute встановлює consoleOutpu приймає
(consoleOutput , сірий колір дескриптор консольного
BACKGROUND_INTENSITY) фону вікна,
консольного BACKGROUND_INTENSITY-
вікна сірий колір фону косольного
вікна

17
7 HANDLE hConsole = отримуємо константа
GetStdHandle дескриптор STD_OUTPUT_HANDLE
(STD_OUTPUT_HANDLE) консольного повідомляє про те, що ми
вікна хочемо отримати дескриптор
стандратного пристрою
ввода/виводу stdout.

8 SetConsoleTextAttribute встановлює hConsole приймає дескриптор


(hConsole, зелений колір консольного вікна,
FOREGROUND_GREEN тексту з FOREGROUND_GREEN –
обраного встановлює зелений колір
пункту в тексту
меню
9 SetConsoleTextAttribute встановлює hConsole приймає дескриптор
(hConsole, зелений колір консольного вікна,
FOREGROUND_INTENSITY) решти тексту FOREGROUND_GREEN –
меню встановлює сірий колір тексту
10 system(“cls”) очищує екран “cls” – очищує екран

11 code = _getch() зчитує те, що


натиснув
користувач і в
залежності від
_
натиснутого
переміщує по
меню
12 ifstream fin(“Test.txt”) відкриваємо “Test.txt”- текстовий, звідки
текстовий зчитуються запитання та
документ для варіанти відповідей для тесту
зчитування

18
14 fin.is_open() перевіряє, чи
_
вдалося
відкрити файл
для
зчитування
15 fin.eof() перевірка, чи
_
досягнув
файл кінця
16 fin.getline(Question, 1000) зчитуємо Question – запитання до 1000
рядок символів
запитання з
файлу
17 fin.close() закриваємо
_
файл після
зчитування
18 void about() створює
_
пункт меню
«About test»
19 void info() створює
_
пункт меню
«About
author»
20 system(“pause”) призупинення призупинення виконання
виконання пакетного файлу і виведення
пакетного повідомлення: «Для
файлу і продовження натисніть будь-
виведення яку клавішу. . .»
повідомлення:
«Для
продовження

19
натисніть
будь-яку
клавішу. . .»

3.3 Опис інтерфейсу


Інтерфейс програми було реалізовано у консольному вікні Windows.
Після запуску програми перед користувачем постає головне меню програми
(рис.3.1) :

Рис.3.1 Головне меню програми

Головне меню програми складається з чотирьох пунктів: Begin test


«What temperament do you have?» (Розпочати тест «Який темперамент ти
маєш?»), About test (Про тест), About author (Про автора), Exit (Вихід).
Користувач має змогу обрати один з цих пунктів завдяки клавішам-стрілкам
«вгору» та «вниз», а обрати потрібний пункт клавішею «Enter» .

20
Щоб розпочати тест, користувачу потрібно обрати пункт меню «Begin
test <What temperament do you have?>», після чого відкриється вікно
(рис.3.2). У вікні міститься запитаня та чотири варіанти відповідей на вибір.

Рис.3.2 Проходження тесту

Далі після вибору однієї з чотирьох відповідей на запитання №1,


з’являється запитання №2 з варіантами відповідей (рис.3.3):

Рис.3.3 Проходження тесту

Таким чином після відповіді на запитання з`являються інші запитання


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

21
тесту. Після того, як користувач відповів на усі запитання, з’являється вікно
(рис.3.4) з міні-меню, в якому є два пункти на вибір : «Show result»
(«Показати результат»), «Exit to menu » («Вихід в меню») .

Рис.3.4 Міні-меню після відповіді на запитання

Пункт «Exit to menu » повертає користувача у початкове головне меню


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

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


«Show result», після чого один з результататів з’явиться у новому
вікні(рис3.5-3.8):

22
Рис.3.5 Виведення результату №1

Рис.3.6 Виведення результату №2

23
Рис.3.7 Виведення результату №3

Рис.3.8 Виведення результату №4

Щоб повернутися в головне меню програми після підсумку тесту ,


потрібно натиснути будь-яку клавішу.

Якщо користувач обрав пункт меню «About test», то відкриється


вікно(рис.3.9), в якому описана коротка інформація про тест :

24
Рис.3.9 Пункт меню «About test»

Обравши пункт меню «About author»,відкриється вікно(рис.3.10), в


якому подана коротка інформація про розробника програми:

Рис.3.10 Пункт меню «About author »

Якщо користувач хоче припинити роботу з програмою, то необхідно


обрати “Exit” у головному меню.

25
Отже, розроблене програмне забезпечення має зручний, зрозумілий та
простий у використанні інтерфейс користувача.

26
ВИСНОВКИ
Під час виконання курсової роботи було розроблено програмне
забезпечення для проходження психологічного тесту на темперамент
людини та оформлено пояснювальну записку.
У першому розділі було розглянуто існуючі методи до розв’язання
поставленої задачі, обґрунтовано вибір інструментів розробки та
сформульовано уточнену постановку задачі.
У другому розділі досліджено алгоритм виведення результату та
розроблено алгоритм розв’язку задачі.
У третьому розділі виконано опис розробленого програмного
продукту, зокрема, описано інтерфейс, клас, перемінні та структури,
функції програми.
Програмне забезпечення розроблено у середовищі Microsoft Visual
Studio 2019. Створена програма коректно реалізує всі функції для
проходження тесту, реалізовано зручний та простий для сприйняття
користувачем інтерфейс. Перевагою даного продукту є зручний та
зрозумілий інтерфейс. Меню реалізовано в консольному вікні. У роботі
застосоване об’єктно-орієнтоване процедурне програмування, що значно
пришвидшує роботу алгоритму.
Отже, розроблене програмне забезпечення працює коректно. Серед
переваг програми можна виділити простий у використанні інтерфейс,
швидкість виконання тесту, завдяки чому можна швидко дізнатися свій вид
темпераменту. Серед недоліків можна виділити невелику кількість
запитань, вірогідність видачі не зовсім точного результату, що може бути
вдосконалено в майбутньому. Виконання цієї курсової роботи дозволило
мені покращити і здобути навички з розробки алгоритмів, отриманні мною
на лекціях та практичних заняттях з програмування.

27
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. Шилдт Г. Полный справочник по C++, 4-е издание.. Пер. С англ..
— М. : Издательский дом “Вильямс”, 2006. — 800 с. : ил. — Парал. Тит.
Англ., с.226
2. ДСТУ 8302:2015. Бібліографічне посилання. Загальні положення та
правила складання. [Чинний від 2016-07-01]. Вид. Офіц. Київ :ДП
«УкрНДНЦ», 2016. 16с. (Інформація та документація).
3. ДСТУ 3008:2015. Звіти у сфері науки і техніки. Структура та
правила оформлювання. [Чинний від 2017-07-01]. Вид. Офіц. Київ :ДП
«УкрНДНЦ», 2016. 26с. (Інформація та документація).
4. І.В.Назарчук, Г.Г.Швачко. Програмування та алгоритмічні
мови Програмування: Методичні вказівки до виконання курсового проекту
для студентів галузі знань 12 «Інформаційні технології» спеціальність 122
«Комп’ютерні науки та інформаційні технології», 124 «Системний аналіз».
– К.НТУУ «КПІ», 2017 – 32с. [Електронне навчальне видання]
5. Доля П.Г. Введение в C/C++ программирование консоли. Рисование
в консольном окне. Харьковский Национальный Университет механико –
математическийфакультет. 2015. C.2-35. URL:
http://geometry.karazin.ua/resources/documents/20150725093727_3339f8ece8c.pdf
6. Форум программистов – Общие вопросы C/C++ - меню в консоле .
URL: https://www.programmersforum.ru/showthread.php?t=131417
7. Хабр Q&A — вопросы и ответы . Как реализовать переключатель?
URL: https://qna.habr.com/q/282811
8. Китаева Н.С.Тест по обществознанию (6 класс) на тему: тест на
определение типа темперамента. Социальная сеть работников образования
nsportal.ru.
URL: https://nsportal.ru/shkola/obshchestvoznanie/library/2015/02/23/test-na-
opredelenie-tipa-temperamenta
9. Фитнес для мозга — онлайн упражнения для тренировки и развития
мозга. URL: https://brainapps.ru/test/temperament

28
10. StudFiles. Достоинства и недостатки языка
URL: https://studfile.net/preview/5618019/page:2/
11. Visual Studio. Visual Studio с поддержкой C/C++: интегрированная
среда разработки и компилятор для Windows
URL: https://visualstudio.microsoft.com/ru/vs/features/cplusplus/

29
ДОДАТКИ
Додаток А
Лістинг програми
#include <string.h>
#include <fstream>
#include <conio.h>
#include <string>
#include <iostream>
#include <Windows.h>

using namespace std;

int A = 0;
int B = 0;
int C = 0;
int D = 0;

class PsychologicalTest {

public:

PsychologicalTest() {};//конструктор

~PsychologicalTest() {};//деструктор

void quest();

};

void SetConcole(int x, int y) {

30
HANDLE consoleOutput;
COORD cursorPos;

consoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
cursorPos.X = x;
cursorPos.Y = y;
SetConsoleCursorPosition(consoleOutput, cursorPos);
}

void Ramka() {

for (int i = 30; i < 87; i++) {


SetConcole(i, 6.5);
cout << "###";
SetConcole(i, 14);
cout << "###";
}
}

int Menu()
{

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

int key = 1;
int code;

do {
HANDLE consoleOutput;//получаем дескриптор устройства
стандартного вывода

31
COORD cursorPos;
consoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consoleOutput,
BACKGROUND_INTENSITY);
system("cls");
Ramka();

SetConcole(30, 8);
key = (key + 4) % 4;
if (key == 1)
{
SetConsoleTextAttribute(hConsole,
FOREGROUND_GREEN);
cout << "[Begin test «What temperament do you have?»]"
<< endl;
SetConsoleTextAttribute(hConsole,
FOREGROUND_INTENSITY);
SetConsoleTextAttribute(consoleOutput,
BACKGROUND_INTENSITY);
}
else cout << "[Begin test «What temperament do you have?]»" <<
endl;
SetConcole(30, 9);
if (key == 2)
{
SetConsoleTextAttribute(hConsole,
FOREGROUND_GREEN);
cout << "[About test]" << endl;
SetConsoleTextAttribute(hConsole,
FOREGROUND_INTENSITY);

32
SetConsoleTextAttribute(consoleOutput,
BACKGROUND_INTENSITY);
}
else cout << "[About test]" << endl;
SetConcole(30, 10);
if (key == 3)
{
SetConsoleTextAttribute(hConsole,
FOREGROUND_GREEN);
cout << "[About author]" << endl;
SetConsoleTextAttribute(hConsole,
FOREGROUND_INTENSITY);
SetConsoleTextAttribute(consoleOutput,
BACKGROUND_INTENSITY);
}
else cout << "[About author]" << endl;
SetConcole(30, 11);
if (key == 0)
{
SetConsoleTextAttribute(hConsole,
FOREGROUND_GREEN);
cout << "[Exit]" << endl;
SetConsoleTextAttribute(hConsole,
FOREGROUND_INTENSITY);
SetConsoleTextAttribute(consoleOutput,
BACKGROUND_INTENSITY);
}
else cout << "[Exit]" << endl;
code = _getch();
if (code == 224)

33
{
code = _getch();
if (code == 80) key++;
if (code == 72) key--;
}
} while (code != 13);
system("cls");
return key;
}

void PsychologicalTest::quest()
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

char Question[1000];
char AnswerA[1000];
char AnswerB[1000];
char AnswerC[1000];
char AnswerD[1000];

ifstream fin("Test.txt");

if (!fin.is_open())
{
cout << "Couldn`t open file!\n";
}
else {
do {

34
HANDLE consoleOutput;
COORD cursorPos;
consoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consoleOutput,
BACKGROUND_INTENSITY);
system("cls");
fin.getline(Question, 1000);
fin.getline(AnswerA, 1000);
fin.getline(AnswerB, 1000);
fin.getline(AnswerC, 1000);
fin.getline(AnswerD, 1000);

int key = 1;
int code;
do {
HANDLE consoleOutput;
COORD cursorPos;
consoleOutput =
GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consoleOutput,
BACKGROUND_INTENSITY);
system("cls");

SetConcole(1, 0);
cout << Question << endl;
SetConcole(3, 2);
key = (key + 4) % 4;

if (key == 1)
{

35
SetConsoleTextAttribute(hConsole,
FOREGROUND_GREEN);
cout << AnswerA << endl;
SetConsoleTextAttribute(hConsole,
FOREGROUND_INTENSITY);
SetConsoleTextAttribute(consoleOutput,
BACKGROUND_INTENSITY);
}
else cout << AnswerA << endl;
SetConcole(3, 3);
if (key == 2)
{
SetConsoleTextAttribute(hConsole,
FOREGROUND_GREEN);
cout << AnswerB << endl;
SetConsoleTextAttribute(hConsole,
FOREGROUND_INTENSITY);
SetConsoleTextAttribute(consoleOutput,
BACKGROUND_INTENSITY);
}
else cout << AnswerB << endl;
SetConcole(3, 4);
if (key == 3)
{
SetConsoleTextAttribute(hConsole,
FOREGROUND_GREEN);
cout << AnswerC << endl;
SetConsoleTextAttribute(hConsole,
FOREGROUND_INTENSITY);

36
SetConsoleTextAttribute(consoleOutput,
BACKGROUND_INTENSITY);
}
else cout << AnswerC << endl;
SetConcole(3, 5);
if (key == 0)
{
SetConsoleTextAttribute(hConsole,
FOREGROUND_GREEN);
cout << AnswerD << endl;
SetConsoleTextAttribute(hConsole,
FOREGROUND_INTENSITY);
SetConsoleTextAttribute(consoleOutput,
BACKGROUND_INTENSITY);
}
else cout << AnswerD << endl;

code = _getch();
if (code == 224)
{
code = _getch();
if (code == 80) key++;
if (code == 72) key--;
}
} while (code != 13);

SetConcole(5, 9);

if (key == 1) A++;
if (key == 2) B++;

37
if (key == 3) C++;
if (key == 0) D++;

system("cls");
} while (!fin.eof());//когда достигнут конец файла
fin.close(); //закрываем файл

int mas[4];
mas[0] = A;
mas[1] = B;
mas[2] = C;
mas[3] = D;
int index;
int max = 0;
for (int i = 0; i < 4; i++)
{
if (max < mas[i])
{
max = mas[i];
index = i;
}
}

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

int key = 1;
int code;

38
do {
HANDLE consoleOutput;
COORD cursorPos;
consoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consoleOutput,
BACKGROUND_INTENSITY);
system("cls");
Ramka();

SetConcole(35, 9);
key = (key + 4) % 4;
if (key == 1)
{
SetConsoleTextAttribute(hConsole,
FOREGROUND_GREEN);
cout << "[Show result]" << endl;
SetConsoleTextAttribute(hConsole,
FOREGROUND_INTENSITY);
SetConsoleTextAttribute(consoleOutput,
BACKGROUND_INTENSITY);
}
else cout << "[Show result]" << endl;
SetConcole(35, 10);
if (key == 2)
{
SetConsoleTextAttribute(hConsole,
FOREGROUND_GREEN);
cout << "[Exit to menu]" << endl;
SetConsoleTextAttribute(hConsole,
FOREGROUND_INTENSITY);

39
SetConsoleTextAttribute(consoleOutput,
BACKGROUND_INTENSITY);
}
else cout << "[Exit to menu]" << endl;

code = _getch();
if (code == 224)
{
code = _getch();
if (code == 80) key++;
if (code == 72) key--;
}
} while (code != 13);
system("cls");

if (key == 1)
{

switch (index)
{
case 0:
{
cout << "Вы - Флегматик\n\
ФЛЕГМАТИК – спокоен даже в сложнейших ситуациях, невозмутим,\n\
стабилен и последователен в стремлениях и отношениях.\n\
Придерживается выработанного распорядка, стремится к системе,
нетороплив и основателен.\n\
Вместе с тем он инертен, медленно переключается с одной работы на
другую.\n\

40
Сильные стороны – надежный, уверенный в себе, упорный и
настойчивый,\n\
может качественно выполнять даже самую монотонную
работу.Стрессоустойчив и уравновешен.\n\
Слабые стороны – очень ранимый, глубоко и долго переживает любые
конфликты.\n\
Медлителен, долго принимает решения.Плохо относится к переменам." <<
endl;
}break;
case 1:
{
cout << "Вы - Меланхолик\n\
МЕЛАНХОЛИК - быстро утомляем, неуверен в себе, тревожен и
мнителен.\n\
Хорошо разбирается в оттенках чувств, осторожен и осмотрителен.\n\
Скрытен и застенчив, сильно переживает по малейшему поводу.\n\
Трудно приспосабливается к новым людям.\n\
Сильные стороны – имеет глубокий внутренний мир.\n\
Обладает высокой чувствительностью. Хорошо справляется с
интеллектуальной деятельностью.\n\
Достигает значительных успехов в творчестве.\n";
}break;
case 2:
{
cout << "Вы - Холерик\n\
ХОЛЕРИК – отличается быстротой действий и решений, частой сменой
настроения,\n\
повышенной возбудимостью. Во взаимоотношениях нередко излишне
резок,\n\
прямолинеен в оценках. Часто неуживчив, не умеет себя сдерживать,\n\

41
обладает влиянием на окружающих, быстро переходит от одного дела к
другому.\n\
Любит быть в центре внимания.\n\
Сильные стороны – Прирожденный лидер, который страстно отдается
своему делу,\n\
вкладывая в него всю силу и энергию. Обладает сильным\n\
самоконтролем в критических ситуациях. Творчески подходит к решению
любых проблем.\n\
Слабые стороны – часто не доводит дело до конца, т.к. пытается делать
несколько дел\n\
одновременно и быстро истощается. Неуравновешен, порой агрессивен.\n";
}break;
case 3:
{
cout << "Вы - Сангвиник\n\
САНГВИНИК – эмоционален и отличается отличной
работоспособностью.\n\
Он довольно быстро ориентируется в незнакомой обстановке,
инициативен,\n\
оптимистичен, за короткое время входит в коллектив, создает вокруг себя
положительный\n\
микроклимат, сравнительно легко переживает неудачи. Вместе с тем,
избегает\n\
острых проблем, часто упрощает поставленные задачи.\n\
Сильные стороны – активен, полон энергии, легко берется за новое дело.\n\
Легко переживает неудачи, легок в общении, быстро становится душой
компании.\n\
Из него получится хороший руководитель или оратор.\n\
Слабые стороны – нередко повехностен в общении.\n\

42
Очень зависим от новых впечатлений, без них он станет вялым и
безразличным.\n";
}break;
}
A = 0;
B = 0;
C = 0;
system("pause");
}
else if (key == 2)
{
A = 0;
B = 0;
C = 0;
Menu();
}
}
}

void about() {
system("cls");
Ramka();

SetConcole(33, 7);
cout << "This test helps you discover your temperament type.";
SetConcole(33, 8);
cout << "Temperament is an individual's characteristic level \n";
SetConcole(33, 9);
cout << "of emotional excitability or intensity. \n";
SetConcole(33, 10);

43
cout << "Test is not an accurate for the full 100%.\n";
SetConcole(33, 11);
cout << "It must be taken into account. \n \n ";
SetConcole(33, 12);
system("pause");
}

void info() {

system("cls");
Ramka();

SetConcole(47, 7);
cout << "Programm";
SetConcole(40, 8);
cout << "<Psychological test>";
SetConcole(40, 9);
cout << "by Viktoriia Nechyporuk ";
SetConcole(40, 10);
cout << "KPI,IASA,Group KA-95 ";
SetConcole(40, 11);
cout << "System Analysis ";
SetConcole(40, 13);
system("pause");
}

int main(int argc, char* argv[])


{

44
setlocale(LC_ALL, "rus");
PsychologicalTest obj1;

HANDLE consoleOutput;
COORD cursorPos;
consoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consoleOutput,
BACKGROUND_INTENSITY);

while (1) {
int answer = Menu();
switch (answer)
{
case 1: obj1.quest(); break;
case 2: about(); break;
case 3: info(); break;
case 0: return 0;
}

system("pause");
return 0;
}
Додаток Б
Текст файлу
1 - Kakoj u vas harakter ?
A) spokojnyj, medlitelnyj, obstoyatelnyj, sderzhannyj, mirolyubivyj.
B) Robkij, zastenchivyj, obidchivyj, vpechatlitelnyj, nereshitelnyj.
C) Energichnyj, neugomonnyj, shalovlivyj, goryachij, zadiristyj.

45
D) Zhiznelyubivyj, optimistichnyj, kompromissnyj, obshitelnyj, sklonnyj k
risku.
2 - Kakie emocii vy naibolee chasto ispytyvaete ?
A) polozhitelnye, burnyh reakcij net.
B) Strah
C) Gnev, burnye emocii
D) Polozhitelnye emocii, mnogo smeyus.
3 - Kakie igry vam nravyatsya?
A) uedinennye, tihie, spokojnye.
B) uedinennye, tihie; podvizhnye i shumnye – tolko s blizkimi.
C) azartnye, shumnye, podvizhnye, dazhe agressivnye.
D) vsyakie, no chtoby bylo veselo.
4 - Kak reagiruete na nakazanie?
A) prakticheski bez emocij
B) negativno, s obidoj
C) na slovesnye – spokojno, na drugie – s burnym protestom.
D) spokojno.
5 - Kak vedete sebya v neozhidannyh situaciyah?
A) maloemocionalno
B) pytayus izbezhat etoj situacii (instinkt samosohraneniya)
C) pytayus soprotivlyatsya (potrebnost borby)
D) proyavlyayu lyubopytstvo (vyrazhennoe pozitivnoe otnoshenie)
6 - Naskolko vy obshitelny?
A) predpochitayu uedinenie
B) predpochitayu uedinenie, obshitelen tolko s blizkimi.
C) nuzhdayus v zritelyah i spodvizhnikah
D) lyublyu obshestvo i vzroslyh, i detej, znakomlyus bystro.
7 - Kakoe polozhenie vy zanimaete sredi sverstnikov, est li liderskie kachestva?
A) avtoriteta i kachestv lidera ne imeyu
B) ne lider, avtoritet imeyu v uzkom krugu druzej

46
C) sam sebya vydvigayu liderom, no sverstniki po-raznomu k etomu
otnosyatsya
D) prirozhdennyj lider, dusha kompanii
8 - Osobennosti pamyati
A) Zapominayu medlenno, no zapominayu i pochti ne zabyvayu celoe
B) zapominayu po-raznomu, bolshe vnikayu v melochi
C) bystro zapominayu detali, no bystro zabyvayu
D) bystro i legko shvatyvayu celoe i dolgo pomnyu
9 - Kak usvaivaetsya novoe?
A) medlenno, zato obstoyatelno
B) zavisit ot obstoyatelstv
C) shvatyvayu na letu, no bystro zabyvayu
D) bystro i legko
10 - Utomlyaemost:
A) ochen nizkaya, pochti ne ustayu
B) vysokaya, lyubaya deyatelnost vyzyvaet upadok sil
C) inogda srednyaya, a inogda vysokaya, zavisit ot moih emocij
D) srednyaya, ustayu sorazmerno deyatelnosti
11 - Osobennosti rechi:
A) medlennaya, bez zhestov, nevyrazitelnaya
B) tihaya i neuverennaya, no vyrazitelnaya
C) rech emocionalnaya, otryvistaya, bystraya;taratoryu, glotayu slova i slogi
D) s zhestami i mimikoj, vyrazitelnaya, zhivaya
12 - Dvizheniya:
A) solidnye, netoroplivye, nerastoropnye
B) suetlivye, netochnye, neuverennye
C) rezkie, poryvistye
D) ritmichnye, tochnye, uverennye
13 - Privykanie k shkole:
A) boyazn novogo, nezhelanie peremen, dolgaya adaptaciya

47
B) dolgoe privykanie, trudnaya adaptaciya
C) legkoe privykanie k novoj obstanovke, neohotnoe podchinenie trebovaniyam
vzroslyh
D) adaptaciya legkaya i bystraya
14 - Osobennosti sna:
A) zasypayu bystro, splyu spokojno, sostoyanie posle sna vyaloe, sonnoe
B) ukladyvayus spat dolgo, no zasypayu bystro, posle sna sostoyanie veseloe
C) zasypayu dolgo i trudno, son bespokojnyj, posle sna sostoyanie samoe raznoe
D) zasypayu bystro, son krepkij, posle sna sostoyanie veseloe.

48

You might also like