Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Описание процедуры BitBtn1Click ⇐ ПредыдущаяСтр 2 из 2
Процедура 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 – Обработка событий экранных форм программы
Рисунок А.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
|