50404 (Разработка программы с помощью языка программирования Delphi), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Разработка программы с помощью языка программирования Delphi", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "50404"

Текст 2 страницы из документа "50404"

Составим алгоритм приложения, который представлен в приложении на рисунке A.1. На алгоритме приведены основные события экранных форм. В этом алгоритме:

Блок №4 реализован процедурой FormAvto, BitBtnStartClick,

блок №5 – процедурой FormTest. FormCreate,

блок №6 – процедурой FormTest. FormActivate,

блок №7 – процедурой FormTest BNewTestClick,

блок №8 реализован процедурой FormTest. BitBtn1Click.

Детальное описание разработанной программы, алгоритмов и их программной реализации приведено в последующих разделах.


3. Описание программных модулей



3.1 Описание переменных и объектов

В программе используется переменная FormAvto, которая представляет собой экранную форму. Объекты экранной формы были приведены в таблице 2.1. У формы имеется лишь один обработчик нажатия на кнопку BitBtnStart. Текст обработчика приведен в строках 26–32 листинга из приложения Б. В теле обработчика происходит считывание введенных имени и фамилии учащегося и его группы в переменные, после чего исходная форма скрывается и активизируется форма тестирования.

Переменная FormTest, представляет собой экранную форму, объекты которой приведены в таблице 2.2.

В разделе var опишем переменные, приведенные в таблице 3.1

Таблица 3.1 – Переменные программы

Наименование

Тип

Назначение

SFam, SGr

String

хранение фамилии и группы учащегося

fName

String

имя текстового файла для записи протокола

f

TextFile

переменная для работы с текстовым файлом

BasaV

CVoprosi

класс, хранящий базу вопросов и ответы

CurN

byte

номер текущего вопроса из базы

Ratio

byte

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

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

  • Vopr: string – содержит вопрос теста;

  • ans: array [0..3] of string – содержит 4 варианта ответов;

  • korans: byte – содержит вариант правильного ответа (его номер в массиве ans).

Для формирования базы ответов создан метод AddTest (_vopr, _ans0, _ans1, _ans2, _ans3:string; _korans:byte), которому в качестве параметров передаются вопрос, четыре варианта ответов и номер правильного ответа, а в теле метода происходит увеличение длины массива с тестами на единицу и текущий тест записывается в конец массива.

Второй метод класса CVoprosi. Mix предназначен для перемешивания базы вопросов. В нём организован цикл, в теле которого генерируются два произвольных числа i1 и i2 в интервале от 0 до количества вопросов в базе каждое. После чего вопросы с номерами i1 и i2 меняются местами.

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

Таблица 3.2. Пользовательские процедуры и обработчики событий

Наименование

Обр-к

Назначение

Строки

BitBtnStartClick

+

переход на форму тестов после нажатия «НАЧАТЬ»

26–32

FormCreate

+

формирование базы вопросов при создании фомры тестирования

108–156

FormActivate

+

инициализация тестирования (перемешивание, сброс количества ответов и номера текущего вопроса, вывод первого вопроса) при активизации формы тестирования

157–182

BitBtn1Click

+

анализ введенного ответа и вывод очередного вопроса или итоговой оценки

183–228

BNewTestClick

+

закрытие формы тестов и переход на форму авторизации при нажатии на «Начать заново»

229–235

AddTest

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

78–90

Mix

перемешивание базы тестов случайным образом

91–107



3.2 Описание процедуры 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 вопросов по основам языка Pascal. Программа может бать использована в образовательных целях.

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

В результате выполнения данной курсовой работы, я убедилась в широких возможностях языка программирования 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


Приложение Б

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

  1. unit Unit2;

  2. interface

  3. uses

  4. Windows, Messages, SysUtils, Variants, Classes, Graphics,

  5. Controls, Forms, Dialogs, StdCtrls, Buttons;

  6. type

  7. TFormAvto = class(TForm)

  8. Label1: TLabel;

  9. Label2: TLabel;

  10. Label3: TLabel;

  11. EFam: TEdit;

  12. EGroup: TEdit;

  13. BitBtnStart: TBitBtn;

  14. procedure BitBtnStartClick (Sender: TObject);

  15. private

  16. {Private declarations}

  17. public

  18. {Public declarations}

  19. end;

  20. var

  21. FormAvto: TFormAvto;

  22. implementation

  23. uses Unit1;

  24. {$R *.dfm}

  25. procedure TFormAvto. BitBtnStartClick (Sender: TObject);

  26. begin

  27. SFam:=EFam. Text+ ' ';

  28. SGr:=EGroup. Text;

  29. hide;

  30. FormTest. Show;

  31. end;

  32. end.

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

  34. unit Unit1;

  35. interface

  36. uses

  37. Windows, Messages, SysUtils, Variants, Classes, Graphics,

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

  39. type

  40. TFormTest = class(TForm)

  41. BitBtn1: TBitBtn;

  42. Label1: TLabel;

  43. LbNom: TLabel;

  44. StaticText1: TStaticText;

  45. RGroup1: TRadioGroup;

  46. BNewTest: TButton;

  47. procedure FormCreate (Sender: TObject);

  48. procedure BitBtn1Click (Sender: TObject);

  49. procedure BNewTestClick (Sender: TObject);

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

  51. procedure FormActivate (Sender: TObject);

  52. private

  53. {Private declarations}

  54. public

  55. {Public declarations}

  56. end;

  57. TTest = record

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

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

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

  61. end;

  62. CVoprosi = class

  63. test: array of TTest;

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

  65. procedure Mix;

  66. end;

  67. var

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

  69. fName:string;

  70. f: TEXTFILE;

  71. FormTest: TFormTest;

  72. BasaV:CVoprosi;

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

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

  75. implementation

  76. uses Unit2;

  77. {$R *.dfm}

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

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

  80. var ln:integer;

  81. begin

  82. ln:=Length(test);

  83. SetLength (test, ln+1);

  84. test[ln].vopr:= _vopr;

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

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

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

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

  89. test[ln].korans:= _korans;

  90. end;

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

  92. Procedure CVoprosi. Mix;

  93. var

  94. i, i1, i2, ln:byte;

  95. TestTmp:TTest;

  96. begin

  97. ln:=Length(test);

  98. for i:=1 to 20 do

  99. begin

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

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

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

  103. TestTmp:=test[i1];

  104. test[i1]:=test[i2];

  105. test[i2]:=TestTmp;

  106. end;

  107. end;

  108. procedure TFormTest. FormCreate (Sender: TObject);

  109. begin

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

  111. BasaV:=CVoprosi. Create;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  155. randomize;

  156. end;

  157.  // ***************************

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

  159.  // ***************************

  160. procedure TFormTest. FormActivate (Sender: TObject);

  161. var ln:integer;

  162. begin

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

  164. assignfile (f, fName);

  165. rewrite(f);

  166. BNewTest. Visible:=false;

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

  168. BasaV. Mix;

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

  170. Ratio:=0;

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

  172. curN:=0;

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

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

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

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

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

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

  179. RGroup1. ItemIndex:=0;

  180. Ln:=Length (BasaV.test);

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

  182. end;

  183.  // ***************************

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

  185.  // ***************************

  186. procedure TFormTest. BitBtn1Click (Sender: TObject);

  187. var

  188. sRes, S:string;

  189. ln:byte;

  190. begin

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

  192. Ln:=Length (BasaV.test);

  193. if (CurN

  194. begin

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

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

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

  198. writeln (f, S);

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

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

  201. Ratio:= Ratio +1;

  202. CurN:=CurN+1;

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

  204. begin

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

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

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

  208. writeln (f, Sfam+Sgr);

  209. writeln (f, sRes);

  210. CloseFile(f);

  211. end;

  212. end;

  213. if CurN>=ln then

  214. begin

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

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

  217. BNewtest. Visible:=true;

  218. exit;

  219. end;

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

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

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

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

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

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

  226. RGroup1. ItemIndex:=0;

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

  228. end;

  229.  // ***************************

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

  231.  // ***************************

  232. procedure TFormTest.BNewTestClick (Sender: TObject);

  233. begin

  234. Close;

  235. end;

  236.  // ***************************

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

  238.  // ***************************

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

  240. begin

  241. FormAvto. Show;

  242. end;

  243. end.


Приложение В

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

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

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

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

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

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5137
Авторов
на СтудИзбе
440
Средний доход
с одного платного файла
Обучение Подробнее