Проверяемая
функция программы
|
Ожидаемый
результат
|
Полученный
результат
|
Считывание
списка слов из файла
|
Отображение их
на экране
|
Соответствует
ожидаемому
|
Просмотр лучших
результатов
|
Чтение из файла
результатов данных и их отображение на экране
|
Соответствует
ожидаемому
|
Остановка
работы при окончании отведенного времени
|
Закрытие формы
и показ результатов
|
Соответствует
ожидаемому
|
Указание
клавиши для нажатия
|
Установка рамки
на нужную клавишу
|
Соответствует
ожидаемому
|
Подсчет ошибок
|
Увеличение
количества ошибок при нажатии неверной клавиши
|
Соответствует
ожидаемому
|
В ходе тестирования программы была обнаружена ошибка
изменения цвета набираемого слова. При уменьшении длинны набираемой части слова
оно отодвигалось вправо, что вызывало изменение цвета в обратную сторону: от
более красного к более зелёному. Эта проблема была исправлена путем внесения
дополнительной переменной, которая не позволяет изменять цвет в обратную
сторону.
Была найдена возможность проходить программу даже не владея
навыками быстрой печати. Для этого использовалась функция паузы. При нажатии
паузы время не идет и слово на перемещается, следовательно у пользователя
появляется неограниченное время для того чтобы понять какую клавишу нужно
нажать и переместить пальцы в соответствующее положение. Это является
некорректным использованием данного программного средства. Для пресечения такой
возможности используется ограничение на количество взятия пауз за прохождение
уровня, которое было установлено равным три. Этого достаточно при использовании
программы по правилам.
Итогом тестирования является устранение всех найденных ошибок
и в итоге корректная работа программы.
Руководство
пользователя
Во время запуска программы появляется окно изображенное на
рисунке 2.
Рисунок 2 - Окно начала программы
В окне содержатся три кнопки: "Начать”, "Рекорды" и
"Закрыть”. При нажатии первой кнопки происходит переход к непосредственно
набору слов. По нажатию второй откроется окно для просмотра лучших результатов,
где содержится информация о прогрессе прохождения, количестве ошибок и времени.
Окно результатов изображено на рисунке 3. Третья кнопка завершает работу
программы.
Рисунок 3 - Окно рекордов
После нажатия кнопки начать на экране появляется окно изображенное
на рисунке 4.
Рисунок 4 - Основное окно программы
Во время набора должна быть включена русская раскладка клавиатуры,
а также выключен Caps Lock.
Под информацией об уровне находятся кнопки позволяющие
приостановить или завершить работу с программой. Приостанавливать работу с
программой можно не более 3-х раз за уровень.
Справа находится изображение клавиатуры на которой красной рамкой
выделяется клавиша которую следует нажать следующей.
Строка движущаяся внизу окна содержит текущее слово которое нужно
набрать. Если пользователь не успел этого сделать или прошел все уровни, то
происходит переход к завершающему этапу.
В завершающем этапе два варианта: пользователь вошел в тройку
лучших или не вошел. В первом случае ему будет предложено ввести своё имя, а
если он его не введет, то результат будет сохранен под именем "Noname”. Во втором случае пользователь просто
просматривает лучшие результаты. По нажатию клавиши "Закрыть"
происходит возвращение к окну начала программы.
Заключение
В рамках курсовой работы было разработано программное
средство, предназначенное для развития навыка быстрой печати на клавиатуре. С
помощью данной программы пользователю предлагается значительно улучшить
скорость набора.
Эта программа соответствует требованиям необходимым для
работы с ней:
точность - обеспечивает точные результаты выполненной работы,
такие как количество ошибок и время набора;
быстродействие - обеспечивает моментальное выполнение всех
действий, выполняемых внутри программы;
простота интерфейса - любой неопытный пользователь без
каких-либо трудностей может использовать данный продукт.
Таким образом разработка программы успешно завершена и
реализованы все важные базовые функции.
Список
литературы
1.
Программирование на языке Delphi: учебное пособие/ А.Н. Вальвачев [и др.]. -
2012. - 432 с.
.
Глухова Л.А. Основы алгоритмизации и программирования: Учебное пособие, ч1. - Минск:
БГУИР, 2010. - 195 с.
Приложения
Приложение А
unit Unit2;, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms,, StdCtrls, Buttons;= class (TForm):
TButton;: TBitBtn;: TButton;Button2Click (Sender: TObject);BitBtn1Click
(Sender: TObject);Button1Click (Sender: TObject);
{ Private declarations }
{ Public declarations };= record: string [10];:
real;: integer;: integer;;=file of mesto;: TForm2;: mesto;: boolean =
false;Unit1, Unit4;
{$R *. dfm}TForm2. Button2Click (Sender:
TObject);. Hide;: =tform1. create (self);form1. showmodal=mrOK;form1. free;:
=tform4. create (self);form4. showmodal=mrCancel;form4. free;. Show;;TForm2.
BitBtn1Click (Sender: TObject);;TForm2. Button1Click (Sender: TObject);. Hide;:
=true;: =tform4. Create (self);form4. ShowModal=mrcancel;form4. Free;: =false;.
Show;;.Unit1; {автор - Булойчик Алексей}, Messages,
SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ExtCtrls,
ComCtrls, XPMan, jpeg, Buttons;= class (TForm): TListBox;: TListBox;: TLabel;:
TLabel;: TTimer;: TTimer;: TImage;: TEdit;: TLabel;: TLabel;: TEdit;: TButton;:
TButton;: TPanel;: TImage;: TImage;: TImage;: TImage;: TImage;: TLabel;:
TEdit;Timer1Timer (Sender: TObject);Timer2Timer (Sender: TObject);Button1Click
(Sender: TObject);Button1KeyPress (Sender: TObject; var Key:
Char);Button2KeyPress (Sender: TObject; var Key: Char);ListBox2KeyPress
(Sender: TObject; var Key: Char);Button2Click (Sender: TObject);FormCreate
(Sender: TObject);FormShow (Sender: TObject);FormClose (Sender: TObject; var Action:
TCloseAction);
{ Private declarations }
{ Public declarations };: TForm1;Unit3, Unit2,
Unit4;h=16;time,pause,rount,posit,mistake,obshmist,obshtime,slovo:
integer;,nul2: string [2];
{$R *. dfm}bukva (t: char);x,y: word;t of
'й': begin x: =61; y: =39 end;
'ц': begin x: =101; y: =39 end;
'у': begin x: =142; y: =39 end;
'к': begin x: =183; y: =39 end;
'е': begin x: =225; y: =39 end;
'н': begin x: =266; y: =39 end;
'г': begin x: =307; y: =39 end;
'ш': begin x: =348; y: =39 end;
'щ': begin x: =389; y: =39 end;
'з': begin x: =430; y: =39 end;
'х': begin x: =471; y: =39 end;
'ъ': begin x: =512; y: =39 end;
'ф': begin x: =82; y: =80 end;
'ы': begin x: =124; y: =80 end;
'в': begin x: =164; y: =80 end;
'а': begin x: =205; y: =80 end;
'п': begin x: =246; y: =80 end;
'р': begin x: =287; y: =80 end;
'о': begin x: =328; y: =80 end;
'л': begin x: =369; y: =80 end;
'д': begin x: =410; y: =80 end;
'ж': begin x: =451; y: =80 end;
'э': begin x: =492; y: =80 end;
'я': begin x: =101; y: =120 end;
'ч': begin x: =142; y: =120 end;
'с': begin x: =183; y: =120 end;
'м': begin x: =225; y: =120 end;
'и': begin x: =266; y: =120 end;
'т': begin x: =306; y: =120 end;
'ь': begin x: =348; y: =120 end;
'б': begin x: =389; y: =120 end;
'ю': begin x: =430; y: =120 endx: =1000;form1 do. left: =x;.
Top: =y;. Left: =x+37;. Top: =y;. Left: =x;. Top: =y+37;. Left: =x;. Top:
=y;;;procend;: =obshtime+time;: =obshmist+mistake;. oshibki: =obshmist;. time:
=obshtime;form1 do. procent: = (rount-1) *10+ (slovo*length (ListBox2. Items
[0]) +length (Label1. Caption)) / (length (ListBox2. Items [0]) *10);.
Close;;newround (r: byte);sh=shortstring;a: array [1.20] of sh;: string [15];:
set of byte;,n,k: byte;: file of sh;: =0;: =0;: =0;: =0;: ='00';: ='00';form1
do. Text: ='000';. Text: ='000';. Text: =inttostr (rount);. Left: =750;. Left:
=label1. Left;. Clear;. Clear;. Height: =0;. Top: =listbox1. Top;. Height:
=10*h;. Font. Color: =RGB ( ( (750-label1. Left) *255) div 750, ( (label1.
Left-50) *255) div 750, ( (label1. Left-50) *60) div 650);;: ='files/'+inttostr
(r);(f,s);(f);: =0;(n);(f,a [n]);eof (f) =true;(f);: = [];i: =1 to 10 do:
=random (n) +1;(k in sk) =false;(sk,k);. ListBox2. Items. Add (a [k]);;.
Label1. Caption: ='';. Label2. Caption: =form1. ListBox2. Items [0];(form1.
ListBox2. Items [0] [1]);;nextword;(slovo);: =790;form1 do. ItemIndex:
=1;ListBox2. ItemIndex=1. Items. Add (form1. ListBox2. Items [0]);. Items.
Delete (0);. Height: =ListBox1. Height+h;. Height: =ListBox2. Height-h;. Top:
=ListBox2. Top+h;. Caption: ='';. Caption: =ListBox2. Items [0];(ListBox2.
Items [0] [1]);. Left: =750;. Left: =label1. Left;. Font. Color: =RGB ( (
(750-label1. Left) *255) div 750, ( (label1. Left-50) *255) div 750, ( (label1.
Left-50) *60) div 650);(rount);: =obshtime+time;:
=obshmist+mistake;rount<=10newround (rount)procend;;;;press (var Key:
Char);s: shortstring;form1 do. ItemIndex: =0;: =label2. Caption;key=s [1].
Caption: =Label1. Caption+s [1];(s,1,1);. Caption: =s;. Left: =label1.
Left+label1. Width;length (s) =0nextwordbukva (s [1]);(mistake);mistake=10nul2:
='0';mistake=100nul2: ='';. Text: =nul2+inttostr (mistake);;;;TForm1.
Timer1Timer (Sender: TObject);i: integer;. Left: =Label1. Left-rount;. Left:
=Label2. Left-rount;label2. Left<50procend;label2. Left<posit. Font.
Color: =RGB ( ( (750-label2. Left) *255) div 750, ( (label2. Left-50) *255) div
750, ( (label2. Left-50) *60) div 650);: =label2. Left;;;TForm1. Timer2Timer
(Sender: TObject);(time);time=10nul1: ='0';time =100nul1: ='';. Text: =nul1+inttostr
(time);;TForm1. Button1Click (Sender: TObject);pause<3: =Tform3. create
(self);form3. ShowModal = mrOk;form3. Free;(pause);;;TForm1. Button1KeyPress
(Sender: TObject; var Key: Char);(key);;TForm1. Button2KeyPress (Sender:
TObject; var Key: Char);(key);;TForm1. ListBox2KeyPress (Sender: TObject; var
Key: Char);(key);;TForm1. Button2Click (Sender: TObject);;;TForm1. FormCreate
(Sender: TObject);;: =0;: =0;: =1;: =790;;TForm1. FormShow (Sender:
TObject);(rount);;TForm1. FormClose (Sender: TObject; var Action:
TCloseAction);;;.Unit3;, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,, StdCtrls, Buttons;= class (TForm): TLabel;:
TBitBtn;FormActivate (Sender: TObject);FormClose (Sender: TObject; var Action:
TCloseAction);
{ Private declarations }
{ Public declarations };:
TForm3;Unit1;pause;Form1 do. Enabled: =not Timer1. Enabled;. Enabled: =not
Timer2. Enabled;. Enabled: =not Button1. Enabled;. Enabled: =not Button2.
Enabled;. Enabled: =not ListBox2. Enabled;;;
{$R *. dfm}TForm3. FormActivate (Sender:
TObject);;TForm3. FormClose (Sender: TObject; var Action:
TCloseAction);;.Unit4;, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,, StdCtrls, Buttons;= class (TForm): TLabel;: TLabel;:
TLabel;N: TLabel;N: TLabel;N: TLabel;P: TLabel;P: TLabel;P: TLabel;: TLabel;:
TLabel;: TLabel;: TLabel;N: TLabel;P: TLabel;M: TLabel;T: TLabel;M: TLabel;M:
TLabel;M: TLabel;T: TLabel;T: TLabel;T: TLabel;: TEdit;: TBitBtn;FormShow
(Sender: TObject);EditKeyPress (Sender: TObject; var Key: Char);FormClose (Sender:
TObject; var Action: TCloseAction);BitBtn1Click (Sender: TObject);
{ Private declarations }
{ Public declarations };: TForm4;Unit2;
{$R *. dfm}f: filemesto;: array [1.3] of
mesto;,j,k: byte;: string [5];TForm4. FormShow (Sender: TObject);w:
boolean;(f,'files/records');(f);i: =1 to 3 do(f,a [i]);(f);pokazform4 doN.
Caption: =a [1]. name;M. Caption: =inttostr (a [1]. oshibki);T. Caption:
=inttostr (a [1]. time) +'с';(a [1]. procent: 0: 2,s);s [3] <>'. 'delete (s,5,1);s
[4] ='. 's: ='100';P. Caption: =s+'%';N. Caption: =a [2]. name;M. Caption:
=inttostr (a [2]. oshibki);T. Caption: =inttostr (a [2]. time) +'с';(a [2]. procent: 0:
2,s);s [3] <>'. 'delete (s,5,1);s [4] ='. 's: ='100';P. Caption:
=s+'%';N. Caption: =a [3]. name;M. Caption: =inttostr (a [3]. oshibki);T.
Caption: =inttostr (a [3]. time) +'с';(a [3]. procent: 0: 2,s);s [3] <>'.
'delete (s,5,1);s [4] ='. 's: ='100';P. Caption: =s+'%';: =4;(a [3].
procent<m. procent): =false;(k);round (a [k-1]. procent*1000) >round (m.
procent*1000)w: =trueround (a [k-1]. procent*1000) =round (m. procent*1000)a
[k-1]. oshibki<m. oshibkiw: =true;a [k-1]. oshibki=m. oshibkia [k-1].
time<=m. timew: =true;;(k=1) or w;j: =2 downto k do[j+1]: =a [j];[k]:
=m;k<>1N. Caption: =a [1]. name;M. Caption: =inttostr (a [1]. oshibki);T.
Caption: =inttostr (a [1]. time) +'с';(a [1]. procent: 0: 2,s);s [3] <>'.
'delete (s,5,1);s [4] ='. 's: ='100';P. Caption: =s+'%';N. Visible: =false;M.
Caption: =inttostr (m. oshibki);T. Caption: =inttostr (m. time) +'с';(m. procent: 0: 2,s);s
[3] <>'. 'delete (s,5,1);s [4] ='. 's: ='100';P. Caption: =s+'%';.
Visible: =true;. Top: =48+64* (k-1);;k<>2N. Caption: =a [2]. name;M.
Caption: =inttostr (a [2]. oshibki);T. Caption: =inttostr (a [2]. time) +'с';(a [2]. procent: 0:
2,s);s [3] <>'. 'delete (s,5,1);s [4] ='. 's: ='100';P. Caption:
=s+'%';N. Visible: =false;M. Caption: =inttostr (m. oshibki);T. Caption:
=inttostr (m. time) +'с';(m. procent: 0: 2,s);s [3] <>'. 'delete (s,5,1);s [4] ='.
's: ='100';P. Caption: =s+'%';. Visible: =true;. Top: =48+64*
(k-1);;k<>3N. Caption: =a [3]. name;M. Caption: =inttostr (a [3].
oshibki);T. Caption: =inttostr (a [3]. time) +'с';(a [3]. procent: 0: 2,s);s [3]
<>'. 'delete (s,5,1);s [4] ='. 's: ='100';P. Caption: =s+'%';N. Visible:
=false;M. Caption: =inttostr (m. oshibki);T. Caption: =inttostr (m. time) +'с';(m. procent: 0: 2,s);s
[3] <>'. 'delete (s,5,1);s [4] ='. 's: ='100';P. Caption: =s+'%';.
Visible: =true;. Top: =48+64* (k-1);;form4 doN. Caption: =a [1]. name;M.
Caption: =inttostr (a [1]. oshibki);T. Caption: =inttostr (a [1]. time) +'с';(a [1]. procent: 0:
2,s);s [3] <>'. 'delete (s,5,1);s [4] ='. 's: ='100';P. Caption:
=s+'%';N. Caption: =a [2]. name;M. Caption: =inttostr (a [2]. oshibki);T.
Caption: =inttostr (a [2]. time) +'с';(a [2]. procent: 0: 2,s);s [3] <>'.
'delete (s,5,1);s [4] ='. 's: ='100';P. Caption: =s+'%';N. Caption: =a [3].
name;M. Caption: =inttostr (a [3]. oshibki);T. Caption: =inttostr (a [3]. time)
+'с';(a [3].
procent: 0: 2,s);s [3] <>'. 'delete (s,5,1);s [4] ='. 's: ='100';P. Caption:
=s+'%';N. Visible: =true;P. Visible: =true;M. Visible: =true;T. Visible:
=true;(m. procent: 0: 2,s);s [3] <>'. 'delete (s,5,1);s [4] ='. 's:
='100';P. Caption: =s+'%';M. Caption: =inttostr (m. oshibki);T. Caption:
=inttostr (m. time) +'с';;;;TForm4. EditKeyPress (Sender: TObject; var Key:
Char);key=#13Edit. Text=''Edit. text: ='NoName';k of
:N. Visible: =true;N. Caption: =Edit. Text;;
:N. Visible: =true;N. Caption: =Edit. Text;;
:N. Visible: =true;N. Caption: =Edit. Text;;;[k].
name: =edit. Text;. Visible: =false;(f);j: =1 to 3 do(f,a [j]);(f);;;TForm4.
FormClose (Sender: TObject; var Action: TCloseAction);edit. Visible=trueEdit.
Text=''Edit. text: ='NoName';k of
:N. Visible: =true;N. Caption: =Edit. Text;;
:N. Visible: =true;N. Caption: =Edit. Text;;
:N. Visible: =true;N. Caption: =Edit. Text;;;[k].
name: =edit. Text;. Visible: =false;(f);j: =1 to 3 do(f,a [j]);(f);;;TForm4.
BitBtn1Click (Sender: TObject);
begin;.