МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Кафедра математичних дисциплін та інформатики
Контрольна роботаз дисципліни: ”Програмування”
на тему:
”Розробка програмногопродукту ”Тестер”
ТЕРНОПІЛЬ-2009
ЗМІСТ
Постановка задачі
Алгоритм програми
Опис програми
Висновки
Список використаних джерел
Додаток
ПОСТАНОВКАЗАДАЧІ
Розробитипрограмний продукт, а саме ”Тестер”, який повинен володіти наступноюфункціональністю:
— повинензавантажувати тести із файлу;
— проводититестування;
— вестистатистику тестування;
— виводитирезультат тестування;
— можливістьзбереження результату у файл.
АЛГОРИТМПРОГРАМИ
Алгоритм програмиможна розбити на два підалгоритми (рис. 1), а саме: алгоритм проходження тесту(рис. 2) та алгоритм загрузки тесту в пам‘ять програми (рис. 3) .
/>
Рис. 1 — Загальнийалгоритм програми
Алгоритм длятестування досить простий і суть його полягає в тому щоб циклічно обійти всізапитання в масиві і в кінці вивести результат.
/>
Рис. 2 — Алгоритмпроходження тесту
/>
Рис. 3 — Алгоритмзагрузки тесту в пам‘ять програми
Алгоритм загрузкитесту з файлу досить заплутаний хоча не є складним. Суть його полягає в тому,що ми по стрічково зчитуємо інформацію із файлу, шукаємо ідентифікатор блоку чимодифікатор блоку і виконуємо відповідні дії. Якщо у файлі не має помилок тоалгоритм закінчується і передається управління алгоритму проведення тестування.
Основну увагу пристворенні тесту потрібно звертати на формат. Не повинно бути зайвих пробілів,тому що це може привести до того що програма не зможе прочитати тест.
ОПИС ПРОГРАМИ
Програма Тестер(рис. 4) була реалізована на мові програмування TurboPascal в середовищіBorland Delphi 7.
/>
Рис. 4 — Інтерфейс програми Тестер
Програма здійснюєтестування людей. Тести загружаються із файлів типу *.tst. Де [s] – (start)початок тесту, [e] – (end) кінець тесту, [q] – (question) блок запитання. Вблоці [s] використовується властивість t – (title) заголовок тесту. Основнаінформація задається у блоках [q], а саме: q (question) – власне питання, v (variant)– варіант відповіді (їх може бути декілька), c (correct variant) – номерправильної відповіді.
Програма в режиміпроходження тесту контролює, щоб людина, яка проходить тест вибрала однувідповідь.
/>
Рис. 5 — Зовнішнійвигляд вікна результату
Після виборутесту, він загружається в пам‘ять програми і починається власне тестування(рис. 4). Після проходження тестування програма виводить результат тастатистику. Вікно з результатом зображене на рисунку 5 і функціонально дозволяєзберігати файл в текстовий документ.
ВИСНОВКИ
1. Під часвиконання роботи ми написали програмний продукт “Тестер”, використовуючипрограмне середовище Borland Delphi 7, що дало нам можливість проводититестування людей.
2. Намирозроблена програма, яка завантажує тесту вальну інформацію із файлу, що сприяєпростому і швидкому створенню нових тестів в будь якому текстовому редакторі.
3. Реалізованоможливість збереження результату тестування, що дає можливість довгостроковогозбереження інформації.
СПИСОКВИКОРИСТАНИХ ДЖЕРЕЛ
1. Фаронов В.В. Delphi 4. Учебныйкурс. М.: «Нолидж», 1999. 464 с.
2. Юркин А.Г. Задачник попрограммированию. СП.: Питер, 2002.192с.
ДОДАТОК
// модутьдля загрузки тесту із файла
unit ArrayM;
interface
type
TStr=arrayof string;
TRMas=record
putanya:string;
PravVid:byte;
n:byte;
Mas:TStr;
end;
TMas=array ofTRMas;
typeread=(read_no,read_general,read_questen,read_end);
var
Mas:TMas;
Time:integer;
KilkistPraviln:integer;
Potochne:integer;
MAX:integer;
MINUTE:integer;
procedure CreatStart(file_name:string);
implementation
uses Main, SysUtils;
procedure CreatStart(file_name:string);
var f:textfile;
s,s1:string;
tr:typeread;
begin
if(masnil)thensetlength(mas,0);
Potochne:=0;
KilkistPraviln:=0;
MAX:=0;
tr:=read_no;
AssignFile(f,file_name);
Reset(f);
while not eof(f) do
begin
readln(f,s);
if(s='[s]')then begin
tr:=read_general;
continue;
end;
if(s='[q]')then begin
tr:=read_questen;
MAX:=MAX+1;
setLength(Mas,MAX);
continue;
end;
if(s='[e]')then break;
case(tr)of
read_general: begin
if(s[1]='t')then begin
s1:=copy(s,3,length(s)-2);
Form1.Caption:='Tester['+s1+']';
end;
end;
read_questen: begin
if(s[1]='q')then begin
s1:=copy(s,3,length(s)-2);
mas[MAX-1].putanya:=s1;
mas[MAX-1].n:=0;
end;
if(s[1]='v')then begin
s1:=copy(s,3,length(s)-2);
mas[MAX-1].n:=mas[MAX-1].n+1;
setLength(mas[MAX-1].Mas,mas[MAX-1].n);
mas[MAX-1].Mas[mas[MAX-1].n-1]:=s1;
end;
if(s[1]='c')then begin
s1:=copy(s,3,length(s)-2);
mas[MAX-1].PravVid:=StrToInt(s1);
end;
end;
end;
end;
closefile(f);
MINUTE:=((18*15)div 60)+1;
Time:=MINUTE*60*1000;
end;
end.
// модуль головноїформи
unit Main;
interface
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus,ArrayM, StdCtrls, ExtCtrls, ComCtrls;
Type
TStatus=(tsActiv,tsNotActiv);
TForm1 = class(TForm)
MainMenu1:TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
AboutProc:TMenuItem;
StartTest:TMenuItem;
N5: TMenuItem;
CloseTest:TMenuItem;
Panel1: TPanel;
RadioGroup1:TRadioGroup;
Button1: TButton;
GroupBox1:TGroupBox;
GroupBox2:TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Timer1: TTimer;
OpenDialog:TOpenDialog;
procedureCloseTestClick(Sender: TObject);
procedureAboutProcClick(Sender: TObject);
procedure StartTestClick(Sender:TObject);
procedureFormCreate(Sender: TObject);
procedureButtonNextClick(Sender: TObject);
procedureTimer1Timer(Sender: TObject);
private
Status:TStatus;
public
procedureWriteParametru;
procedureWritePutanya;
procedureGetResult;
end;
var
Form1: TForm1;
implementation
uses About, ResultTest, Math;
{$R *.dfm}
procedureTForm1.CloseTestClick(Sender: TObject);
begin
case Status of
tsActiv:
if MessageDlg('В даний моментактивний тест. Хочете завершити його?',
mtInformation,[mbYes,mbNo],0)=mrYesthen
Close ;
tsNotActiv:Close;
end;
end;
procedureTForm1.AboutProcClick(Sender: TObject);
begin
Application.CreateForm(TAboutBox,AboutBox);
AboutBox.ShowModal;
end;
procedureTForm1.StartTestClick(Sender: TObject);
begin
if Status=tsNotActiv then
begin
if(OpenDialog.Execute)then
CreatStart(OpenDialog.FileName)
else begin
exit;
end;
Panel1.Visible:=true;
Status:=tsActiv;
Label6.Caption:=inttostr(ArrayM.MAX);
Label8.Caption:=inttostr(Potochne+1);
Label9.Caption:='0';
timer1.Enabled:=true;
WritePutanya;
end;
end;
procedure TForm1.FormCreate(Sender:TObject);
begin
Status:=tsNotActiv;
end;
procedureTForm1.ButtonNextClick(Sender: TObject);
begin
if RadioGroup1.ItemIndex=-1 thenexit;
ifmas[potochne].PravVid-1=RadioGroup1.ItemIndex then
KilkistPraviln:=KilkistPraviln+1;
Potochne:=Potochne+1;
if Potochne
begin
WritePutanya;
WriteParametru;
end else
GetResult;
end;
procedure TForm1.WriteParametru;
begin
Label8.Caption:=inttostr(Potochne+1);
Label9.Caption:=inttostr(KilkistPraviln);
end;
procedure TForm1.Timer1Timer(Sender:TObject);
var minute,second:integer;
p:integer; s:string;
begin
p:=time div1000;
minute:=p div60;
second:=p mod60;
if (Time0) then
begin
if Second=0 then
s:='00';
if (secondand(second>0)then s:='0'+inttostr(second);
if second>9 thens:=inttostr(second);
Label7.Caption:=inttostr(minute)+':'+s;
end
else
GetResult;
Time:=Time-1000;
end;
procedure TForm1.WritePutanya;
var i:integer;
begin
Label1.Caption:=mas[Potochne].putanya;
RadioGroup1.Items.Clear;
for i:=1 tomas[Potochne].n do
RadioGroup1.Items.Add(mas[Potochne].mas[i-1]);
end;
procedure TForm1.GetResult;
var Otsinka:integer;
r:integer;
begin
Timer1.Enabled:=false;
Panel1.Visible:=false;
Status:=tsNotActiv;
Label7.Caption:='';
// обчислитиоцінку
Otsinka:=KilkistPraviln;
Form1.Caption:='Tester';
Application.CreateForm(TForm2,Form2);
with form2.Memo1.Lines do
begin
Clear;
Add('Результатпроходження тесту');
Add('---------------------------------------------------');
Add('Кількістьпитань: '+inttostr(ArrayM.MAX));
Add('Кількістьправильних відповідей: '+inttostr(KilkistPraviln));
r:=Floor(100/ArrayM.MAX*KilkistPraviln*100 );
Add('В процентномувідношені: '+floattostr( r/100 )+'%');
Add('Оцінка:'+inttostr(Otsinka));
Add('---------------------------------------------------');
end;
Form2.ShowModal;
end;
end.