Автор: Пользователь скрыл имя, 10 Декабря 2011 в 22:35, курсовая работа
Об’єктно́-орієнтоване́ програмува́ння (ООП) — одна з парадигм програмування, яка розглядає програму як множину взаємодіючих «об'єктів». В ній використано декілька технологій від попередніх парадигм, включаючи успадкування, модульність, поліморфізм та інкапсуляцію. Не зважаючи на те, що ця парадигма з'явилась в 1960-тих роках, вона не мала широкого застосування до 1990-тих. На сьогоднішній день, багато із мов програмування (зокрема, Java, JavaScript, C#, C++, Пайтон, PHP, Ruby та Objective-C) підтримують ООП.
1. Об'єктно-орієнтоване програмування 3
1.1. Фундаментальні поняття 4
2. Особливості розробки програмних засобів на основі об’єктно-орієнтованого програмування 6
3. Середовище програмування Delphi 16
3.1. Основні елементи середовища Delphi 18
Головне вікно 18
Вікно форми 18
Вікно коду 20
Інспектор об’єктів 21
3.2. Управління файлами проекту Delphi 25
3.3. Конфігурація Delphi 26
3.4. Реагування на події 27
4. Задача курсового проекту 29
5. Опис програмної реалізації вибраного алгоритму 30
6. Приклад програми та аналіз результатів 33
Текст програми 36
Висновок 40
Список використаної літератури 41
Робота всієї програми закінчується з появою подій, яка веде до закриття головної форми, наприклад, у випадку клацання мишкою на кнопці закриття форми.
Задача мого курсового проекту включає в себе розвязання таких проблем:
Засобами Delphi було створено загальну форму для організації процесу тестування.
Рис.1
Загальна форма для
організації тестового
процесу
Ця форма складається з наступних стандартних компонентів: Panel, Button, Label, RadioButton, RadioGroup, RichEdit.
На рис.4.2 наведено список всіх використаних компонентів. Опишемо детальніше основні об’єкти:
Рис.2
Список використаних
компонентів
Після складання тесту (в нашому випадку, 20 запитань) зявляється форма, яка повідомляє про завершення тестування. Цю подію описує Panel3.
На рис.3 наведено їх графічне зображення.
Рис.3
Вигляд форми при завершенні
тестування
Програма використовує текстовий файл ‘tests.txt’ для зчитування запитань та відповідей, де правильні відповіді відзначені поміткою у вигляді символу ‘*’. Нумерація запитань здійснюється за допомогою арабських цифр, котрі програма зчитує і показує у відповідній послідовності. Варіанти відповідей у текстовому файлі позначаються буквами англійського алфавіт (A, B, C, D). Наведемо приклад запитання та варіантів відповіді у текстовому файлі:
9. When you are interviewing someone, it is obviously necessary to ask questions relevant to their job experience but discussing someone's other _______ is also useful.
A. deeds
B. accomplishments *
C. holdings
D. doings
На рис.4 зображено графічний інтерфейс, за допомогою якого користувач може зчитувати запитання і обирати відповіді.
Рис.4
Графічний інтерфейс
програми тестування
При натисненні на кнопку «Наступне запитання» ми переходимо на наступні запитання і так до закінчення запитань. На початку тестування, при першому запитанні, кнопка «Попереднє запитання» є неактивною, це пояснюється тим, що перехід на попередні питання неможливий, бо їх не існує на даний момент. На рис.5 ми можемо спостерігати, що кнопка «Попереднє запитання» стала активна і користувач має можливість повернутись на попереднє запитання.
Рис.5 Графічне відображення процесу тестування
На рис.6
наведено вікно результатів тестування.
З показаного нижче прикладу випливає,
що коритувач правильно відповів на 18
запитань з 20, отже його результат становить
90%.
Рис.6 Вікно результатів
По завершенню тестування, користувач, дізнавшись свої результати, натискає кнопку виходу із програми. При цьому вискакує наступне повідомлення (Рис.7):
Рис.7
Повідомлення про вихід
із програми.
unit MainFormUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls,
ComCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Button2: TButton;
Button1: TButton;
RadioGroup1: TRadioGroup;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
RadioButton4: TRadioButton;
RichEdit1: TRichEdit;
Panel3: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
QuestList: TStringList;
CurrentQuest: Integer;
AnsTable: array
of array of Integer;
procedure UpdateDriveButtons;
procedure SwitchQuest(Next: Boolean);
procedure LoadQuestionsTree(StrList: TStringList; const FileName: string);
procedure SeparateAnswers(StrList: TStringList; var AnsTable: array of Integer);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
const
CQuestionsFileName = 'tests.txt';
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
J, K: Integer;
begin
if CurrentQuest < QuestList.Count - 1 then
SwitchQuest(true)
else
begin
Label1.Caption := 'Кількість запитань:';
Label2.Caption := IntToStr(QuestList.Count);
Label3.Caption
:= 'Кількість правильних
Label6.Caption
:= 'Ваш результат:';
K := 0;
for J := 0 to QuestList.Count - 1 do
if AnsTable[0, J] = AnsTable[1, J] then
Inc(K);
Label4.Caption := IntToStr(K);
Label5.Caption := IntToStr(Round(K * 100 / QuestList.Count)) + '%';
Panel3.Visible := true;
Button1.Enabled := false;
Button2.Enabled := false;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SwitchQuest(false);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(QuestList);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CurrentQuest := 0;
QuestList := TStringList.Create;
Button2.Caption := Попереднє запитання';
RadioGroup1.Caption := '
Оберіть правильний варіант
UpdateDriveButtons;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Application.MessageBox('
'Увага!', MB_YESNO) <> IDYES then
Action := caNone;
end;
procedure TForm1.UpdateDriveButtons;
var
I: Integer;
BlockStart: Integer;
Shift: Integer;
begin
Button1.Enabled := CurrentQuest <> QuestList.Count;
Button2.Enabled := CurrentQuest
<> 0;
RichEdit1.Lines.Text
:= StringReplace(QuestList[
BlockStart := 0;
Shift := 0;
for I := 1 to Length(QuestList[CurrentQuest]
if QuestList[CurrentQuest][I] = '^' then
begin
Inc(Shift);
if BlockStart = 0 then
BlockStart := I - Shift
else
begin
RichEdit1.SelStart := BlockStart;
RichEdit1.SelLength := I - Shift - BlockStart;
RichEdit1.SelAttributes.Style := [fsUnderline];
BlockStart := 0;
end;
end;
with QuestList.Objects[
begin
RadioButton1.Caption := Strings[0];
RadioButton2.Caption := Strings[1];
RadioButton3.Caption := Strings[2];
RadioButton4.Caption := Strings[3];
end;
if CurrentQuest < QuestList.Count - 1 then
Button1.Caption := 'Наступне запитання'
else
Button1.Caption := 'Завершити'
end;
procedure TForm1.SwitchQuest(Next: Boolean);
var
I: Integer;
begin
for I := 0 to Form1.ControlCount - 1 do
if Form1.Controls[I] is TRadioButton then
with Form1.Controls[I] as TRadioButton do
if Checked then
begin
AnsTable[1, CurrentQuest] := StrToInt(Name[Length(Name)]);
break;
end;
if Next then
Inc(CurrentQuest)
else
Dec(CurrentQuest);
for I := 0 to Form1.ControlCount - 1 do
if Form1.Controls[I] is TRadioButton then
with Form1.Controls[I] as TRadioButton do
Checked := AnsTable[1, CurrentQuest] = StrToInt(Name[Length(Name)]);
UpdateDriveButtons;
end;
procedure TForm1.LoadQuestionsTree(
var
I, J: Integer;
Lst: TStringList;
begin
Assert(StrList <> nil, 'String list object not initialized.');
StrList.Clear;
StrList.LoadFromFile(FileName)
Assert((StrList.Count mod
5) = 0, 'Bad questions file format.');
for I := StrList.Count div 5 - 1 downto 0 do
begin
Lst := TStringList.Create;
StrList.Objects[I * 5] := Lst;
for J := I * 5 + 4 downto I * 5 + 1 do
begin
Lst.Insert(0, StrList[J]);
StrList.Delete(J);
end;
end;
end;
procedure TForm1.SeparateAnswers(
var
SubLst: TStringList;
I, J: Integer;
begin