Программирование тестовой программы. 2



Содержание

Введение

Глава 1.              Теоретическая часть

1.1. История

1.2. Обзор компонентов Borland Delphi

1.2.1. TMainMenu

1.2.2. TPanel

1.2.3. TImage

1.2.4. TLabel

1.2.5. TEdit

1.2.6. TButton

Глава 2.              Программирование тестовой программы

2.1 Постановка задачи

2.2. Построение алгоритма

2.3. Анализ и тестирование

Заключение

Список литературы

Приложение

Введение

Предмет «Информатика» изучает компьютеры и информационные технологии. В свете быстро развивающегося технического процесса и все большего внедрения компьютеров в нашу жизнь этот предмет наряду с основными предметами, такими как математика и физика, приобретает все большее значение. Знание компьютеров и программирования уже необходимо не только на специфических предприятиях, но и на заводах и в простом офисе, где вся бухгалтерия ведется на компьютерах.

Информатика-это техническая наука, систематизирующая приемы создания, хранения, обработки и передачи информации средствами вычислительной техники, а также принципы функционирования этих средств и методы управления ими.

Из этого определения видно, что информатика очень близка к технологии, поскольку отвечает на вопрос как…?

      Как принимать и хранить информацию?

      Как обрабатывать информацию и преобразовывать ее в форму, удобную для человека?

      Как использовать вычислительную технику с наибольшей эффективностью?

      Как использовать достижения других наук для создания новых средств вычислительной техники?

      Как управлять техническими средствами с помощью программ?

Поэтому не случайно предмет, изучением которого занимается информатика, нередко называют информационной технологией или компьютерной технологией.

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

Итак, информатика-это наука, изучающая все аспекты получения, хранения, преобразования, передачи и использования информации.

Теоретическая информатика-это часть информатики, связанная с разработкой теорий, таких как: теория информации, теория алгоритмов, теория кодирования, теория автоматов, теория сетей и т.д., в том числе теоретических вопросов, связанных с проблемой создания искусственного интеллекта.

Целью данной курсовой работы является создание программного продукта «программы-теста». Эту программу я смог составить после того, как просмотрел несколько различных примеров создания программы-теста и изучил их основные принципы. Тест-программа предназначена для проверки знаний по различным темам, в зависимости от того какие вопросы будут находится в базе данных.

Глава 1.                            Теоретическая часть

1.1. История

Язык программирования – это способ записи программ решения различных задач на ЭВМ в понятной для компьютера форме.

Значительным событием в истории языков программирования стало создание в 1971 г. языка Паскаль. Его автор – швейцарский профессор Н. Вирт – разрабатывал Паскаль как учебный зык структурного программирования.

Наибольший успех в распространении этого языка обеспечили персональные компьютеры. Фирма Bortland International, Inc (США) разработала систему программирования Турбо Паскаль для ПК. Турбо Паскаль – это не только язык и транслятор с него, но еще и операционная оболочка, обеспечивающая пользователю удобство работы. Турбо Паскаль вышел за рамки учебного предназначения и стал языком профессионального программирования с универсальными возможностями.

Delphi 2007 — это современная система программирования, в основе которой лежит объектно-ориентированный язык Раsса1 и визуальные средства программирования. Система Delphi 2007 относится к классу средств ускоренной разработки программ. Это ускорение достигается за счет двух характерных свойств Delphi: визуального конструирования форм и использования библиотеки визуальных компонентов. Еще одно достоинство Delphi — мощность и гибкость. Это неудивительно, так как в основе Delphi лежит мощный объектно-ориентированный язык Object Раsса1, пригодный для создания программ любой сложности. Кроме того, программы созданные в среде Delphi 2007, могут работать не только под управлением Windows.

1.2. Обзор компонентов Borland Delphi

1.2.1. TMainMenu позволяет Вам поместить главное меню в программу. При помещении TMainMenu на форму это выглядит, как просто иконка. Иконки данного типа называют "невидимыми компонентом", поскольку они невидимы во время выполнения программы. Создание меню включает три шага: (1) помещение TMainMenu на форму, (2) вызов Дизайнера Меню через свойство Items в Инспекторе Объектов, (3) определение пунктов меню в Дизайнере Меню.

1.2.2. TPanel - управляющий элемент, похожий на TGroupBox, используется в декоративных целях. Чтобы использовать TPanel, просто поместите его на форму и затем положите другие компоненты на него. Теперь при перемещении TPanel будут передвигаться и эти компоненты. TPanel используется также для создания линейки инструментов и окна статуса.

1.2.3. TImage – используя методы и свойства этого компонента, можно отобразить на форме графический файл с расширениями BMP, JPG, JPEG и WMF. Свойства компонента TImage:

- AutoSize: Boolean – если установить значение True, то размеры компонента настраиваются по размерам загружаемого рисунка;

- Stretch: Boolean – если свойство установлено в значении True, то будут изменяться размеры изображения, в этом случае оно как бы «натягивается» на клиентскую область, при необходимости уменьшая или увеличивая свои размеры;

- Center: Boolean – если это свойство установлено в значении True, изображение центрируется в пределах клиентской области, иначе оно располагается в ее верхнем левом углу.

1.2.4. TLabel служит для отображения текста на экране. Вы можете изменить шрифт и цвет метки, если дважды щелкнете на свойство Font в Инспекторе Объектов. Вы увидите, что это легко сделать и во время выполнения программы, написав всего одну строчку кода.

1.2.5. TEdit - стандартный управляющий элемент Windows для ввода. Он может быть использован для отображения короткого фрагмента текста и позволяет пользователю вводить текст во время выполнения программы.

1.2.6. TButton позволяет выполнить какие-либо действия при нажатии кнопки во время выполнения программы. В Delphi все делается очень просто. Поместив TButton на форму, Вы по двойному щелчку можете создать заготовку обработчика события нажатия кнопки. Далее нужно заполнить заготовку кодом:

procedure TForm1.Button1Click(Sender: TObject);

begin

end;

Все описанные выше компоненты Delphi в данной курсовой работе использовались для создания программы-теста.

Глава 2.              Программирование тестовой программы

2.1 Постановка задачи

Составить программу в виде теста, позволяющую проводить проверку знаний студентов.

Описание программы:

Программа должна считывать вопросы из файла базы данных. При считывании вопросов программа каждый раз начинает с любого вопроса, то есть в различном порядке, а не так как они (вопросы) последовательно расположены в файле. У каждого вопроса есть четыре варианта ответа, причем один только правильный. Количество вопросов в тесте указывается в программном коде. В зависимости от того как ответил пользователь, на экран после каждого ответа выводится табличка с надписью «Ответ правильный» или «Ответ неправильный». Прежде чем начать проходить тестирование, вам предложат внести свои данные – фамилия, имя, номер группы. После прохождения полностью всего теста, появляется окно, информирующее о том, что вы закончили тест, и показывает ваши баллы. По окончании теста ваши результаты (фамилия, имя, группа, набранные баллы, и время прохождения теста) будут записаны в текстовый файл.

2.2. Построение алгоритма

2.3. Анализ и тестирование

Программа запускается с помощью файла TestOS. После запуска открывается окно предлагающее начать тест или покинуть программу (рис.1).

Рис. 1

При нажатии на кнопку «Начать тест», предлагается ввести свои данные для авторизации (рис. 2).

Рис. 2

Далее следует нажать кнопку «Начать». Если вы уже проходили этот тест, то увидите табличку с отказом (рис. 3).

Рис. 3

Если же вы проходите тест первый раз, то сразу же после авторизации появится окно с тестовыми вопросами (рис. 4).

Рис. 4

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

                                                       

                                 Рис. 5                                                                            Рис. 6

После прохождения всего теста, вам будет выдана информация о количестве набранных вами баллов (рис. 7).

Рис. 7

Также для удобства можно пользоваться главным меню вверху формы (рис. 8).

Рис. 8

В закладке «Файл» находятся такие команды, как «Начать тестирование» и «Выход», в закладке «Действие» - команда «Принять ответ» (рис. 9). А с помощью закладки «Помощь» можно просмотреть информацию о программе и об авторе этой программы (рис. 10).

Рис. 9

Рис. 10

Вопросы для тестирования программа считывает из файла базы данных Voprosy1.db. После прохождения теста результат записывается в текстовый файл database.txt (рис. 11).

Рис. 11

Заключение

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

Постоянно растет объем и сложность обрабатываемой информации, требуются все новые и новые виды ее представления. Как показывает практика, большинство пользователей уже не представляет себе, как бы они выполняли свою работу, с которой прекрасно справлялись еще 5 – 10 лет назад, без помощи компьютера.

В ходе курсового проектирования разработана тестирующая программа. Проектирование выполнено в системе Delphi. В пояснительной записке:

      представлена информация о создании языка программирования;

      приведен теоретический материал о компонентах, используемых в программе;

      представлена блок-схема алгоритма работы тестовой программы;

      приведен анализ и тестирование программы с подробным описанием;

      представлен листинг программы.

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

Список литературы

1.                  Чеснокова О.В., Delphi 2007. Алгоритмы и программы. Самоучитель. – М.: НТ Пресс, 2008 – 368 с.

2.                  Алексеев Е.Р., Чеснокова О.В., Турбо Паскаль 7.0, - М.: НТ Пресс, 2006 – 320 с.

3.                  Бобровский С., Delphi 5: учебный курс, - СПб: Питер, 2001 – 640 с.

4.                  Карчевская М.П., Рамбургер О.Л., Тархов С.В., Хамзина Е.А., Разработка приложений в среде Borland Delphi: лабораторный практикум по дисциплине "Информатика",- Уфа: УГАТУ, 2005.

5.                  Интернет-издание, 32 урока: Borland Delphi или о том, что лучше один раз увидеть, чем сто раз услышать.

6.                  Электронная книга. Архангельский А.Я., 100 компонентов общего назначения библиотеки Delphi 5.

Приложение

unit MainForm;

 

interface

 

uses   about,

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, NameEntr, jpeg, ExtCtrls;

const put_k_voprosam1='Voprosy1.db';  // файл с вопросами

      put_k_voprosam2='';

      put_k_data_base='database';  //файл для записи рез-ов

      rasshirenie_file_data_base='.txt';  // тип файла рез-в

      voprosov_v_teste=20;  // воспроизводимое количество

вопросов в тесте

      max_variantov=4;  // количество вариантов

      max_otvetov=50;  // количество ответов

      kluch='314159';

      max_voprosov=100;  // общее количество вопросов

      put_k_parolu='c:\windows\system32\OSPassword.db';

      strok_v_voprose=10;  // мах кол-во строк в вопросе

      bukv_stroke_voprosa:integer=63; // кол-во символов в

воспроизводимой строке вопроса

type

 

  tstudents=record  // тип данных о тестируемом

             name,familiya,group,resultat:string;

 

            end;

  tvse_voprosy=record

         vopros:array[1..10] of string;

         оtvety:array[1..max_otvetov] of string;

               end;

  TForm1 = class(TForm)

    nachalo: TButton;  // кнопка – начать тест

    Cancel: TButton;  // кнопка - выход

    otvet: TEdit;  // окно ввода ответа

    Labelotvet: TLabel;  // информирующая область

    Otvetgotov: TButton;  //кнопка – принять ответ

    MainMenu1: TMainMenu;  // главное меню

    Labelvopros: TLabel;  // область вывода вопроса

    N1: TMenuItem;  // семь пунктов главного меню

    N2: TMenuItem;

    N3: TMenuItem;

    N4: TMenuItem;

    N5: TMenuItem;

    N6: TMenuItem;

    N7: TMenuItem;

    vopros: TLabel;  // информирующая область

    procedure chtenie_voprosov;  // считывание вопросов

    procedure CancelClick(Sender: TObject);  // выход

    procedure nachaloClick(Sender: TObject); // начать тест

    procedure vivod_voprosa;  // вывод вопроса

    procedure vivod_poley_voprosa; // границы полей вопроса

    procedure OtvetgotovClick(Sender: TObject); // принять

ответ

    procedure FormCreate(Sender: TObject); // онформ.о форме

    function resultat:integer;  // вывод результата

    procedure zapis_v_data_base; // запись результата в файл

    function proverka:boolean;

    procedure n7click(sender:tobject); //информация о прогр.

    procedure otvetkeypress(sender:tobject;var key:char);

   

  private

  { Private declarations }

    vse_voprosy:array[1..max_voprosov]of tvse_voprosy;

    ispol_voprosy:array[1..voprosov_v_teste] of integer;

    schitano_voprosov:integer;

    tek_vopros,nomer:integer;

    file_s_voprosami:text;

    otvety_na_voprosy:array[1..voprosov_v_teste] of boolean;

 

  public

   student:tstudents;

   students:array[1..200] of tstudents;

  end;

var

  Form1: TForm1;

  s:tstrings;

implementation

 

{$R *.dfm}

function tform1.proverka:boolean; // проверка, проходили вы

тест или нет

var file_db:textfile;

    n,vsego_proshli:integer;

    str:string;

begin

if not fileexists(put_k_data_base+rasshirenie_file_data_base)then

  begin

   proverka:=false;

   exit;

  end;

assignfile(file_db,put_k_data_base+rasshirenie_file_data_base);

reset(file_db);

if ioresult=0 then

  begin

    n:=0;

    while not(eof(file_db))do

    begin

     n:=n+1;

     readln(file_db,students[n].name);

     delete(students[n].name,1,4);

     readln(file_db,students[n].familiya);

     delete(students[n].familiya,1,8);

     readln(file_db,str);

     readln(file_db,str);

     readln(file_db,str);

     readln(file_db,str);

    end; 

    vsego_proshli:=n;

    for n:=1 to vsego_proshli do

     begin 

      if (students[n].name=student.name) and

          (students[n].familiya=student.familiya) then

          begin

           messagedlg('Извините, вы уже проходили этот тест отойдите, пожалуйста, от омпьютера',mtinformation,[mbok],0);

           proverka:=true;

           exit;

          end;

     end;  

  end   

   else  proverka:=false;

   closefile(file_db);

 

end;

 

 

procedure tform1.otvetkeypress(sender:tobject;var key:char);

// принять ответ

begin

  if  key=#13 then

   otvetgotov.Click;    

end;

 

procedure tform1.zapis_v_data_base; // запись результата

var file_db:textfile;

begin

if fileexists(put_k_data_base+rasshirenie_file_data_base) then

  begin

   assignfile(file_db,put_k_data_base+rasshirenie_file_data_base);

   append(file_db);

  end

  else

   begin

    assignfile(file_db,put_k_data_base+rasshirenie_file_data_base);

    rewrite(file_db);

   end;

 

 

writeln(file_db,'Имя '+student.name);

writeln(file_db,'Фамилия '+student.familiya);

writeln(file_db,'Группа '+student.group);

writeln(file_db,'Дата '+datetostr(date));

writeln(file_db,'Время '+timetostr(time));

writeln(file_db,'Результат '+student.resultat);

writeln(file_db,'        ');

 

{ flush(file_db);}

closefile(file_db);

end;

function tform1.resultat:integer; // вывод результата

var i,kol_vo_pravilnyh:integer;

begin

  kol_vo_pravilnyh:=0;

  for i:=1 to voprosov_v_teste do

   begin

     if form1.otvety_na_voprosy[i] then

       kol_vo_pravilnyh:=kol_vo_pravilnyh+1;

   end;

   resultat:=round(10*(kol_vo_pravilnyh/voprosov_v_teste));

end;

 

procedure tform1.chtenie_voprosov; // считывание вопросов

label 1,2;

var

    schyotchik,i,j:integer;

    str:string;

    b1,b2:boolean;

begin

str:=put_k_voprosam1;

b1:=FileExists(put_k_voprosam1);

b2:=FileExists(put_k_voprosam2);

if (b1) and (b2 )then

  begin

   str:=put_k_voprosam1;

  end;

if (b1) and (not (b2))then

  begin

   str:=put_k_voprosam1;

  end;

if (b2) and (not (b1)) then

  begin

   str:=put_k_voprosam2;

  end;

if (not (b1))and(not (b2)) then

  begin

   showmessage('Не найден файл с вопросами');

   halt;

  end;

    try

schyotchik:=0;

assignfile(file_s_voprosami,str);

reset(file_s_voprosami);

while not(seekeof(file_s_voprosami)) do

   begin {n 001}

   schyotchik:=schyotchik+1;

   i:=0;

    repeat

    i:=i+1;

  

readln(file_s_voprosami,vse_voprosy[schyotchik].vopros[i]);

 

    until  vse_voprosy[schyotchik].vopros[i]='end of question';

     vse_voprosy[schyotchik].vopros[i]:='';

           for i:=1 to max_otvetov-1 do

            begin 

             readln(file_s_voprosami,vse_voprosy[schyotchik].otvety[i]);

             if vse_voprosy[schyotchik].otvety[i]='end' then

               begin 

                 for j:=i to max_otvetov do

                 vse_voprosy[schyotchik].otvety[j]:=kluch;

                goto 1;

               end;  

            end;             

1:end;   2:

closefile(file_s_voprosami);

schitano_voprosov:=schyotchik;

if schitano_voprosov<voprosov_v_teste then

  begin

  MessageDlg('Количество вопросов в тесте превышает количество вопросов в базе данных пожалуйста обновите Базу Данных',mterror,[mbok],0);

   exit;

  end;

   except

    MessageDlg('Неверен формат Базы Данных',mterror,[mbok],0);

   end;

end;

 

procedure tform1.vivod_poley_voprosa; // границы вопроса

var sam_vopros:string;

    i:integer;

begin

 

   labelvopros.Visible:=true;

   vopros.Visible:=true;

   otvet.Visible:=true;

   labelotvet.Visible:=true;

   otvetgotov.Visible:=true;

   sam_vopros:='';

    for i:=1 to strok_v_voprose do

     sam_vopros:=sam_vopros+vse_voprosy[nomer].vopros[i];

   if length(sam_vopros)>7*109 then

     begin

      //vopros.ScrollBars:=ssVertical;

    vopros.Height:=100

     end

       else

        begin

         //vopros.ScrollBars:=ssnone;

         vopros.Height:=17*(trunc(length(sam_vopros)/72)+1);

        end;                  

end;

 

procedure tform1.vivod_voprosa;  // вывод вопроса на форму

label 1;

var i,j:integer;

begin

form1.vopros.Caption:='';

randomize;

labelvopros.Caption:='Вопрос №'+inttostr(tek_vopros);

1:nomer:=trunc(random(schitano_voprosov))+1;

if tek_vopros>=1 then

for i:=1 to tek_vopros do

  begin

   if (ispol_voprosy[i]=nomer) or (nomer>schitano_voprosov) then goto 1;

  end

   else nomer:=trunc(schitano_voprosov)+1;

ispol_voprosy[tek_vopros]:=nomer;

form1.vivod_poley_voprosa;

j:=1;

  for i:=1 to strok_v_voprose do

   begin

 

  for j:=1 to  Trunc(length(vse_voprosy[nomer].vopros[i])/bukv_stroke_voprosa)+1 do

   if not((i=1) and (j=1))  then

  vopros.Caption:=vopros.Caption+#13+copy(vse_voprosy[nomer].vopros[i],(j-1)*bukv_stroke_voprosa+1,bukv_stroke_voprosa)

                            else

  vopros.Caption:=vopros.Caption+copy(vse_voprosy[nomer].vopros[i],(j-1)*bukv_stroke_voprosa-1,bukv_stroke_voprosa)

 

   end;

otvet.Text:='';

 

end;

 

procedure TForm1.CancelClick(Sender: TObject); // выход

begin

close;

end;

 

procedure TForm1.nachaloClick(Sender: TObject);//начать тест

begin

  form2.ShowModal;

if not(form2.vvedenie_imeni) then exit

                              else

                               begin

         student.name:=form2.name.Text;

         student.familiya:=form2.Familiya.Text;

         student.group:=form2.gruppa.Text;

         if form1.proverka then close;

 

                               end;

screen.Cursor:=crappstart;

form1.chtenie_voprosov;

screen.Cursor:=crdefault;

tek_vopros:=1;

form1.vivod_voprosa;

otvet.SetFocus;

N5.Enabled:=true;

end;

 

procedure TForm1.OtvetgotovClick(Sender: TObject); //принять

ответ

var i:integer;

begin

 

for i:=1 to max_otvetov-1 do

  begin   

   if otvet.Text=vse_voprosy[nomer].otvety[i] then

     begin   

      messagedlg('Ответ правильный',mtconfirmation,[mbok],0);

      otvety_na_voprosy[tek_vopros]:=true;

      tek_vopros:=tek_vopros+1;

           

      otvet.SetFocus;

      if tek_vopros=voprosov_v_teste+1 then

  begin 

   messagedlg('Вы закончили тест и получили (из 10 возможных баллов) - '+inttostr(form1.resultat),mtconfirmation,[mbok],0);

   student.resultat:=inttostr(form1.resultat);

   form1.zapis_v_data_base;

   close;

  end; 

  form1.vivod_voprosa;

      exit;

     end;  

  end;   

if not(otvety_na_voprosy[tek_vopros]) then

  begin  

   messagedlg('Ответ неправильный',mtconfirmation,[mbok],0);

   otvety_na_voprosy[tek_vopros]:=false;

   tek_vopros:=tek_vopros+1;

 

   if tek_vopros=voprosov_v_teste+1 then

  begin   

   messagedlg('Вы закончили тест и получили (из 10 возможных баллов) - '+inttostr(form1.resultat),mtconfirmation,[mbok],0);

    student.resultat:=inttostr(form1.resultat);

    form1.zapis_v_data_base;

    close;

  end;    

  form1.vivod_voprosa;

  end;    

 

otvet.SetFocus;

end;

 

procedure TForm1.FormCreate(Sender: TObject); //инф.о форме

var i,j:integer;

begin            // цикл вывода вопроса на форму

for j:=1 to max_voprosov do

  for i:=1 to strok_v_voprose do

   begin

   vse_voprosy[j].vopros[i]:='';

   end;

for i:=1 to voprosov_v_teste do

begin

   otvety_na_voprosy[i]:=false;

   ispol_voprosy[i]:=0;

end;

if fileexists(put_k_parolu) then

   begin

 

   end;

 

end;

procedure tform1.n7click(sender:tobject); // инф.о программе

begin

aboutbox.ShowModal; // открытие окна другой формы

end;

 

end.

2

 



Программирование тестовой программы. 2