Содержание
Постановка задачи. 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("Поздравляем! Вы успешно сдали тест!");
}