Автор работы: Пользователь скрыл имя, 20 Февраля 2015 в 18:39, курсовая работа
Цель работы: разработать программу проверки знаний для тестирования студентов по программированию с кодом на языке Delphi, для ввода и вывода данных использовать компоненты Delphi.
В первом разделе курсовой работы выполнен анализ технического задания, выделены функции, которыми должно обладать разрабатываемое приложение, а также сформулированы требования к нему, произведена постановка задачи на проектирование. Во втором разделе выполняется анализ задачи проектирования, анализируется вид исходных данных, в зависимости от чего проектируется визуальный интерфейс и приводится словесный алгоритм работы программы. В третьем разделе рассматриваются алгоритмы разработанных процедур и функций, а также приводятся их описания. К реализованной программе разработана инструкция пользователя, которая приведена в четвертом разделе.
4) Модули перехода между экранными формами авторизации и тестирования.
Каждый из вышеприведенных модулей реализуем при помощи процедуры. Модуль 1 целесообразно запускать один раз при создании формы с тестами. Модуль 2 следует запускать каждый раз при начале нового теста, то есть при активизации формы с тестами. Модель 3 должен запускаться каждый раз при нажатии на кнопку «Принять ответ». Модули 4 должны быть обработчиками нажатий на кнопку «Начать» экранной формы авторизации и кнопку «Начать заново» экранной формы тестирования.
Составим алгоритм приложения, который представлен в приложении на рисунке A.1. На алгоритме приведены основные события экранных форм. В этом алгоритме:
Блок №4 реализован процедурой FormAvto, BitBtnStartClick,
блок №5 – процедурой FormTest. FormCreate,
блок №6 – процедурой FormTest. FormActivate,
блок №7 – процедурой FormTest BNewTestClick,
блок №8 реализован процедурой FormTest. BitBtn1Click.
Детальное описание разработанной программы, алгоритмов и их программной реализации приведено в последующих разделах.
3. Описание программных модулей
В программе используется переменная 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,
Второй метод класса 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 |
Процедура 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.
23. implementation
24. uses Unit1;
25. {$R *.dfm}
26. procedure TFormAvto. BitBtnStartClick (Sender: TObject);
27. begin
28. SFam:=EFam. Text+ ' ';
29. SGr:=EGroup. Text;
30. hide;
31. FormTest. Show;
32. end;
33. end.
Модуль формы тестирования
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,_
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,_
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 ('Укажите функцию округления по правилам арифметики:',
Информация о работе Разработка программы с помощью языка программирования Delphi