Комп’ютерне тестування граматичних знань на основі тестів ESL/EFL Proficiency рівня

Автор: Пользователь скрыл имя, 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

Работа содержит 1 файл

Delphi - курсова робота.doc

— 370.00 Кб (Скачать)

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

 

  1. Задача курсового проекту

Задача мого курсового проекту включає в себе розвязання таких проблем:

  • Здійснення тестування граматичних знань англійської мови на основі теcтів Proficiency рівня.
  • Розробка програми, яка підраховує правильні відповіді на тести і видає результат на екран.
  • Розрахунок кількості правильних відповідей.
  • Надання можливості визначення рівня знань у відсотковому відношенні кількості правильних відповідей до загальної кількості.
  • Створення зручного графічного інтерфейсу для перегляду запитань та вибору відповідей.
  • Можливість повернення на попереднє запитання з метою зміни варіанту відповіді.
  • Закриття форми і вихід із програми.

 

  1. Опис  програмної реалізації вибраного алгоритму

Засобами Delphi було створено загальну форму для організації процесу тестування.

 

Рис.1 Загальна форма для організації тестового процесу 

Ця форма  складається з наступних стандартних компонентів: Panel, Button, Label, RadioButton, RadioGroup, RichEdit.

На рис.4.2 наведено список всіх використаних компонентів. Опишемо детальніше основні об’єкти:

  • Panel1 містить в собі Button1 та Button2, які відповідають за перехід на наступне або повернення на попереднє запитання тестування.
  • RadioButton1, RadioButton2, RadioButton3, RadioButton4 – відповідають за позначення варіантів відповідей. Вони об’єднані у групу компонентом RadioGroup1.
  • RichEdit1 – це текстове поле, де відображаються запитання тесту.
 

Рис.2 Список використаних компонентів 

Після складання тесту (в нашому випадку, 20 запитань) зявляється форма, яка повідомляє про завершення тестування. Цю подію описує Panel3.

  • Label1 – це вивід тексту «Кількість запитань:»
  • Label2 – вивід загальної кількості запитань
  • Label3 - це вивід тексту «Кількість правильних відповідей:»
  • Label4 - вивід кількості правильних відповідей
  • Label6 – це вивід тексту «Ваш результат:»
  • Label5 – вивід результату тестування у відсотковому відношенні

На рис.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  

  1. Приклад програми та аналіз результатів

На рис.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[CurrentQuest], '^', '', [rfReplaceAll]);

  BlockStart := 0;

  Shift := 0;

  for I := 1 to Length(QuestList[CurrentQuest]) do

    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[CurrentQuest] as TStringList do

  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(StrList: TStringList; const FileName: string);

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(StrList: TStringList; var AnsTable: array of Integer);

var

  SubLst: TStringList;

  I, J: Integer;

begin

Информация о работе Комп’ютерне тестування граматичних знань на основі тестів ESL/EFL Proficiency рівня