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

Содержание

Введение

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

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

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

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

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

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

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

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

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

Глава 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.




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