Программирование тестовой программы
Содержание
Введение
Предмет «Информатика» изучает компьютеры и информационные технологии. В свете быстро развивающегося технического процесса и все большего внедрения компьютеров в нашу жизнь этот предмет наряду с основными предметами, такими как математика и физика, приобретает все большее значение. Знание компьютеров и программирования уже необходимо не только на специфических предприятиях, но и на заводах и в простом офисе, где вся бухгалтерия ведется на компьютерах.
Информатика-это техническая наука, систематизирующая приемы создания, хранения, обработки и передачи информации средствами вычислительной техники, а также принципы функционирования этих средств и методы управления ими.
Из этого определения видно, что информатика очень близка к технологии, поскольку отвечает на вопрос как…?
- Как принимать и хранить информацию?
- Как обрабатывать информацию и преобразовывать ее в форму, удобную для человека?
- Как использовать вычислительную технику с наибольшей эффективностью?
- Как использовать достижения других наук для создания новых средств вычислительной техники?
- Как управлять техническими средствами с помощью программ?
Поэтому не случайно предмет, изучением которого занимается информатика, нередко называют информационной технологией или компьютерной технологией.
Важным в нашем определении является то, что у информатики есть как бы две стороны. С одной стороны, она занимается изучением устройств и принципов действия средств вычислительной техники, а с другой стороны - систематизацией приемов и методов работы с программами, управляющими этой техникой.
Итак, информатика-это наука, изучающая все аспекты получения, хранения, преобразования, передачи и использования информации.
Теоретическая информатика-это часть информатики, связанная с разработкой теорий, таких как: теория информации, теория алгоритмов, теория кодирования, теория автоматов, теория сетей и т.д., в том числе теоретических вопросов, связанных с проблемой создания искусственного интеллекта.
Целью данной курсовой работы является создание программного продукта «программы-теста». Эту программу я смог составить после того, как просмотрел несколько различных примеров создания программы-теста и изучил их основные принципы. Тест-программа предназначена для проверки знаний по различным темам, в зависимости от того какие вопросы будут находится в базе данных.
Глава 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. В пояснительной записке:
- представлена информация о создании языка программирования;
- приведен теоретический материал о компонентах, используемых в программе;
- представлена блок-схема алгоритма работы тестовой программы;
- приведен анализ и тестирование программы с подробным описанием;
- представлен листинг программы.
Данная программа может применяться в различных учебных организациях для проверки знаний по различным темам (в зависимости от того, какие вопросы будут представлены в базе данных). Её пользовательский интерфейс делает её простой, понятной и доступной.
Список литературы
- Чеснокова О.В., Delphi 2007. Алгоритмы и программы. Самоучитель. – М.: НТ Пресс, 2008 – 368 с.
- Алексеев Е.Р., Чеснокова О.В., Турбо Паскаль 7.0, - М.: НТ Пресс, 2006 – 320 с.
- Бобровский С., Delphi 5: учебный курс, - СПб: Питер, 2001 – 640 с.
- Карчевская М.П., Рамбургер О.Л., Тархов С.В., Хамзина Е.А., Разработка приложений в среде Borland Delphi: лабораторный практикум по дисциплине "Информатика",- Уфа: УГАТУ, 2005.
- Интернет-издание, 32 урока: Borland Delphi или о том, что лучше один раз увидеть, чем сто раз услышать.
- Электронная книга. Архангельский А.Я., 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='.
voprosov_v_teste=20; // воспроизводимое количество
вопросов в тесте
max_variantov=4; // количество вариантов
max_otvetov=50; // количество ответов
kluch='314159';
max_voprosov=100; // общее количество вопросов
put_k_parolu='c:\windows\
strok_v_voprose=10; // мах кол-во строк в вопросе
bukv_stroke_voprosa:integer=
воспроизводимой строке вопроса
type
tstudents=record // тип данных о тестируемом
name,familiya,group,resultat:
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;
private
{ Private declarations }
vse_voprosy:array[1..max_
ispol_voprosy:array[1..
schitano_voprosov:integer;
tek_vopros,nomer:integer;
file_s_voprosami:text;
otvety_na_voprosy:array[1..
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+
begin
proverka:=false;
exit;
end;
assignfile(file_db,put_k_
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].
delete(students[n].name,1,4);
readln(file_db,students[n].
delete(students[n].familiya,1,
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
(students[n].familiya=student.
begin
messagedlg('Извините, вы уже проходили
этот тест отойдите, пожалуйста, от омпьютера',mtinformation,[
proverka:=true;
exit;
end;
end;
end
else proverka:=false;
closefile(file_db);
end;
procedure tform1.otvetkeypress(sender:
// принять ответ
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+
begin
assignfile(file_db,put_k_data_
append(file_db);
end
else
begin
assignfile(file_db,put_k_data_
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_
end;
resultat:=round(10*(kol_vo_
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_
b2:=FileExists(put_k_
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,
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_
until vse_voprosy[schyotchik].
vse_voprosy[schyotchik].
for i:=1 to max_otvetov-1 do
begin
readln(file_s_voprosami,vse_
if vse_voprosy[schyotchik].
begin
for j:=i to max_otvetov do
vse_voprosy[schyotchik].
goto 1;
end;
end;
1:end; 2:
closefile(file_s_voprosami);
schitano_voprosov:=
if schitano_voprosov<voprosov_v_
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_
if length(sam_vopros)>7*109 then
begin
//vopros.ScrollBars:=
vopros.Height:=100
end
else
begin
//vopros.ScrollBars:=ssnone;
vopros.Height:=17*(trunc(
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(
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_
ispol_voprosy[tek_vopros]:=
form1.vivod_poley_voprosa;
j:=1;
for i:=1 to strok_v_voprose do
begin
for j:=1 to Trunc(length(vse_voprosy[
if not((i=1) and (j=1)) then
vopros.Caption:=vopros.
else
vopros.Caption:=vopros.
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.
student.group:=form2.gruppa.
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].
begin
messagedlg('Ответ правильный',mtconfirmation,[
otvety_na_voprosy[tek_vopros]:
tek_vopros:=tek_vopros+1;
otvet.SetFocus;
if tek_vopros=voprosov_v_teste+1 then
begin
messagedlg('Вы закончили тест и получили
(из 10 возможных баллов) - '+inttostr(form1.resultat),
student.resultat:=inttostr(
form1.zapis_v_data_base;
close;
end;
form1.vivod_voprosa;
exit;
end;
end;
if not(otvety_na_voprosy[tek_
begin
messagedlg('Ответ неправильный',mtconfirmation,[
otvety_na_voprosy[tek_vopros]:
tek_vopros:=tek_vopros+1;
if tek_vopros=voprosov_v_teste+1 then
begin
messagedlg('Вы закончили тест и получили
(из 10 возможных баллов) - '+inttostr(form1.resultat),
student.resultat:=inttostr(
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.