Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЕТАП№3курсова.doc
Скачиваний:
0
Добавлен:
13.09.2019
Размер:
1.21 Mб
Скачать

2 .2 Таблиця основних процедур і їх призначення в програмі

Назва процедури

Список параметрів

Призначення процедури

1

2

3

procedure TForm1.TabSheet1Show(Sender: TObject);

Параметри відсутні

Навчання

procedure TForm1.Button6Click(Sender: TObject);

Параметри відсутні

Редагування

procedure TForm1.Button7Click(Sender: TObject);

Параметри відсутні

Додати питання

procedure TForm1.Button8Click(Sender: TObject)

Параметри відсутні

Очищення всіх полів

procedure TForm1.Button9Click(Sender: TObject);

Параметри відсутні

Назад

procedure TForm1.Button10Click(Sender: TObject);

Параметри відсутні

Далі

procedure TForm1.Button1Click(Sender: TObject);

Параметри відсутні

Назад

procedure TForm1.Button2Click(Sender: TObject);

Параметри відсутні

Дати відповідь

procedure TForm1.Button3Click(Sender: TObject);

Параметри відсутні

Далі

procedure TForm1.Button4Click(Sender: TObject);

Параметри відсутні

Контроль відповідей

П родовження таблиці 2.2

1

2

3

procedure TForm1.Button5Click(Sender: TObject);

Параметри відсутні

Почати тестування

procedure TForm1.Button14Click(Sender: TObject);

Параметри відсутні

Завершення тестування

procedure TForm1.Timer1Timer(Sender: TObject);

Параметри відсутні

Час до завершення тестування

3 Алгоритми роботи програмного забезпечення

Після запуску програми (Main_pr.exe) на екрані з’являється заствака (рисунок 3.1). Завдяки таймеру заставка відображається протягом кількох секунд, після чого завантажується головне меню програми.

Через 3 секунди (коли вийде час у таймері, що знаходиться на формі ) заставка ховається і відкривається форма, тобто головне меню. На головному меню автоматично відкриється вже створена вкладка «Навчання», де на полі Memo відразу буде відображено вміст файлу text.txt (рисунок 3.2).

Рисунок 3.1- Заставка

Рисунок 3.2 - Головне меню, навчання

При натисканні на пункт «Редагування» відкривається вкладка, у якій на полі відображена та ж навчальна інформація із файлу text.txt (рисунок 3.3). При натисканні на кнопку «Редагувати» відкривається форма пароля. Там присутній компонент TEdit та кнопка «Ok» (рисунок 3.4). У компонент TEdit потрібно ввести пароль і нажати на кнопку «Ok». Якщо пароль виявиться вірним, з’явиться можливість редагувати інформацію, що знаходиться у полі редагування. Інформація буде записана у файл лише після натискання на кнопку «Зберегти». Якщо пароль виявиться хибним, на екрані з’явиться відповідне повідомлення.

Рисунок 3.3 - Редагування навчання

Рисунок 3.4 - Пароль

П ісля натискання на пункт «Тестування» відкривається відповідна вкладка, а разом з нею вікно «Авторизація» . У відповідному полі потрібно ввести свої ініціали, та натиснути на кнопку «Ok» (рисунок 3.6). Після цього, форма авторизації заховається, і почнеться відлік часу у таймері. В цей час сформується список із 10 тестів, і перший із них буде виведено на відповідні компоненти. Стануть активними кнопки, що розміщені на вкладці, такі як «Дати відповідь», «», «», «Завершити тестування» (рисунок 3.7). При натисканні на кнопку «» чи «», відбувається перехід на наступне чи попереднє питання. При натисненні на кнопку «Дати відповідь», поточне питання буде видалено зі списку, а у разі правильної відповіді, будуть нараховуватись бали. Після натиснення кнопки «Завершити тестування», таймер буде зупинено, результати тестування будуть показані у вигляді повідомлення (рисунок 3.8) та записані у файл results.txt, а кнопки, які описані вище, стануть неактивними. Натомість, стане активною кнопка «Почати тестування» . При її натисканні всі лічильники будуть встановлені за замовчуванням, і знову відкриється форма авторизації (рисунок 3.6). Якщо вийде час, відведений на тестування, чи закінчаться тести, або користувач перейде на іншу вкладку під час проведення тестів, то стануться всі ті ж події, що і під час натиснення кнопки «Завершити тестування» (рисунок 3.8).

Рисунок 3.6 - Авторизація

Рисунок 3.7 - Тестування

Рисунок 3.8 - Завершення тестування

Після натискання на пункт «Редагування тестів», відкриється вкладка і форма пароля, де присутній компонент TEdit та кнопка «Ok» (рисунок 3.10). У компонент TEdit потрібно ввести пароль і нажати на кнопку «Ok». Якщо пароль виявиться вірним, буде можливим редагування 50 (за замовчуванням) тестів, що знаходяться у типізованому файлі tests. Усі данні будуть виведені на відповідні компоненти, що знаходяться у вкладці. Стануть активними кнопки «Попереднє», «Наступне», «Зберегти» та «Додати» (рисунок 3.11). Можна змінювати питання, яке редагується на даний момент за допомогою кнопок «Попереднє» та «Наступне». Кнопка «Зберегти» записує всі зміни поточного питання у типізований файл, і інформує користувача про успішне збереження, вивівши на екран відповідне повідомлення (рисунок 3.12). Кнопка «Додати» створює новий тест зі своїм питанням, варіантами відповідей та правильним варіантом, а також виводить на екран повідомлення (рисунок 3.13).

Рисунок 3.10 - Пароль

Рисунок 3.11 - Редагування тестів

Рисунок 3.12 - Збереження відредагованих тестів

Рисунок 3.13 - Додавання тесту

П ри натисненні на пункт «Історія тестування» відкриється відповідна вкладка і в полі Memo3 буде відображено вміст файлу results.txt (рисунок 3.14).

Натиснення на кнопку «Про програму» призведе до відкриття вкладки, де міститься загальна інформація про програму.

Рисунок 3.14 - Історія тестування

3 .1 Блок-схеми підпрограм

Рисунок 3.15 - Блок-схема. Початок програми. Вкладка «Навчання»

Рисунок 3.16 - Блок-схема. Вкладка «Редагування навчання»

Рисунок 3.17 - Блок-схема. Вкладка «Тестування»

В икористана література

  1. Культин М. Самоучитель. Основы программирования в Delphi XE./ Культин М.: BHV-СПб, 2011. – 416 c.

  2. Осипов Д. Базы данных и Delphi. Теория и практика. Профессиональное програмирование./ Осипов Д.: BHV-СПб, 2011. – 752 c.

  3. Фленов М.Е. Библия Delphi./ Фленов М.Е.: BHV-СПб, 2012. – 688 c.

  4. Рубанцев. Самоучитель Delphi в примерах, играх и программах. От простых приложений, решения задач и до програм./ Рубанцев.: Наука И Техника, 2011. – 672 c.

  5. Коноваленко І.В. Системне програмування у Windows з прикладами на Delphi./ Коноваленко І.В., Федорів П.С.— Тернопіль : DJVU, 2012. – 319 c.

  6. Хомоненко А. Delphi 7 Изд.2 / Хомоненко А..: BHV-СПб, 2010. – 1136 c.

  7. Чиртик А.. Программирование в Delphi. Трюки и эффекты./ Чиртик А.: Питер, 2010. – 400 c.

  8. Магда Ю. Разработка приложений Microsoft Office 2007 в Delphi / . Магда Ю.: BHV-СПб, 2009. – 160 c.

Додаток А. Інструкція по користуванню розробленою програмою

При натисненні на main_pr.exe відкриється програма.

З’являється вікно на 2 секунди, яку програму ви відкрили. Після того як це вікно пропало, з’являється головна форма, на якій є всі вкладки, такі як:

- навчання

- тестування

- редагування навчання

- редагування тестів

- результати тестування

- про програму.

При натисненні на вкладку навчання – ви побачите теоретичні відомості, тобто реферат по заданій темі відповідно до варіанта, в нашому випадку це –

1.1. Характеристика проекту

1.1.1. Склад проекту

1.1.2. Файл проекту

1.1.3. Файли форми

1.1.4. Файли модулів

1.1.5. Файл ресурсів

1.1.6. Параметри проекту .

При натисненні на вкладку «тестування» з’являється вікно для аудинтифікації, там ви впишите ваші ініціали і натиснете кнопку ОК. Після чого з’являється форма на якій ми бачемо:

- питання

- чотири варіанта відповідей(одна з яких правильна)

- питання наступне

- питання попереднє

- таймер

- кнопку завершити тестування

- кнопку дати відповідь

Після того, як ви пройшли тестування, з’яветься вікно в якому буде відображена ваша оцінка за пройходження тестування. Ця оцінка також записується в «результати тестування».

При натисканні на вкладку «редагування навчання» - буде видно поле Memo і дві кнопки

- зберегти

- редагувати

При натисненні на вкладку «редагування тестів» - з’являється вікно «pass» з запросом пароля, для ввійдення в редагування. Після того як ви введете пароль (у мене пароль «1») у вас з’являється форма , на якій можна редагувати:

- питання

- відповіді

- визначати правильну відповідь

Присутні кнопки додати, назад,вперед, зберегти та очистити.

При натисканні на вкладку «результати тестування» - ми бачимо результати користувачів програми.

Виводиться так:

Дата, ініціали, оцінка.

Наприклад: 27.03.2012 вася - 3.5

При натисканні на вкладку «про програму» - ви побачите деяку інформацію про автора цієї програми.

Додаток Б. Теоретичні відомості,навчання(реферат)

Проект в Delphi (створене додаток) складається з кількох елементів, це:

Крім вищевказаних файлів, автоматично ще можуть створюватися й інші файли, наприклад резервні копії файлів:

~ Dp - для файлів з розширенням dpr;

~ Pa - для файлів з розширенням pas.

При запуску Delphi створюється новий проект з ім'ям Project1, що з'являтимуться в заголовку головного вікна Delphi.

Даний проект має у своєму складі одну форму (Form1), назва якої видно у вікні Форми.

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

Крім модулів у складі форм, при програмуванні можна використовувати і окремі модулі, не пов'язані з якою-небудь формою. Вони оформляються за звичайними правилами мови Object Pascal і зберігаються в окремих файлах.

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

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

Для кожної форми в складі проекту автоматично створюються файл опису форми (розширення файлу - dfm) і файл модуля форми (розширення файлу - pas).

Файл опису форми є ресурсом Delphi і містить характеристики форми і її компонентів. Розробник зазвичай керує цим файлом через вікна Форми і Інспектора об'єктів компілятора Delphi.

Як правило, при конструюванні форми в файл опису автоматично вносяться відповідні зміни.

Вміст файлу опису форми визначає її вид. При необхідності можна відобразити цей файл на екрані в текстовому вигляді, для цього клацніть правою кнопкою миші на область форми і в контекстному меню вибираючи пункт View as Text (Переглянути як текст).

При цьому вікно Форми пропадає з екрану, а вміст файлу опису форми відкривається у вікні Редактора коду і доступно для перегляду і редагування.

Як приклад далі наведено текст файлу опису простої форми: вона містить одну кнопку Button, для якої створений обробник події onclick.

Ось код цієї форми, який ми дивимося командою контекстного меню View as Text:

Вихідний код

object Form1: TForm1

Left = 196

Top = 122

Width = 180

Height = 163

Caption = 'Form1'

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = 'MS Sans Serif'

Font.Style = []

OldCreateOrder = False

PixelsPerInch = 96

TextHeight = 13

object Button1: TButton

Left = 48

Top = 48

Width = 75

Height = 25

Caption = 'Button1'

TabOrder = 0

OnClick = Button1Click

end

end

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

для форми її тип (клас) TForm1 описується в модулі цієї форми.

Якщо в рядку Caption = 'Form1', визначальною заголовок форми, замість Form1 ввести, наприклад, текст "Головна форма", то заголовок форми зміниться на новий. Однак на практиці програміст подібні дії зазвичай робить у вікні Інспектора об'єктів. За це відповідає властивість: «Caption»

Файл модуля форми містить опис класу форми.

Для порожній форми, що додається до проекту за замовчуванням. Файл модуля форми можна подивитися при натисканні на цю кнопку:

Файл модуля форми містить наступний код:

Вихідний код

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs;

type

TForm1 = class (TForm)

private

{Private declarations}

public

{Public declarations}

end;

var

Form1: TForm1;

implementation

{$ R *. Dfm}

Delphi автоматично створює файл модуля форми при додаванні нової форми. За замовчуванням до проекту додається нова форма типу TForm, не містить компонентів (тобто порожній).

У розділі interface модуля форми міститься опис класу форми, а в розділі implementation-підключення до модуля директивою $ R візуального опису відповідної форми.

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

І так, обидва файли кожної форми (описи і модуля) мають однакові імена, відмінні від імені файлу проекту, хоча у імені файлу проекту та інше розширення.

Файл проекту Delphi - є центральним файлом всього проекту і являє собою саму програму.

Файл проекту Delphi

program Project1;

uses

Forms,

Unit1 in 'Unit1.pas' {Form1};

{$ R *. Res}

begin

Application.Initialize;

Application.CreateForm (TForm1, Form1);

Application.Ran;

end.

Даний код можна не запам'ятовувати, він створюється автоматично при створенні нового проекту.

Ім'я проекту (програми) збігається з ім'ям файлу проекту і вказується при збереженні цього файлу на диску, спочатку пропонується ім'я Project1.

Збірка проекту виконується при компіляції файлу проекту. При цьому ім'я створюваного EXE-файлу програми буде збігатися з назвою файлу проекту. У моєму прикладі, це Project.exe

У розділі uses вказується ім'я модуля Forms, який є обов'язковим. Так само в розділі uses вказуються модулі всіх інших форм проекту. У нас, це 'Unit1.pas' форми For.

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

Ресурси, зазначені в директиві $ R, підключаються до проекту при його компіляції і збірці, при цьому збільшується розмір файлу програми. Так що бажано підключати таким способом тільки відносно невеликі за витратами пам'яті ресурси, наприклад, значки або курсори. Великі растрові зображення краще підключати динамічно, використовуючи відповідні методи, наприклад, LoadFromFile.

Програма проекту містить всього три інструкції, виконують ініціалізацію програми, створення форми Form1 і запуск програми.

При виконанні розробником яких операцій з проектом Delphi формує код файлу проекту автоматично. Наприклад, при додаванні нової форми в файл проекту додаються два рядки коду, пов'язані з цією формою, а при виключенні форми з проекту ці рядки автоматично виключаються. При необхідності програміст може вносити зміни у файл проекту самостійно, проте подібні дії можуть зруйнувати цілісність проекту і тому зазвичай виконуються тільки досвідченими програмістами. Відзначимо, що деякі операції, наприклад, створення обробника події для об'єкта Application, системою Delphi автоматично не виконуються і вимагають самостійного кодування в файлі проекту.

Відображення коду файлу проекту у вікні Редактора коду задається командою Project → View Source (Проект → Перегляд джерела).

Додаток В. Тести з варіантами відповідей

1. Розширення файлу <код проекту> ?:

а)*.drp;

б)*.dpr;

в)*.pas;

г)інша відповідь.

2. Яке розширення файлу - <Параметри середовища> ?

а)*.cfg;

б)*.cqw;

в)*.doc;

г)інша відповідь.

3. . Яке розширення файлу <модулі та модулі форм> ?

а)*.tip;

б)*.pass;

в)*.pas;

г)Інша відповідь.

4. Опис ресурсів:

а)*.res;

б)*.com;

в)*.odt;

г)інша відповідь.

5. Файл проекту Delphi:

а)є центральним файлом всього проекту і являє собою саму програму;

б)Є центральним файлом в який записується код програми;

в)Є центральним файлом одної форми;

г)Інша відповідь.

6. Модуль - це:

а)Сукупність програмних ресурсів, призначених для опису програми;

б)сукупність програмних ресурсів, призначених для використання іншими програмами;

в)Підпрограма, яка викликає сама себе;

г)Інша відповідь.

7. Файл ресурсів може містити наступні ресурси::

а)значки,растові зображення,курсори;

б)Значки,курсори;

в)Малюнки,іконки;

г)Інша відповідь.

8Файл *.dcr:

а)Значки малюнків;

б)Значки курсорів;

в)значки компонентів;

г)Інша відповідь.

9.Блок програми, в якому визначаються типи,змінні,константи,процедури,функції, що доступні іншим модулям:?

а)Uses;

б)Var;

в)interface;

г)інша відповідь.

10. Назва форми, що буде виводитись на екран у верхній частині(заголовку) форми :

а)caption;

б)Font;

в)Title;

г)Iнша відповідь.

11. . Полоса прокрутки:

а)Scroll;

б)scrollBar;

в)Mouse_onclick;

г)Iнша відповідь;

12. . Вибір з переліку:

а)radiogroup;

б)Mail;

в)Listbox;

г)Iнша відповідь;

13. . Дозволяє створювати у формі прості малюнки::

а)shape;

б)Footer;

в)Enter+F7;

г)Iнша відповідь.

14. . При натисканні на кнопку::

а)подія OnClick;

б)Подія MouseClick;

в)Подія ShapeClick;

г)Iнша відповідь.

15. . Створення меню програми:?

а)Menu;

б)mainmenu;

в)AddMenu;

г)Інша відповідь.

16. Командна кнопка:?

а)Ok;

б)Label;

в)button;

г)Iнша відповідь.

17. Перенести об'єкт на задній план:?

а)Baggage;

б)send to back;

в)Back;

г)Інша відповідь.

18. Для кожного нового проекту доцільно створювати окрему папку?

а)Обов'язково;

б)Не можна створювати;

в)можна створювати, можна і не створюватити(але можна запутатись в файлах-який до якого проекту);

г)Інша відповідь.

19. Тип результату Abs(x):

а)цілий;

б)Дійсний;

в)Символьний;

г)Інша відповідь.

20. Ім'я форми:

а)Потрібно вказувати користувачу;

б)присвоюється автоматично;

в)Немає імені;

г)Інша відповідь.

21. Модуль UNIT у Delphi є частиною програми?

а)Так;

б)ні;

в)Частично;

г) немає такого модуля.

Додаток Г. Лістинг програмного забезпечення

unit main;

{$mode objfpc}{$H-}

interface

uses

Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,

Menus, ComCtrls, StdCtrls, ExtCtrls, modul_1, modul_2, modul_3;

type

{ TForm1 }

TForm1 = class(TForm)

Button1: TButton;

Button10: TButton;

Button2: TButton;

Button3: TButton;

Button5: TButton;

Button14: TButton;

Button12: TButton;

Button13: TButton;

Button6: TButton;

Button7: TButton;

Button8: TButton;

Button9: TButton;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Image1: TImage;

Label1: TLabel;

Label15: TLabel;

Label16: TLabel;

Label17: TLabel;

Label2: TLabel;

Label3: TLabel;

Label8: TLabel;

Label13: TLabel;

Label9: TLabel;

Label10: TLabel;

Label7: TLabel;

Label6: TLabel;

Label5: TLabel;

Label4: TLabel;

Label11: TLabel;

Label12: TLabel;

Memo1: TMemo;

Memo2: TMemo;

Memo3: TMemo;

PageControl1: TPageControl;

Panel1: TPanel;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

RadioButton3: TRadioButton;

RadioButton4: TRadioButton;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

TabSheet3: TTabSheet;

TabSheet4: TTabSheet;

TabSheet5: TTabSheet;

TabSheet6: TTabSheet;

Timer1: TTimer;

procedure Button10Click(Sender: TObject);

procedure Button12Click(Sender: TObject);

procedure Button13Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure Button8Click(Sender: TObject);

procedure Button9Click(Sender: TObject);

procedure EndTest;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button14Click(Sender: TObject);

procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);

procedure Label1Click(Sender: TObject);

procedure Label2Click(Sender: TObject);

procedure Label8Click(Sender: TObject);

procedure PageControl1Change(Sender: TObject);

procedure TabSheet1Show(Sender: TObject);

procedure TabSheet2Hide(Sender: TObject);

procedure TabSheet2Show(Sender: TObject);

procedure TabSheet3Show(Sender: TObject);

procedure TabSheet4Hide(Sender: TObject);

procedure TabSheet4Show(Sender: TObject);

procedure TabSheet5Show(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

private

{ private declarations }

public

{ public declarations }

end;

var

Form1: TForm1;

f,res:text;

p1,p2,kv:list;

tp:ftype;

time,v,z,cursor:word;

mark,mark_tmp:real;

b:array[1..10] of boolean;

implementation

uses autor,kontrol_test, pass, Logo_;

{ TForm1 }

//Навчання

procedure TForm1.TabSheet1Show(Sender: TObject);

begin

if FileExists('study.txt') then

Memo1.Lines.LoadFromFile('study.txt')

else

ShowMessage('Файл з навчанням не знайдений.');

Timer1.Enabled:=false;

end;

//------------------------------------------------------------------------------

procedure TForm1.EndTest;

var i:byte;

begin

Form3.Memo1.Text:=#13 + #13 + Form3.Memo1.Text;

for i:=10 downto 1 do

if b[i] then

begin

if i<10 then

Form3.Memo1.Text:=#13 + IntToStr(i) +' - так' + Form3.Memo1.Text

else

Form3.Memo1.Text:=#13 + IntToStr(i) +' - так' + Form3.Memo1.Text;

end

else

if i<10 then

Form3.Memo1.Text:=#13 + IntToStr(i) + ' - ні' + Form3.Memo1.Text

else

Form3.Memo1.Text:=#13 + IntToStr(i) +' - ні' + Form3.Memo1.Text;

Form3.Memo1.Text:=Trim(Form3.Memo1.Text);

ShowMessage('Ваша оцінка - ' + FloatToStr(mark));

Timer1.Enabled:=false;

if FileExists('results.txt') then

begin

AssignFile(res,'results.txt');

Append(res);

if odd(trunc(frac(mark / 5)*10)) then

writeln(res,DateToStr(Date),' ',Label5.Caption,' - ',mark:2:1)

else

writeln(res,DateToStr(Date),' ',Label5.Caption,' - ',mark:1:0);

CloseFile(res);

end

else

ShowMessage('Файл з результатами тестування не знайдений.');

//Button4.Enabled:=true;

Button5.Enabled:=true;

Button1.Enabled:=False;

Button2.Enabled:=False;

Button3.Enabled:=False;

Button14.Enabled:=False;

end;

//------------------------------------------------------------------------------

procedure TForm1.Button12Click(Sender: TObject);

begin

Memo3.ReadOnly:=false;

end;

procedure TForm1.Button13Click(Sender: TObject);

begin

write_file('study.txt');

end;

//------------------------------------------------------------------------------

//Редагування

procedure TForm1.Button6Click(Sender: TObject);

begin

AssignFile(tp,'test');

Reset(tp);

seek(tp,cursor);

Edit_q(p1);

CloseFile(tp);

ShowMessage('Питання редаговано');

end;

//Додати

procedure TForm1.Button7Click(Sender: TObject);

begin

AssignFile(tp,'test');

Reset(tp);

seek(tp,System.filesize(tp));

Edit_q(p1);

CloseFile(tp);

ShowMessage('Питання додано');

end;

//Очищення всіх полів

procedure TForm1.Button8Click(Sender: TObject);

begin

Edit1.Clear;

Edit2.Clear;

Edit3.Clear;

Edit4.Clear;

Edit5.Clear;

Edit6.Clear;

end;

//Назад

procedure TForm1.Button9Click(Sender: TObject);

begin

if (p1^.prev<>nil) and (p1<>nil) then

begin

cursor:=cursor - 1;

p1:=p1^.prev;

write_for_edit(p1);

end;

end;

//Далі

procedure TForm1.Button10Click(Sender: TObject);

begin

if (p1^.next<>nil) and (p1<>nil) then

begin

cursor:=cursor + 1;

p1:=p1^.next;

write_for_edit(p1);

end;

end;

//------------------------------------------------------------------------------

//Закриття тестування

procedure TForm1.TabSheet2Hide(Sender: TObject);

begin

if bool and (v<10) then

EndTest;

v:=0;

Form1.Label4.Caption:='';

Form1.Label5.Caption:='';

Form1.Label7.Caption:='0:00';

Form1.RadioButton1.Caption:='';

Form1.RadioButton2.Caption:='';

Form1.RadioButton3.Caption:='';

Form1.RadioButton4.Caption:='';

end;

//Назад

procedure TForm1.Button1Click(Sender: TObject);

begin

if (p1^.prev<>nil) and (p1<>nil) then

begin

p1:=p1^.prev;

RadioButton1.Checked:=true;

write_q(p1);

end;

end;

//Дати відповідь

procedure TForm1.Button2Click(Sender: TObject);

var tmp:list;

begin

inc(v);

mark_tmp:=mark;

if RadioButton1.Checked and (p1^.l.num_ans=1) then

begin

inc(z);

b[z]:=true;

mark:=mark + 0.5;

end;

if RadioButton2.Checked and (p1^.l.num_ans=2) then

begin

inc(z);

b[z]:=true;

mark:=mark + 0.5;

end;

if RadioButton3.Checked and (p1^.l.num_ans=3) then

begin

inc(z);

b[z]:=true;

mark:=mark + 0.5;

end;

if RadioButton4.Checked and (p1^.l.num_ans=4) then

begin

inc(z);

b[z]:=true;

mark:=mark + 0.5;

end;

if mark_tmp=mark then

begin

inc(z);

b[z]:=false;

end;

if v<10 then

begin

if p1^.next=nil then

begin

Button1.Click;

dispose(p1^.next);

p1^.next:=nil;

end;

if p1^.prev=nil then

begin

Button3.Click;

dispose(p1^.prev);

p1^.prev:=nil;

end

else

if (p1^.prev<>nil) and (p1^.next<>nil) then

begin

tmp:=p1;

Button3.Click;

p1^.prev^.prev^.next:=p1;

p1^.prev:=p1^.prev^.prev;

dispose(tmp);

end;

end

else

begin

EndTest;

end;

end;

//Далі

procedure TForm1.Button3Click(Sender: TObject);

begin

if (p1^.next<>nil) and (p1<>nil) then

begin

p1:=p1^.next;

RadioButton1.Checked:=true;

write_q(p1);

end;

end;

//Контроль відповідей

procedure TForm1.Button4Click(Sender: TObject);

begin

Form3.ShowModal;

end;

//Почати тестування

procedure TForm1.Button5Click(Sender: TObject);

begin

TabSheet2Show(Sender);

end;

//Завершення тестування

procedure TForm1.Button14Click(Sender: TObject);

begin

v:=10;

EndTest;

end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);

var tmp:list;

begin

if p1<>nil then

while p1<>nil do

begin

tmp:=p1;

p1:=p1^.next;

dispose(tmp);

end;

Logo.Close;

end;

procedure TForm1.Label1Click(Sender: TObject);

begin

end;

procedure TForm1.Label2Click(Sender: TObject);

begin

end;

procedure TForm1.Label8Click(Sender: TObject);

begin

end;

procedure TForm1.PageControl1Change(Sender: TObject);

begin

end;

procedure TForm1.TabSheet2Show(Sender: TObject);

var i:byte; g:array[1..10] of byte;

begin

if FileExists('test') then

begin

AssignFile(tp,'test');

Reset(tp);

if System.FileSize(tp)>0 then

begin

z:=0;

kv:=nil;

Form3.Memo1.Clear;

Button1.Enabled:=True;

Button2.Enabled:=True;

Button3.Enabled:=True;

//Button4.Enabled:=False;

Button5.Enabled:=False;

v:=0;

mark:=0;

time:=900;

sps(p1,p2,g);

for i:=2 to 10 do

add(p2,g[i],i);

kv:=p1;

Form2.ShowModal;

Form2.Edit1.Clear;

while kv<>nil do

begin

Form3.Memo1.Text:=Form3.Memo1.Text + kv^.l.question + #13;

Form3.Memo1.Text:=Form3.Memo1.Text + kv^.l.a + #13;

Form3.Memo1.Text:=Form3.Memo1.Text + kv^.l.b + #13;

Form3.Memo1.Text:=Form3.Memo1.Text + kv^.l.c + #13;

Form3.Memo1.Text:=Form3.Memo1.Text + kv^.l.d + #13 + #13;

kv:=kv^.next;

end;

end

else

begin

ShowMessage('Файл порожній');

Button1.Enabled:=False;

Button2.Enabled:=False;

Button3.Enabled:=False;

Button14.Enabled:=False;

end;

CloseFile(tp);

end

else

begin

ShowMessage('Файл з тестами не знайдений.');

Button1.Enabled:=False;

Button2.Enabled:=False;

Button3.Enabled:=False;

Button14.Enabled:=False;

end;

end;

procedure TForm1.TabSheet3Show(Sender: TObject);

begin

Memo3.ReadOnly:=true;

Timer1.Enabled:=false;

if FileExists('study.txt') then

load_f('study.txt')

else

ShowMessage('Файл з навчанням не знайдений.');

end;

procedure TForm1.TabSheet4Hide(Sender: TObject);

begin

Button8.Click;

password.Edit1.Clear;

end;

procedure TForm1.TabSheet4Show(Sender: TObject);

begin

kv:=nil;

if FileExists('test') then

begin

AssignFile(tp,'test');

Reset(tp);

if System.FileSize(tp)>0 then

begin

cursor:=0;

Timer1.Enabled:=False;

sps_mod_2(p1,p2);

while not eof(tp) do

add_mod_2(p2);

Button6.Enabled:=True;

Button7.Enabled:=True;

Button9.Enabled:=True;

Button10.Enabled:=True;

password.ShowModal;

end

else

begin

ShowMessage('Файл порожній');

Button6.Enabled:=False;

Button7.Enabled:=False;

Button9.Enabled:=False;

Button10.Enabled:=False;

end;

CloseFile(tp);

end

else

begin

ShowMessage('Файл з тестами не знайдений.');

Button6.Enabled:=False;

Button7.Enabled:=False;

Button9.Enabled:=False;

Button10.Enabled:=False;

end;

end;

procedure TForm1.TabSheet5Show(Sender: TObject);

begin

Timer1.Enabled:=false;

if FileExists('results.txt') then

Memo2.Lines.LoadFromFile('results.txt')

else

ShowMessage('Файл з результатами тестування не знайдений.');

end;

//Час до завершення тестування

procedure TForm1.Timer1Timer(Sender: TObject);

begin

if time>0 then

begin

dec(time);

if (time mod 60 >= 0) and (time mod 60 <= 9) then

Label7.Caption:= IntToStr(time div 60) + ':0' +IntToStr(time mod 60)

else

Label7.Caption:=IntToStr(time div 60) + ':' +IntToStr(time mod 60);

end

else EndTest;

end;

//------------------------------------------------------------------------------

initialization

{$I main.lrs}

end.