Смекни!
smekni.com

Разработка программы с помощью языка программирования Delphi (стр. 3 из 4)

Рисунок 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,_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<ln) then

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));