Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Описание процедуры BitBtn1Click





 

Процедура BitBtn1Click предназначена для анализа ответа и вывода очередного вопроса или итоговой оценки. Алгоритм выполнения процедуры приведен на рисунке А.2 приложения А.

В теле процедуры выполняются следующие действия: Если текущий номер вопроса меньше общего количества вопросов, то формируется строка S c вопросом и выбранным ответом и записывается в файл протоколов f. Сравнивается выбранный номер ответа (RGroup1. ItemIndex) с номером правильного ответа (BasaV.test[curN].Korans) и, если он совпадает, то наращивается количество правильных ответов Ratio. Наращивается номер текущего вопроса curN. И очередной вопрос с вариантами ответов выводится на форму.

Если все вопросы были заданы (curN равно количеству вопросов), то рассчитывается итоговая оценка как (Ratio*12)/(общее количество вопросов) и записывается в файл протокола, а также выводится сообщение в виде диалогового окна с оценкой. Также становится видимой кнопка BNewtest c надписью «Начать заново», позволяющая перейти на форму авторизации. Во избежание подбора ответов выводится только последняя итоговая оценка без указания в каких вопросах были сделаны ошибки.

 


4. Инструкция оператору

 

Разработанная программа представляет собой исполняемый файл Tester.exe размером 422912 байт. В программе выполняется тестирование пользователя основам языка Pascal.

После запуска программы появляется окно, изображенное на рисунке 4.1.

 

Рисунок 4.1 – Окно авторизации

 

В этом окне учащийся должен задать свою фамилию и группу, после чего нажать на кнопку с надписью «НАЧАТЬ». После этого появится вторая форма с тестовыми вопросами, изображенная на рисунке 4.2. Заметим, что порядок вопросов при каждом новом запуске случайный, поэтому содержание поля вопроса и ответом может быть иным.

 

Рисунок 4.2 – Окно тестирования


Пользователь должен выбрать только один из четырех предложенных вариантов ответа, щелкнув по соответствующей метке с вариантом ответа, при этом напротив варианта ответа в кружочке должна появиться отметка .

После этого следует нажать на кнопку .

Появится новый вопрос, ответ на который реализуется аналогичным способом. Если были пройдены все вопросы, выводится сообщение с оценкой, которая пропорциональна количеству правильных ответов. Все ответы правильные – оценка равна 12. Все ответы неправильные – оценка равна 0. Пример окна с сообщением об оценке приведено на рисунке 4.3.

 

Рисунок 4.3

 

После этого можно вернуться на окно авторизации, чтобы пройти тест заново, нажав на кнопку .

Протокол с вариантами ответов, которые были введены учащимся заносятся в текстовый файл на жестком диске с именем «<фамилия>+<группа>.txt» в том же каталоге, где находится исполняемый файл. Пример протокола с правильными вариантами ответов приведен в приложении В.

 


Заключение

 

Данный курсовой проект был выполнен в полном соответствии поставленному заданию и отлажен в среде DELPHI 7.0. В ходе выполнения курсовой работы была разработана программа для тестирования студентов по программированию с графическим интерфейсом. База содержит 20 вопросов. Программа может бать использована в образовательных целях.

В качестве дальнейшего развития возможна доработка программы с целью поддержки множественных вариантов ответа, поддержкой текстового ввода в качестве ответа (без указания альтернатив), организации таймера и ограничения времени решения на каждый из вопросов, возможности пропустить некоторые вопросы, чтобы вернуться к ним и ответить на них в случае наличия времени и др.

В результате выполнения данной курсовой работы, я убедился в широких возможностях языка программирования Delphi 7.

 


Список используемой литературы

 

1. Валентин Озеров «Советы по Delphi», 1999

2. Зуев Е.А. Программирование на языке Turbo Pascal 6. 0,7.0. – М.: Радио и связь, Веста, 1993.

3. Фаронов В.В. Turbo Pascal 7.0. Начальный курс. – М.: Нолидж, 2000.

4. Фаронов В.В. «DELPHI. Программирование на языке высокого уровня». – Питер, 2005.

5. Дятченко Д.А. Методические указания к выполнению курсовой работы по дисциплине «Программирование и алгоритмическе языки» – Северодонецк, 2005.

 


 
Приложение 1

 

Алгоритм программы

Рисунок А.1 – Обработка событий экранных форм программы

 


Рисунок А.2 – Алгоритм процедуры BitBtn1Click

программа delphi алгоритм


Приложение 2

 

Модуль формы авторизации

 

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls, Buttons;

type

TFormAvto = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

EFam: TEdit;

EGroup: TEdit;

BitBtnStart: TBitBtn;

procedure BitBtnStartClick (Sender: TObject);

private

{Private declarations}

public

{Public declarations}

end;

var

FormAvto: TFormAvto;

implementation

uses Unit1;

{$R *.dfm}

procedure TFormAvto. BitBtnStartClick (Sender: TObject);

begin

SFam:=EFam. Text+ ' ';

SGr:=EGroup. Text;

hide;

FormTest. Show;

end;

end.

Модуль формы тестирования

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons;

type

TFormTest = class(TForm)

BitBtn1: TBitBtn;

Label1: TLabel;

LbNom: TLabel;

StaticText1: TStaticText;

RGroup1: TRadioGroup;

BNewTest: TButton;

procedure FormCreate (Sender: TObject);

procedure BitBtn1Click (Sender: TObject);

procedure BNewTestClick (Sender: TObject);

procedure FormClose (Sender: TObject; var Action: TCloseAction);

procedure FormActivate (Sender: TObject);

private

{Private declarations}

public

{Public declarations}

end;

TTest = record

vopr:string; // вопрос

ans:array [0..3] of string; // ответы

korans:byte; // номер правильного ответа

end;

CVoprosi = class

test: array of TTest;

procedure AddTest (_vopr,_ans0,_ans1,_ans2,_ans3:string;_korans:byte);

procedure Mix;

end;

var

SFam, Sgr:string; // фамилия и группа учащегося

fName:string;

f: TEXTFILE;

FormTest: TFormTest;

BasaV:CVoprosi;

CurN:byte; // номер текущего вопроса

Ratio:byte; // количество правильных ответов

implementation

uses Unit2;

{$R *.dfm}

// метод для добавления нового теста в базу

Procedure CVoprosi. AddTest (_vopr,_ans0,_ans1,_ans2,_ans3:string; _korans:byte);

var ln:integer;

begin

ln:=Length(test);

SetLength (test, ln+1);

test[ln].vopr:= _vopr;

test[ln].ans[0]:= _ans0;

test[ln].ans[1]:= _ans1;

test[ln].ans[2]:= _ans2;

test[ln].ans[3]:= _ans3;

test[ln].korans:= _korans;

end;

// перемешивание базы вопросов

Procedure CVoprosi. Mix;

var

i, i1, i2, ln:byte;

TestTmp:TTest;

begin

ln:=Length(test);

for i:=1 to 20 do

begin

i1:=Random(ln); // случайный №1

i2:=Random(ln); // случайный №2

// меняем местами вопросы №1 и №2

TestTmp:=test[i1];

test[i1]:=test[i2];

test[i2]:=TestTmp;

end;

end;

procedure TFormTest. FormCreate (Sender: TObject);

begin

// формирование базы вопросов

BasaV:=CVoprosi. Create;

BasaV. AddTest ('Что выведет следующая программа?'+#10+#13+'var i, sum:sіnglе;'+#10+#13+

'bеgin'+#10+'sum:=1;'+#10+

' for і:=2 to 10 dо sum:=sum+i;'+#10+

' WrіtеLn(sum);'+#10+'еnd.',

'10', '55', '9', 'произойдет ошибка компиляции', 3);

BasaV. AddTest ('Какое значение вернет выражение?'+#10+' chr (ord(«A»)+3)',

'A3', '68', ' «D» ', ' «C» ', 2);

BasaV. AddTest ('С чего не может начинаться идентификатор?',

'с малой латинской буквы', 'с большой латинской буквы', 'с подчеркивания', 'с цифры', 3);

BasaV. AddTest ('Что из нижеперечисленного может быть использовано как идентификатор?',

'ord', 'for1', 'cardinal', 'C#21', 1);

BasaV. AddTest ('Какой из приведенных типов целочисленный?',

'real', 'byte', 'double', 'single', 1);

BasaV. AddTest ('Какой из приведенных типов можно использовать для хранения дробных чисел?',

'byte', 'word', 'double', 'integer', 2);

BasaV. AddTest ('Какая из приведенных инструкций является циклом с заданным числом повторений?',

'while <…> do ', 'for <…> do ', 'repeat until <…>', 'if <> then ', 1);

BasaV. AddTest ('Какая из приведенных инструкций является циклом с предусловием?',

'for <…> do ', 'while <…> do ', 'repeat until <…>', 'if <> then ', 1);

BasaV. AddTest ('Какая из приведенных инструкций является циклом с постусловием?',

'for <…> do ', 'while <…> do ', 'repeat until <…>', 'if <> then ', 2);

BasaV. AddTest ('Какая из приведенных инструкций является инструкцией ветвления?',

'for <…> do ', 'while <…> do ', 'repeat until <…>', 'if <> then ', 3);

BasaV. AddTest ('Какая из приведенных инструкций целочисленного деления?',

'MOD', 'DIV', '/', 'ODD', 1);

BasaV. AddTest ('Какая из приведенных инструкций – остаток от деления?',

'MOD', 'DIV', '/', 'ODD', 0);

BasaV. AddTest ('Какая из приведенных инструкций вещественного деления?',

'MOD', 'DIV', '/', 'ODD', 2);

BasaV. AddTest ('Какая из приведенных инструкций проверка на четность?',

'MOD', 'DIV', '/', 'ODD', 3);

BasaV. AddTest ('Укажите функцию округления по правилам арифметики:',

'TRUNC()', 'FRAC()', 'ROUND()', 'INT()', 2);

BasaV. AddTest ('Укажите функцию выделения дробной части числа:',

'TRUNC()', 'FRAC()', 'ROUND()', 'INT()', 1);

BasaV. AddTest ('Укажите функцию округления к нулю с целочисленным результатом:',

'TRUNC()', 'FRAC()', 'ROUND()', 'INT()', 0);

BasaV. AddTest ('Укажите функцию округления к нулю с вещественным результатом:',

'TRUNC()', 'FRAC()', 'ROUND()', 'INT()', 3);

BasaV. AddTest ('Укажите функцию открытия существующего файла:',

'ASSIGNFILE()', 'REWRITE()', 'RESET()', 'CLOSEFILE()', 2);

BasaV. AddTest ('Укажите функцию создания нового файла и открытия его для записи:',

'ASSIGNFILE()', 'REWRITE()', 'RESET()', 'CLOSEFILE()', 1);

randomize;

end;

// ***************************

// активизация формы с тестами

// ***************************

procedure TFormTest. FormActivate (Sender: TObject);

var ln:integer;

begin

fName:=SFam+' ('+SGr+')'+'.txt';

assignfile (f, fName);

rewrite(f);

BNewTest. Visible:=false;

// перемешивание базы вопросов

BasaV. Mix;

// количество правильных ответов

Ratio:=0;

// текущий вопрос 0

curN:=0;

// отображаем первый вопрос на форме

StaticText1. Caption:=BasaV.test[curN].vopr;

RGroup1. Items[0]:=BasaV.test[curN].ans[0];

RGroup1. Items[1]:=BasaV.test[curN].ans[1];

RGroup1. Items[2]:=BasaV.test[curN].ans[2];

RGroup1. Items[3]:=BasaV.test[curN].ans[3];

RGroup1. ItemIndex:=0;

Ln:=Length (BasaV.test);

LbNom. Caption:= IntToStr (curN+1) + ' из ' + IntToStr(Ln);

end;

// ***************************

// обработчик нажатия на кнопку «Принять ответ»

// ***************************

procedure TFormTest. BitBtn1Click (Sender: TObject);

var

sRes, S:string;

ln:byte;

begin

// проверка ответа

Ln:=Length (BasaV.test);

if (CurN<ln) then

begin

// записываем лог ответов в файл

S:= BasaV.test[curN].vopr + ' (ответил: – '+

BasaV.test[curN].ans [RGroup1. ItemIndex]+')';

writeln (f, S);

// проверяем, правильно ли был сделан ответ

if (RGroup1. ItemIndex = BasaV.test[curN].Korans) then

Ratio:= Ratio +1;

CurN:=CurN+1;

if CurN=ln then // была последняя запись

begin

// сообщение с результатом

sRes:= 'Итоговая оценка: '+FloatToStr (Ratio*12/ln);

// запись результа в файл

writeln (f, Sfam+Sgr);

writeln (f, sRes);

CloseFile(f);

end;

end;

if CurN>=ln then

begin

sRes:= 'Итоговая оценка: '+FloatToStr (Ratio*12/ln);

Application. MessageBox (PAnsiChar(sRes), PAnsiChar (SFam+Sgr));

BNewtest. Visible:=true;

exit;

end;

// отображаем следующий вопрос на форме

StaticText1. Caption:=BasaV.test[curN].vopr;

RGroup1. Items[0]:=BasaV.test[curN].ans[0];

RGroup1. Items[1]:=BasaV.test[curN].ans[1];

RGroup1. Items[2]:=BasaV.test[curN].ans[2];

RGroup1. Items[3]:=BasaV.test[curN].ans[3];

RGroup1. ItemIndex:=0;

LbNom. Caption:= IntToStr (curN+1) + ' из ' + IntToStr(Ln);

end;

// ***************************

// закрыте формы с тестами

// ***************************

procedure TFormTest.BNewTestClick (Sender: TObject);

begin

Close;

end;

// ***************************

// активизация формы с авторизации

// ***************************

procedure TFormTest. FormClose (Sender: TObject; var Action: TCloseAction);

begin

FormAvto. Show;

end;

end.

 

 


Приложение 3

 

Моя программа выполняет тестирование студентов по программированию. При открытии программы появляется окно (рис В.1), тестирования в котором нужно вести Фамилию Имя и Группу. Тестирование состоит из 20 вопросов, в каждом вопросе четыре варианта ответа необходимо выбрать один правильный (рис В.2). В конце тестирования появляется окно в котором выводится бал за количество ответов по 12 бальной системе (рис В.3).

 

Рисунок В.1 – Окно авторизации

 

Рисунок В.2 – Внешний вид формы FormTest


Рисунок В.3 – Итог

Размещено на Allbest.ru

Date: 2016-01-20; view: 1380; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию