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

Автор работы: Пользователь скрыл имя, 20 Февраля 2015 в 18:39, курсовая работа

Описание работы

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

Файлы: 1 файл

КУРСОВАЯ РАБОТА.doc

— 289.00 Кб (Скачать файл)

4)  Модули перехода между экранными формами авторизации и тестирования.

Каждый из вышеприведенных модулей реализуем при помощи процедуры. Модуль 1 целесообразно запускать один раз при создании формы с тестами. Модуль 2 следует запускать каждый раз при начале нового теста, то есть при активизации формы с тестами. Модель 3 должен запускаться каждый раз при нажатии на кнопку «Принять ответ». Модули 4 должны быть обработчиками нажатий на кнопку «Начать» экранной формы авторизации и кнопку «Начать заново» экранной формы тестирования.

Составим алгоритм приложения, который представлен в приложении на рисунке 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. 

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 ('Укажите функцию округления по правилам арифметики:',

Информация о работе Разработка программы с помощью языка программирования Delphi