Содержание

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

Общее описание программы.. 4

Описание интерфейса. 5

Описание алгоритма работы программы.. 7

Описание программной реализации. 8

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

Приложение 1. Листинг программы.. 10

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

Целью настоящей работы является создание клавиатурного тренажера.

Требования к программе:

·        Программа должны быть разработана в среде Borland C++ Builder 6.0 на языке С++;

·        Клавиатурный тренажер должен предоставлять три уровня сложности.

·        Для каждого задания обучаемый должен быть ограничен временным промежутком.

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

Созданная программа предоставляет следующие уровни сложности:

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

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

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

Описание интерфейса

Элементами интерфейса являются следующие компоненты:

·        Окна и формы. Всего в программе задействовано две формы – для определения уровня сложности и прохождения теста.

·        Сообщения. Сообщения используются для инструктажа, предупреждений и вывода результатов.

·        Элементы форм, имеющие практическое применение.

Опишем созданные формы и их элементы.

На рисунке 1 приведена первая форма.

Рисунок 1. Основная форма

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

На рисунке 2 приведена форма для тренировки.

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

При нажатии кнопки Стоп текущая тренировка завершается.

После окончания теста выводится сообщение о его результатах.

Рисунок 2. Форма для тренировки.

Описание алгоритма работы программы

Алгоритм работы программы построен на использовании таймера и событий нажатий клавиш.

Алгоритм различается для уровней сложности, так как они используют разные типы данных. Для первых двух уровней сложности алгоритм очень похож за несколькими изменениями.

1й и 2й уровни сложности.

1.     При нажатии кнопки Начать обнуляется счетчик ошибок, очищаются поля и задается начальное время таймера (1 и 3 секунды соответственно). Таймер запускается.

2.     При нажатии клавиш проверяется, не выполнен ли тест полностью.

3.     Если тест закончен, то подсчитывается и выводится процент ошибок.

4.     Если тест не закончен, то таймер запускается заново (для второго уровня – только в случае окончания набора слова).

5.     При срабатывании таймера происходит сравнение эталона и полученного текста, пересчитывается количество ошибок, выводится следующее значение, обнуляется поле ввода.

Для 3его уровня сложности.

1.     При нажатии кнопки Начать обнуляется счетчик ошибок, очищаются поля и задается начальное время таймера (2 минуты). Таймер запускается.

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

Описание программной реализации

Программа использует следующие глобальные переменные:

//Глобальные переменные

int LetNum; //номер буквы или слова в последовательности

int MisCount; //количество ошибочных наборов

Текстовые наборы для простоты заданы в качестве строковых констант.

При необходимости можно разнообразить и расширить клавиатурный тренажер, создав возможность загрузки значений из файла для второго и третьего уровня сложности.

const AnsiString letters="йцукенгшщзхъфывапролджэячсмитьбю.1234567890-=!?*()_+";

const AnsiString words[30]={"здоровье","наука","философия","музыка","трактор","корпоративность","ботинки","центурион","агентство","мухобойка","виселица","магнитофон","кинематограф","обзор","этика","принтер","федерал","протокол","компьютер","дисциплина","собака","утопия","подъезд","лестница","потолок","дезодорант","фотоаппарат","колонки","автомобиль","зеркало"};

const AnsiString text1="Обращаю Ваше внимание на тот факт, что при разработке террористической акции в Нью-Йорке, явно были применены методы системного анализа и методы решения изобретательских задач. Так как я буду рассказывать о том, как устроена эта технология, то у меня помимо вашей профессиональной работы появится ещё один пример. В нем хорошо видны технологические шаги, по которым можно такие вещи делать. ";

Примеры кода реализации приведены в Приложении 1.

Для случайного выбора букв и слов из заданных последовательностей используется встроенный генератор случайных чисел.

Исполняемый файл программы носит название TypeTrainer.exe. Для выполнения программы необходимо скопировать данный файл на компьютер вместе с библиотеками и запустить.

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

1. Б. Страуструп. Язык программирования С++, 3-е изд./Пер. с англ. – СПб.; М.: «Невский диалект» - «Издательство БИНОМ», 1999 г. – 991 с., ил.

2. А. Пол. Объектно-ориентированное программирование на С++, 2-ое изд./Пер. с англ. - СПб.; М.: «Невский диалект» - «Издательство БИНОМ», 1999г. – 462 с., ил.

3. А.Я. Архангельский. Программирование в С++Builder 6. – М:2003г. – 1152 с.

4. Справочная система С++ Builder 6.0

Приложение 1. Листинг программы

Процедура для кнопки «Начать»

reType->Enabled=true;

btnGo->Enabled=false;

if (stInfo->Panels->Items[1]->Text=="Выбран 1й уровень сложности. Буквы.")

{

ShowMessage("Необходимо набирать буквы, которые будут Вам предложены. Время на одну букву начинается с 1й секунды и уменьшается. Всего 50 букв.");

MisCount=0;

stText->Font->Size=14;

stText->Caption="";

randomize();

int num=rand()%50;

stText->Caption=letters[num+1];

reType->Lines->Clear();

Timer1->Interval=1000-LetNum*10;

}

if (stInfo->Panels->Items[1]->Text=="Выбран 2й уровень сложности. Слова.")

{

ShowMessage("Набирать надо слова, после каждого слова нажмите Enter. Время на одно слово начинается с 3х секунд и уменьшается. Всего 30 слов");

stText->Font->Size=14;

MisCount=0;

stText->Caption="";

randomize();

int num=rand()%30;

stText->Caption=words[num];

reType->Lines->Clear();

Timer1->Interval=3000-LetNum*10;

}

if (stInfo->Panels->Items[1]->Text=="Выбран 3й уровень сложности. Текст.")

{

ShowMessage("Полностью наберите указанный текст. Время - 2 минуты.");

stText->Caption=text1;

stText->Font->Size=8;

MisCount=0;

reType->Lines->Clear();

Timer1->Interval=120000;

Timer1->Enabled=true;

}

Процедура для срабатывания таймера

if (stInfo->Panels->Items[1]->Text=="Выбран 1й уровень сложности. Буквы.")

{

Timer1->Enabled=false;

char c=reType->Lines->Text[1];

if (stText->Caption[1]!=c) MisCount++;

stInfo->Panels->Items[0]->Text="Ошибок:"+AnsiString(MisCount);

LetNum++;

stText->Caption="";

randomize();

int num=rand()%30;

stText->Caption=letters[num+1];

reType->Lines->Clear();

Timer1->Interval=1000-LetNum*10;

}

if (stInfo->Panels->Items[1]->Text=="Выбран 2й уровень сложности. Слова.")

{

Timer1->Enabled=false;

AnsiString c=reType->Lines->Text.SubString(1,reType->Lines->Text.Length()-2);

if (stText->Caption!=c) MisCount++;

stInfo->Panels->Items[0]->Text="Ошибок:"+AnsiString(MisCount);

LetNum++;

stText->Caption="";

randomize();

int num=rand()%30;

stText->Caption=words[num];

reType->Lines->Clear();

Timer1->Interval=3000-LetNum*10;

}

if (stInfo->Panels->Items[1]->Text=="Выбран 3й уровень сложности. Текст.")

{

Timer1->Enabled=false;

AnsiString c=reType->Lines->Text.SubString(1,reType->Lines->Text.Length()-2);

if (stText->Caption!=c) MisCount=1;

else MisCount=0;

if (MisCount>0) ShowMessage("Время истекло. К сожалению, текст набран некорректно.");

else ShowMessage("Поздравляем! Вы успешно сдали тест!");

}